first round of working model chooser - not complete yet
This commit is contained in:
parent
85cb682efc
commit
885acff46a
5 changed files with 331 additions and 111 deletions
|
@ -40,6 +40,8 @@
|
|||
|
||||
#include "gnome-keyboard-properties-xkb.h"
|
||||
|
||||
#define CWID(s) glade_xml_get_widget (chooserDialog, s)
|
||||
|
||||
static GSwitchItXkbConfig initialConfig;
|
||||
|
||||
char *
|
||||
|
@ -50,67 +52,22 @@ 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 = gconf_value_new (GCONF_VALUE_STRING);
|
||||
const char *rvs = "";
|
||||
if (value->type == GCONF_VALUE_INT)
|
||||
{
|
||||
GtkWidget *omenu =
|
||||
GTK_WIDGET (gconf_property_editor_get_ui_control (peditor));
|
||||
const int ivalue = gconf_value_get_int (value);
|
||||
GtkWidget *menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (omenu));
|
||||
GList *items = GTK_MENU_SHELL (menu)->children;
|
||||
while (items != NULL)
|
||||
{
|
||||
GtkWidget *item = GTK_WIDGET (items->data);
|
||||
const int itemNo =
|
||||
GPOINTER_TO_INT (g_object_get_data (G_OBJECT (item), "itemNo"));
|
||||
if (itemNo == ivalue)
|
||||
{
|
||||
rvs = (const char *)
|
||||
g_object_get_data (G_OBJECT (item), "itemId");
|
||||
break;
|
||||
}
|
||||
items = items->next;
|
||||
}
|
||||
}
|
||||
gconf_value_set_string (new_value, rvs);
|
||||
return new_value;
|
||||
}
|
||||
|
||||
static GConfValue *
|
||||
model_to_widget (GConfPropertyEditor * peditor, GConfValue * value)
|
||||
{
|
||||
GConfValue *new_value;
|
||||
int rvi = -1;
|
||||
|
||||
new_value = gconf_value_new (GCONF_VALUE_INT);
|
||||
new_value = gconf_value_new (GCONF_VALUE_STRING);
|
||||
|
||||
if (value->type == GCONF_VALUE_STRING)
|
||||
{
|
||||
GtkWidget *omenu =
|
||||
GTK_WIDGET (gconf_property_editor_get_ui_control (peditor));
|
||||
const char *svalue = gconf_value_get_string (value);
|
||||
GtkWidget *menu = gtk_option_menu_get_menu (GTK_OPTION_MENU (omenu));
|
||||
GList *items = GTK_MENU_SHELL (menu)->children;
|
||||
while (items != NULL)
|
||||
{
|
||||
GtkWidget *item = GTK_WIDGET (items->data);
|
||||
const char *itemId = (const char *)
|
||||
g_object_get_data (G_OBJECT (item), "itemId");
|
||||
if (!g_strcasecmp (itemId, svalue))
|
||||
{
|
||||
rvi =
|
||||
GPOINTER_TO_INT (g_object_get_data
|
||||
(G_OBJECT (item), "itemNo"));
|
||||
break;
|
||||
}
|
||||
items = items->next;
|
||||
}
|
||||
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 );
|
||||
else
|
||||
gconf_value_set_string( new_value, _("Unknown") );
|
||||
}
|
||||
gconf_value_set_int (new_value, rvi);
|
||||
|
||||
return new_value;
|
||||
}
|
||||
|
@ -124,54 +81,6 @@ cleanup_xkb_tabs (GladeXML * dialog)
|
|||
XklTerm ();
|
||||
}
|
||||
|
||||
static void
|
||||
add_model_to_option_menu (const XklConfigItemPtr configItem, GtkWidget * menu)
|
||||
{
|
||||
GList *existingItemNode = GTK_MENU_SHELL (menu)->children;
|
||||
char *utfModelName = xci_desc_to_utf8 (configItem);
|
||||
GtkWidget *menuItem = gtk_menu_item_new_with_label (utfModelName);
|
||||
int position = 0;
|
||||
g_object_set_data_full (G_OBJECT (menuItem), "itemId",
|
||||
g_strdup (configItem->name),
|
||||
(GDestroyNotify) g_free);
|
||||
for (; existingItemNode != NULL;
|
||||
position++, existingItemNode = existingItemNode->next)
|
||||
{
|
||||
GtkWidget *menuItem = GTK_WIDGET (existingItemNode->data);
|
||||
GtkWidget *lbl = GTK_BIN (menuItem)->child;
|
||||
const char *txt = gtk_label_get_text (GTK_LABEL (lbl));
|
||||
if (g_utf8_collate (txt, utfModelName) > 0)
|
||||
break;
|
||||
}
|
||||
g_free (utfModelName);
|
||||
gtk_menu_shell_insert (GTK_MENU_SHELL (menu),
|
||||
GTK_WIDGET (menuItem), position);
|
||||
}
|
||||
|
||||
static void
|
||||
fill_models_option_menu (GladeXML * dialog)
|
||||
{
|
||||
GtkWidget *menu = gtk_menu_new ();
|
||||
int itemCounter = 0;
|
||||
GList *items;
|
||||
XklConfigEnumModels ((ConfigItemProcessFunc)
|
||||
add_model_to_option_menu, menu);
|
||||
|
||||
items = GTK_MENU_SHELL (menu)->children;
|
||||
while (items != NULL)
|
||||
{
|
||||
GtkWidget *menuItem = GTK_WIDGET (items->data);
|
||||
g_object_set_data (G_OBJECT (menuItem), "itemNo",
|
||||
GINT_TO_POINTER (itemCounter++));
|
||||
items = items->next;
|
||||
}
|
||||
|
||||
gtk_option_menu_set_menu (GTK_OPTION_MENU (WID ("xkb_models")),
|
||||
GTK_WIDGET (menu));
|
||||
gtk_widget_show_all (menu);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
reset_to_defaults (GtkWidget * button, GladeXML * dialog)
|
||||
{
|
||||
|
@ -197,13 +106,12 @@ setup_xkb_tabs (GladeXML * dialog, GConfChangeSet * changeset)
|
|||
XklConfigInit ();
|
||||
XklConfigLoadRegistry ();
|
||||
|
||||
fill_models_option_menu (dialog);
|
||||
// fill_models_option_menu (dialog);
|
||||
|
||||
gconf_peditor_new_select_menu
|
||||
gconf_peditor_new_string
|
||||
(changeset, (gchar *) GSWITCHIT_CONFIG_XKB_KEY_MODEL,
|
||||
WID ("xkb_models"),
|
||||
"conv-to-widget-cb", model_to_widget,
|
||||
"conv-from-widget-cb", model_from_widget, NULL);
|
||||
WID ("xkb_model"),
|
||||
"conv-to-widget-cb", model_to_widget, NULL);
|
||||
|
||||
fill_available_layouts_tree (dialog);
|
||||
fill_available_options_tree (dialog);
|
||||
|
@ -217,6 +125,9 @@ setup_xkb_tabs (GladeXML * dialog, GConfChangeSet * changeset)
|
|||
g_signal_connect (G_OBJECT (WID ("xkb_reset_to_defaults")), "clicked",
|
||||
G_CALLBACK (reset_to_defaults), dialog);
|
||||
|
||||
g_signal_connect_swapped (G_OBJECT (WID ("xkb_model_pick")), "clicked",
|
||||
G_CALLBACK (choose_model), dialog);
|
||||
|
||||
register_layouts_gconf_listener (dialog);
|
||||
register_options_gconf_listener (dialog);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue