diff --git a/gnome-clocks-timer-Set-width-chars2.patch b/gnome-clocks-timer-Set-width-chars2.patch new file mode 100644 index 0000000..f26528e --- /dev/null +++ b/gnome-clocks-timer-Set-width-chars2.patch @@ -0,0 +1,68 @@ +From 89bf3cfe16ac343dc61718fdf1abe0468cb25032 Mon Sep 17 00:00:00 2001 +From: Yanko Kaneti +Date: Tue, 18 Sep 2018 16:26:52 +0300 +Subject: [PATCH] timer: Set width-chars=2 property on the spinbuttons + +Set width-chars to help gtk pre-allocate the spin buttons +drawing area regardless of font + +Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1630248 +--- + data/ui/timer.ui | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/data/ui/timer.ui b/data/ui/timer.ui +index 40ff931..7c37afe 100644 +--- a/data/ui/timer.ui ++++ b/data/ui/timer.ui +@@ -67,6 +67,7 @@ + vertical + adjustment_hours + True ++ 2 + True + + +@@ -109,6 +110,7 @@ + vertical + adjustment_minutes + True ++ 2 + True + + +@@ -152,6 +154,7 @@ + vertical + adjustment_seconds + True ++ 2 + True + + +@@ -263,6 +266,7 @@ + vertical + adjustment_hours + True ++ 2 + True + + +@@ -306,6 +310,7 @@ + vertical + adjustment_minutes + True ++ 2 + True + + +@@ -349,6 +354,7 @@ + vertical + adjustment_seconds + True ++ 2 + True + + +-- +2.18.1 + diff --git a/gnome-clocks-timer-fixes.patch b/gnome-clocks-timer-fixes.patch new file mode 100644 index 0000000..3f30064 --- /dev/null +++ b/gnome-clocks-timer-fixes.patch @@ -0,0 +1,175 @@ +From 14005c78289239b7fd78ce8c9694ccd92a15f0cd Mon Sep 17 00:00:00 2001 +From: Yanko Kaneti +Date: Sat, 27 Oct 2018 02:03:50 +0300 +Subject: [PATCH 1/2] timer: Decouple timer logic from the widget tick + +Moving the timer logic in a separate processing timeout +outside the widget frame update tick. + + - fixes timer firing when the window is not being repainted + https://bugzilla.redhat.com/show_bug.cgi?id=1525025 + + - the countdown frame is updated at most 25 times a second + which should slightly reduce CPU usage +--- + src/timer.vala | 48 ++++++++++++++---------------------------------- + 1 file changed, 14 insertions(+), 34 deletions(-) + +diff --git a/src/timer.vala b/src/timer.vala +index 7121b54..73ea374 100644 +--- a/src/timer.vala ++++ b/src/timer.vala +@@ -78,7 +78,6 @@ public class Face : Gtk.Stack, Clocks.Clock { + public State state { get; private set; default = State.STOPPED; } + + private GLib.Settings settings; +- private uint tick_id; + private double span; + private GLib.Timer timer; + private Utils.Bell bell; +@@ -119,7 +118,6 @@ public class Face : Gtk.Stack, Clocks.Clock { + + settings = new GLib.Settings ("org.gnome.clocks"); + +- tick_id = 0; + span = 0; + timer = new GLib.Timer (); + +@@ -227,7 +225,6 @@ public class Face : Gtk.Stack, Clocks.Clock { + private void reset () { + state = State.STOPPED; + timer.reset (); +- stop_ticking (); + span = settings.get_uint ("timer"); + h_spinbutton.value = (int) span / 3600; + m_spinbutton.value = (int) span % 3600 / 60; +@@ -242,7 +239,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + private void start () { + countdown_frame.get_style_context ().remove_class ("clocks-paused"); + +- if (state == State.STOPPED && tick_id == 0) { ++ if (state == State.STOPPED) { + var h = h_spinbutton.get_value_as_int (); + var m = m_spinbutton.get_value_as_int (); + var s = s_spinbutton.get_value_as_int (); +@@ -257,46 +254,29 @@ public class Face : Gtk.Stack, Clocks.Clock { + + state = State.RUNNING; + timer.start (); +- start_ticking (); ++ GLib.Timeout.add(40, () => { ++ if (state != State.RUNNING) { ++ return false; ++ } ++ var e = timer.elapsed (); ++ if (e >= span) { ++ reset (); ++ ring (); ++ return false; ++ } ++ update_countdown (e); ++ return true; ++ }); + } + + private void pause () { + state = State.PAUSED; + timer.stop (); +- stop_ticking (); + span -= timer.elapsed (); + countdown_frame.get_style_context ().add_class ("clocks-paused"); + countdown_frame.pause (); + } + +- private void start_ticking () { +- if (tick_id == 0) { +- tick_id = add_tick_callback ((c) => { +- return count (); +- }); +- } +- } +- +- private void stop_ticking () { +- if (tick_id != 0) { +- remove_tick_callback (tick_id); +- tick_id = 0; +- } +- } +- +- private bool count () { +- var e = timer.elapsed (); +- if (e >= span) { +- update_countdown_label (0, 0, 0); +- ring (); +- reset (); +- return false; +- } +- +- update_countdown (e); +- return true; +- } +- + private void update_countdown (double elapsed) { + if (h_label.get_mapped ()) { + // Math.ceil() because we count backwards: +-- +2.18.1 + + +From 00ea80dcf5ec0bf34a2bafde850bea3955a1d059 Mon Sep 17 00:00:00 2001 +From: Yanko Kaneti +Date: Sun, 28 Oct 2018 15:17:56 +0200 +Subject: [PATCH 2/2] timer: remove timeout on widget disposal + +--- + src/timer.vala | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/src/timer.vala b/src/timer.vala +index 73ea374..5846479 100644 +--- a/src/timer.vala ++++ b/src/timer.vala +@@ -80,6 +80,7 @@ public class Face : Gtk.Stack, Clocks.Clock { + private GLib.Settings settings; + private double span; + private GLib.Timer timer; ++ private uint timeout_id; + private Utils.Bell bell; + private GLib.Notification notification; + [GtkChild] +@@ -121,6 +122,14 @@ public class Face : Gtk.Stack, Clocks.Clock { + span = 0; + timer = new GLib.Timer (); + ++ timeout_id = 0; ++ destroy.connect(() => { ++ if (timeout_id != 0) { ++ GLib.Source.remove(timeout_id); ++ timeout_id = 0; ++ } ++ }); ++ + bell = new Utils.Bell ("complete"); + notification = new GLib.Notification (_("Time is up!")); + notification.set_body (_("Timer countdown finished")); +@@ -254,14 +263,16 @@ public class Face : Gtk.Stack, Clocks.Clock { + + state = State.RUNNING; + timer.start (); +- GLib.Timeout.add(40, () => { ++ timeout_id = GLib.Timeout.add(40, () => { + if (state != State.RUNNING) { ++ timeout_id = 0; + return false; + } + var e = timer.elapsed (); + if (e >= span) { + reset (); + ring (); ++ timeout_id = 0; + return false; + } + update_countdown (e); +-- +2.18.1 + diff --git a/gnome-clocks.changes b/gnome-clocks.changes index 69b65a2..947a2b9 100644 --- a/gnome-clocks.changes +++ b/gnome-clocks.changes @@ -1,3 +1,11 @@ +------------------------------------------------------------------- +Fri Dec 28 01:08:34 UTC 2018 - bjorn.lie@gmail.com + +- Add upstream bug fix patches from stable branch: + + gnome-clocks-timer-Set-width-chars2.patch: timer: Set + width-chars=2 property on the spinbuttons. + + gnome-clocks-timer-fixes.patch: Various backported timer fixes. + ------------------------------------------------------------------- Wed Oct 24 09:54:04 UTC 2018 - bjorn.lie@gmail.com diff --git a/gnome-clocks.spec b/gnome-clocks.spec index 76e281e..4442665 100644 --- a/gnome-clocks.spec +++ b/gnome-clocks.spec @@ -25,6 +25,10 @@ License: GPL-2.0-or-later Group: Productivity/Office/Other URL: https://live.gnome.org/Design/Apps/Clock Source0: https://download.gnome.org/sources/gnome-clocks/3.30/%{name}-%{version}.tar.xz +# PATCH-FIX-UPSTREAM gnome-clocks-timer-Set-width-chars2.patch -- timer: Set width-chars=2 property on the spinbuttons +Patch0: gnome-clocks-timer-Set-width-chars2.patch +# PATCH-FIX-UPSTREAM gnome-clocks-timer-fixes.patch -- Various backported timer fixes +Patch1: gnome-clocks-timer-fixes.patch BuildRequires: fdupes BuildRequires: meson >= 0.41.0 @@ -60,7 +64,7 @@ search results from GNOME Clocks. %lang_package %prep -%setup -q +%autosetup -p1 translation-update-upstream %build