diff --git a/capplets/keyboard/gnome-keyboard-properties-xkb.c b/capplets/keyboard/gnome-keyboard-properties-xkb.c index 401a70686..1a14ae8cc 100644 --- a/capplets/keyboard/gnome-keyboard-properties-xkb.c +++ b/capplets/keyboard/gnome-keyboard-properties-xkb.c @@ -52,6 +52,25 @@ xci_desc_to_utf8 (XklConfigItem * ci) g_locale_to_utf8 (sd, -1, NULL, NULL, NULL); } +static GConfValue * +model_from_widget (GConfPropertyEditor * peditor, GConfValue * value) +{ + GConfValue *new_value; + + new_value = gconf_value_new (GCONF_VALUE_STRING); + + if (value->type == GCONF_VALUE_STRING) + { + GObject* widget = gconf_property_editor_get_ui_control(peditor); + gchar* n = g_object_get_data (widget, "xkbModelName"); + gconf_value_set_string (new_value, n); + } + else + gconf_value_set_string (new_value, _("Unknown")); + + return new_value; +} + static GConfValue * model_to_widget (GConfPropertyEditor * peditor, GConfValue * value) { @@ -64,9 +83,16 @@ model_to_widget (GConfPropertyEditor * peditor, GConfValue * value) XklConfigItem ci; g_snprintf( ci.name, sizeof (ci.name), "%s", gconf_value_get_string( value ) ); if ( XklConfigFindModel( &ci ) ) - gconf_value_set_string( new_value, ci.description ); + { + GObject* widget = gconf_property_editor_get_ui_control(peditor); + gchar* d = xci_desc_to_utf8 (&ci); + + g_object_set_data_full (widget, "xkbModelName", g_strdup (ci.name), g_free); + gconf_value_set_string (new_value, d); + g_free (d); + } else - gconf_value_set_string( new_value, _("Unknown") ); + gconf_value_set_string (new_value, _("Unknown")); } return new_value; @@ -111,7 +137,8 @@ setup_xkb_tabs (GladeXML * dialog, GConfChangeSet * changeset) gconf_peditor_new_string (changeset, (gchar *) GSWITCHIT_CONFIG_XKB_KEY_MODEL, WID ("xkb_model"), - "conv-to-widget-cb", model_to_widget, NULL); + "conv-to-widget-cb", model_to_widget, + "conv-from-widget-cb", model_from_widget, NULL); fill_available_layouts_tree (dialog); fill_available_options_tree (dialog); diff --git a/capplets/keyboard/gnome-keyboard-properties-xkbmc.c b/capplets/keyboard/gnome-keyboard-properties-xkbmc.c index 8cfb70c4e..cea3ef4f2 100644 --- a/capplets/keyboard/gnome-keyboard-properties-xkbmc.c +++ b/capplets/keyboard/gnome-keyboard-properties-xkbmc.c @@ -42,15 +42,24 @@ #define CWID(s) glade_xml_get_widget (chooserDialog, s) +static gchar* currentModelName = NULL; + static void -add_model_to_list (const XklConfigItemPtr configItem, GtkListStore * listStore) +add_model_to_list (const XklConfigItemPtr configItem, GtkTreeView * modelsList) { GtkTreeIter iter; + GtkListStore * listStore = GTK_LIST_STORE (gtk_tree_view_get_model (modelsList)); char *utfModelName = xci_desc_to_utf8 (configItem); gtk_list_store_append( listStore, &iter ); gtk_list_store_set( listStore, &iter, 0, utfModelName, 1, configItem->name, -1 ); + + if (currentModelName != NULL && + !g_ascii_strcasecmp(configItem->name, currentModelName)) + { + gtk_tree_selection_select_iter (gtk_tree_view_get_selection (modelsList), &iter); + } g_free (utfModelName); } @@ -77,11 +86,11 @@ fill_models_list (GladeXML * chooserDialog) gtk_tree_view_column_set_visible (descriptionCol, TRUE); gtk_tree_view_append_column (GTK_TREE_VIEW (modelsList), descriptionCol); - XklConfigEnumModels ((ConfigItemProcessFunc) - add_model_to_list, listStore); - gtk_tree_view_set_model (GTK_TREE_VIEW (modelsList), GTK_TREE_MODEL (listStore) ); + XklConfigEnumModels ((ConfigItemProcessFunc) + add_model_to_list, modelsList); + g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (modelsList))), "changed", G_CALLBACK (xkb_model_chooser_change_sel), @@ -119,9 +128,12 @@ choose_model(GladeXML * dialog) GladeXML* chooserDialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keyboard-properties.glade", "xkb_model_chooser", NULL); GtkWidget* chooser = CWID ( "xkb_model_chooser"); gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (WID ("keyboard_dialog"))); + currentModelName = gconf_client_get_string (gconf_client_get_default (), + GSWITCHIT_CONFIG_XKB_KEY_MODEL, NULL); fill_models_list (chooserDialog); g_signal_connect (G_OBJECT (chooser), "response", G_CALLBACK (xkb_model_chooser_response), chooserDialog); gtk_dialog_run (GTK_DIALOG (chooser)); gtk_widget_destroy (chooser); + g_free (currentModelName); }