Author: olivier
Date: 2008-10-16 22:12:36 +0000 (Thu, 16 Oct 2008)
New Revision: 28270
Modified:
xfce4-settings/trunk/ChangeLog
xfce4-settings/trunk/dialogs/keyboard-settings/xfce-keyboard-settings.c
Log:
Add group selection.
Modified: xfce4-settings/trunk/ChangeLog
===================================================================
--- xfce4-settings/trunk/ChangeLog 2008-10-16 19:31:26 UTC (rev 28269)
+++ xfce4-settings/trunk/ChangeLog 2008-10-16 22:12:36 UTC (rev 28270)
@@ -1,3 +1,8 @@
+2008-10-16 olivier
+
+ * dialogs/keyboard-settings/xfce-keyboard-settings.c: Add group
+ selection.
+
2008-10-12 olivier
* dialogs/keyboard-settings/xfce-keyboard-settings.c: Prevent
Modified:
xfce4-settings/trunk/dialogs/keyboard-settings/xfce-keyboard-settings.c
===================================================================
--- xfce4-settings/trunk/dialogs/keyboard-settings/xfce-keyboard-settings.c
2008-10-16 19:31:26 UTC (rev 28269)
+++ xfce4-settings/trunk/dialogs/keyboard-settings/xfce-keyboard-settings.c
2008-10-16 22:12:36 UTC (rev 28270)
@@ -71,23 +71,24 @@
enum
{
- DESC = 0,
- NOM,
- COMBO_NUM
+ XKB_COMBO_DESCRIPTION = 0,
+ XKB_COMBO_MODELS,
+ XKB_COMBO_NUM_COLUMNS
};
enum
{
- LAYOUTS = 0,
- VARIANTS,
- TREE_NUM
+ XKB_TREE_ACTIVE = 0,
+ XKB_TREE_LAYOUTS,
+ XKB_TREE_VARIANTS,
+ XKB_TREE_NUM_COLUMNS
};
enum
{
- AVAIL_LAYOUT_TREE_COL_DESCRIPTION = 0,
- AVAIL_LAYOUT_TREE_COL_ID,
- NUM
+ XKB_AVAIL_LAYOUTS_TREE_DESCRIPTION = 0,
+ XKB_AVAIL_LAYOUTS_TREE_ID,
+ XKB_AVAIL_LAYOUTS_TREE_NUM_COLUMNS
};
@@ -147,12 +148,15 @@
XklConfigItem *config_item,
XfceKeyboardSettings *settings);
static void xfce_keyboard_settings_init_model
(XfceKeyboardSettings *settings);
-static void xfce_keyboard_settings_cb_model_changed
(GtkComboBox *combo,
+static void xfce_keyboard_settings_model_changed_cb
(GtkComboBox *combo,
XfceKeyboardSettings *settings);
+static void xfce_keyboard_settings_active_layout_cb
(GtkCellRendererToggle *cell,
+
gchar *path_str,
+
XfceKeyboardSettings *settings);
static void xfce_keyboard_settings_update_layout_buttons
(XfceKeyboardSettings *settings);
static void xfce_keyboard_settings_update_edit_button
(GtkTreeView *tree_view,
XfceKeyboardSettings *settings);
-static void xfce_keyboard_settings_del_layout_button_cb
(GtkWidget *widget,
+static void xfce_keyboard_settings_del_layout_button_cb
(GtkWidget *widget,
XfceKeyboardSettings *settings);
static void xfce_keyboard_settings_update_edit_button
(GtkTreeView *tree_view,
XfceKeyboardSettings *settings);
@@ -368,12 +372,15 @@
/* TODO: Handle 'Add' and 'Remove' buttons */
#ifdef HAVE_LIBXKLAVIER
- /* Init engine */
- settings->priv->xkl_engine = xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY
(gdk_display_get_default ()));
+ /* Init xklavier engine */
+ settings->priv->xkl_engine = xkl_engine_get_instance (GDK_DISPLAY());
+ xkl_engine_start_listen (settings->priv->xkl_engine,
XKLL_TRACK_KEYBOARD_STATE);
+
settings->priv->xkl_rec_config = xkl_config_rec_new ();
+ xkl_config_rec_get_from_server (settings->priv->xkl_rec_config,
settings->priv->xkl_engine);
+
settings->priv->xkl_registry = xkl_config_registry_get_instance
(settings->priv->xkl_engine);
xkl_config_registry_load (settings->priv->xkl_registry);
- xkl_config_rec_get_from_server (settings->priv->xkl_rec_config,
settings->priv->xkl_engine);
/* Tab */
xkb_tab_layout_vbox = glade_xml_get_widget (settings->priv->glade_xml,
"xkb_tab_layout_vbox");
@@ -385,7 +392,7 @@
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (xkb_model_combo), renderer,
TRUE);
gtk_cell_layout_add_attribute (GTK_CELL_LAYOUT (xkb_model_combo), renderer,
"text", 0);
- list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ list_store = gtk_list_store_new (XKB_COMBO_NUM_COLUMNS, G_TYPE_STRING,
G_TYPE_STRING);
gtk_combo_box_set_model (GTK_COMBO_BOX (xkb_model_combo), GTK_TREE_MODEL
(list_store));
xkl_config_registry_foreach_model (settings->priv->xkl_registry,
(ConfigItemProcessFunc)
xfce_keyboard_settings_add_model_to_combo,
@@ -394,16 +401,23 @@
xfce_keyboard_settings_init_model (settings);
g_signal_connect (G_OBJECT (xkb_model_combo),
"changed",
- G_CALLBACK (xfce_keyboard_settings_cb_model_changed),
+ G_CALLBACK (xfce_keyboard_settings_model_changed_cb),
settings);
/* Keyboard layout/variant treeview */
settings->priv->layout_selection_treestore = NULL;
xkb_layout_view = glade_xml_get_widget (settings->priv->glade_xml,
"xkb_layout_view");
+
+ renderer = gtk_cell_renderer_toggle_new ();
+ gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE (renderer),
TRUE);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW
(xkb_layout_view), -1, NULL, renderer, "active", XKB_TREE_ACTIVE, NULL);
+ g_signal_connect (renderer, "toggled", G_CALLBACK
(xfce_keyboard_settings_active_layout_cb), settings);
+
renderer = gtk_cell_renderer_text_new ();
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW
(xkb_layout_view), -1, _("Layout"), renderer, "text", LAYOUTS, NULL);
- gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW
(xkb_layout_view), -1, _("Variant"), renderer, "text", VARIANTS, NULL);
- list_store = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW
(xkb_layout_view), -1, _("Layout"), renderer, "text", XKB_TREE_LAYOUTS, NULL);
+ gtk_tree_view_insert_column_with_attributes (GTK_TREE_VIEW
(xkb_layout_view), -1, _("Variant"), renderer, "text", XKB_TREE_VARIANTS, NULL);
+
+ list_store = gtk_list_store_new (XKB_TREE_NUM_COLUMNS, G_TYPE_BOOLEAN,
G_TYPE_STRING, G_TYPE_STRING);
gtk_tree_view_set_model (GTK_TREE_VIEW (xkb_layout_view), GTK_TREE_MODEL
(list_store));
xfce_keyboard_settings_init_layout (settings);
g_signal_connect (G_OBJECT (xkb_layout_view), "cursor-changed", G_CALLBACK
(xfce_keyboard_settings_update_edit_button), settings);
@@ -429,6 +443,11 @@
{
XfceKeyboardSettings *settings = XFCE_KEYBOARD_SETTINGS (object);
+#ifdef HAVE_LIBXKLAVIER
+ /* Stop xklavier engine */
+ xkl_engine_stop_listen (settings->priv->xkl_engine);
+#endif /* HAVE_LIBXKLAVIER */
+
g_object_unref (settings->priv->provider);
(*G_OBJECT_CLASS (xfce_keyboard_settings_parent_class)->finalize) (object);
@@ -1030,6 +1049,7 @@
GtkWidget *view;
GtkTreeModel *model;
GtkTreeIter iter;
+ gboolean active;
gchar *val_layout;
gchar *val_variant;
gchar *variants;
@@ -1039,7 +1059,7 @@
view = glade_xml_get_widget (settings->priv->glade_xml, "xkb_layout_view");
model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
gtk_tree_model_get_iter_first (model, &iter);
- gtk_tree_model_get (model, &iter, LAYOUTS, &val_layout, VARIANTS,
&val_variant, -1);
+ gtk_tree_model_get (model, &iter, XKB_TREE_ACTIVE, &active,
XKB_TREE_LAYOUTS, &val_layout, XKB_TREE_VARIANTS, &val_variant, -1);
layouts = g_strdup (val_layout);
g_free (val_layout);
@@ -1053,7 +1073,7 @@
while (gtk_tree_model_iter_next (model, &iter))
{
- gtk_tree_model_get (model, &iter, LAYOUTS, &val_layout, VARIANTS,
&val_variant, -1);
+ gtk_tree_model_get (model, &iter, XKB_TREE_ACTIVE, &active,
XKB_TREE_LAYOUTS, &val_layout, XKB_TREE_VARIANTS, &val_variant, -1);
tmp = g_strconcat (layouts, ",", val_layout, NULL);
g_free (val_layout);
g_free (layouts);
@@ -1085,6 +1105,7 @@
static void
xfce_keyboard_settings_init_layout (XfceKeyboardSettings *settings)
{
+ XklState *xkl_state = NULL;
GtkWidget *view;
GtkTreeModel *model;
GtkTreeIter iter;
@@ -1096,6 +1117,8 @@
gchar **layout;
gchar **variants;
gchar **variant;
+ gint current_group = -1;
+ gint group_id;
default_layouts = g_strjoinv (",", settings->priv->xkl_rec_config->layouts);
default_variants = g_strjoinv (",",
settings->priv->xkl_rec_config->variants);
@@ -1109,11 +1132,17 @@
view = glade_xml_get_widget (settings->priv->glade_xml, "xkb_layout_view");
model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
- for (layout = layouts, variant = variants; *layout != NULL; ++layout)
+ /* FIXME: This actually does not work, xkl_state->group is always 0 */
+ xkl_state = xkl_engine_get_current_state (settings->priv->xkl_engine);
+ if (xkl_state != NULL)
+ current_group = xkl_state->group;
+
+ for (layout = layouts, variant = variants, group_id = 0; *layout != NULL;
++layout, ++group_id)
{
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter, LAYOUTS, *layout,
VARIANTS, *variant, -1);
-
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, XKB_TREE_ACTIVE,
(current_group == group_id),
+ XKB_TREE_LAYOUTS,
*layout,
+ XKB_TREE_VARIANTS,
*variant, -1);
if (*variant)
variant++;
}
@@ -1127,8 +1156,8 @@
static void
-xfce_keyboard_settings_add_model_to_combo (XklConfigRegistry
*config_registry,
- XklConfigItem *config_item,
+xfce_keyboard_settings_add_model_to_combo (XklConfigRegistry
*config_registry,
+ XklConfigItem *config_item,
XfceKeyboardSettings *settings)
{
GtkWidget *view;
@@ -1142,7 +1171,7 @@
model = gtk_combo_box_get_model (GTK_COMBO_BOX (view));
gtk_list_store_append (GTK_LIST_STORE (model), &iter );
- gtk_list_store_set (GTK_LIST_STORE (model), &iter, DESC, model_name, NOM,
config_item->name, -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, XKB_COMBO_DESCRIPTION,
model_name, XKB_COMBO_MODELS, config_item->name, -1);
g_free (model_name);
}
@@ -1167,7 +1196,7 @@
while (item && !found)
{
- gtk_tree_model_get (model, &iter, NOM, &id, -1);
+ gtk_tree_model_get (model, &iter, XKB_COMBO_MODELS, &id, -1);
found = !strcmp (id, xkbmodel);
g_free (id);
@@ -1184,7 +1213,44 @@
static void
-xfce_keyboard_settings_cb_model_changed (GtkComboBox *combo,
+xfce_keyboard_settings_active_layout_cb (GtkCellRendererToggle *cell,
+ gchar *path_str,
+ XfceKeyboardSettings *settings)
+{
+ GtkWidget *view;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ GtkTreePath *path1,
+ *path2;
+ gint *column,
+ group_id = 0;
+ gboolean selected = FALSE;
+
+ view = glade_xml_get_widget (settings->priv->glade_xml, "xkb_layout_view");
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
+ path1 = gtk_tree_path_new_from_string (path_str);
+ column = g_object_get_data (G_OBJECT (cell), "column");
+ gtk_tree_model_get_iter_first (model, &iter);
+
+ do
+ {
+ path2 = gtk_tree_model_get_path (model, &iter);
+ selected = (gtk_tree_path_compare (path1, path2) == 0);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, column, selected, -1);
+ if (selected)
+ xkl_engine_lock_group (settings->priv->xkl_engine, group_id);
+ group_id++;
+ gtk_tree_path_free (path2);
+ }
+ while (gtk_tree_model_iter_next (model, &iter));
+
+ gtk_tree_path_free (path1);
+}
+
+
+
+static void
+xfce_keyboard_settings_model_changed_cb (GtkComboBox *combo,
XfceKeyboardSettings *settings)
{
GtkTreeModel *model;
@@ -1193,7 +1259,7 @@
gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combo), &iter);
model = gtk_combo_box_get_model (GTK_COMBO_BOX (combo));
- gtk_tree_model_get (model, &iter, NOM, &xkbmodel, -1);
+ gtk_tree_model_get (model, &iter, XKB_COMBO_MODELS, &xkbmodel, -1);
xfconf_channel_set_string (settings->priv->keyboard_layout_channel,
"/Default/XkbModel", xkbmodel);
g_free (xkbmodel);
}
@@ -1218,21 +1284,14 @@
n_layouts = gtk_tree_model_iter_n_children (model, NULL);
max_layouts = xkl_engine_get_max_num_groups (settings->priv->xkl_engine);
- if (n_layouts < max_layouts)
- gtk_widget_set_sensitive (xkb_layout_add_button, TRUE);
- else
- gtk_widget_set_sensitive (xkb_layout_add_button, FALSE);
-
- if (n_layouts > 1)
- gtk_widget_set_sensitive (xkb_layout_delete_button, TRUE);
- else
- gtk_widget_set_sensitive (xkb_layout_delete_button, FALSE);
+ gtk_widget_set_sensitive (xkb_layout_add_button, (n_layouts < max_layouts));
+ gtk_widget_set_sensitive (xkb_layout_delete_button, (n_layouts > 1));
}
static void
-xfce_keyboard_settings_update_edit_button (GtkTreeView *tree_view,
+xfce_keyboard_settings_update_edit_button (GtkTreeView *tree_view,
XfceKeyboardSettings *settings)
{
GtkWidget *xkb_layout_edit_button;
@@ -1242,16 +1301,13 @@
xkb_layout_edit_button = glade_xml_get_widget (settings->priv->glade_xml,
"xkb_layout_edit_button");
gtk_tree_view_get_cursor (GTK_TREE_VIEW (tree_view), &path, &column);
- if (path)
- gtk_widget_set_sensitive (xkb_layout_edit_button, TRUE);
- else
- gtk_widget_set_sensitive (xkb_layout_edit_button, FALSE);
+ gtk_widget_set_sensitive (xkb_layout_edit_button, (path != NULL));
}
static void
-xfce_keyboard_settings_edit_layout_button_cb (GtkWidget *widget,
+xfce_keyboard_settings_edit_layout_button_cb (GtkWidget *widget,
XfceKeyboardSettings *settings)
{
GtkTreeSelection *selection;
@@ -1269,7 +1325,7 @@
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
strings = g_strsplit_set (layout, ",", 0);
gtk_tree_selection_get_selected (selection, &model, &iter);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter, LAYOUTS, strings[0],
VARIANTS, strings[1], -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, XKB_TREE_LAYOUTS,
strings[0], XKB_TREE_VARIANTS, strings[1], -1);
xfce_keyboard_settings_set_layout (settings);
g_strfreev (strings);
}
@@ -1280,7 +1336,7 @@
static void
-xfce_keyboard_settings_add_layout_button_cb (GtkWidget *widget,
+xfce_keyboard_settings_add_layout_button_cb (GtkWidget *widget,
XfceKeyboardSettings *settings)
{
GtkTreeSelection *selection;
@@ -1297,7 +1353,7 @@
model = gtk_tree_view_get_model (GTK_TREE_VIEW (view));
gtk_list_store_append (GTK_LIST_STORE (model), &iter);
strings = g_strsplit_set (layout, ",", 0);
- gtk_list_store_set (GTK_LIST_STORE (model), &iter, LAYOUTS, strings[0],
VARIANTS, strings[1], -1);
+ gtk_list_store_set (GTK_LIST_STORE (model), &iter, XKB_TREE_LAYOUTS,
strings[0], XKB_TREE_VARIANTS, strings[1], -1);
xfce_keyboard_settings_update_layout_buttons (settings);
xfce_keyboard_settings_set_layout (settings);
g_strfreev (strings);
@@ -1309,7 +1365,7 @@
static void
-xfce_keyboard_settings_del_layout_button_cb (GtkWidget *widget,
+xfce_keyboard_settings_del_layout_button_cb (GtkWidget *widget,
XfceKeyboardSettings *settings)
{
GtkWidget *view;
@@ -1347,8 +1403,8 @@
treestore = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW
(treeview)));
gtk_tree_store_append (treestore, &iter,
&settings->priv->layout_selection_iter);
gtk_tree_store_set (treestore, &iter,
- AVAIL_LAYOUT_TREE_COL_DESCRIPTION, variant,
- AVAIL_LAYOUT_TREE_COL_ID, config_item->name, -1);
+ XKB_AVAIL_LAYOUTS_TREE_DESCRIPTION, variant,
+ XKB_AVAIL_LAYOUTS_TREE_ID, config_item->name, -1);
g_free (variant);
}
@@ -1370,8 +1426,8 @@
treestore = GTK_TREE_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW
(treeview)));
gtk_tree_store_append (treestore, &settings->priv->layout_selection_iter,
NULL);
gtk_tree_store_set (treestore, &settings->priv->layout_selection_iter,
- AVAIL_LAYOUT_TREE_COL_DESCRIPTION, layout,
- AVAIL_LAYOUT_TREE_COL_ID, config_item->name, -1);
+ XKB_AVAIL_LAYOUTS_TREE_DESCRIPTION, layout,
+ XKB_AVAIL_LAYOUTS_TREE_ID, config_item->name, -1);
g_free (layout);
xkl_config_registry_foreach_layout_variant (config_registry,
config_item->name,
@@ -1415,10 +1471,10 @@
if (!settings->priv->layout_selection_treestore)
{
- settings->priv->layout_selection_treestore = gtk_tree_store_new (2,
G_TYPE_STRING, G_TYPE_STRING);
+ settings->priv->layout_selection_treestore = gtk_tree_store_new
(XKB_AVAIL_LAYOUTS_TREE_NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
renderer = gtk_cell_renderer_text_new ();
column = gtk_tree_view_column_new_with_attributes (NULL, renderer,
"text",
- AVAIL_LAYOUT_TREE_COL_DESCRIPTION,
NULL);
+ XKB_AVAIL_LAYOUTS_TREE_DESCRIPTION,
NULL);
gtk_tree_view_set_model (GTK_TREE_VIEW (layout_selection_view),
GTK_TREE_MODEL (settings->priv->layout_selection_treestore));
gtk_tree_view_append_column (GTK_TREE_VIEW (layout_selection_view),
column);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE
(settings->priv->layout_selection_treestore), 0, GTK_SORT_ASCENDING);
@@ -1433,7 +1489,7 @@
{
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW
(layout_selection_view));
gtk_tree_selection_get_selected (selection, &model, &iter);
- gtk_tree_model_get (model, &iter, AVAIL_LAYOUT_TREE_COL_ID, &layout, -1);
+ gtk_tree_model_get (model, &iter, XKB_AVAIL_LAYOUTS_TREE_ID, &layout,
-1);
path = gtk_tree_model_get_path (model, &iter);
if (gtk_tree_path_get_depth (path) == 1)
@@ -1443,7 +1499,7 @@
variant = layout;
gtk_tree_path_up (path);
gtk_tree_model_get_iter (model, &iter, path);
- gtk_tree_model_get (model, &iter, AVAIL_LAYOUT_TREE_COL_ID, &layout,
-1);
+ gtk_tree_model_get (model, &iter, XKB_AVAIL_LAYOUTS_TREE_ID,
&layout, -1);
}
val_layout = g_strconcat (layout, ",", variant, NULL);
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits