[gnome-break-timer] Tidy up initialization in settings, finish removing libgee
- From: Dylan McCall <dylanmccall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-break-timer] Tidy up initialization in settings, finish removing libgee
- Date: Tue, 17 Nov 2020 06:37:06 +0000 (UTC)
commit 2c954be4d700a3731109a39a1693a2ccf286ea20
Author: Dylan McCall <dylan dylanmccall ca>
Date: Mon Nov 16 22:27:18 2020 -0800
Tidy up initialization in settings, finish removing libgee
meson.build | 1 -
src/daemon/Application.vala | 6 +-
src/daemon/BreakManager.vala | 16 +----
src/daemon/activity/ActivityMonitor.vala | 6 +-
src/daemon/break/BreakView.vala | 10 +--
src/daemon/timerbreak/TimerBreakController.vala | 10 +--
src/meson.build | 1 -
src/settings/Application.vala | 12 +++-
src/settings/BreakManager.vala | 86 ++++++++++---------------
src/settings/BreakSettingsDialog.vala | 26 ++++----
src/settings/MainWindow.vala | 28 ++++----
src/settings/break/BreakType.vala | 4 +-
src/settings/panels/StatusPanel.vala | 25 +++----
src/settings/panels/WelcomePanel.vala | 4 +-
src/settings/timerbreak/TimerBreakType.vala | 4 +-
15 files changed, 115 insertions(+), 124 deletions(-)
---
diff --git a/meson.build b/meson.build
index 9a8f2ce..887301b 100644
--- a/meson.build
+++ b/meson.build
@@ -10,7 +10,6 @@ valac = meson.get_compiler('vala')
cc = meson.get_compiler('c')
cairo_dep = dependency('cairo')
-gee_dep = dependency('gee-0.8')
gio_dep = dependency('gio-2.0')
gio_unix_dep = dependency('gio-unix-2.0')
glib_dep = dependency('glib-2.0')
diff --git a/src/daemon/Application.vala b/src/daemon/Application.vala
index 8d5ff56..8cbf723 100644
--- a/src/daemon/Application.vala
+++ b/src/daemon/Application.vala
@@ -77,14 +77,14 @@ public class Application : Gtk.Application {
try {
this.ui_manager.init ();
} catch (GLib.Error error) {
- GLib.error("Error initializing ui: %s", error.message);
+ GLib.error("Error initializing ui_manager: %s", error.message);
}
this.break_manager = new BreakManager (ui_manager, activity_monitor);
try {
- this.break_manager.init ();
+ this.break_manager.init (null);
} catch (GLib.Error error) {
- GLib.error("Error initializing ui: %s", error.message);
+ GLib.error("Error initializing break_manager: %s", error.message);
}
this.restore_state ();
diff --git a/src/daemon/BreakManager.vala b/src/daemon/BreakManager.vala
index 5f20ce0..6df7e38 100644
--- a/src/daemon/BreakManager.vala
+++ b/src/daemon/BreakManager.vala
@@ -32,14 +32,8 @@ public class BreakManager : GLib.Object, GLib.Initable {
this.settings = new GLib.Settings ("org.gnome.BreakTimer");
this.breaks = new GLib.HashTable<string, BreakType> (str_hash, str_equal);
- this.breaks.set(
- "microbreak",
- new MicroBreakType (activity_monitor, ui_manager)
- );
- this.breaks.set(
- "restbreak",
- new RestBreakType (activity_monitor, ui_manager)
- );
+ this.breaks.set("microbreak", new MicroBreakType (activity_monitor, ui_manager));
+ this.breaks.set("restbreak", new RestBreakType (activity_monitor, ui_manager));
this.settings.bind ("enabled", this, "master-enabled", GLib.SettingsBindFlags.DEFAULT);
this.settings.bind ("selected-breaks", this, "selected-break-ids", GLib.SettingsBindFlags.DEFAULT);
@@ -73,11 +67,7 @@ public class BreakManager : GLib.Object, GLib.Initable {
}
foreach (BreakType break_type in this.all_breaks ()) {
- try {
- break_type.init (cancellable);
- } catch (GLib.Error error) {
- GLib.warning ("Error initializing break type %s: %s", break_type.id, error.message);
- }
+ break_type.init (cancellable);
}
return true;
diff --git a/src/daemon/activity/ActivityMonitor.vala b/src/daemon/activity/ActivityMonitor.vala
index e0959eb..c2bac3e 100644
--- a/src/daemon/activity/ActivityMonitor.vala
+++ b/src/daemon/activity/ActivityMonitor.vala
@@ -21,9 +21,6 @@ using BreakTimer.Daemon.Util;
namespace BreakTimer.Daemon.Activity {
public class ActivityMonitor : GLib.Object {
- public signal void detected_idle (UserActivity activity);
- public signal void detected_activity (UserActivity activity);
-
private PausableTimeout poll_activity_timeout;
private UserActivity last_activity;
private int64 last_active_timestamp;
@@ -31,6 +28,9 @@ public class ActivityMonitor : GLib.Object {
private ISessionStatus session_status;
private ActivityMonitorBackend backend;
+ public signal void detected_idle (UserActivity activity);
+ public signal void detected_activity (UserActivity activity);
+
public ActivityMonitor (ISessionStatus session_status, ActivityMonitorBackend backend) {
this.session_status = session_status;
this.backend = backend;
diff --git a/src/daemon/break/BreakView.vala b/src/daemon/break/BreakView.vala
index 40157f7..aa80cf9 100644
--- a/src/daemon/break/BreakView.vala
+++ b/src/daemon/break/BreakView.vala
@@ -24,6 +24,11 @@ public abstract class BreakView : UIFragment {
private int64 last_break_notification_time = 0;
+ /** The break is active and has been given UI focus. This is the point where we start caring about it. */
+ public signal void focused_and_activated ();
+ /** The break has lost UI focus. We don't need to display anything at this point. */
+ public signal void lost_ui_focus ();
+
protected BreakView (BreakController break_controller, UIManager ui_manager) {
this.ui_manager = ui_manager;
this.break_controller = break_controller;
@@ -37,11 +42,6 @@ public abstract class BreakView : UIFragment {
break_controller.finished.connect_after ( () => { this.release_ui_focus (); });
}
- /** The break is active and has been given UI focus. This is the point where we start caring about it. */
- public signal void focused_and_activated ();
- /** The break has lost UI focus. We don't need to display anything at this point. */
- public signal void lost_ui_focus ();
-
public abstract string get_status_message ();
/**
diff --git a/src/daemon/timerbreak/TimerBreakController.vala b/src/daemon/timerbreak/TimerBreakController.vala
index 22a2f07..f63c273 100644
--- a/src/daemon/timerbreak/TimerBreakController.vala
+++ b/src/daemon/timerbreak/TimerBreakController.vala
@@ -42,6 +42,11 @@ public abstract class TimerBreakController : BreakController {
private StatefulTimer counting_timer = new StatefulTimer ();
private StatefulTimer delayed_timer = new StatefulTimer ();
+ /** Fires continually, as long as the break is active and counting down. */
+ public signal void counting (int lap_time, int total_time);
+ /** Fires as long as the break is active but is not counting down. */
+ public signal void delayed (int lap_time, int total_time);
+
protected TimerBreakController (ActivityMonitor activity_monitor, int fuzzy_seconds = 0) {
base ();
this.fuzzy_seconds = fuzzy_seconds;
@@ -69,11 +74,6 @@ public abstract class TimerBreakController : BreakController {
this.finished.connect (this.finished_cb);
}
- /** Fires continually, as long as the break is active and counting down. */
- public signal void counting (int lap_time, int total_time);
- /** Fires as long as the break is active but is not counting down. */
- public signal void delayed (int lap_time, int total_time);
-
public override Json.Object serialize () {
Json.Object json_root = base.serialize ();
json_root.set_string_member ("interval_countdown", this.interval_countdown.serialize ());
diff --git a/src/meson.build b/src/meson.build
index c10bf75..e81aeaf 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -21,7 +21,6 @@ subdir('daemon')
common_dependencies = [
cairo_dep,
config_lib_dep,
- gee_dep,
gio_dep,
gio_unix_dep,
gtk_dep,
diff --git a/src/settings/Application.vala b/src/settings/Application.vala
index 9e99600..f80565b 100644
--- a/src/settings/Application.vala
+++ b/src/settings/Application.vala
@@ -105,8 +105,18 @@ public class Application : Gtk.Application {
this.set_accels_for_action ("app.quit", {"<Primary>q"});
this.break_manager = new BreakManager (this);
+ try {
+ this.break_manager.init (null);
+ } catch (GLib.Error error) {
+ GLib.error("Error initializing break_manager: %s", error.message);
+ }
+
this.main_window = new MainWindow (this, this.break_manager);
- this.break_manager.load_breaks ();
+ try {
+ this.main_window.init (null);
+ } catch (GLib.Error error) {
+ GLib.error("Error initializing main_window: %s", error.message);
+ }
}
private void delayed_start () {
diff --git a/src/settings/BreakManager.vala b/src/settings/BreakManager.vala
index f9bdbd8..6422f7f 100644
--- a/src/settings/BreakManager.vala
+++ b/src/settings/BreakManager.vala
@@ -30,8 +30,7 @@ public class BreakManager : GLib.Object {
private IBreakTimer break_daemon;
- private Gee.Map<string, BreakType> breaks;
- private GLib.List<BreakType> breaks_ordered;
+ private GLib.List<BreakType> breaks;
private GLib.Settings settings;
public bool master_enabled { get; set; }
@@ -40,11 +39,25 @@ public class BreakManager : GLib.Object {
IBackgroundPortal? background_portal = null;
+ public signal void break_status_available ();
+ public signal void status_changed ();
+
public BreakManager (Application application) {
this.application = application;
- this.breaks = new Gee.HashMap<string, BreakType> ();
- this.breaks_ordered = new GLib.List<BreakType> ();
+ this.settings = new GLib.Settings ("org.gnome.BreakTimer");
+
+ this.breaks = new GLib.List<BreakType> ();
+ this.breaks.append(new MicroBreakType ());
+ this.breaks.append(new RestBreakType ());
+
+ this.settings.bind ("enabled", this, "master-enabled", SettingsBindFlags.DEFAULT);
+ this.settings.bind ("selected-breaks", this, "selected-break-ids", SettingsBindFlags.DEFAULT);
+
+ this.notify["master-enabled"].connect ( this.on_master_enabled_changed );
+ }
+
+ public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
if (this.get_is_in_flatpak ()) {
// TODO: Does this work outside of a flatpak? We could remove the
// extra file we install in data/autostart, which would be nice.
@@ -56,23 +69,25 @@ public class BreakManager : GLib.Object {
);
} catch (GLib.IOError error) {
GLib.warning ("Error connecting to xdg desktop portal: %s", error.message);
+ throw error;
}
}
- this.settings = new GLib.Settings ("org.gnome.BreakTimer");
- this.settings.bind ("enabled", this, "master-enabled", SettingsBindFlags.DEFAULT);
- this.settings.bind ("selected-breaks", this, "selected-break-ids", SettingsBindFlags.DEFAULT);
+ GLib.Bus.watch_name (
+ GLib.BusType.SESSION,
+ Config.DAEMON_APPLICATION_ID,
+ GLib.BusNameWatcherFlags.NONE,
+ this.break_daemon_appeared,
+ this.break_daemon_disappeared
+ );
- // We choose not to send a signal when master_enabled changes because
- // we might be starting the break daemon at the same time, so the
- // value of is_working () could fluctuate unpleasantly.
- //this.notify["master-enabled"].connect ( () => { this.status_changed (); });
- this.notify["master-enabled"].connect ( this.on_master_enabled_changed );
- }
+ foreach (BreakType break_type in this.all_breaks ()) {
+ break_type.status_changed.connect (this.break_status_changed);
+ break_type.init (cancellable);
+ }
- public signal void break_status_available ();
- public signal void break_added (BreakType break_type);
- public signal void status_changed ();
+ return true;
+ }
private void on_master_enabled_changed () {
// Launch the break timer service if the break manager is enabled
@@ -112,50 +127,15 @@ public class BreakManager : GLib.Object {
return GLib.FileUtils.test (flatpak_info_path, GLib.FileTest.EXISTS);
}
- public void load_breaks () {
- this.add_break (new MicroBreakType ());
- this.add_break (new RestBreakType ());
-
- this.status_changed ();
-
- GLib.Bus.watch_name (
- GLib.BusType.SESSION,
- Config.DAEMON_APPLICATION_ID,
- GLib.BusNameWatcherFlags.NONE,
- this.break_daemon_appeared,
- this.break_daemon_disappeared
- );
- }
-
- public Gee.Set<string> all_break_ids () {
- return this.breaks.keys;
- }
-
public unowned GLib.List<BreakType> all_breaks () {
- return this.breaks_ordered;
+ return this.breaks;
}
/**
* @returns true if the break daemon is working correctly.
*/
public bool is_working () {
- return (this.master_enabled == false || this.breaks.size == 0 || this.break_daemon != null);
- }
-
- public BreakType? get_break_type_for_name (string name) {
- return this.breaks.get (name);
- }
-
- private void add_break (BreakType break_type) {
- try {
- break_type.init (null);
- } catch (GLib.Error error) {
- GLib.warning ("Error initializing break type %s: %s", break_type.id, error.message);
- }
- this.breaks.set (break_type.id, break_type);
- this.breaks_ordered.append (break_type);
- break_type.status_changed.connect (this.break_status_changed);
- this.break_added (break_type);
+ return (this.master_enabled == false || this.break_daemon != null);
}
private void break_status_changed (BreakType break_type, BreakStatus? break_status) {
diff --git a/src/settings/BreakSettingsDialog.vala b/src/settings/BreakSettingsDialog.vala
index 91ab2ce..4a4f084 100644
--- a/src/settings/BreakSettingsDialog.vala
+++ b/src/settings/BreakSettingsDialog.vala
@@ -75,10 +75,24 @@ public class BreakSettingsDialog : Gtk.Dialog {
content.show_all ();
- break_manager.break_added.connect (this.break_added_cb);
this.configuration_chooser.notify["selected-break-ids"].connect (this.update_break_configuration);
}
+ public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
+ foreach (BreakType break_type in this.break_manager.all_breaks ()) {
+ var settings_widget = break_type.settings_widget;
+ this.breaks_grid.add (settings_widget);
+ settings_widget.realize ();
+ settings_widget.set_valign (Gtk.Align.CENTER);
+ settings_widget.set_vexpand (true);
+ settings_widget.set_margin_top (10);
+ settings_widget.set_margin_bottom (10);
+ this.update_break_configuration ();
+ }
+
+ return true;
+ }
+
private void update_break_configuration () {
foreach (BreakType break_type in this.break_manager.all_breaks ()) {
if (break_type.id in this.configuration_chooser.selected_break_ids) {
@@ -89,16 +103,6 @@ public class BreakSettingsDialog : Gtk.Dialog {
}
}
- private void break_added_cb (BreakType break_type) {
- var settings_widget = break_type.settings_widget;
- breaks_grid.add (settings_widget);
- settings_widget.realize ();
- settings_widget.set_valign (Gtk.Align.CENTER);
- settings_widget.set_vexpand (true);
- settings_widget.set_margin_top (10);
- settings_widget.set_margin_bottom (10);
- this.update_break_configuration ();
- }
private void response_cb (int response_id) {
if (response_id == Gtk.ResponseType.CLOSE) {
diff --git a/src/settings/MainWindow.vala b/src/settings/MainWindow.vala
index ebd1b14..4a27c65 100644
--- a/src/settings/MainWindow.vala
+++ b/src/settings/MainWindow.vala
@@ -20,7 +20,7 @@ using BreakTimer.Settings.Panels;
namespace BreakTimer.Settings {
-public class MainWindow : Gtk.ApplicationWindow {
+public class MainWindow : Gtk.ApplicationWindow, GLib.Initable {
private BreakManager break_manager;
private GLib.Menu app_menu;
@@ -107,11 +107,26 @@ public class MainWindow : Gtk.ApplicationWindow {
this.header.show_all ();
content.show_all ();
- break_manager.break_added.connect (this.break_added_cb);
break_manager.notify["foreground-break"].connect (this.update_visible_panel);
this.update_visible_panel ();
}
+ public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
+ foreach (BreakType break_type in this.break_manager.all_breaks ()) {
+ var info_widget = break_type.info_widget;
+ this.main_stack.add_named (info_widget, break_type.id);
+ info_widget.set_margin_start (20);
+ info_widget.set_margin_end (20);
+ info_widget.set_halign (Gtk.Align.CENTER);
+ info_widget.set_valign (Gtk.Align.CENTER);
+ }
+
+ this.break_settings_dialog.init (cancellable);
+ this.status_panel.init (cancellable);
+
+ return true;
+ }
+
public Gtk.Widget get_master_switch () {
return this.master_switch;
}
@@ -125,15 +140,6 @@ public class MainWindow : Gtk.ApplicationWindow {
return null;
}
- private void break_added_cb (BreakType break_type) {
- var info_widget = break_type.info_widget;
- this.main_stack.add_named (info_widget, break_type.id);
- info_widget.set_margin_start (20);
- info_widget.set_margin_end (20);
- info_widget.set_halign (Gtk.Align.CENTER);
- info_widget.set_valign (Gtk.Align.CENTER);
- }
-
private void update_visible_panel () {
// Use a transition when switching from the welcome panel
Gtk.StackTransitionType transition;
diff --git a/src/settings/break/BreakType.vala b/src/settings/break/BreakType.vala
index 50e9dea..a1db481 100644
--- a/src/settings/break/BreakType.vala
+++ b/src/settings/break/BreakType.vala
@@ -29,13 +29,13 @@ public abstract class BreakType : GLib.Object, GLib.Initable {
public GLib.Settings settings;
+ public signal void status_changed (BreakStatus? status);
+
protected BreakType (string id, GLib.Settings settings) {
this.id = id;
this.settings = settings;
}
- public signal void status_changed (BreakStatus? status);
-
public virtual bool init (GLib.Cancellable? cancellable) throws GLib.Error {
this.info_widget = this.create_info_widget ();
this.status_widget = this.create_status_widget ();
diff --git a/src/settings/panels/StatusPanel.vala b/src/settings/panels/StatusPanel.vala
index 3a351b7..46867c8 100644
--- a/src/settings/panels/StatusPanel.vala
+++ b/src/settings/panels/StatusPanel.vala
@@ -19,7 +19,7 @@ using BreakTimer.Settings.Break;
namespace BreakTimer.Settings.Panels {
-private class StatusPanel : Gtk.Stack {
+private class StatusPanel : Gtk.Stack, GLib.Initable {
private BreakManager break_manager;
private Gtk.Grid breaks_list;
@@ -47,10 +47,22 @@ private class StatusPanel : Gtk.Stack {
this.error_message = builder.get_object ("status_error") as Gtk.Widget;
this.add (this.error_message);
- break_manager.break_added.connect (this.break_added_cb);
break_manager.status_changed.connect (this.status_changed_cb);
}
+ public bool init (GLib.Cancellable? cancellable) throws GLib.Error {
+ foreach (BreakType break_type in this.break_manager.all_breaks ()) {
+ var status_widget = break_type.status_widget;
+ this.breaks_list.add (status_widget);
+ status_widget.set_margin_top (18);
+ status_widget.set_margin_end (20);
+ status_widget.set_margin_bottom (18);
+ status_widget.set_margin_start (20);
+ }
+
+ return true;
+ }
+
private Gtk.Grid build_breaks_list (BreakManager break_manager) {
var breaks_list = new Gtk.Grid ();
breaks_list.set_orientation (Gtk.Orientation.VERTICAL);
@@ -60,15 +72,6 @@ private class StatusPanel : Gtk.Stack {
return breaks_list;
}
- private void break_added_cb (BreakType break_type) {
- var status_widget = break_type.status_widget;
- this.breaks_list.add (status_widget);
- status_widget.set_margin_top (18);
- status_widget.set_margin_end (20);
- status_widget.set_margin_bottom (18);
- status_widget.set_margin_start (20);
- }
-
private void status_changed_cb () {
bool any_breaks_enabled = false;
diff --git a/src/settings/panels/WelcomePanel.vala b/src/settings/panels/WelcomePanel.vala
index b9de5c8..60ab750 100644
--- a/src/settings/panels/WelcomePanel.vala
+++ b/src/settings/panels/WelcomePanel.vala
@@ -36,6 +36,8 @@ private class WelcomePanel : Gtk.Stack {
private Gtk.Container breaks_page;
private Gtk.Container ready_page;
+ public signal void tour_finished ();
+
public WelcomePanel (BreakManager break_manager, Gtk.Builder builder, MainWindow main_window) {
GLib.Object ();
@@ -78,8 +80,6 @@ private class WelcomePanel : Gtk.Stack {
break_manager.notify["master-enabled"].connect (this.on_master_switch_toggled);
}
- public signal void tour_finished ();
-
public bool is_active () {
return this.current_step < Step.READY;
}
diff --git a/src/settings/timerbreak/TimerBreakType.vala b/src/settings/timerbreak/TimerBreakType.vala
index 4913c0f..0bd6eb4 100644
--- a/src/settings/timerbreak/TimerBreakType.vala
+++ b/src/settings/timerbreak/TimerBreakType.vala
@@ -29,14 +29,14 @@ public abstract class TimerBreakType : BreakType {
public IBreakTimer_TimerBreak? break_server;
+ public signal void timer_status_changed (TimerBreakStatus? status);
+
protected TimerBreakType (string name, GLib.Settings settings) {
base (name, settings);
settings.bind ("interval-seconds", this, "interval", SettingsBindFlags.GET);
settings.bind ("duration-seconds", this, "duration", SettingsBindFlags.GET);
}
- public signal void timer_status_changed (TimerBreakStatus? status);
-
public override bool init (GLib.Cancellable? cancellable) throws GLib.Error {
GLib.Bus.watch_name (
GLib.BusType.SESSION,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]