diff --git a/plugins/pomodoro-quick-setting/mobi.phosh.plugins.pomodoro.gschema.xml b/plugins/pomodoro-quick-setting/mobi.phosh.plugins.pomodoro.gschema.xml
index e7c358f7fef0d665dae7ba2be4b0cfff6256cbe1..e1ec9de701293742aaa3fcb3ba39966ae43659a2 100644
--- a/plugins/pomodoro-quick-setting/mobi.phosh.plugins.pomodoro.gschema.xml
+++ b/plugins/pomodoro-quick-setting/mobi.phosh.plugins.pomodoro.gschema.xml
@@ -15,5 +15,12 @@
The duration of the break in seconds.
+
+ false
+ Start on unlock
+
+ Whether to start the timer on screen unlock
+
+
diff --git a/plugins/pomodoro-quick-setting/pomodoro-quick-setting.c b/plugins/pomodoro-quick-setting/pomodoro-quick-setting.c
index 5e907c6eeba43b1aa3cf3b691dced7260c2dba03..549c3fdf1449b35d4d239ccd762d217f816c44d3 100644
--- a/plugins/pomodoro-quick-setting/pomodoro-quick-setting.c
+++ b/plugins/pomodoro-quick-setting/pomodoro-quick-setting.c
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2024 The Phosh Developers
+ * 2025 Phosh.mobi e.V.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
@@ -22,6 +23,8 @@
#define ACTIVE_ICON "pomodoro-active-symbolic"
#define BREAK_ICON "pomodoro-break-symbolic"
+#define START_ON_UNLOCK_KEY "start-on-unlock"
+
/**
* PhoshPomodoroQuickSetting:
*
@@ -47,6 +50,7 @@ struct _PhoshPomodoroQuickSetting {
G_DEFINE_TYPE (PhoshPomodoroQuickSetting, phosh_pomodoro_quick_setting, PHOSH_TYPE_QUICK_SETTING);
+static gboolean _started_on_login;
static void
phosh_pomodoro_quick_setting_clear_timers (PhoshPomodoroQuickSetting *self)
@@ -186,6 +190,25 @@ phosh_pomodoro_quick_setting_set_state (PhoshPomodoroQuickSetting *self, PhoshPo
}
+static void
+on_shell_locked (PhoshPomodoroQuickSetting *self, GParamSpec *pspec, PhoshShell *shell)
+{
+ g_assert (PHOSH_IS_SHELL (shell));
+ g_assert (PHOSH_IS_POMODORO_QUICK_SETTING (self));
+
+ if (phosh_shell_get_locked (shell))
+ return;
+
+ if (self->state != PHOSH_POMODORO_STATE_OFF)
+ return;
+
+ if (!g_settings_get_boolean (self->settings, START_ON_UNLOCK_KEY))
+ return;
+
+ phosh_pomodoro_quick_setting_set_state (self, PHOSH_POMODORO_STATE_ACTIVE);
+}
+
+
static void
phosh_pomodoro_quick_setting_set_property (GObject *object,
guint property_id,
@@ -355,5 +378,16 @@ phosh_pomodoro_quick_setting_init (PhoshPomodoroQuickSetting *self)
G_BINDING_DEFAULT | G_BINDING_SYNC_CREATE,
transform_to_icon_name,
NULL, NULL, NULL);
+
+ g_signal_connect_object (phosh_shell_get_default (),
+ "notify::locked",
+ G_CALLBACK (on_shell_locked),
+ self,
+ G_CONNECT_SWAPPED);
+ if (g_settings_get_boolean (self->settings, START_ON_UNLOCK_KEY) && !_started_on_login) {
+ phosh_pomodoro_quick_setting_set_state (self, PHOSH_POMODORO_STATE_ACTIVE);
+ _started_on_login = TRUE;
+ }
+
update_label (self);
}
diff --git a/plugins/pomodoro-quick-setting/prefs/pomodoro-quick-setting-prefs.c b/plugins/pomodoro-quick-setting/prefs/pomodoro-quick-setting-prefs.c
index 9beda2730cd154917881c06fb110f6cb708084b3..55765c3b0f38e4ecd8e70e9c1b4bc924a10a9d77 100644
--- a/plugins/pomodoro-quick-setting/prefs/pomodoro-quick-setting-prefs.c
+++ b/plugins/pomodoro-quick-setting/prefs/pomodoro-quick-setting-prefs.c
@@ -1,5 +1,6 @@
/*
* Copyright (C) 2024 The Phosh Developers
+ * 2025 Phosh.mobi e.V.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
@@ -15,8 +16,9 @@
#include
#define POMODORO_QUICK_SETTING_SCHEMA_ID "mobi.phosh.plugins.pomodoro"
-#define POMODORO_QUICK_SETTING_ACTIVE_DURATION_KEY "active-duration"
-#define POMODORO_QUICK_SETTING_BREAK_DURATION_KEY "break-duration"
+#define ACTIVE_DURATION_KEY "active-duration"
+#define BREAK_DURATION_KEY "break-duration"
+#define START_ON_UNLOCK_KEY "start-on-unlock"
/**
* PhoshPomodoroQuickSettingPrefs:
@@ -28,6 +30,7 @@ struct _PhoshPomodoroQuickSettingPrefs {
AdwSpinRow *active_duration_spin_row;
AdwSpinRow *break_duration_spin_row;
+ AdwSwitchRow *start_on_unlock_switch_row;
GSettings *setting;
};
@@ -85,6 +88,8 @@ phosh_pomodoro_quick_setting_prefs_class_init (PhoshPomodoroQuickSettingPrefsCla
active_duration_spin_row);
gtk_widget_class_bind_template_child (widget_class, PhoshPomodoroQuickSettingPrefs,
break_duration_spin_row);
+ gtk_widget_class_bind_template_child (widget_class, PhoshPomodoroQuickSettingPrefs,
+ start_on_unlock_switch_row);
}
@@ -95,7 +100,7 @@ phosh_pomodoro_quick_setting_prefs_init (PhoshPomodoroQuickSettingPrefs *self)
self->setting = g_settings_new (POMODORO_QUICK_SETTING_SCHEMA_ID);
- g_settings_bind_with_mapping (self->setting, POMODORO_QUICK_SETTING_ACTIVE_DURATION_KEY,
+ g_settings_bind_with_mapping (self->setting, ACTIVE_DURATION_KEY,
self->active_duration_spin_row, "value",
G_SETTINGS_BIND_DEFAULT,
duration_get_mapping,
@@ -103,11 +108,15 @@ phosh_pomodoro_quick_setting_prefs_init (PhoshPomodoroQuickSettingPrefs *self)
NULL /* userdata */,
NULL /* destroyfunc */);
- g_settings_bind_with_mapping (self->setting, POMODORO_QUICK_SETTING_BREAK_DURATION_KEY,
+ g_settings_bind_with_mapping (self->setting, BREAK_DURATION_KEY,
self->break_duration_spin_row, "value",
G_SETTINGS_BIND_DEFAULT,
duration_get_mapping,
duration_set_mapping,
NULL /* userdata */,
NULL /* destroyfunc */);
+
+ g_settings_bind (self->setting, START_ON_UNLOCK_KEY,
+ self->start_on_unlock_switch_row, "active",
+ G_SETTINGS_BIND_DEFAULT);
}
diff --git a/plugins/pomodoro-quick-setting/prefs/prefs.ui b/plugins/pomodoro-quick-setting/prefs/prefs.ui
index aa39cfe5aa41c86861b4c555b322a968614b5404..78454acb9b77fdc26693584adece80ae5d2381e5 100644
--- a/plugins/pomodoro-quick-setting/prefs/prefs.ui
+++ b/plugins/pomodoro-quick-setting/prefs/prefs.ui
@@ -39,6 +39,13 @@
+
+
+
diff --git a/src/background-manager.c b/src/background-manager.c
index eb3a7d8a8e33a70208da9ad8a2af7b80d1087f53..8c383af22f5e7b2027439d7c0df01faba45c6ea3 100644
--- a/src/background-manager.c
+++ b/src/background-manager.c
@@ -400,10 +400,10 @@ phosh_background_manager_idle_init (PhoshManager *manager)
self->settings = g_settings_new ("org.gnome.desktop.background");
g_object_connect (self->settings,
- "swapped_signal::changed::" BG_KEY_PICTURE_URI, on_settings_changed, self,
- "swapped_signal::changed::" BG_KEY_PICTURE_URI_DARK, on_settings_changed, self,
- "swapped_signal::changed::" BG_KEY_PICTURE_OPTIONS, on_settings_changed, self,
- "swapped_signal::changed::" BG_KEY_PRIMARY_COLOR, on_settings_changed, self,
+ "swapped-signal::changed::" BG_KEY_PICTURE_URI, on_settings_changed, self,
+ "swapped-signal::changed::" BG_KEY_PICTURE_URI_DARK, on_settings_changed, self,
+ "swapped-signal::changed::" BG_KEY_PICTURE_OPTIONS, on_settings_changed, self,
+ "swapped-signal::changed::" BG_KEY_PRIMARY_COLOR, on_settings_changed, self,
NULL);
self->interface_settings = g_settings_new ("org.gnome.desktop.interface");
g_signal_connect_swapped (self->interface_settings,
diff --git a/src/batteryinfo.c b/src/batteryinfo.c
index 47e4d82d0bc6c0137280899f2c81472550d52752..84480702888a90f699c697f7508df4d6d6d27ae7 100644
--- a/src/batteryinfo.c
+++ b/src/batteryinfo.c
@@ -144,10 +144,10 @@ on_up_client_new_ready (GObject *source, GAsyncResult *result, gpointer data)
}
g_object_connect (self->device,
- "swapped_object_signal::notify::percentage",
+ "swapped-object-signal::notify::percentage",
G_CALLBACK (on_property_changed),
self,
- "swapped_object_signal::notify::state",
+ "swapped-object-signal::notify::state",
G_CALLBACK (on_property_changed),
self,
NULL);
diff --git a/src/bt-manager.c b/src/bt-manager.c
index cb3e2668de5571fc8314cb35fd517317a2616190..d5eb06d203ff87421a9fbe4809e6aa6125952960 100644
--- a/src/bt-manager.c
+++ b/src/bt-manager.c
@@ -200,10 +200,10 @@ on_proxy_new_for_bus_finish (GObject *source_object,
}
g_object_connect (self->proxy,
- "swapped_object_signal::notify::bluetooth-airplane-mode",
+ "swapped-object-signal::notify::bluetooth-airplane-mode",
G_CALLBACK (on_bt_airplane_mode_changed),
self,
- "swapped_object_signal::notify::bluetooth-has-airplane-mode",
+ "swapped-object-signal::notify::bluetooth-has-airplane-mode",
G_CALLBACK (on_bt_has_airplane_mode_changed),
self,
NULL);
diff --git a/src/media-player.c b/src/media-player.c
index e91b0e2cc564e4796c8f585ce5a76a2658032969..07d88437c3df2b5ffd671612e21df49844de47f4 100644
--- a/src/media-player.c
+++ b/src/media-player.c
@@ -989,22 +989,22 @@ phosh_media_player_set_player (PhoshMediaPlayer *self, PhoshMprisDBusMediaPlayer
g_debug ("Connected player %p", priv->player);
g_object_connect (priv->player,
- "swapped_object_signal::notify::metadata",
+ "swapped-object-signal::notify::metadata",
G_CALLBACK (on_metadata_changed),
self,
- "swapped_object_signal::notify::playback-status",
+ "swapped-object-signal::notify::playback-status",
G_CALLBACK (on_playback_status_changed),
self,
- "swapped_object_signal::notify::can-go-next",
+ "swapped-object-signal::notify::can-go-next",
G_CALLBACK (on_can_go_next_changed),
self,
- "swapped_object_signal::notify::can-go-previous",
+ "swapped-object-signal::notify::can-go-previous",
G_CALLBACK (on_can_go_previous_changed),
self,
- "swapped_object_signal::notify::can-play",
+ "swapped-object-signal::notify::can-play",
G_CALLBACK (on_can_play),
self,
- "swapped_object_signal::notify::can-seek",
+ "swapped-object-signal::notify::can-seek",
G_CALLBACK (on_can_seek),
self,
NULL);
diff --git a/src/phosh-exported-symbols.txt.in b/src/phosh-exported-symbols.txt.in
index 1328d39752018d291976486ede5c827dfa1cc4d4..9ba715e2d71a467bd339e0bb88effa6394555425 100644
--- a/src/phosh-exported-symbols.txt.in
+++ b/src/phosh-exported-symbols.txt.in
@@ -1,6 +1,7 @@
phosh_shell_get_default;
phosh_shell_get_locked;
phosh_shell_get_primary_monitor;
+ phosh_shell_get_type;
# Utils are useful in plugins too
phosh_util_*;
diff --git a/src/top-panel.c b/src/top-panel.c
index 905f2a15b349da41dbbfb9a2825fc6d5b14e74c3..6fb5552d21f7ce76ed0cf8e5f025b2fba249ed04 100644
--- a/src/top-panel.c
+++ b/src/top-panel.c
@@ -596,8 +596,8 @@ phosh_top_panel_constructed (GObject *object)
self->xkbinfo = gnome_xkb_info_new ();
self->seat = gdk_display_get_default_seat (display);
g_object_connect (self->seat,
- "swapped_signal::device-added", G_CALLBACK (on_seat_device_changed), self,
- "swapped_signal::device-removed", G_CALLBACK (on_seat_device_changed), self,
+ "swapped-signal::device-added", G_CALLBACK (on_seat_device_changed), self,
+ "swapped-signal::device-removed", G_CALLBACK (on_seat_device_changed), self,
NULL);
g_signal_connect_swapped (self->input_settings,
"changed::sources", G_CALLBACK (on_input_setting_changed),