layout_username = g_key_file_get_string (config, "test-greeter-config", "log-keyboard-layout", NULL);
if (layout_username)
{
- LightDMUser *user;
- const gchar *layout;
+ gchar **users;
+ int i;
- if (g_strcmp0 (layout_username, "%DEFAULT%") == 0) /* Grab system default layout */
- layout = lightdm_layout_get_name (lightdm_get_layout ());
- else
+ users = g_strsplit (layout_username, ",", 0);
+
+ for (i = 0; users[i]; i++)
{
- user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), layout_username);
- layout = lightdm_user_get_layout (user);
+ LightDMUser *user;
+ const gchar *layout;
+
+ if (g_strcmp0 (users[i], "%DEFAULT%") == 0) /* Grab system default layout */
+ layout = lightdm_layout_get_name (lightdm_get_layout ());
+ else
+ {
+ user = lightdm_user_list_get_user_by_name (lightdm_user_list_get_instance (), users[i]);
+ layout = lightdm_user_get_layout (user);
+ }
+
+ status_notify ("GREETER %s GET-LAYOUT USERNAME=%s LAYOUT='%s'", getenv ("DISPLAY"), users[i], layout ? layout : "");
}
- status_notify ("GREETER %s GET-LAYOUT USERNAME=%s LAYOUT='%s'", getenv ("DISPLAY"), layout_username, layout ? layout : "");
+ g_strfreev (users);
}
layout_prefix = g_key_file_get_string (config, "test-greeter-config", "log-keyboard-layouts", NULL);
guint id;
gchar *language;
gchar *xsession;
+ gchar *layout;
} AccountsUser;
static GList *accounts_users = NULL;
static void handle_user_call (GDBusConnection *connection,
*c = '\0';
}
user->xsession = g_key_file_get_string (dmrc_file, "Desktop", "Session", NULL);
+ user->layout = g_key_file_get_string (dmrc_file, "X-Accounts", "Layout", NULL);
user->path = g_strdup_printf ("/org/freedesktop/Accounts/User%d", uid);
user->id = g_dbus_connection_register_object (accounts_connection,
user->path,
return g_variant_new_string (user->language ? user->language : "");
else if (strcmp (property_name, "XSession") == 0)
return g_variant_new_string (user->xsession ? user->xsession : "");
+ else if (strcmp (property_name, "XKeyboardLayout") == 0)
+ return g_variant_new_string (user->layout ? user->layout : "");
return NULL;
}
" <property name='BackgroundFile' type='s' access='read'/>"
" <property name='Language' type='s' access='read'/>"
" <property name='XSession' type='s' access='read'/>"
+ " <property name='XKeyboardLayout' type='s' access='read'/>"
" </interface>"
"</node>";
GError *error = NULL;
gboolean have_home_dir;
gchar *real_name;
gchar *xsession;
- gchar *layout;
+ gchar *dmrc_layout;
+ gchar *dbus_layout;
gchar *language;
gint uid;
} users[] =
{
- {"root", "", TRUE, "root", NULL, NULL, NULL, 0},
- {"lightdm", "", TRUE, "", NULL, NULL, NULL, 100},
- {"alice", "password", TRUE, "Alice User", NULL, NULL, NULL, 1000},
- {"bob", "", TRUE, "Bob User", NULL, "us", "en_AU.utf8", 1001},
- {"carol", "", TRUE, "Carol User", "alternative", "fr", "fr_FR.UTF-8", 1002},
- {"dave", "", FALSE, "Dave User", NULL, NULL, NULL, 1003},
- {NULL, NULL, FALSE, NULL, NULL, NULL, NULL, 0}
+ {"root", "", TRUE, "root", NULL, NULL, NULL, NULL, 0},
+ {"lightdm", "", TRUE, "", NULL, NULL, NULL, NULL, 100},
+ {"alice", "password", TRUE, "Alice User", NULL, NULL, NULL, NULL, 1000},
+ {"bob", "", TRUE, "Bob User", NULL, "us", NULL, "en_AU.utf8", 1001},
+ {"carol", "", TRUE, "Carol User", "alternative", "ru", "fr\toss", "fr_FR.UTF-8", 1002},
+ {"dave", "", FALSE, "Dave User", NULL, NULL, NULL, NULL, 1003},
+ {NULL, NULL, FALSE, NULL, NULL, NULL, NULL, NULL, 0}
};
passwd_data = g_string_new ("");
int i;
g_key_file_set_string (dmrc_file, "Desktop", "Session", users[i].xsession);
save_dmrc = TRUE;
}
- if (users[i].layout)
+ if (users[i].dmrc_layout)
{
- g_key_file_set_string (dmrc_file, "Desktop", "Layout", users[i].layout);
+ g_key_file_set_string (dmrc_file, "Desktop", "Layout", users[i].dmrc_layout);
+ save_dmrc = TRUE;
+ }
+ if (users[i].dbus_layout)
+ {
+ g_key_file_set_string (dmrc_file, "X-Accounts", "Layout", users[i].dbus_layout);
save_dmrc = TRUE;
}
if (users[i].language)