From 4d4d53542fe4ff34bd8023b351e23546f45a9c6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Tue, 25 Nov 2025 20:23:39 +0100 Subject: [PATCH 1/5] brightness-manager: Allow to set the adjustment value MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This makes it simper for other parts of the shell to get and set the value avoiding to have to get the adjustment first. Signed-off-by: Guido Günther Part-of: --- src/brightness-manager.c | 34 ++++++++++++++++++++++++++++++++++ src/brightness-manager.h | 4 ++++ 2 files changed, 38 insertions(+) diff --git a/src/brightness-manager.c b/src/brightness-manager.c index 6f20d8f76..69fc84663 100644 --- a/src/brightness-manager.c +++ b/src/brightness-manager.c @@ -725,3 +725,37 @@ phosh_brightness_manager_get_auto_brightness_enabled (PhoshBrightnessManager *se return self->auto_brightness.enabled; } + +/** + * phosh_brightness_manager_get_value: + * @PhoshBrightnessManager: The brightness manager + * + * Get the value of the brightness adjustment. The interpretation of the value depends + * on whether auto brightness is enabled or not. + * + * Returns: The current value of the adjustment [0.0, 1.0] + */ +double +phosh_brightness_manager_get_value (PhoshBrightnessManager *self) +{ + g_return_val_if_fail (PHOSH_IS_BRIGHTNESS_MANAGER (self), 0.5); + + return gtk_adjustment_get_value (self->adjustment); +} + +/** + * phosh_brightness_manager_set_value: + * @PhoshBrightnessManager: The brightness manager + * @value: The brightness adjustment value [0.0, 1.0]. + * + * Set the value of the brightness adjustment. The interpretation of the value depends + * on whether auto brightness is enabled or not. + */ +void +phosh_brightness_manager_set_value (PhoshBrightnessManager *self, + double value) +{ + g_return_if_fail (PHOSH_IS_BRIGHTNESS_MANAGER (self)); + + gtk_adjustment_set_value (self->adjustment, value); +} diff --git a/src/brightness-manager.h b/src/brightness-manager.h index 08349dc16..d343bc3b9 100644 --- a/src/brightness-manager.h +++ b/src/brightness-manager.h @@ -20,5 +20,9 @@ G_DECLARE_FINAL_TYPE (PhoshBrightnessManager, phosh_brightness_manager, PHOSH, B PhoshBrightnessManager *phosh_brightness_manager_new (void); GtkAdjustment * phosh_brightness_manager_get_adjustment (PhoshBrightnessManager *self); gboolean phosh_brightness_manager_get_auto_brightness_enabled (PhoshBrightnessManager *self); +double phosh_brightness_manager_get_value (PhoshBrightnessManager *self); +void phosh_brightness_manager_set_value (PhoshBrightnessManager *self, + double value); + G_END_DECLS -- GitLab From e9a5ba0da4bacd56c7eb7a6a1f97964e0daaecf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Tue, 25 Nov 2025 20:28:18 +0100 Subject: [PATCH 2/5] brightness-manager: Split out osd handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We'll use it from other places as well Signed-off-by: Guido Günther Part-of: --- src/brightness-manager.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/brightness-manager.c b/src/brightness-manager.c index 69fc84663..a21386654 100644 --- a/src/brightness-manager.c +++ b/src/brightness-manager.c @@ -461,9 +461,25 @@ on_primary_monitor_changed (PhoshBrightnessManager *self, GParamSpec *psepc, Pho static void -adjust_brightness (PhoshBrightnessManager *self, gboolean up) +show_osd (PhoshBrightnessManager *self, double brightness) { PhoshShell *shell = phosh_shell_get_default (); + + if (phosh_shell_get_state (shell) & PHOSH_STATE_SETTINGS) + return; + + phosh_shell_show_osd (shell, + NULL, + self->icon_name, + NULL, + 100.0 * brightness, + 100.0); +} + + +static void +adjust_brightness (PhoshBrightnessManager *self, gboolean up) +{ int levels; double brightness, step; @@ -483,15 +499,7 @@ adjust_brightness (PhoshBrightnessManager *self, gboolean up) brightness = CLAMP (brightness, 0.0, 1.0); phosh_backlight_set_relative (self->backlight, brightness); - if (phosh_shell_get_state (shell) & PHOSH_STATE_SETTINGS) - return; - - phosh_shell_show_osd (phosh_shell_get_default (), - NULL, - self->icon_name, - NULL, - 100.0 * brightness, - 100.0); + show_osd (self, brightness); } -- GitLab From dae9efce26f1902e334a510042695af5101e9b00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Tue, 25 Nov 2025 21:45:21 +0100 Subject: [PATCH 3/5] brightness-manager: Allow to show the osd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow to show the OSD when setting the value Signed-off-by: Guido Günther Part-of: --- src/brightness-manager.c | 7 ++++++- src/brightness-manager.h | 3 ++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/brightness-manager.c b/src/brightness-manager.c index a21386654..735fca539 100644 --- a/src/brightness-manager.c +++ b/src/brightness-manager.c @@ -755,15 +755,20 @@ phosh_brightness_manager_get_value (PhoshBrightnessManager *self) * phosh_brightness_manager_set_value: * @PhoshBrightnessManager: The brightness manager * @value: The brightness adjustment value [0.0, 1.0]. + * @osd: Whether to show the osd when setting the value * * Set the value of the brightness adjustment. The interpretation of the value depends * on whether auto brightness is enabled or not. */ void phosh_brightness_manager_set_value (PhoshBrightnessManager *self, - double value) + double value, + gboolean osd) { g_return_if_fail (PHOSH_IS_BRIGHTNESS_MANAGER (self)); + g_return_if_fail (0.0 <= value && value <= 1.0); gtk_adjustment_set_value (self->adjustment, value); + if (osd) + show_osd (self, value); } diff --git a/src/brightness-manager.h b/src/brightness-manager.h index d343bc3b9..25a7010ff 100644 --- a/src/brightness-manager.h +++ b/src/brightness-manager.h @@ -22,7 +22,8 @@ GtkAdjustment * phosh_brightness_manager_get_adjustment (PhoshBrightness gboolean phosh_brightness_manager_get_auto_brightness_enabled (PhoshBrightnessManager *self); double phosh_brightness_manager_get_value (PhoshBrightnessManager *self); void phosh_brightness_manager_set_value (PhoshBrightnessManager *self, - double value); + double value, + gboolean osd); G_END_DECLS -- GitLab From b5df5690fbf475f5e1dc7e6244459a7880dff9ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Tue, 25 Nov 2025 19:43:10 +0100 Subject: [PATCH 4/5] lockscreen-manager: Add a brightness gesture MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two finger swipe left to right increases brightness. The new brightness is calculated as offset to the current brightness based on the swipe distance. This means that if something else sets brightness in the meantime it will be overwritten. If we'd just add the difference between two events this might be too small to make an actual difference thus increasing the brightness too slowly. Closes: https://gitlab.gnome.org/World/Phosh/phosh/-/issues/814 Signed-off-by: Guido Günther Part-of: --- src/lockscreen.c | 93 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/src/lockscreen.c b/src/lockscreen.c index 7b32d939a..4b3e93641 100644 --- a/src/lockscreen.c +++ b/src/lockscreen.c @@ -105,6 +105,13 @@ typedef struct { PhoshAuth *auth; GSettings *lockscreen_settings; + /* Volume Gesture */ + struct { + GtkGesture *gesture; + double x_start, y_start; + double base; + } brightness; + /* extra page */ GtkWidget *extra_page; @@ -124,6 +131,82 @@ typedef struct { G_DEFINE_TYPE_WITH_PRIVATE (PhoshLockscreen, phosh_lockscreen, PHOSH_TYPE_LAYER_SURFACE) +static void +on_zoom_gesture_end (PhoshLockscreen *self, + GdkEventSequence *sequence, + GtkGesture *gesture) +{ + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED); +} + + +static void +on_zoom_gesture_update (PhoshLockscreen *self, + GdkEventSequence *sequence, + GtkGesture *gesture) +{ + PhoshLockscreenPrivate *priv = phosh_lockscreen_get_instance_private (self); + PhoshBrightnessManager *manager; + gboolean active; + double x_center, y_center, brightness; + uint width, height; + + g_return_if_fail (PHOSH_IS_LOCKSCREEN (self)); + + active = gtk_gesture_get_bounding_box_center (gesture, &x_center, &y_center); + if (!active) { + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED); + return; + } + + width = gtk_widget_get_allocated_width (GTK_WIDGET (self)); + height = gtk_widget_get_allocated_height (GTK_WIDGET (self)); + + /* Swipe must happen in the upper screen half */ + if (y_center > 0.5 * height) { + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED); + return; + } + + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED); + manager = phosh_shell_get_brightness_manager (phosh_shell_get_default ()); + brightness = priv->brightness.base + (x_center - priv->brightness.x_start) / width; + + g_debug ("Brightness gesture updating: %f", brightness); + phosh_brightness_manager_set_value (manager, CLAMP (brightness, 0.0, 1.0), TRUE); +} + + +static void +on_zoom_gesture_begin (PhoshLockscreen *self, + GdkEventSequence *sequence, + GtkGesture *gesture) +{ + gboolean active; + gdouble x_center, y_center; + PhoshLockscreenPrivate *priv = phosh_lockscreen_get_instance_private (self); + PhoshBrightnessManager *manager; + + g_return_if_fail (PHOSH_IS_LOCKSCREEN (self)); + + active = gtk_gesture_get_bounding_box_center (gesture, &x_center, &y_center); + if (!active) { + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_DENIED); + return; + } + + gtk_gesture_set_state (gesture, GTK_EVENT_SEQUENCE_CLAIMED); + manager = phosh_shell_get_brightness_manager (phosh_shell_get_default ()); + priv->brightness.x_start = x_center; + priv->brightness.y_start = y_center; + priv->brightness.base = phosh_brightness_manager_get_value (manager); + g_debug ("Brightness gesture start at: %f,%f (%f)", + priv->brightness.x_start, + priv->brightness.y_start, + priv->brightness.base); +} + + static void phosh_lockscreen_map (GtkWidget *widget) { @@ -901,6 +984,7 @@ phosh_lockscreen_dispose (GObject *object) PhoshLockscreen *self = PHOSH_LOCKSCREEN (object); PhoshLockscreenPrivate *priv = phosh_lockscreen_get_instance_private (self); + g_clear_object (&priv->brightness.gesture); g_clear_object (&priv->notification_settings); g_clear_handle_id (&priv->idle_timer, g_source_remove); g_clear_object (&priv->calls_manager); @@ -1108,6 +1192,15 @@ phosh_lockscreen_init (PhoshLockscreen *self) /* LTR doesn't work for the deck * https://gitlab.gnome.org/World/Phosh/phosh/-/issues/1132 */ gtk_widget_set_direction (GTK_WIDGET (priv->deck), GTK_TEXT_DIR_LTR); + + priv->brightness.gesture = gtk_gesture_zoom_new (GTK_WIDGET (self)); + g_object_connect (priv->brightness.gesture, + "swapped-object-signal::begin", on_zoom_gesture_begin, self, + "swapped-object-signal::update", on_zoom_gesture_update, self, + "swapped-object-signal::end", on_zoom_gesture_end, self, + NULL); + gtk_event_controller_set_propagation_phase (GTK_EVENT_CONTROLLER (priv->brightness.gesture), + GTK_PHASE_CAPTURE); } -- GitLab From eaa2583a42e9f16f2f0ddc4fcd908c710eaf9bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guido=20G=C3=BCnther?= Date: Sun, 7 Dec 2025 13:08:26 +0100 Subject: [PATCH 5/5] lockscreen: Reindent struct MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit While this adds to the diff noise now if will help us to have more CI pipelines without warnings in the future. Gbp-Dch: Ignore Signed-off-by: Guido Günther Part-of: --- src/lockscreen.c | 54 ++++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/src/lockscreen.c b/src/lockscreen.c index 4b3e93641..acf751daf 100644 --- a/src/lockscreen.c +++ b/src/lockscreen.c @@ -79,37 +79,37 @@ typedef struct { gboolean require_unlock; /* info page */ - GtkWidget *box_info; - GtkWidget *box_datetime; - GtkListBox *list_calls; - GtkWidget *lbl_clock; - GtkWidget *lbl_date; - GtkWidget *list_notifications; - GtkRevealer *rev_call_notifications; - GtkRevealer *rev_media_player; - GtkRevealer *rev_notifications; - GSettings *notification_settings; - guint reveals; + GtkWidget *box_info; + GtkWidget *box_datetime; + GtkListBox *list_calls; + GtkWidget *lbl_clock; + GtkWidget *lbl_date; + GtkWidget *list_notifications; + GtkRevealer *rev_call_notifications; + GtkRevealer *rev_media_player; + GtkRevealer *rev_notifications; + GSettings *notification_settings; + guint reveals; /* unlock page */ - GtkWidget *box_unlock; - GtkWidget *keypad_revealer; - GtkWidget *keypad; - GtkWidget *entry_pin; - GtkGesture *long_press_del_gesture; - GtkWidget *lbl_unlock_status; - GtkWidget *btn_submit; - GtkWidget *btn_keyboard; - guint idle_timer; - gint64 last_input; - PhoshAuth *auth; - GSettings *lockscreen_settings; + GtkWidget *box_unlock; + GtkWidget *keypad_revealer; + GtkWidget *keypad; + GtkWidget *entry_pin; + GtkGesture *long_press_del_gesture; + GtkWidget *lbl_unlock_status; + GtkWidget *btn_submit; + GtkWidget *btn_keyboard; + guint idle_timer; + gint64 last_input; + PhoshAuth *auth; + GSettings *lockscreen_settings; /* Volume Gesture */ struct { - GtkGesture *gesture; - double x_start, y_start; - double base; + GtkGesture *gesture; + double x_start, y_start; + double base; } brightness; /* extra page */ @@ -123,7 +123,7 @@ typedef struct { CuiCallDisplay *call_display; PhoshCallsManager *calls_manager; - char *active; /* opaque handle to the active call */ + char *active; /* opaque handle to the active call */ PhoshLockscreenBg *background; } PhoshLockscreenPrivate; -- GitLab