From 9d00463e325598b1d622b131680bd9a3dcf8d13c Mon Sep 17 00:00:00 2001 From: "Sergey V. Udaltsov" Date: Mon, 26 Mar 2007 23:11:44 +0000 Subject: [PATCH] new version of the layout chooser svn path=/trunk/; revision=7426 --- capplets/keyboard/ChangeLog | 7 + .../keyboard/gnome-keyboard-properties-xkb.h | 4 +- .../gnome-keyboard-properties-xkbltadd.c | 451 ++- .../gnome-keyboard-properties-xkbpv.c | 3 +- .../keyboard/gnome-keyboard-properties.glade | 3239 +++++++---------- 5 files changed, 1599 insertions(+), 2105 deletions(-) diff --git a/capplets/keyboard/ChangeLog b/capplets/keyboard/ChangeLog index 80c353d76..b083293cc 100644 --- a/capplets/keyboard/ChangeLog +++ b/capplets/keyboard/ChangeLog @@ -1,3 +1,10 @@ +2007-03-27 Sergey Udaltsov + + * gnome-keyboard-properties-xkb.h, gnome-keyboard-properties-xkbpv.c, + gnome-keyboard-properties.glade, gnome-keyboard-properties-xkbltadd.c: + new version of the layout chooser, comboboxentry-based. Fully + functional (I hope). + 2007-03-21 Sergey Udaltsov * gnome-keyboard-properties-xkblt.c, Makefile.am, diff --git a/capplets/keyboard/gnome-keyboard-properties-xkb.h b/capplets/keyboard/gnome-keyboard-properties-xkb.h index 23a1df384..ebde1dea1 100644 --- a/capplets/keyboard/gnome-keyboard-properties-xkb.h +++ b/capplets/keyboard/gnome-keyboard-properties-xkb.h @@ -84,8 +84,8 @@ extern GtkWidget *xkb_layout_preview_create_widget (GladeXML * extern void xkb_layout_preview_update (GladeXML * chooser_dialog); -extern gchar *xkb_layout_chooser_get_selected_id (GladeXML * - chooser_dialog); +extern const gchar *xkb_layout_chooser_get_selected_id (GladeXML * + chooser_dialog); G_END_DECLS #endif /* __GNOME_KEYBOARD_PROPERTY_XKB_H */ diff --git a/capplets/keyboard/gnome-keyboard-properties-xkbltadd.c b/capplets/keyboard/gnome-keyboard-properties-xkbltadd.c index 705e024b7..39db4d159 100644 --- a/capplets/keyboard/gnome-keyboard-properties-xkbltadd.c +++ b/capplets/keyboard/gnome-keyboard-properties-xkbltadd.c @@ -25,6 +25,8 @@ # include #endif +#include + #include #include @@ -36,136 +38,284 @@ #define GROUP_SWITCHERS_GROUP "grp" #define DEFAULT_GROUP_SWITCH "grp:alts_toggle" +#define DEFAULT_VARIANT_ID "__default__" -#define AVAIL_LAYOUT_TREE_COL_DESCRIPTION 0 -#define AVAIL_LAYOUT_TREE_COL_ID 1 - -static GtkTreeIter current1st_level_iter; -static const char *current1st_level_id; +#define COMBO_BOX_MODEL_COL_DESCRIPTION 0 +#define COMBO_BOX_MODEL_COL_ID 1 +#define COMBO_BOX_MODEL_COL_SORTING 2 static void -add_variant_to_available_layouts_tree (XklConfigRegistry * config_registry, - XklConfigItem * config_item, - GladeXML * chooser_dialog) -{ - GtkWidget *layouts_tree = CWID ("xkb_layouts_available"); - GtkTreeIter iter; - GtkTreeStore *tree_store = - GTK_TREE_STORE (gtk_tree_view_get_model - (GTK_TREE_VIEW (layouts_tree))); - const gchar *full_layout_name = - gkbd_keyboard_config_merge_items (current1st_level_id, - config_item->name); - char *utf_variant_name = xci_desc_to_utf8 (config_item); + xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog); - gtk_tree_store_append (tree_store, &iter, ¤t1st_level_iter); - gtk_tree_store_set (tree_store, &iter, - AVAIL_LAYOUT_TREE_COL_DESCRIPTION, - utf_variant_name, AVAIL_LAYOUT_TREE_COL_ID, - full_layout_name, -1); - g_free (utf_variant_name); +static void + xkb_layout_chooser_available_variants_fill (GladeXML * chooser_dialog); + +static void +xkb_layout_chooser_add_variant_to_available_variants (XklConfigRegistry * + config_registry, + XklConfigItem * + config_item, + GladeXML * + chooser_dialog) +{ + GtkWidget *cbe = CWID ("xkb_variants_available"); + GtkTreeIter iter; + GtkTreeModel *model = + gtk_combo_box_get_model (GTK_COMBO_BOX (cbe)); + GtkTreeStore *tree_store = + GTK_TREE_STORE (gtk_tree_model_sort_get_model + (GTK_TREE_MODEL_SORT (model))); + + gtk_tree_store_append (tree_store, &iter, NULL); + if (config_item != NULL) { + char *utf_variant_name = xci_desc_to_utf8 (config_item); + + gtk_tree_store_set (tree_store, &iter, + COMBO_BOX_MODEL_COL_DESCRIPTION, + utf_variant_name, + COMBO_BOX_MODEL_COL_ID, + config_item->name, + COMBO_BOX_MODEL_COL_SORTING, + utf_variant_name, -1); + g_free (utf_variant_name); + } else { + gtk_tree_store_set (tree_store, &iter, + COMBO_BOX_MODEL_COL_DESCRIPTION, + _("default"), COMBO_BOX_MODEL_COL_ID, + DEFAULT_VARIANT_ID, + COMBO_BOX_MODEL_COL_SORTING, "_", -1); + gtk_tree_store_append (tree_store, &iter, NULL); + gtk_tree_store_set (tree_store, &iter, + COMBO_BOX_MODEL_COL_DESCRIPTION, + "***", COMBO_BOX_MODEL_COL_ID, + DEFAULT_VARIANT_ID, + COMBO_BOX_MODEL_COL_SORTING, "__", -1); + } } static void -add_layout_to_available_layouts_tree (XklConfigRegistry * config_registry, - XklConfigItem * config_item, - GladeXML * chooser_dialog) +xkb_layout_chooser_add_layout_to_available_layouts (XklConfigRegistry * + config_registry, + XklConfigItem * + config_item, + GladeXML * + chooser_dialog) { - GtkWidget *layouts_tree = CWID ("xkb_layouts_available"); + GtkWidget *cbe = CWID ("xkb_layouts_available"); GtkTreeStore *tree_store = - GTK_TREE_STORE (gtk_tree_view_get_model - (GTK_TREE_VIEW (layouts_tree))); - char *utf_layout_name = xci_desc_to_utf8 (config_item); + GTK_TREE_STORE (gtk_combo_box_get_model (GTK_COMBO_BOX (cbe))); - gtk_tree_store_append (tree_store, ¤t1st_level_iter, NULL); - gtk_tree_store_set (tree_store, ¤t1st_level_iter, - AVAIL_LAYOUT_TREE_COL_DESCRIPTION, - utf_layout_name, AVAIL_LAYOUT_TREE_COL_ID, + char *utf_layout_name = xci_desc_to_utf8 (config_item); + GtkTreeIter iter; + + gtk_tree_store_append (tree_store, &iter, NULL); + gtk_tree_store_set (tree_store, &iter, + COMBO_BOX_MODEL_COL_DESCRIPTION, + utf_layout_name, COMBO_BOX_MODEL_COL_ID, config_item->name, -1); g_free (utf_layout_name); - - current1st_level_id = config_item->name; - - xkl_config_registry_foreach_layout_variant (config_registry, - config_item->name, - (ConfigItemProcessFunc) - add_variant_to_available_layouts_tree, - chooser_dialog); } static void xkb_layout_chooser_enable_disable_buttons (GladeXML * chooser_dialog) { - GtkWidget *available_layouts_tree = CWID ("xkb_layouts_available"); - GtkTreeSelection *selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW - (available_layouts_tree)); - const int n_selected_available_layouts = - gtk_tree_selection_count_selected_rows (selection); + GtkWidget *cbel = CWID ("xkb_layouts_available"); + GtkWidget *cbev = CWID ("xkb_variants_available"); + gboolean enable_ok = + (gtk_combo_box_get_active (GTK_COMBO_BOX (cbel)) != -1) + && (gtk_combo_box_get_active (GTK_COMBO_BOX (cbev)) != -1); gtk_dialog_set_response_sensitive (GTK_DIALOG (CWID ("xkb_layout_chooser")), - GTK_RESPONSE_OK, - n_selected_available_layouts > - 0); + GTK_RESPONSE_OK, enable_ok); } static void -xkb_layout_chooser_selection_changed (GladeXML * chooser_dialog) +xkb_layout_chooser_available_variant_changed (GladeXML * chooser_dialog) { xkb_layout_preview_update (chooser_dialog); xkb_layout_chooser_enable_disable_buttons (chooser_dialog); } static void -sort_tree_content (GtkWidget * tree_view) +xkb_layout_chooser_available_layout_changed (GladeXML * chooser_dialog) { - GtkTreeModel *tree_model = - gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view)); - GtkTreeModel *sorted_tree_model; - /* replace the store with the sorted version */ - sorted_tree_model = - gtk_tree_model_sort_new_with_model (tree_model); - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE - (sorted_tree_model), 0, - GTK_SORT_ASCENDING); - gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), - sorted_tree_model); + xkb_layout_chooser_available_variants_fill (chooser_dialog); + xkb_layout_chooser_available_variant_changed (chooser_dialog); } static void -xkb_layouts_fill_available_tree (GladeXML * chooser_dialog) +xkb_layout_chooser_sort_combo_box (GtkWidget * combo_box, int sort_column) { - GtkTreeStore *tree_store = - gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_STRING); - GtkWidget *tree_view = CWID ("xkb_layouts_available"); - GtkCellRenderer *renderer = - GTK_CELL_RENDERER (gtk_cell_renderer_text_new ()); - GtkTreeViewColumn *column = - gtk_tree_view_column_new_with_attributes (NULL, - renderer, - "text", - AVAIL_LAYOUT_TREE_COL_DESCRIPTION, - NULL); - GtkTreeSelection *selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); + GtkTreeModel *model = + gtk_combo_box_get_model (GTK_COMBO_BOX (combo_box)); + /* replace the store with the sorted version */ + GtkTreeModel *sorted_model = + gtk_tree_model_sort_new_with_model (model); + gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE + (sorted_model), + sort_column, + GTK_SORT_ASCENDING); + gtk_combo_box_set_model (GTK_COMBO_BOX (combo_box), sorted_model); +} - gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), - GTK_TREE_MODEL (tree_store)); - gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column); +static gboolean +xkl_layout_chooser_separate_default_variant (GtkTreeModel * model, + GtkTreeIter * iter, + GladeXML * chooser_dialog) +{ + GtkTreePath *path = gtk_tree_model_get_path (model, iter); + gint *idxs = gtk_tree_path_get_indices (path); + gint idx = idxs[0]; + gtk_tree_path_free (path); + return idx == 1; +} + +static void +xkb_layout_chooser_available_variants_fill (GladeXML * chooser_dialog) +{ + GtkWidget *cbel = CWID ("xkb_layouts_available"); + GtkWidget *cbev = CWID ("xkb_variants_available"); + GtkTreeModel *model = + gtk_combo_box_get_model (GTK_COMBO_BOX (cbev)); + gint selected_layout_idx; + + if (model == NULL) { + model = + GTK_TREE_MODEL (gtk_tree_store_new + (3, G_TYPE_STRING, G_TYPE_STRING, + G_TYPE_STRING)); + + gtk_combo_box_set_model (GTK_COMBO_BOX (cbev), + GTK_TREE_MODEL (model)); + + gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY + (cbev), + COMBO_BOX_MODEL_COL_DESCRIPTION); + + xkb_layout_chooser_sort_combo_box (cbev, + COMBO_BOX_MODEL_COL_SORTING); + + g_signal_connect_swapped (G_OBJECT (cbev), "changed", + G_CALLBACK + (xkb_layout_chooser_available_variant_changed), + chooser_dialog); + gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (cbev), + (GtkTreeViewRowSeparatorFunc) + xkl_layout_chooser_separate_default_variant, + chooser_dialog, + NULL); + } else { + model = + gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT + (model)); + gtk_tree_store_clear (GTK_TREE_STORE (model)); + } + + selected_layout_idx = + gtk_combo_box_get_active (GTK_COMBO_BOX (cbel)); + + if (selected_layout_idx != -1) { + GtkTreeModel *lm = + gtk_combo_box_get_model (GTK_COMBO_BOX (cbel)); + GtkTreeIter iter; + GValue val; + + memset (&val, 0, sizeof (val)); + + gtk_tree_model_iter_nth_child (lm, &iter, NULL, + selected_layout_idx); + gtk_tree_model_get_value (lm, &iter, + COMBO_BOX_MODEL_COL_ID, &val); + + xkl_config_registry_foreach_layout_variant + (config_registry, g_value_get_string (&val), + (ConfigItemProcessFunc) + xkb_layout_chooser_add_variant_to_available_variants, + chooser_dialog); + + xkb_layout_chooser_add_variant_to_available_variants + (config_registry, NULL, chooser_dialog); + + g_value_unset (&val); + + /* set default variant as selected */ + gtk_combo_box_set_active (GTK_COMBO_BOX (cbev), 0); + } +} + +static void +xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog) +{ + GtkWidget *cbe = CWID ("xkb_layouts_available"); + + GtkTreeStore *model = + gtk_tree_store_new (2, G_TYPE_STRING, G_TYPE_STRING); + + gtk_combo_box_set_model (GTK_COMBO_BOX (cbe), + GTK_TREE_MODEL (model)); + + gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (cbe), + COMBO_BOX_MODEL_COL_DESCRIPTION); xkl_config_registry_foreach_layout (config_registry, (ConfigItemProcessFunc) - add_layout_to_available_layouts_tree, + xkb_layout_chooser_add_layout_to_available_layouts, chooser_dialog); - sort_tree_content (tree_view); - g_signal_connect_swapped (G_OBJECT (selection), "changed", + xkb_layout_chooser_sort_combo_box (cbe, + COMBO_BOX_MODEL_COL_DESCRIPTION); + + g_signal_connect_swapped (G_OBJECT (cbe), "changed", G_CALLBACK - (xkb_layout_chooser_selection_changed), + (xkb_layout_chooser_available_layout_changed), chooser_dialog); } +void +xkl_layout_chooser_add_default_switcher_if_necessary (GSList * + layouts_list) +{ + /* process default switcher */ + if (g_slist_length (layouts_list) >= 2) { + GSList *options_list = xkb_options_get_selected_list (); + gboolean any_switcher = False; + GSList *option = options_list; + while (option != NULL) { + char *g, *o; + if (gkbd_keyboard_config_split_items + (option->data, &g, &o)) { + if (!g_ascii_strcasecmp + (g, GROUP_SWITCHERS_GROUP)) { + any_switcher = True; + break; + } + } + option = option->next; + } + if (!any_switcher) { + XklConfigItem ci; + g_snprintf (ci.name, + XKL_MAX_CI_NAME_LENGTH, + DEFAULT_GROUP_SWITCH); + if (xkl_config_registry_find_option + (config_registry, + GROUP_SWITCHERS_GROUP, &ci)) { + const gchar *id = + gkbd_keyboard_config_merge_items + (GROUP_SWITCHERS_GROUP, + DEFAULT_GROUP_SWITCH); + options_list = + g_slist_append + (options_list, g_strdup (id)); + xkb_options_set_selected_list + (options_list); + } + } + clear_xkb_elements_list (options_list); + } +} + static void xkb_layout_chooser_response (GtkDialog * dialog, gint response, GladeXML * chooser_dialog) @@ -173,64 +323,22 @@ xkb_layout_chooser_response (GtkDialog * dialog, GdkRectangle rect; if (response == GTK_RESPONSE_OK) { - GtkTreeSelection *selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW - (CWID - ("xkb_layouts_available"))); - GtkTreeIter selected_iter; - GtkTreeModel *model; - if (gtk_tree_selection_get_selected - (selection, &model, &selected_iter)) { - gchar *id; + gchar *selected_id = (gchar *) + xkb_layout_chooser_get_selected_id (chooser_dialog); + + if (selected_id != NULL) { GSList *layouts_list = xkb_layouts_get_selected_list (); - gtk_tree_model_get (model, &selected_iter, - AVAIL_LAYOUT_TREE_COL_ID, &id, - -1); - layouts_list = g_slist_append (layouts_list, id); + + selected_id = g_strdup (selected_id); + + layouts_list = + g_slist_append (layouts_list, selected_id); xkb_layouts_set_selected_list (layouts_list); - /* process default switcher */ - if (g_slist_length (layouts_list) >= 2) { - GSList *options_list = - xkb_options_get_selected_list (); - gboolean any_switcher = False; - GSList *option = options_list; - while (option != NULL) { - char *g, *o; - if (gkbd_keyboard_config_split_items (option->data, &g, &o)) { - if (!g_ascii_strcasecmp - (g, - GROUP_SWITCHERS_GROUP)) - { - any_switcher = - True; - break; - } - } - option = option->next; - } - if (!any_switcher) { - XklConfigItem ci; - g_snprintf (ci.name, - XKL_MAX_CI_NAME_LENGTH, - DEFAULT_GROUP_SWITCH); - if (xkl_config_registry_find_option - (config_registry, - GROUP_SWITCHERS_GROUP, &ci)) { - const gchar *id = - gkbd_keyboard_config_merge_items - (GROUP_SWITCHERS_GROUP, - DEFAULT_GROUP_SWITCH); - options_list = - g_slist_append - (options_list, - g_strdup (id)); - xkb_options_set_selected_list - (options_list); - } - } - clear_xkb_elements_list (options_list); - } + + xkl_layout_chooser_add_default_switcher_if_necessary + (layouts_list); + clear_xkb_elements_list (layouts_list); } } @@ -241,6 +349,7 @@ xkb_layout_chooser_response (GtkDialog * dialog, gkbd_preview_save_position (&rect); } + void xkb_layout_choose (GladeXML * dialog) { @@ -256,8 +365,8 @@ xkb_layout_choose (GladeXML * dialog) GTK_WINDOW (WID ("keyboard_dialog"))); - xkb_layouts_fill_available_tree (chooser_dialog); - xkb_layout_chooser_selection_changed (chooser_dialog); + xkb_layout_chooser_available_layouts_fill (chooser_dialog); + xkb_layout_chooser_available_layout_changed (chooser_dialog); #ifdef HAVE_X11_EXTENSIONS_XKB_H if (!strcmp (xkl_engine_get_backend_name (engine), "XKB")) { @@ -293,21 +402,47 @@ xkb_layout_choose (GladeXML * dialog) gtk_widget_destroy (chooser); } -gchar * +const gchar * xkb_layout_chooser_get_selected_id (GladeXML * chooser_dialog) { - GtkWidget *available_layouts_tree = CWID ("xkb_layouts_available"); - GtkTreeSelection *selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW - (available_layouts_tree)); - GtkTreeIter selected_iter; - GtkTreeModel *model; - if (gtk_tree_selection_get_selected (selection, &model, - &selected_iter)) { - gchar *id; - gtk_tree_model_get (model, &selected_iter, - AVAIL_LAYOUT_TREE_COL_ID, &id, -1); - return id; - } - return NULL; + GtkWidget *cbel = CWID ("xkb_layouts_available"); + GtkWidget *cbev = CWID ("xkb_variants_available"); + GtkTreeModel *lm = gtk_combo_box_get_model (GTK_COMBO_BOX (cbel)); + GtkTreeModel *vm = gtk_combo_box_get_model (GTK_COMBO_BOX (cbev)); + gint lidx = gtk_combo_box_get_active (GTK_COMBO_BOX (cbel)); + gint vidx = gtk_combo_box_get_active (GTK_COMBO_BOX (cbev)); + + GtkTreeIter iter; + GValue lval, vval; + const gchar *lname, *vname; + + static gchar retval[2 * XKL_MAX_CI_NAME_LENGTH]; + + if (lidx == -1 || vidx == -1) + return NULL; + + memset (&lval, 0, sizeof (lval)); + memset (&vval, 0, sizeof (vval)); + + gtk_tree_model_iter_nth_child (lm, &iter, NULL, lidx); + gtk_tree_model_get_value (lm, &iter, + COMBO_BOX_MODEL_COL_ID, &lval); + + gtk_tree_model_iter_nth_child (vm, &iter, NULL, vidx); + gtk_tree_model_get_value (vm, &iter, + COMBO_BOX_MODEL_COL_ID, &vval); + + lname = g_value_get_string (&lval); + vname = g_value_get_string (&vval); + + g_snprintf (retval, sizeof (retval), + strcmp (vname, + DEFAULT_VARIANT_ID) ? + gkbd_keyboard_config_merge_items (lname, + vname) : lname); + + g_value_unset (&lval); + g_value_unset (&vval); + + return retval; } diff --git a/capplets/keyboard/gnome-keyboard-properties-xkbpv.c b/capplets/keyboard/gnome-keyboard-properties-xkbpv.c index bc7c66ccf..41c28a9d8 100644 --- a/capplets/keyboard/gnome-keyboard-properties-xkbpv.c +++ b/capplets/keyboard/gnome-keyboard-properties-xkbpv.c @@ -74,7 +74,8 @@ xkb_layout_preview_update (GladeXML * chooser_dialog) GtkWidget *chooser = CWID ("xkb_layout_chooser"); GtkWidget *kbdraw = GTK_WIDGET (g_object_get_data (G_OBJECT (chooser), "kbdraw")); - gchar *id = xkb_layout_chooser_get_selected_id (chooser_dialog); + const gchar *id = + xkb_layout_chooser_get_selected_id (chooser_dialog); if (kbdraw != NULL && id != NULL) { XklConfigRec *data; diff --git a/capplets/keyboard/gnome-keyboard-properties.glade b/capplets/keyboard/gnome-keyboard-properties.glade index 60893110b..49fe8fcd4 100644 --- a/capplets/keyboard/gnome-keyboard-properties.glade +++ b/capplets/keyboard/gnome-keyboard-properties.glade @@ -1,1946 +1,1297 @@ - - - + + + - - - 6 - Keyboard Preferences - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - False - - - - True - False - 2 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-help - True - GTK_RELIEF_NORMAL - True - -11 - - - - - - True - True - True - GTK_RELIEF_NORMAL - True - 0 - - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-jump-to - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Accessibility... - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - - - - - - - True - True - True - True - True - gtk-close - True - GTK_RELIEF_NORMAL - True - -7 - - - - - 0 - False - True - GTK_PACK_END - - - - - - 5 - True - True - True - True - GTK_POS_TOP - False - False - - - - 12 - True - False - 18 - - - - True - False - 6 - - - - True - <b>Repeat Keys</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - False - 6 - - - - True - True - Key presses _repeat when key is held down - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - True - False - 12 - - - - True - False - 6 - - - - True - _Delay: - True - True - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - repeat_delay_scale - - - 0 - True - True - - - - - - True - _Speed: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - repeat_speed_scale - - - 0 - True - True - - - - - 0 - False - False - - - - - - True - False - 6 - - - - True - <small><i>Short</i></small> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 10 - 0 - - - 0 - True - True - - - - - - True - <small><i>Slow</i></small> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 10 - 0 - - - 0 - True - True - - - - - 0 - False - False - - - - - - True - False - 6 - - - - True - True - False - GTK_POS_TOP - 1 - GTK_UPDATE_CONTINUOUS - False - 500 100 1500 10 10 0 - - - 0 - True - True - - - - - - True - True - False - GTK_POS_TOP - 1 - GTK_UPDATE_CONTINUOUS - False - 30 10 110 10 10 0 - - Repeat keys speed - - - - 0 - True - True - - - - - 0 - True - True - - - - - - True - False - 6 - - - - True - <small><i>Long</i></small> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - True - True - - - - - - True - <small><i>Fast</i></small> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - True - True - - - - - 0 - False - False - - - - - 0 - False - True - - - - - 0 - True - True - - - - - 0 - True - True - - - - - 0 - False - True - - - - - - True - False - 6 - - - - True - <b>Cursor Blinking</b> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - False - 6 - - - - True - True - Cursor _blinks in text boxes and fields - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - True - False - 12 - - - - True - S_peed: - True - False - GTK_JUSTIFY_CENTER - False - False - 0 - 0.5 - 0 - 0 - cursor_blink_time_scale - - - 0 - False - False - - - - - - True - False - 6 - - - - True - <small><i>Slow</i></small> - False - True - GTK_JUSTIFY_LEFT - False - False - 1 - 0.5 - 10 - 0 - - - 0 - False - False - - - - - - True - True - False - GTK_POS_TOP - 1 - GTK_UPDATE_DISCONTINUOUS - False - 1000 100 2500 200 200 0 - - Cursor blinks speed - - - - 0 - True - True - - - - - - True - <small><i>Fast</i></small> - False - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - 0 - True - True - - - - - 0 - True - True - - - - - 0 - False - True - - - - - - True - False - 12 - - - - True - _Type to test settings: - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - test_entry - - - 0 - False - False - - - - - - True - True - True - True - 256 - - True - False - - - 0 - True - True - - - - - 0 - False - True - - - - - False - True - - - - - - True - Keyboard - False - False - GTK_JUSTIFY_CENTER - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - - 12 - True - False - 0 - - - - True - False - 6 - - - - True - False - 12 - - - - True - Keyboard _model: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - xkb_model - - - 0 - False - False - - - - - - True - False - True - 0 - Microsoft Natural Keyboard - True - False - - - 0 - True - True - - - - - - True - True - Choose... - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - - - - 0 - False - False - - - - - - True - False - 6 - - - - True - False - 6 - - - - True - _Selected layouts: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - xkb_layouts_selected - - - 0 - False - False - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - True - False - False - True - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - 6 - True - False - 12 - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-add - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - _Add... - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - - - - 0 - False - False - - - - - - True - True - gtk-remove - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - True - True - gtk-go-up - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - True - True - gtk-go-down - True - GTK_RELIEF_NORMAL - True - - - 0 - False - False - - - - - - - - - 0 - False - False - - - - - 0 - True - True - - - - - - True - True - Separate _group for each window - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - True - False - 6 - - - - - - - - True - True - GTK_RELIEF_NORMAL - True - - - - True - 0.5 - 0.5 - 0 - 0 - 0 - 0 - 0 - 0 - - - - True - False - 2 - - - - True - gtk-refresh - 4 - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - Reset To De_faults - True - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - GTK_PACK_END - - - - - - - - - 0 - False - False - GTK_PACK_END - - - - - 0 - False - True - - - - - 0 - True - True - - - - - False - True - - - - - - True - Layouts - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - - 12 - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_NONE - GTK_CORNER_TOP_LEFT - - - - True - GTK_SHADOW_NONE - - - - True - False - 0 - - - - - - - False - True - - - - - - True - Layout Options - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - - True - False - 12 - - - - 12 - True - False - 18 - - - - True - False - 6 - - - - True - Lock screen after a certain duration to help prevent repetitive keyboard use injuries - True - <b>_Lock screen to enforce typing break</b> - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - - True - False - 0 - - - - True - - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - False - 6 - - - - True - False - 12 - - - - True - False - 6 - - - - True - _Work interval lasts: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - break_enabled_spin - - - 0 - True - True - - - - - - True - _Break interval lasts: - True - True - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - break_interval_spin - - - 0 - True - True - - - - - 0 - False - False - - - - - - True - False - 6 - - - - True - False - 6 - - - - True - Duration of work before forcing a break - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 1 100000 1 10 10 - - - 0 - True - True - - - - - - True - Duration of the break when typing is disallowed - True - 1 - 0 - False - GTK_UPDATE_ALWAYS - False - False - 1 1 100000 1 10 10 - - - 0 - True - True - - - - - 0 - True - True - - - - - - True - False - 6 - - - - True - minutes - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - True - True - - - - - - True - minutes - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - True - True - - - - - 0 - True - True - - - - - 0 - False - False - - - - - 0 - True - True - - - - - - True - Check if breaks are allowed to be postponed - True - All_ow postponing of breaks - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 0 - False - False - - - - - 0 - True - True - - - - - 0 - False - False - - - - - 0 - True - True - - - - - 0 - True - True - - - - - False - True - - - - - - True - Typing Break - False - False - GTK_JUSTIFY_LEFT - False - False - 0.5 - 0.5 - 0 - 0 - - - tab - - - - - 0 - True - True - - - - - - - - 5 - True - Choose a Keyboard Model - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - True - 450 - 300 - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - False - - - - True - False - 2 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - 5 - True - False - 6 - - - - True - _Models: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - - - - - 0 - True - True - - - - - 0 - True - True - - - - - - - - 5 - True - Choose a Layout - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - 670 - 350 - True - False - True - False - False - GDK_WINDOW_TYPE_HINT_DIALOG - GDK_GRAVITY_NORTH_WEST - False - - - - True - False - 2 - - - - True - GTK_BUTTONBOX_END - - - - True - True - True - gtk-cancel - True - GTK_RELIEF_NORMAL - True - -6 - - - - - - True - True - True - gtk-ok - True - GTK_RELIEF_NORMAL - True - -5 - - - - - 0 - False - True - GTK_PACK_END - - - - - - True - True - - - - 5 - True - False - 6 - - - - True - A_vailable layouts: - True - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - hpaned1 - - - 0 - False - False - - - - - - True - True - GTK_POLICY_AUTOMATIC - GTK_POLICY_AUTOMATIC - GTK_SHADOW_IN - GTK_CORNER_TOP_LEFT - - - - True - True - False - False - False - True - - - - - 0 - True - True - - - - - True - False - - - - - - 5 - True - False - 6 - - - - True - Preview: - False - False - GTK_JUSTIFY_LEFT - False - False - 0 - 0.5 - 0 - 0 - - - 0 - False - False - - - - - - - - - True - True - - - - - 0 - True - True - - - - - - + + 6 + Keyboard Preferences + GDK_WINDOW_TYPE_HINT_DIALOG + False + + + True + 2 + + + True + True + 5 + + + True + 12 + 18 + + + True + 6 + + + True + 0 + <b>Repeat Keys</b> + True + + + False + False + + + + + True + + + True + + + + False + False + + + + + True + 6 + + + True + True + Key presses _repeat when key is held down + True + True + + + False + False + + + + + True + 12 + + + True + 6 + + + True + 0 + _Delay: + True + True + GTK_JUSTIFY_CENTER + repeat_delay_scale + + + + + True + 0 + _Speed: + True + GTK_JUSTIFY_CENTER + repeat_speed_scale + + + 1 + + + + + False + False + + + + + True + 6 + + + True + 1 + 10 + <small><i>Short</i></small> + True + + + + + True + 1 + 10 + <small><i>Slow</i></small> + True + + + 1 + + + + + False + False + 1 + + + + + True + 6 + + + True + True + 500 100 1500 10 10 0 + False + + + + + True + True + 30 10 110 10 10 0 + False + + Repeat keys speed + + + + 1 + + + + + 2 + + + + + True + 6 + + + True + 0 + <small><i>Long</i></small> + True + + + + + True + 0 + <small><i>Fast</i></small> + True + + + 1 + + + + + False + False + 3 + + + + + False + 1 + + + + + 1 + + + + + 1 + + + + + False + + + + + True + 6 + + + True + 0 + <b>Cursor Blinking</b> + True + + + False + False + + + + + True + + + True + + + + False + False + + + + + True + 6 + + + True + True + Cursor _blinks in text boxes and fields + True + True + + + False + False + + + + + True + 12 + + + True + 0 + S_peed: + True + GTK_JUSTIFY_CENTER + cursor_blink_time_scale + + + False + False + + + + + True + 6 + + + True + 1 + 10 + <small><i>Slow</i></small> + True + + + False + False + + + + + True + True + GTK_UPDATE_DISCONTINUOUS + 1000 100 2500 200 200 0 + False + + Cursor blinks speed + + + + 1 + + + + + True + 0 + <small><i>Fast</i></small> + True + + + False + False + 2 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + 1 + + + + + False + 1 + + + + + True + 12 + + + True + _Type to test settings: + True + test_entry + + + False + False + + + + + True + True + 256 + + + 1 + + + + + False + 2 + + + + + False + + + + + True + Keyboard + GTK_JUSTIFY_CENTER + + + tab + False + False + + + + + True + 12 + + + True + 6 + + + True + 12 + + + True + 0 + Keyboard _model: + True + xkb_model + + + False + False + + + + + True + False + Microsoft Natural Keyboard + + + 1 + + + + + True + True + Choose... + True + + + False + False + 2 + + + + + + + + False + False + + + + + True + 6 + + + True + 6 + + + True + 0 + _Selected layouts: + True + xkb_layouts_selected + + + False + False + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + + + True + True + + + + + 1 + + + + + + + True + 6 + 12 + + + True + + + False + False + + + + + True + True + + + True + 0 + 0 + + + True + 2 + + + True + gtk-add + + + False + False + + + + + True + _Add... + True + + + False + False + 1 + + + + + + + + + False + False + 1 + + + + + True + True + gtk-remove + True + + + False + False + 2 + + + + + True + True + gtk-go-up + True + + + False + False + 3 + + + + + True + True + gtk-go-down + True + + + False + False + 4 + + + + + + + + False + False + 1 + + + + + 1 + + + + + True + True + Separate _group for each window + True + True + + + False + False + 2 + + + + + True + 6 + + + + + + True + True + + + True + 0 + 0 + + + True + 2 + + + True + gtk-refresh + + + False + False + + + + + True + Reset To De_faults + True + + + False + False + GTK_PACK_END + 1 + + + + + + + + + False + False + GTK_PACK_END + 1 + + + + + False + 3 + + + + + + + 1 + False + + + + + True + Layouts + + + tab + 1 + False + False + + + + + True + True + 12 + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + + + True + GTK_SHADOW_NONE + + + True + + + + + + + 2 + False + + + + + True + Layout Options + + + tab + 2 + False + False + + + + + True + 12 + + + True + 12 + 18 + + + True + 6 + + + True + True + Lock screen after a certain duration to help prevent repetitive keyboard use injuries + <b>_Lock screen to enforce typing break</b> + True + True + + + False + False + + + + + True + + + True + + + + False + False + + + + + True + 6 + + + True + 12 + + + True + 6 + + + True + 0 + _Work interval lasts: + True + break_enabled_spin + + + + + True + 0 + _Break interval lasts: + True + True + break_interval_spin + + + 1 + + + + + False + False + + + + + True + 6 + + + True + 6 + + + True + True + Duration of work before forcing a break + 1 1 100000 1 10 10 + 1 + + + + + True + True + Duration of the break when typing is disallowed + 1 1 100000 1 10 10 + 1 + + + 1 + + + + + + + True + 6 + + + True + 0 + minutes + + + + + True + 0 + minutes + + + 1 + + + + + 1 + + + + + False + False + 1 + + + + + + + True + True + Check if breaks are allowed to be postponed + All_ow postponing of breaks + True + True + + + False + False + 1 + + + + + 1 + + + + + False + False + 1 + + + + + + + + + 3 + False + + + + + True + Typing Break + + + tab + 3 + False + False + + + + + 1 + + + + + True + GTK_BUTTONBOX_END + + + True + True + True + gtk-help + True + -11 + + + + + True + True + True + + + + True + 0 + 0 + + + True + 2 + + + True + gtk-jump-to + + + False + False + + + + + True + _Accessibility... + True + + + False + False + 1 + + + + + + + + + 1 + + + + + True + True + True + True + True + gtk-close + True + -7 + + + 2 + + + + + False + GTK_PACK_END + + + + + + + True + 5 + Choose a Keyboard Model + True + 450 + 300 + GDK_WINDOW_TYPE_HINT_DIALOG + False + + + True + 2 + + + True + 5 + 6 + + + True + 0 + _Models: + True + + + False + False + + + + + True + True + GTK_POLICY_AUTOMATIC + GTK_POLICY_AUTOMATIC + GTK_SHADOW_IN + + + True + True + False + + + + + 1 + + + + + 1 + + + + + True + GTK_BUTTONBOX_END + + + True + True + True + gtk-cancel + True + -6 + + + + + True + True + True + gtk-ok + True + -5 + + + 1 + + + + + False + GTK_PACK_END + + + + + + + True + 5 + Choose a Layout + 670 + 350 + GDK_WINDOW_TYPE_HINT_DIALOG + False + + + True + 2 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 3 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 6 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + _Layouts: + True + + + False + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + + + 1 + + + + + 3 + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 3 + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + 0 + _Variants: + True + + + False + False + + + + + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + + + True + True + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK + False + + + + + 1 + + + + + 3 + 1 + + + + + False + False + 3 + + + + + True + 5 + 6 + + + True + 0 + Preview: + + + False + False + + + + + + + + 1 + + + + + 1 + + + + + True + GTK_BUTTONBOX_END + + + True + True + True + gtk-cancel + True + -6 + + + + + True + True + True + gtk-ok + True + -5 + + + 1 + + + + + False + GTK_PACK_END + + + + +