summaryrefslogtreecommitdiff
path: root/liblightdm-gobject
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2011-07-14 13:18:25 +1000
committerRobert Ancell <robert.ancell@canonical.com>2011-07-14 13:18:25 +1000
commitf6fd86b913a6bd56a1bc179b0a2d26ea9b87d332 (patch)
tree53811ce072ef2f0f15f40afc0da09d85913e0481 /liblightdm-gobject
parent52af281d7a69b80552f1975c9cff250d533875bc (diff)
downloadlightdm-f6fd86b913a6bd56a1bc179b0a2d26ea9b87d332.tar.gz
Added two signals: select-user and select-guest. This requires the greeter to select a user account for logging in
Diffstat (limited to 'liblightdm-gobject')
-rw-r--r--liblightdm-gobject/greeter-protocol.h3
-rw-r--r--liblightdm-gobject/greeter.c44
-rw-r--r--liblightdm-gobject/lightdm/greeter.h2
3 files changed, 48 insertions, 1 deletions
diff --git a/liblightdm-gobject/greeter-protocol.h b/liblightdm-gobject/greeter-protocol.h
index 5d8701bc..bccce500 100644
--- a/liblightdm-gobject/greeter-protocol.h
+++ b/liblightdm-gobject/greeter-protocol.h
@@ -27,7 +27,8 @@ typedef enum
GREETER_MESSAGE_QUIT = 102,
GREETER_MESSAGE_PROMPT_AUTHENTICATION = 103,
GREETER_MESSAGE_END_AUTHENTICATION = 104,
- GREETER_MESSAGE_USER_DEFAULTS = 106
+ GREETER_MESSAGE_SELECT_USER = 107,
+ GREETER_MESSAGE_SELECT_GUEST = 108
} GreeterMessage;
#endif /* _GREETER_PROTOCOL_H_ */
diff --git a/liblightdm-gobject/greeter.c b/liblightdm-gobject/greeter.c
index 0abc1b2f..aa722e7d 100644
--- a/liblightdm-gobject/greeter.c
+++ b/liblightdm-gobject/greeter.c
@@ -50,6 +50,8 @@ enum {
SHOW_MESSAGE,
AUTHENTICATION_COMPLETE,
TIMED_LOGIN,
+ SELECT_USER,
+ SELECT_GUEST,
USER_ADDED,
USER_CHANGED,
USER_REMOVED,
@@ -326,6 +328,7 @@ from_server_cb (GIOChannel *source, GIOCondition condition, gpointer data)
LdmGreeter *greeter = data;
gsize offset;
guint32 id, sequence_number, return_code;
+ gchar *username;
if (!read_packet (greeter, FALSE))
return TRUE;
@@ -382,6 +385,16 @@ from_server_cb (GIOChannel *source, GIOCondition condition, gpointer data)
else
g_debug ("Ignoring end authentication with invalid sequence number %d", sequence_number);
break;
+ case GREETER_MESSAGE_SELECT_USER:
+ username = read_string (greeter, &offset);
+ g_debug ("Got request to select user %s", username);
+ g_signal_emit (G_OBJECT (greeter), signals[SELECT_USER], 0, username);
+ g_free (username);
+ break;
+ case GREETER_MESSAGE_SELECT_GUEST:
+ g_debug ("Got request to select guest account");
+ g_signal_emit (G_OBJECT (greeter), signals[SELECT_GUEST], 0);
+ break;
default:
g_warning ("Unknown message from server: %d", id);
break;
@@ -1986,6 +1999,37 @@ ldm_greeter_class_init (LdmGreeterClass *klass)
G_TYPE_NONE, 1, G_TYPE_STRING);
/**
+ * LdmGreeter::select-user:
+ * @greeter: A #LdmGreeter
+ * @username: A username
+ *
+ * The ::select-user signal gets emitted when the daemon request the greeter to select a user to log in as.
+ **/
+ signals[SELECT_USER] =
+ g_signal_new ("select-user",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (LdmGreeterClass, select_user),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__STRING,
+ G_TYPE_NONE, 1, G_TYPE_STRING);
+
+ /**
+ * LdmGreeter::select-guest:
+ * @greeter: A #LdmGreeter
+ *
+ * The ::select-guest signal gets emitted when the deamon requests the greeter to select the guest account.
+ **/
+ signals[SELECT_GUEST] =
+ g_signal_new ("select-guest",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (LdmGreeterClass, select_guest),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ /**
* LdmGreeter::user-added:
* @greeter: A #LdmGreeter
*
diff --git a/liblightdm-gobject/lightdm/greeter.h b/liblightdm-gobject/lightdm/greeter.h
index c10c4a84..fd231872 100644
--- a/liblightdm-gobject/lightdm/greeter.h
+++ b/liblightdm-gobject/lightdm/greeter.h
@@ -60,6 +60,8 @@ struct _LdmGreeterClass
void (*show_message)(LdmGreeter *greeter, const gchar *text, LdmMessageType type);
void (*authentication_complete)(LdmGreeter *greeter);
void (*timed_login)(LdmGreeter *greeter, const gchar *username);
+ void (*select_user)(LdmGreeter *greeter, const gchar *username);
+ void (*select_guest)(LdmGreeter *greeter);
void (*user_added)(LdmGreeter *greeter, LdmUser *user);
void (*user_changed)(LdmGreeter *greeter, LdmUser *user);
void (*user_removed)(LdmGreeter *greeter, LdmUser *user);