models popup is 99% working (1% for bugs)
This commit is contained in:
parent
885acff46a
commit
fcc609f1c7
2 changed files with 46 additions and 7 deletions
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue