diff options
Diffstat (limited to 'daemon/gdm-greeter-server.c')
-rw-r--r-- | daemon/gdm-greeter-server.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/daemon/gdm-greeter-server.c b/daemon/gdm-greeter-server.c index 0768a4a4..45376223 100644 --- a/daemon/gdm-greeter-server.c +++ b/daemon/gdm-greeter-server.c @@ -76,6 +76,7 @@ enum { SESSION_SELECTED, HOSTNAME_SELECTED, LANGUAGE_SELECTED, + LAYOUT_SELECTED, USER_SELECTED, CANCELLED, CONNECTED, @@ -266,6 +267,13 @@ gdm_greeter_server_default_language_name_changed (GdmGreeterServer *greeter_serv } void +gdm_greeter_server_default_layout_name_changed (GdmGreeterServer *greeter_server, + const char *layout_name) +{ + send_dbus_string_signal (greeter_server, "DefaultLayoutNameChanged", layout_name); +} + +void gdm_greeter_server_default_session_name_changed (GdmGreeterServer *greeter_server, const char *session_name) { @@ -496,6 +504,33 @@ handle_select_language (GdmGreeterServer *greeter_server, } static DBusHandlerResult +handle_select_layout (GdmGreeterServer *greeter_server, + DBusConnection *connection, + DBusMessage *message) +{ + DBusMessage *reply; + DBusError error; + const char *text; + + dbus_error_init (&error); + if (! dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &text, + DBUS_TYPE_INVALID)) { + g_warning ("ERROR: %s", error.message); + } + + g_debug ("GreeterServer: SelectLayout: %s", text); + + reply = dbus_message_new_method_return (message); + dbus_connection_send (connection, reply, NULL); + dbus_message_unref (reply); + + g_signal_emit (greeter_server, signals [LAYOUT_SELECTED], 0, text); + + return DBUS_HANDLER_RESULT_HANDLED; +} + +static DBusHandlerResult handle_select_user (GdmGreeterServer *greeter_server, DBusConnection *connection, DBusMessage *message) @@ -624,6 +659,8 @@ greeter_handle_child_message (DBusConnection *connection, return handle_select_hostname (greeter_server, connection, message); } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "SelectLanguage")) { return handle_select_language (greeter_server, connection, message); + } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "SelectLayout")) { + return handle_select_layout (greeter_server, connection, message); } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "SelectUser")) { return handle_select_user (greeter_server, connection, message); } else if (dbus_message_is_method_call (message, GDM_GREETER_SERVER_DBUS_INTERFACE, "Cancel")) { @@ -711,6 +748,10 @@ do_introspect (DBusConnection *connection, " <signal name=\"DefaultLanguageNameChanged\">\n" " <arg name=\"language_name\" type=\"s\"/>\n" " </signal>\n" + " <signal name=\"DefaultLayoutNameChanged\">\n" + " <arg name=\"layout_name\" type=\"s\"/>\n" + " </signal>\n" + " <signal name=\"DefaultSessionNameChanged\">\n" " <signal name=\"DefaultSessionNameChanged\">\n" " <arg name=\"session_name\" type=\"s\"/>\n" " </signal>\n" @@ -1157,6 +1198,17 @@ gdm_greeter_server_class_init (GdmGreeterServerClass *klass) G_TYPE_NONE, 1, G_TYPE_STRING); + signals [LAYOUT_SELECTED] = + g_signal_new ("layout-selected", + G_OBJECT_CLASS_TYPE (object_class), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GdmGreeterServerClass, layout_selected), + NULL, + NULL, + g_cclosure_marshal_VOID__STRING, + G_TYPE_NONE, + 1, + G_TYPE_STRING); signals [USER_SELECTED] = g_signal_new ("user-selected", G_OBJECT_CLASS_TYPE (object_class), |