models popup is 99% working (1% for bugs)

This commit is contained in:
Sergey V. Udaltsov 2004-07-26 00:48:24 +00:00
parent 885acff46a
commit fcc609f1c7
2 changed files with 46 additions and 7 deletions

View file

@ -52,6 +52,25 @@ xci_desc_to_utf8 (XklConfigItem * ci)
g_locale_to_utf8 (sd, -1, NULL, NULL, NULL); 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 * static GConfValue *
model_to_widget (GConfPropertyEditor * peditor, GConfValue * value) model_to_widget (GConfPropertyEditor * peditor, GConfValue * value)
{ {
@ -64,9 +83,16 @@ model_to_widget (GConfPropertyEditor * peditor, GConfValue * value)
XklConfigItem ci; XklConfigItem ci;
g_snprintf( ci.name, sizeof (ci.name), "%s", gconf_value_get_string( value ) ); g_snprintf( ci.name, sizeof (ci.name), "%s", gconf_value_get_string( value ) );
if ( XklConfigFindModel( &ci ) ) 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 else
gconf_value_set_string( new_value, _("Unknown") ); gconf_value_set_string (new_value, _("Unknown"));
} }
return new_value; return new_value;
@ -111,7 +137,8 @@ setup_xkb_tabs (GladeXML * dialog, GConfChangeSet * changeset)
gconf_peditor_new_string gconf_peditor_new_string
(changeset, (gchar *) GSWITCHIT_CONFIG_XKB_KEY_MODEL, (changeset, (gchar *) GSWITCHIT_CONFIG_XKB_KEY_MODEL,
WID ("xkb_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_layouts_tree (dialog);
fill_available_options_tree (dialog); fill_available_options_tree (dialog);

View file

@ -42,15 +42,24 @@
#define CWID(s) glade_xml_get_widget (chooserDialog, s) #define CWID(s) glade_xml_get_widget (chooserDialog, s)
static gchar* currentModelName = NULL;
static void static void
add_model_to_list (const XklConfigItemPtr configItem, GtkListStore * listStore) add_model_to_list (const XklConfigItemPtr configItem, GtkTreeView * modelsList)
{ {
GtkTreeIter iter; GtkTreeIter iter;
GtkListStore * listStore = GTK_LIST_STORE (gtk_tree_view_get_model (modelsList));
char *utfModelName = xci_desc_to_utf8 (configItem); char *utfModelName = xci_desc_to_utf8 (configItem);
gtk_list_store_append( listStore, &iter ); gtk_list_store_append( listStore, &iter );
gtk_list_store_set( listStore, &iter, gtk_list_store_set( listStore, &iter,
0, utfModelName, 0, utfModelName,
1, configItem->name, -1 ); 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); g_free (utfModelName);
} }
@ -77,11 +86,11 @@ fill_models_list (GladeXML * chooserDialog)
gtk_tree_view_column_set_visible (descriptionCol, TRUE); gtk_tree_view_column_set_visible (descriptionCol, TRUE);
gtk_tree_view_append_column (GTK_TREE_VIEW (modelsList), descriptionCol); 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) ); 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))), g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (modelsList))),
"changed", "changed",
G_CALLBACK (xkb_model_chooser_change_sel), 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); GladeXML* chooserDialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keyboard-properties.glade", "xkb_model_chooser", NULL);
GtkWidget* chooser = CWID ( "xkb_model_chooser"); GtkWidget* chooser = CWID ( "xkb_model_chooser");
gtk_window_set_transient_for (GTK_WINDOW (chooser), GTK_WINDOW (WID ("keyboard_dialog"))); 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); fill_models_list (chooserDialog);
g_signal_connect (G_OBJECT (chooser), g_signal_connect (G_OBJECT (chooser),
"response", G_CALLBACK (xkb_model_chooser_response), chooserDialog); "response", G_CALLBACK (xkb_model_chooser_response), chooserDialog);
gtk_dialog_run (GTK_DIALOG (chooser)); gtk_dialog_run (GTK_DIALOG (chooser));
gtk_widget_destroy (chooser); gtk_widget_destroy (chooser);
g_free (currentModelName);
} }