diff --git a/data/mobi.phosh.shell.gschema.xml b/data/mobi.phosh.shell.gschema.xml index 8494b181233661def6e27e71e964d87b0d330628..a7e63226efbde123bca2b99532abda664b3ce8ae 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. + + diff --git a/src/lockscreen.c b/src/lockscreen.c index 7b32d939a537ec88193abcab523d90dfc9650879..72b43817fb489dc62fcaedf0239c0c5e21329310 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 e8370b1b50241965c39e546c5420d94340e156ff..4336b205450391912bc97280aa4c3b5bd75a398e 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 1f9053b7eb8426edadb240d382e1e2577cbaf22c..84eb234c1f3edd9ab698024823181436347ca890 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