--- a/capplets/keyboard/gnome-keyboard-properties-xkb.c +++ a/capplets/keyboard/gnome-keyboard-properties-xkb.c @@ -42,6 +42,7 @@ XklEngine *engine; XklConfigRegistry *config_registry; GkbdKeyboardConfig initial_config; +GkbdDesktopConfig desktop_config; GConfClient *xkb_gconf_client; @@ -114,6 +115,7 @@ setup_model_entry (GladeXML * dialog) static void cleanup_xkb_tabs (GladeXML * dialog) { + gkbd_desktop_config_term (&desktop_config); gkbd_keyboard_config_term (&initial_config); g_object_unref (G_OBJECT (config_registry)); config_registry = NULL; @@ -155,7 +157,12 @@ setup_xkb_tabs (GladeXML * dialog, GConfChangeSet * changeset) engine = xkl_engine_get_instance (GDK_DISPLAY ()); config_registry = xkl_config_registry_get_instance (engine); - xkl_config_registry_load (config_registry); + + gkbd_desktop_config_init (&desktop_config, xkb_gconf_client, engine); + gkbd_desktop_config_load_from_gconf (&desktop_config); + + xkl_config_registry_load (config_registry, + desktop_config.load_extra_items); gkbd_keyboard_config_init (&initial_config, xkb_gconf_client, engine); --- a/capplets/keyboard/gnome-keyboard-properties-xkbltadd.c +++ a/capplets/keyboard/gnome-keyboard-properties-xkbltadd.c @@ -40,7 +40,8 @@ #define DEFAULT_VARIANT_ID "__default__" enum { - COMBO_BOX_MODEL_COL_DESCRIPTION, + COMBO_BOX_MODEL_COL_SORT, + COMBO_BOX_MODEL_COL_VISIBLE, COMBO_BOX_MODEL_COL_XKB_ID, COMBO_BOX_MODEL_COL_REAL_ID }; @@ -54,24 +55,44 @@ typedef struct { } AddVariantData; static void - xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog, - const gchar cblid[], - const gchar cbvid[], - LayoutIterFunc layout_iterator, - ConfigItemProcessFunc - layout_handler, - GCallback - combo_changed_notify); -static void - xkb_layout_chooser_available_language_variants_fill (GladeXML * - chooser_dialog); + + + + + + +xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog, + const gchar cblid[], + const gchar cbvid[], + LayoutIterFunc layout_iterator, + ConfigItemProcessFunc + layout_handler, + GCallback combo_changed_notify); static void - xkb_layout_chooser_available_country_variants_fill (GladeXML * + + + + + + + +xkb_layout_chooser_available_language_variants_fill (GladeXML * chooser_dialog); static void + + + + + + + +xkb_layout_chooser_available_country_variants_fill (GladeXML * + chooser_dialog); + +static void xkb_layout_chooser_add_variant_to_available_country_variants (XklConfigRegistry * config_registry, XklConfigItem * parent_config_item, XklConfigItem * config_item, @@ -85,15 +106,31 @@ static void const gchar *xkb_id = config_item ? gkbd_keyboard_config_merge_items (parent_config_item->name, - config_item-> - name) : parent_config_item-> - name; - - gtk_list_store_insert_with_values (data->list_store, &iter, -1, - COMBO_BOX_MODEL_COL_DESCRIPTION, - utf_variant_name, - COMBO_BOX_MODEL_COL_XKB_ID, - xkb_id, -1); + config_item->name) : + parent_config_item->name; + + if (config_item && g_object_get_data + (G_OBJECT (config_item), XCI_PROP_EXTRA_ITEM)) { + gchar *buf = + g_strdup_printf ("%s", utf_variant_name); + gtk_list_store_insert_with_values (data->list_store, &iter, + -1, + COMBO_BOX_MODEL_COL_SORT, + utf_variant_name, + COMBO_BOX_MODEL_COL_VISIBLE, + buf, + COMBO_BOX_MODEL_COL_XKB_ID, + xkb_id, -1); + g_free (buf); + } else + gtk_list_store_insert_with_values (data->list_store, &iter, + -1, + COMBO_BOX_MODEL_COL_SORT, + utf_variant_name, + COMBO_BOX_MODEL_COL_VISIBLE, + utf_variant_name, + COMBO_BOX_MODEL_COL_XKB_ID, + xkb_id, -1); g_free (utf_variant_name); } @@ -115,7 +152,9 @@ xkb_layout_chooser_add_language_to_available_languages (XklConfigRegistry * list_store) { gtk_list_store_insert_with_values (list_store, NULL, -1, - COMBO_BOX_MODEL_COL_DESCRIPTION, + COMBO_BOX_MODEL_COL_SORT, + config_item->description, + COMBO_BOX_MODEL_COL_VISIBLE, config_item->description, COMBO_BOX_MODEL_COL_REAL_ID, config_item->name, -1); @@ -130,7 +169,9 @@ xkb_layout_chooser_add_country_to_available_countries (XklConfigRegistry * list_store) { gtk_list_store_insert_with_values (list_store, NULL, -1, - COMBO_BOX_MODEL_COL_DESCRIPTION, + COMBO_BOX_MODEL_COL_SORT, + config_item->description, + COMBO_BOX_MODEL_COL_VISIBLE, config_item->description, COMBO_BOX_MODEL_COL_REAL_ID, config_item->name, -1); @@ -196,7 +237,8 @@ xkb_layout_chooser_available_language_variants_fill (GladeXML * GtkTreeIter liter; list_store = gtk_list_store_new - (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING); if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbl), &liter)) { GtkTreeModel *lm = @@ -220,7 +262,7 @@ xkb_layout_chooser_available_language_variants_fill (GladeXML * /* Turn on sorting after filling the store, since that's faster */ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store), - COMBO_BOX_MODEL_COL_DESCRIPTION, + COMBO_BOX_MODEL_COL_SORT, GTK_SORT_ASCENDING); gtk_combo_box_set_model (GTK_COMBO_BOX (cbv), @@ -238,7 +280,8 @@ xkb_layout_chooser_available_country_variants_fill (GladeXML * GtkTreeIter liter; list_store = gtk_list_store_new - (3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); + (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING); if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbl), &liter)) { GtkTreeModel *lm = @@ -261,7 +304,7 @@ xkb_layout_chooser_available_country_variants_fill (GladeXML * /* Turn on sorting after filling the store, since that's faster */ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store), - COMBO_BOX_MODEL_COL_DESCRIPTION, + COMBO_BOX_MODEL_COL_SORT, GTK_SORT_ASCENDING); gtk_combo_box_set_model (GTK_COMBO_BOX (cbv), @@ -282,9 +325,11 @@ xkb_layout_chooser_available_layouts_fill (GladeXML * GtkWidget *cbl = CWID (cblid); GtkWidget *cbev = CWID (cbvid); GtkCellRenderer *renderer; - GtkListStore *list_store = - gtk_list_store_new (3, G_TYPE_STRING, G_TYPE_STRING, - G_TYPE_STRING); + GtkListStore *list_store; + + list_store = gtk_list_store_new + (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING); gtk_combo_box_set_model (GTK_COMBO_BOX (cbl), GTK_TREE_MODEL (list_store)); @@ -293,15 +338,14 @@ xkb_layout_chooser_available_layouts_fill (GladeXML * gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbl), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbl), renderer, "markup", - COMBO_BOX_MODEL_COL_DESCRIPTION, - NULL); + COMBO_BOX_MODEL_COL_VISIBLE, NULL); layout_iterator (config_registry, layout_handler, list_store); /* Turn on sorting after filling the model since that's faster */ gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store), - COMBO_BOX_MODEL_COL_DESCRIPTION, + COMBO_BOX_MODEL_COL_SORT, GTK_SORT_ASCENDING); g_signal_connect_swapped (G_OBJECT (cbl), "changed", @@ -313,8 +357,7 @@ xkb_layout_chooser_available_layouts_fill (GladeXML * renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbev), renderer, "markup", - COMBO_BOX_MODEL_COL_DESCRIPTION, - NULL); + COMBO_BOX_MODEL_COL_VISIBLE, NULL); g_signal_connect_swapped (G_OBJECT (cbev), "changed", G_CALLBACK @@ -460,12 +503,17 @@ xkb_layout_choose (GladeXML * dialog) (xkb_layout_chooser_page_changed), chooser_dialog); - gtk_combo_box_set_active (CWID ("xkb_countries_available"), 0); + gtk_combo_box_set_active (GTK_COMBO_BOX + (CWID ("xkb_countries_available")), + FALSE); if (gtk_tree_model_iter_n_children (gtk_combo_box_get_model (GTK_COMBO_BOX (lang_chooser)), NULL)) { - gtk_combo_box_set_active (CWID ("xkb_languages_available"), 0); + gtk_combo_box_set_active (GTK_COMBO_BOX + (CWID + ("xkb_languages_available")), + FALSE); } else { /* If language info is not available - remove the corresponding tab, pretend there is no notebook at all */ @@ -512,7 +560,7 @@ xkb_layout_choose (GladeXML * dialog) } } - xkb_layout_preview_update (chooser_dialog); + xkb_layout_preview_update (chooser_dialog); gtk_dialog_run (GTK_DIALOG (chooser)); gtk_widget_destroy (chooser); } --- a/configure.in +++ a/configure.in @@ -180,7 +180,7 @@ CAPPLET_LIBS="$CAPPLET_LIBS $XCURSOR_LIBS" dnl ============== dnl gswitchit dnl ============== -PKG_CHECK_MODULES(LIBGNOMEKBD, [libgnomekbd >= 2.21.4.1 libxklavier >= 3.6]) +PKG_CHECK_MODULES(LIBGNOMEKBD, [libgnomekbd >= 2.21.4.1 libxklavier >= 4.0]) AC_SUBST(LIBGNOMEKBD_CFLAGS) AC_SUBST(LIBGNOMEKBD_LIBS) --