From 9154ddeb57d8ce4378175e46d1d2ab13f2286243 Mon Sep 17 00:00:00 2001 From: Rudra Pratap Singh Date: Thu, 28 Aug 2025 00:57:26 +0530 Subject: [PATCH 1/2] schema: Add key for custom lockscreen message Signed-off-by: Rudra Pratap Singh --- data/mobi.phosh.shell.gschema.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/data/mobi.phosh.shell.gschema.xml b/data/mobi.phosh.shell.gschema.xml index 8494b1812..a7e63226e 100644 --- a/data/mobi.phosh.shell.gschema.xml +++ b/data/mobi.phosh.shell.gschema.xml @@ -147,6 +147,14 @@ or password by simply swiping up. + + + "" + Message for lockscreen + + A custom message for the lockscreen, displayed when the keypad is visible. + + -- GitLab From 14bf13e0c3cb55e9e81b608683bd622d5208357a Mon Sep 17 00:00:00 2001 From: Rudra Pratap Singh Date: Thu, 28 Aug 2025 01:03:35 +0530 Subject: [PATCH 2/2] lockscreen: Add GtkLabel for displaying custom lockscreen message Additionally add an API to set it dynamically. Signed-off-by: Rudra Pratap Singh --- src/lockscreen.c | 61 +++++++++++++++++++++++++++++++++++++++++++- src/lockscreen.h | 1 + src/ui/lockscreen.ui | 17 ++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/src/lockscreen.c b/src/lockscreen.c index 7b32d939a..72b43817f 100644 --- a/src/lockscreen.c +++ b/src/lockscreen.c @@ -38,6 +38,7 @@ #define LOCKSCREEN_SMALL_DATE_AND_TIME_CLASS "p-small" #define LOCKSCREEN_SMALL_DISPLAY 700 +#define MESSAGE_KEY "custom-message" /** * PhoshLockscreen: @@ -61,6 +62,7 @@ enum { PROP_CALLS_MANAGER, PROP_PAGE, PROP_REQUIRE_UNLOCK, + PROP_CUSTOM_MESSAGE, PROP_LAST_PROP }; static GParamSpec *props[PROP_LAST_PROP]; @@ -97,6 +99,7 @@ typedef struct { GtkWidget *keypad; GtkWidget *entry_pin; GtkGesture *long_press_del_gesture; + GtkWidget *lbl_message; GtkWidget *lbl_unlock_status; GtkWidget *btn_submit; GtkWidget *btn_keyboard; @@ -148,6 +151,19 @@ set_require_unlock (PhoshLockscreen *self, gboolean require_unlock) } } + +static void +set_custom_message (PhoshLockscreen *self, const char* message) +{ + PhoshLockscreenPrivate *priv = phosh_lockscreen_get_instance_private (self); + + if (g_strcmp0 (gtk_label_get_text (GTK_LABEL (priv->lbl_message)), message) != 0) { + gtk_label_set_text (GTK_LABEL (priv->lbl_message), message); + g_object_notify_by_pspec (G_OBJECT (self), props[PROP_CUSTOM_MESSAGE]); + } +} + + static void phosh_lockscreen_set_property (GObject *object, guint property_id, @@ -164,6 +180,9 @@ phosh_lockscreen_set_property (GObject *object, case PROP_REQUIRE_UNLOCK: set_require_unlock (self, g_value_get_boolean (value)); break; + case PROP_CUSTOM_MESSAGE: + set_custom_message (self, g_value_get_string (value)); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -190,6 +209,9 @@ phosh_lockscreen_get_property (GObject *object, case PROP_REQUIRE_UNLOCK: g_value_set_boolean (value, priv->require_unlock); break; + case PROP_CUSTOM_MESSAGE: + g_value_set_string (value, gtk_label_get_text (GTK_LABEL (priv->lbl_message))); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -864,6 +886,11 @@ phosh_lockscreen_constructed (GObject *object) priv->box_unlock, "visible", G_BINDING_SYNC_CREATE); + gtk_widget_set_size_request (priv->lbl_message, 36, 48); + g_settings_bind (priv->lockscreen_settings, "custom-message", + self, "custom-message", + G_SETTINGS_BIND_DEFAULT); + plugin_settings = g_settings_new ("sm.puri.phosh.plugins"); plugins = g_settings_get_strv (plugin_settings, "lock-screen"); if (plugins) @@ -918,16 +945,21 @@ phosh_lockscreen_configured (PhoshLayerSurface *layer_surface) { PhoshLockscreen *self = PHOSH_LOCKSCREEN (layer_surface); PhoshLockscreenPrivate *priv; - guint height, margin = 100; + guint height, margin, lbl_height, spacing; g_return_if_fail (PHOSH_IS_LOCKSCREEN (self)); priv = phosh_lockscreen_get_instance_private (self); height = phosh_layer_surface_get_configured_height (layer_surface); + lbl_height = gtk_widget_get_allocated_height (priv->lbl_message); + spacing = gtk_box_get_spacing (GTK_BOX (priv->box_unlock)); + /* Avoid margin on smaller displays */ if (height < LOCKSCREEN_SMALL_DISPLAY) margin = 0; + else + margin = 100 - lbl_height - spacing; gtk_widget_set_margin_top (GTK_WIDGET (priv->box_unlock), margin); @@ -1015,6 +1047,16 @@ phosh_lockscreen_class_init (PhoshLockscreenClass *klass) PHOSH_LOCKSCREEN_PAGE_UNLOCK, G_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + /** + * PhoshLockscreen:custom-message: + * + * A custom message to display while the keypad is visible. + */ + props[PROP_CUSTOM_MESSAGE] = + g_param_spec_string ("custom-message", "", "", + NULL, + G_PARAM_READWRITE | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS); + g_object_class_install_properties (object_class, PROP_LAST_PROP, props); /** @@ -1063,6 +1105,7 @@ phosh_lockscreen_class_init (PhoshLockscreenClass *klass) gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, keypad); gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, keypad_revealer); gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, entry_pin); + gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, lbl_message); gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, lbl_unlock_status); gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, long_press_del_gesture); gtk_widget_class_bind_template_child_private (widget_class, PhoshLockscreen, btn_submit); @@ -1330,3 +1373,19 @@ phosh_lockscreen_set_bg_image (PhoshLockscreen *self, PhoshBackgroundImage *imag phosh_lockscreen_bg_set_image (priv->background, image); } + + +/** + * phosh_lockscreen_set_custom_message: + * @self: The lockscreen + * @message: The message to set + */ +void +phosh_lockscreen_set_custom_message (PhoshLockscreen *self, const char *message) +{ + PhoshLockscreenPrivate *priv = phosh_lockscreen_get_instance_private (self); + + g_return_if_fail (PHOSH_IS_LOCKSCREEN (self)); + + g_settings_set_string (priv->lockscreen_settings, MESSAGE_KEY, message); +} diff --git a/src/lockscreen.h b/src/lockscreen.h index e8370b1b5..4336b2054 100644 --- a/src/lockscreen.h +++ b/src/lockscreen.h @@ -68,5 +68,6 @@ void phosh_lockscreen_shake_pin_entry (PhoshLockscreen *self); void phosh_lockscreen_set_unlock_status (PhoshLockscreen *self, const char *status); void phosh_lockscreen_add_extra_page (PhoshLockscreen *self, GtkWidget *widget); +void phosh_lockscreen_set_custom_message (PhoshLockscreen *self, const char *message); G_END_DECLS diff --git a/src/ui/lockscreen.ui b/src/ui/lockscreen.ui index 1f9053b7e..84eb234c1 100644 --- a/src/ui/lockscreen.ui +++ b/src/ui/lockscreen.ui @@ -276,6 +276,23 @@ + + + 1 + center + center + center + 1 + word-char + 35 + middle + 2 + + + + + + 1 -- GitLab