]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Add active-username property to Greeter
authorMichael Terry <michael.terry@canonical.com>
Sun, 25 Aug 2013 19:44:19 +0000 (15:44 -0400)
committerMichael Terry <michael.terry@canonical.com>
Sun, 25 Aug 2013 19:44:19 +0000 (15:44 -0400)
src/greeter.c
src/greeter.h

index ef7cbfe9fb0d124dea01d729f1035b5ba077a76e..d995742bafad201a8e238a03ff9294919656bb61 100644 (file)
 #include "greeter.h"
 #include "configuration.h"
 
+enum {
+    PROP_0,
+    PROP_ACTIVE_USERNAME,
+};
+
 enum {
     CONNECTED,
     CREATE_SESSION,
@@ -51,6 +56,9 @@ struct GreeterPrivate
     /* Remote session name */
     gchar *remote_session;
 
+    /* Currently selected user */
+    gchar *active_username;
+
     /* PAM session being constructed by the greeter */
     Session *authentication_session;
 
@@ -357,6 +365,11 @@ handle_login (Greeter *greeter, guint32 sequence_number, const gchar *username)
 
     reset_session (greeter);
 
+    if (greeter->priv->active_username)
+        g_free (greeter->priv->active_username);
+    greeter->priv->active_username = g_strdup (username);
+    g_object_notify (G_OBJECT (greeter), "active-username");
+
     greeter->priv->authentication_sequence_number = sequence_number;
     g_signal_emit (greeter, signals[CREATE_SESSION], 0, username, &greeter->priv->authentication_session);
     if (!greeter->priv->authentication_session)
@@ -823,6 +836,13 @@ greeter_get_start_session (Greeter *greeter)
     return greeter->priv->start_session;
 }
 
+const gchar *
+greeter_get_active_username (Greeter *greeter)
+{
+    g_return_val_if_fail (greeter != NULL, NULL);
+    return greeter->priv->active_username;
+}
+
 static gboolean
 greeter_start (Session *session)
 {
@@ -910,6 +930,7 @@ greeter_finalize (GObject *object)
     secure_free (self, self->priv->read_buffer);
     g_hash_table_unref (self->priv->hints);
     g_free (self->priv->remote_session);
+    g_free (self->priv->active_username);
     if (self->priv->authentication_session)
     {
         g_signal_handlers_disconnect_matched (self->priv->authentication_session, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, self);
@@ -923,6 +944,33 @@ greeter_finalize (GObject *object)
     G_OBJECT_CLASS (greeter_parent_class)->finalize (object);
 }
 
+static void
+greeter_set_property (GObject      *object,
+                      guint         prop_id,
+                      const GValue *value,
+                      GParamSpec   *pspec)
+{
+    G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+}
+
+static void
+greeter_get_property (GObject    *object,
+                      guint       prop_id,
+                      GValue     *value,
+                      GParamSpec *pspec)
+{
+    Greeter *greeter = GREETER (object);
+
+    switch (prop_id) {
+    case PROP_ACTIVE_USERNAME:
+        g_value_set_string (value, greeter_get_active_username (greeter));
+        break;
+    default:
+        G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+        break;
+    }
+}
+
 static void
 greeter_class_init (GreeterClass *klass)
 {
@@ -934,6 +982,8 @@ greeter_class_init (GreeterClass *klass)
     session_class->start = greeter_start;
     session_class->stop = greeter_stop;
     object_class->finalize = greeter_finalize;
+    object_class->get_property = greeter_get_property;
+    object_class->set_property = greeter_set_property;
 
     signals[CONNECTED] =
         g_signal_new ("connected",
@@ -964,5 +1014,13 @@ greeter_class_init (GreeterClass *klass)
                       NULL,
                       G_TYPE_BOOLEAN, 2, G_TYPE_INT, G_TYPE_STRING);
 
+    g_object_class_install_property (object_class,
+                                     PROP_ACTIVE_USERNAME,
+                                     g_param_spec_string ("active-username",
+                                                          "active-username",
+                                                          "Active username",
+                                                          NULL,
+                                                          G_PARAM_READABLE));
+
     g_type_class_add_private (klass, sizeof (GreeterPrivate));
 }
index db60e3c24a29098f6e92c4868b4187897e87c6d2..5fae00e4504974b8ae64164a770305500056e3b1 100644 (file)
@@ -54,6 +54,8 @@ Session *greeter_get_authentication_session (Greeter *greeter);
 
 gboolean greeter_get_start_session (Greeter *greeter);
 
+const gchar *greeter_get_active_username (Greeter *greeter);
+
 G_END_DECLS
 
 #endif /* GREETER_H_ */