diff options
Diffstat (limited to 'community/gnome-clocks/0001-invoke-waked-when-an-alarm-changes.patch')
-rw-r--r-- | community/gnome-clocks/0001-invoke-waked-when-an-alarm-changes.patch | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/community/gnome-clocks/0001-invoke-waked-when-an-alarm-changes.patch b/community/gnome-clocks/0001-invoke-waked-when-an-alarm-changes.patch new file mode 100644 index 00000000000..bfdb9af7a90 --- /dev/null +++ b/community/gnome-clocks/0001-invoke-waked-when-an-alarm-changes.patch @@ -0,0 +1,189 @@ +From a5f37373d2199f95ddc966b2426101bef62b4b93 Mon Sep 17 00:00:00 2001 +From: Robin Westermann <gitlab@seath.de> +Date: Sat, 27 Feb 2021 14:41:22 +0100 +Subject: [PATCH] invoke waked when an alarm changes + +When an alarm is deleted, created, edited or rearmed the service +waked is notified about the update. So waked can wake the system +from suspend when an alarm is fired. + +Fixes #100 + +Co-Authored-By: pcworld <0188801@gmail.com> +--- + build-aux/flatpak/org.gnome.clocks.json | 1 + + src/alarm-face.vala | 2 + + src/alarm-item.vala | 10 +++++ + src/alarm-setup-dialog.vala | 1 + + src/meson.build | 1 + + src/waked-utils.vala | 53 +++++++++++++++++++++++++ + 6 files changed, 68 insertions(+) + create mode 100644 src/waked-utils.vala + +diff --git a/build-aux/flatpak/org.gnome.clocks.json b/build-aux/flatpak/org.gnome.clocks.json +index a58ffcb..b009378 100644 +--- a/build-aux/flatpak/org.gnome.clocks.json ++++ b/build-aux/flatpak/org.gnome.clocks.json +@@ -11,6 +11,7 @@ + "--socket=fallback-x11", + "--socket=wayland", + "--socket=pulseaudio", ++ "--system-talk-name=de.seath.Waked", + "--share=network", + "--env=G_MESSAGES_DEBUG=org.gnome.ClocksDevel" + ], +diff --git a/src/alarm-face.vala b/src/alarm-face.vala +index 58950d5..edcc796 100644 +--- a/src/alarm-face.vala ++++ b/src/alarm-face.vala +@@ -73,6 +73,7 @@ public class Face : Adw.Bin, Clocks.Clock { + item.notify["active"].connect (save); + + row.remove_alarm.connect (() => { ++ WakedUtils.remove_timer (((Item) item).id); + alarms.delete_item ((Item) item); + save (); + }); +@@ -129,6 +130,7 @@ public class Face : Adw.Bin, Clocks.Clock { + ((SetupDialog) dialog).apply_to_alarm (alarm); + save (); + } else if (response == DELETE_ALARM) { ++ WakedUtils.remove_timer (alarm.id); + alarms.delete_item (alarm); + save (); + } +diff --git a/src/alarm-item.vala b/src/alarm-item.vala +index 263248b..ce7678d 100644 +--- a/src/alarm-item.vala ++++ b/src/alarm-item.vala +@@ -20,6 +20,7 @@ + namespace Clocks { + namespace Alarm { + ++ + private struct AlarmTime { + public int hour; + public int minute; +@@ -98,6 +99,9 @@ private class Item : Object, ContentItem { + _active = value; + + reset (); ++ if (!active) { ++ WakedUtils.remove_timer (id); ++ } + if (!active && state == State.RINGING) { + stop (); + } +@@ -161,6 +165,10 @@ private class Item : Object, ContentItem { + } + + alarm_time = dt; ++ ++ if (active) { ++ WakedUtils.update_timer (id, alarm_time); ++ } + } + + private void update_snooze_time (GLib.DateTime start_time) { +@@ -183,6 +191,7 @@ private class Item : Object, ContentItem { + public void snooze () { + bell.stop (); + state = State.SNOOZING; ++ WakedUtils.update_timer (id, snooze_time); + } + + public void stop () { +@@ -232,6 +241,7 @@ private class Item : Object, ContentItem { + update_alarm_time (); // reschedule for the next repeat + } + ++ + return state != last_state; + } + +diff --git a/src/alarm-setup-dialog.vala b/src/alarm-setup-dialog.vala +index 5d122cd..b6f66e9 100644 +--- a/src/alarm-setup-dialog.vala ++++ b/src/alarm-setup-dialog.vala +@@ -264,6 +264,7 @@ private class SetupDialog : Gtk.Dialog { + + private void avoid_duplicate_alarm () { + var alarm = new Item (); ++ alarm.editing = true; + apply_to_alarm (alarm); + + var duplicate = alarm.check_duplicate_alarm (other_alarms); +diff --git a/src/meson.build b/src/meson.build +index dfc7d34..ab9de1c 100644 +--- a/src/meson.build ++++ b/src/meson.build +@@ -24,6 +24,7 @@ clocks_vala_sources = files( + 'timer-setup.vala', + 'timer-setup-dialog.vala', + 'utils.vala', ++ 'waked-utils.vala', + 'widgets.vala', + 'window.vala', + 'world-face.vala', +diff --git a/src/waked-utils.vala b/src/waked-utils.vala +new file mode 100644 +index 0000000..9b8fa4a +--- /dev/null ++++ b/src/waked-utils.vala +@@ -0,0 +1,53 @@ ++/* ++ * Copyright (C) 2021 Robin Westermann <waked@seath.de> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ */ ++ ++namespace Clocks { ++namespace WakedUtils { ++ ++ [DBus (name = "de.seath.Waked")] ++ interface Waked : Object { ++ public abstract void add (string id, uint64 time) throws GLib.Error; ++ public abstract void update (string id, uint64 time) throws GLib.Error; ++ public abstract void remove (string id) throws GLib.Error; ++ } ++ ++ public void update_timer (string id, GLib.DateTime time) { ++ try { ++ Waked waked = Bus.get_proxy_sync (BusType.SYSTEM, "de.seath.Waked", ++ "/de/seath/Waked/Alarm"); ++ ++ waked.update (id, time.to_unix ()); ++ ++ } catch (GLib.Error e) { ++ stderr.printf ("%s\n", e.message); ++ } ++ } ++ ++ public void remove_timer (string id) { ++ try { ++ Waked waked = Bus.get_proxy_sync (BusType.SYSTEM, "de.seath.Waked", ++ "/de/seath/Waked/Alarm"); ++ ++ waked.remove (id); ++ ++ } catch (GLib.Error e) { ++ stderr.printf ("%s\n", e.message); ++ } ++ } ++} ++} +-- +2.37.2 + |