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 @@
+
+
+