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 @@ + + + _Start on unlock + Whether to start the timer on screen unlock + 1 + + 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),