From dea520532c36b0ceafa01cb2d78c53dcffd529fd Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Sun, 25 Aug 2013 15:44:19 -0400 Subject: [PATCH] Add active-username property to Greeter --- src/greeter.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/greeter.h | 2 ++ 2 files changed, 60 insertions(+) diff --git a/src/greeter.c b/src/greeter.c index ef7cbfe9..d995742b 100644 --- a/src/greeter.c +++ b/src/greeter.c @@ -20,6 +20,11 @@ #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)); } diff --git a/src/greeter.h b/src/greeter.h index db60e3c2..5fae00e4 100644 --- a/src/greeter.h +++ b/src/greeter.h @@ -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_ */ -- 2.39.2