summaryrefslogtreecommitdiff
path: root/daemon/gdm-session-worker.c
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/gdm-session-worker.c')
-rw-r--r--daemon/gdm-session-worker.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c
index b83e912c..e0ce9fe6 100644
--- a/daemon/gdm-session-worker.c
+++ b/daemon/gdm-session-worker.c
@@ -1785,6 +1785,14 @@ gdm_session_worker_set_language_name (GdmSessionWorker *worker,
}
static void
+gdm_session_worker_set_layout_name (GdmSessionWorker *worker,
+ const char *layout_name)
+{
+ gdm_session_settings_set_layout_name (worker->priv->user_settings,
+ layout_name);
+}
+
+static void
on_set_language_name (GdmSessionWorker *worker,
DBusMessage *message)
{
@@ -1807,6 +1815,28 @@ on_set_language_name (GdmSessionWorker *worker,
}
static void
+on_set_layout_name (GdmSessionWorker *worker,
+ DBusMessage *message)
+{
+ DBusError error;
+ const char *layout_name;
+ dbus_bool_t res;
+
+ dbus_error_init (&error);
+ res = dbus_message_get_args (message,
+ &error,
+ DBUS_TYPE_STRING, &layout_name,
+ DBUS_TYPE_INVALID);
+ if (res) {
+ g_debug ("GdmSessionWorker: layout name set to %s", layout_name);
+ gdm_session_worker_set_layout_name (worker, layout_name);
+ } else {
+ g_warning ("Unable to get arguments: %s", error.message);
+ dbus_error_free (&error);
+ }
+}
+
+static void
on_saved_language_name_read (GdmSessionWorker *worker)
{
char *language_name;
@@ -1819,6 +1849,18 @@ on_saved_language_name_read (GdmSessionWorker *worker)
}
static void
+on_saved_layout_name_read (GdmSessionWorker *worker)
+{
+ char *layout_name;
+
+ layout_name = gdm_session_settings_get_layout_name (worker->priv->user_settings);
+ send_dbus_string_method (worker->priv->connection,
+ "SavedLayoutNameRead",
+ layout_name);
+ g_free (layout_name);
+}
+
+static void
on_saved_session_name_read (GdmSessionWorker *worker)
{
char *session_name;
@@ -1844,6 +1886,11 @@ do_setup (GdmSessionWorker *worker)
worker);
g_signal_connect_swapped (worker->priv->user_settings,
+ "notify::layout-name",
+ G_CALLBACK (on_saved_layout_name_read),
+ worker);
+
+ g_signal_connect_swapped (worker->priv->user_settings,
"notify::session-name",
G_CALLBACK (on_saved_session_name_read),
worker);
@@ -2300,6 +2347,8 @@ worker_dbus_handle_message (DBusConnection *connection,
on_set_environment_variable (worker, message);
} else if (dbus_message_is_signal (message, GDM_SESSION_DBUS_INTERFACE, "SetLanguageName")) {
on_set_language_name (worker, message);
+ } else if (dbus_message_is_signal (message, GDM_SESSION_DBUS_INTERFACE, "SetLayoutName")) {
+ on_set_layout_name (worker, message);
} else if (dbus_message_is_signal (message, GDM_SESSION_DBUS_INTERFACE, "SetSessionName")) {
on_set_session_name (worker, message);
} else {