[gnome-control-center] region: Fix handling of variants in "Copy" button
- From: Bastien Nocera <hadess src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-control-center] region: Fix handling of variants in "Copy" button
- Date: Wed, 22 Feb 2012 19:41:39 +0000 (UTC)
commit b55d07e47f1d15e86b0359f2fb02d0a6483fddd0
Author: Bastien Nocera <hadess hadess net>
Date: Wed Feb 22 19:09:50 2012 +0100
region: Fix handling of variants in "Copy" button
Instead of splitting the list of layouts into layouts and variants,
we were expecting strings of the form:
layout1 variant1, layout2 variant2
to be handled automatically. We should instead create the lists
of layouts and variants separately before passing them to localed.
https://bugzilla.gnome.org/show_bug.cgi?id=670607
panels/region/gnome-region-panel-system.c | 32 ++++++++++++++++++++++++----
1 files changed, 27 insertions(+), 5 deletions(-)
---
diff --git a/panels/region/gnome-region-panel-system.c b/panels/region/gnome-region-panel-system.c
index 71a3fd8..c043712 100644
--- a/panels/region/gnome-region-panel-system.c
+++ b/panels/region/gnome-region-panel-system.c
@@ -47,6 +47,7 @@ update_copy_button (GtkBuilder *dialog)
const gchar *user_lang, *system_lang;
const gchar *user_region, *system_region;
const gchar *user_input_source, *system_input_source;
+ const gchar *user_input_variants, *system_input_variants;
gboolean layouts_differ;
label = WID ("user_display_language");
@@ -63,16 +64,20 @@ update_copy_button (GtkBuilder *dialog)
label = WID ("user_input_source");
user_input_source = g_object_get_data (G_OBJECT (label), "input_source");
+ user_input_variants = g_object_get_data (G_OBJECT (label), "input_variants");
label = WID ("system_input_source");
system_input_source = g_object_get_data (G_OBJECT (label), "input_source");
+ system_input_variants = g_object_get_data (G_OBJECT (label), "input_variants");
button = WID ("copy_settings_button");
/* If the version of localed doesn't include layouts... */
- if (system_input_source)
+ if (system_input_source) {
layouts_differ = (g_strcmp0 (user_input_source, system_input_source) != 0);
- else
+ if (layouts_differ == FALSE)
+ layouts_differ = (g_strcmp0 (user_input_variants, system_input_variants) != 0);
+ } else
layouts_differ = FALSE;
if (g_strcmp0 (user_lang, system_lang) == 0 &&
@@ -131,7 +136,7 @@ xkb_settings_changed (GSettings *settings,
GtkBuilder *dialog)
{
guint i;
- GString *disp, *list;
+ GString *disp, *list, *variants;
GtkWidget *label;
gchar **layouts;
@@ -142,9 +147,12 @@ xkb_settings_changed (GSettings *settings,
label = WID ("user_input_source");
disp = g_string_new ("");
list = g_string_new ("");
+ variants = g_string_new ("");
for (i = 0; layouts[i]; i++) {
gchar *utf_visible;
+ char **split;
+ gchar *layout, *variant;
utf_visible = xkb_layout_description_utf8 (layouts[i]);
if (disp->str[0] != '\0')
@@ -152,13 +160,25 @@ xkb_settings_changed (GSettings *settings,
g_string_append (disp, utf_visible ? utf_visible : layouts[i]);
g_free (utf_visible);
+ split = g_strsplit_set (layouts[i], " \t", 2);
+
+ layout = split[0];
+ variant = split[1];
+
if (list->str[0] != '\0')
g_string_append (list, ",");
- g_string_append (list, layouts[i]);
+ g_string_append (list, layout);
+
+ if (variants->str[0] != '\0')
+ g_string_append (variants, ",");
+ g_string_append (variants, variant ? variant : "");
+
+ g_strfreev (split);
}
g_strfreev (layouts);
g_object_set_data_full (G_OBJECT (label), "input_source", g_string_free (list, FALSE), g_free);
+ g_object_set_data_full (G_OBJECT (label), "input_variants", g_string_free (variants, FALSE), g_free);
gtk_label_set_text (GTK_LABEL (label), disp->str);
g_string_free (disp, TRUE);
@@ -323,6 +343,7 @@ copy_settings (GtkButton *button, GtkBuilder *dialog)
const gchar *language;
const gchar *region;
const gchar *layout;
+ const gchar *variants;
GtkWidget *label;
GVariantBuilder *b;
gchar *s;
@@ -360,10 +381,11 @@ copy_settings (GtkButton *button, GtkBuilder *dialog)
label = WID ("user_input_source");
layout = g_object_get_data (G_OBJECT (label), "input_source");
+ variants = g_object_get_data (G_OBJECT (label), "input_variants");
g_dbus_proxy_call (localed_proxy,
"SetX11Keyboard",
- g_variant_new ("(ssssbb)", layout, "", "", "", TRUE, TRUE),
+ g_variant_new ("(ssssbb)", layout, "", variants ? variants : "", "", TRUE, TRUE),
G_DBUS_CALL_FLAGS_NONE,
-1, NULL, NULL, NULL);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]