diff --git a/configure.ac b/configure.ac index 309e6b740..0318ae232 100644 --- a/configure.ac +++ b/configure.ac @@ -114,9 +114,8 @@ PKG_CHECK_MODULES(POWER_PANEL, $COMMON_MODULES upower-glib >= 0.9.1 PKG_CHECK_MODULES(COLOR_PANEL, $COMMON_MODULES colord >= 0.1.8) PKG_CHECK_MODULES(PRINTERS_PANEL, $COMMON_MODULES polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION) -PKG_CHECK_MODULES(REGION_PANEL, $COMMON_MODULES libgnomekbd >= 2.91.91 - polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION - libxklavier >= 5.1 libgnomekbdui >= 2.91.91) +PKG_CHECK_MODULES(REGION_PANEL, $COMMON_MODULES + polkit-gobject-1 >= $POLKIT_REQUIRED_VERSION) PKG_CHECK_MODULES(SCREEN_PANEL, $COMMON_MODULES) PKG_CHECK_MODULES(SOUND_PANEL, $COMMON_MODULES libxml-2.0 libcanberra-gtk3 >= $CANBERRA_REQUIRED_VERSION diff --git a/panels/region/Makefile.am b/panels/region/Makefile.am index f5b37287b..da7aaab7a 100644 --- a/panels/region/Makefile.am +++ b/panels/region/Makefile.am @@ -25,12 +25,7 @@ libregion_la_SOURCES = \ gnome-region-panel-system.h \ gnome-region-panel-input.c \ gnome-region-panel-input.h \ - gnome-region-panel-xkb.c \ - gnome-region-panel-xkblt.c \ - gnome-region-panel-xkbltadd.c \ - gnome-region-panel-xkbot.c \ - gnome-region-panel-xkbpv.c \ - gnome-region-panel-xkb.h + $(NULL) libregion_la_LIBADD = $(PANEL_LIBS) $(REGION_PANEL_LIBS) $(builddir)/../common/liblanguage.la @@ -41,9 +36,8 @@ libregion_la_LDFLAGS = $(PANEL_LDFLAGS) uidir = $(pkgdatadir)/ui ui_DATA = \ gnome-region-panel.ui \ - gnome-region-panel-layout-chooser.ui \ gnome-region-panel-input-chooser.ui \ - gnome-region-panel-options-dialog.ui + $(NULL) desktopdir = $(datadir)/applications Desktop_in_files = gnome-region-panel.desktop.in diff --git a/panels/region/cc-region-panel.c b/panels/region/cc-region-panel.c index dbaa45597..d67ad485f 100644 --- a/panels/region/cc-region-panel.c +++ b/panels/region/cc-region-panel.c @@ -22,7 +22,6 @@ #include "cc-region-panel.h" #include -#include "gnome-region-panel-xkb.h" #include "gnome-region-panel-input.h" #include "gnome-region-panel-lang.h" #include "gnome-region-panel-formats.h" @@ -161,7 +160,6 @@ cc_region_panel_init (CcRegionPanel * self) gtk_widget_reparent (prefs_widget, GTK_WIDGET (self)); - setup_xkb_tabs (priv->builder); setup_input_tabs (priv->builder, self); setup_language (priv->builder); setup_formats (priv->builder); diff --git a/panels/region/gnome-region-panel-layout-chooser.ui b/panels/region/gnome-region-panel-layout-chooser.ui deleted file mode 100644 index 7140d82d9..000000000 --- a/panels/region/gnome-region-panel-layout-chooser.ui +++ /dev/null @@ -1,180 +0,0 @@ - - - - - - - - - - - - - - - - - - - layout_list_model - - - False - False - 5 - Choose a Layout - True - center-on-parent - dialog - - - True - False - vertical - 2 - - - True - False - end - - - Preview - True - True - True - False - - - False - False - 0 - True - - - - - gtk-cancel - True - True - True - False - False - True - - - False - False - end - 1 - - - - - gtk-add - True - True - True - False - False - True - - - False - False - end - 2 - - - - - - - True - False - 5 - 6 - - - True - False - 6 - - - True - False - 0 - Select an input source to add - - - False - False - 0 - - - - - True - True - never - etched-in - 450 - 250 - - - True - True - filtered_layout_list_model - False - 0 - - - - - - - - True - True - 1 - - - - - True - True - 0 - - - - - True - True - - edit-find-symbolic - False - False - - - False - False - end - 1 - - - - - True - True - 1 - - - - - - btnPreview - btnOk - btnCancel - - - diff --git a/panels/region/gnome-region-panel-options-dialog.ui b/panels/region/gnome-region-panel-options-dialog.ui deleted file mode 100644 index 6677ef08d..000000000 --- a/panels/region/gnome-region-panel-options-dialog.ui +++ /dev/null @@ -1,79 +0,0 @@ - - - - - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - 5 - Keyboard Layout Options - center-on-parent - 550 - 400 - dialog - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - vertical - 2 - - - True - True - 5 - out - - - True - False - none - - - True - False - - - - - - - False - True - 1 - - - - - True - False - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - end - - - - - - gtk-close - True - True - True - GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK - False - True - - - False - False - 1 - - - - - - - - button2 - - - diff --git a/panels/region/gnome-region-panel-system.c b/panels/region/gnome-region-panel-system.c index a02ef546f..c0941b647 100644 --- a/panels/region/gnome-region-panel-system.c +++ b/panels/region/gnome-region-panel-system.c @@ -29,13 +29,13 @@ #include -#include #include "cc-common-language.h" #include "gdm-languages.h" #include "gnome-region-panel-system.h" -#include "gnome-region-panel-xkb.h" -static GSettings *locale_settings, *xkb_settings; +#define WID(s) GTK_WIDGET(gtk_builder_get_object (dialog, s)) + +static GSettings *locale_settings; static GDBusProxy *localed_proxy; static GPermission *localed_permission; @@ -130,64 +130,6 @@ system_update_language (GtkBuilder *dialog, const gchar *language) update_copy_button (dialog); } -static void -xkb_settings_changed (GSettings *settings, - const gchar *key, - GtkBuilder *dialog) -{ - guint i; - GString *disp, *list, *variants; - GtkWidget *label; - gchar **layouts; - - layouts = g_settings_get_strv (settings, "layouts"); - if (layouts == NULL) - return; - - label = WID ("user_input_source"); - disp = g_string_new (""); - list = g_string_new (""); - variants = g_string_new (""); - - for (i = 0; layouts[i]; i++) { - gchar *utf_visible; - char **split; - gchar *layout, *variant; - - utf_visible = xkb_layout_description_utf8 (layouts[i]); - if (disp->str[0] != '\0') - g_string_append (disp, ", "); - g_string_append (disp, utf_visible ? utf_visible : layouts[i]); - g_free (utf_visible); - - split = g_strsplit_set (layouts[i], " \t", 2); - - if (split == NULL || split[0] == NULL) - continue; - - layout = split[0]; - variant = split[1]; - - if (list->str[0] != '\0') - g_string_append (list, ","); - g_string_append (list, layout); - - if (variants->str[0] != '\0') - g_string_append (variants, ","); - g_string_append (variants, variant ? variant : ""); - - g_strfreev (split); - } - g_strfreev (layouts); - - g_object_set_data_full (G_OBJECT (label), "input_source", g_string_free (list, FALSE), g_free); - g_object_set_data_full (G_OBJECT (label), "input_variants", g_string_free (variants, FALSE), g_free); - gtk_label_set_text (GTK_LABEL (label), disp->str); - g_string_free (disp, TRUE); - - update_copy_button (dialog); -} - static void update_property (GDBusProxy *proxy, const char *property) @@ -223,11 +165,6 @@ on_localed_properties_changed (GDBusProxy *proxy, GtkBuilder *dialog) { GVariant *v; - GtkWidget *label; - const char *layout; - char **layouts; - GString *disp; - guint i; if (invalidated_properties != NULL) { guint i; @@ -287,33 +224,6 @@ on_localed_properties_changed (GDBusProxy *proxy, g_variant_unref (v); } - label = WID ("system_input_source"); - v = g_dbus_proxy_get_cached_property (proxy, "X11Layout"); - if (v) { - layout = g_variant_get_string (v, NULL); - g_object_set_data_full (G_OBJECT (label), "input_source", g_strdup (layout), g_free); - } else { - g_object_set_data_full (G_OBJECT (label), "input_source", NULL, g_free); - update_copy_button (dialog); - return; - } - - disp = g_string_new (""); - layouts = g_strsplit (layout, ",", -1); - for (i = 0; layouts[i]; i++) { - gchar *utf_visible; - - utf_visible = xkb_layout_description_utf8 (layouts[i]); - if (disp->str[0] != '\0') - disp = g_string_append (disp, ", "); - disp = g_string_append (disp, utf_visible ? utf_visible : layouts[i]); - g_free (utf_visible); - } - gtk_label_set_text (GTK_LABEL (label), disp->str); - g_string_free (disp, TRUE); - - g_variant_unref (v); - update_copy_button (dialog); } @@ -468,11 +378,6 @@ setup_system (GtkBuilder *dialog) G_CALLBACK (locale_settings_changed), dialog); g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, locale_settings); - xkb_settings = g_settings_new (GKBD_KEYBOARD_SCHEMA); - g_signal_connect (xkb_settings, "changed::layouts", - G_CALLBACK (xkb_settings_changed), dialog); - g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) g_object_unref, xkb_settings); - /* Display user settings */ language = cc_common_language_get_current_language (); system_update_language (dialog, language); @@ -480,8 +385,6 @@ setup_system (GtkBuilder *dialog) locale_settings_changed (locale_settings, "region", dialog); - xkb_settings_changed (xkb_settings, "layouts", dialog); - bus = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL); g_dbus_proxy_new (bus, G_DBUS_PROXY_FLAGS_NONE, diff --git a/panels/region/gnome-region-panel-xkb.c b/panels/region/gnome-region-panel-xkb.c deleted file mode 100644 index 6e282e8b9..000000000 --- a/panels/region/gnome-region-panel-xkb.c +++ /dev/null @@ -1,190 +0,0 @@ -/* gnome-region-panel-xkb.c - * Copyright (C) 2003-2007 Sergey V. Udaltsov - * - * Written by: Sergey V. Udaltsov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include -#include - -#include "gnome-region-panel-xkb.h" - -#include - -XklEngine *engine; -XklConfigRegistry *config_registry; - -GkbdKeyboardConfig initial_config; -GkbdDesktopConfig desktop_config; - -GSettings *xkb_keyboard_settings; -GSettings *xkb_desktop_settings; - -char * -xci_desc_to_utf8 (const XklConfigItem * ci) -{ - gchar *dd = g_strdup (ci->description); - gchar *sd = g_strstrip (dd); - gchar *rv = g_strdup (sd[0] == 0 ? ci->name : sd); - g_free (dd); - return rv; -} - -static void -cleanup_xkb_tabs (GtkBuilder * dialog, - GObject *where_the_object_wa) -{ - gkbd_desktop_config_term (&desktop_config); - gkbd_keyboard_config_term (&initial_config); - g_object_unref (G_OBJECT (config_registry)); - config_registry = NULL; - /* Don't unref it here, or we'll crash if open the panel again */ - engine = NULL; - g_object_unref (G_OBJECT (xkb_keyboard_settings)); - g_object_unref (G_OBJECT (xkb_desktop_settings)); - xkb_keyboard_settings = NULL; - xkb_desktop_settings = NULL; -} - -static void -reset_to_defaults (GtkWidget * button, GtkBuilder * dialog) -{ - GkbdKeyboardConfig empty_kbd_config; - - gkbd_keyboard_config_init (&empty_kbd_config, engine); - gkbd_keyboard_config_save (&empty_kbd_config); - gkbd_keyboard_config_term (&empty_kbd_config); - - g_settings_reset (xkb_desktop_settings, - GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP); - - /* all the rest is g-s-d's business */ -} - -static void -chk_new_windows_inherit_layout_toggled (GtkWidget * - chk_new_windows_inherit_layout, - GtkBuilder * dialog) -{ - xkb_save_default_group (gtk_toggle_button_get_active - (GTK_TOGGLE_BUTTON - (chk_new_windows_inherit_layout)) ? -1 : - 0); -} - -void -setup_xkb_tabs (GtkBuilder * dialog) -{ - GtkWidget *widget; - GtkStyleContext *context; - GtkWidget *chk_new_windows_inherit_layout; - - chk_new_windows_inherit_layout = WID ("chk_new_windows_inherit_layout"); - - xkb_desktop_settings = g_settings_new (GKBD_DESKTOP_SCHEMA); - xkb_keyboard_settings = g_settings_new (GKBD_KEYBOARD_SCHEMA); - - engine = - xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY - (gdk_display_get_default ())); - config_registry = xkl_config_registry_get_instance (engine); - - gkbd_desktop_config_init (&desktop_config, engine); - gkbd_desktop_config_load (&desktop_config); - - xkl_config_registry_load (config_registry, - desktop_config.load_extra_items); - - gkbd_keyboard_config_init (&initial_config, engine); - gkbd_keyboard_config_load_from_x_initial (&initial_config, NULL); - - /* Set initial state */ - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("chk_separate_group_per_window")), - g_settings_get_boolean (xkb_desktop_settings, - GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW)); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (chk_new_windows_inherit_layout), - xkb_get_default_group () < 0); - - g_settings_bind (xkb_desktop_settings, - GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW, - WID ("chk_separate_group_per_window"), "active", - G_SETTINGS_BIND_DEFAULT); - g_settings_bind (xkb_desktop_settings, - GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW, - WID ("chk_new_windows_inherit_layout"), "sensitive", - G_SETTINGS_BIND_DEFAULT); - g_settings_bind (xkb_desktop_settings, - GKBD_DESKTOP_CONFIG_KEY_GROUP_PER_WINDOW, - WID ("chk_new_windows_default_layout"), "sensitive", - G_SETTINGS_BIND_DEFAULT); - - xkb_layouts_prepare_selected_tree (dialog); - xkb_layouts_fill_selected_tree (dialog); - - xkb_layouts_register_buttons_handlers (dialog); - g_signal_connect (G_OBJECT (WID ("xkb_reset_to_defaults")), - "clicked", G_CALLBACK (reset_to_defaults), - dialog); - - g_signal_connect (G_OBJECT (chk_new_windows_inherit_layout), - "toggled", - G_CALLBACK - (chk_new_windows_inherit_layout_toggled), - dialog); - - g_signal_connect_swapped (G_OBJECT (WID ("xkb_layout_options")), - "clicked", - G_CALLBACK (xkb_options_popup_dialog), - dialog); - - xkb_layouts_register_conf_listener (dialog); - xkb_options_register_conf_listener (dialog); - - g_object_weak_ref (G_OBJECT (WID ("region_notebook")), - (GWeakNotify) cleanup_xkb_tabs, dialog); - - enable_disable_restoring (dialog); - - /* Setup junction between toolbar and treeview */ - widget = WID ("xkb_layouts_swindow"); - context = gtk_widget_get_style_context (widget); - gtk_style_context_set_junction_sides (context, GTK_JUNCTION_BOTTOM); - widget = WID ("layouts-toolbar"); - context = gtk_widget_get_style_context (widget); - gtk_style_context_set_junction_sides (context, GTK_JUNCTION_TOP); -} - -void -enable_disable_restoring (GtkBuilder * dialog) -{ - GkbdKeyboardConfig gswic; - gboolean enable; - - gkbd_keyboard_config_init (&gswic, engine); - gkbd_keyboard_config_load (&gswic, NULL); - - enable = !gkbd_keyboard_config_equals (&gswic, &initial_config); - - gkbd_keyboard_config_term (&gswic); - gtk_widget_set_sensitive (WID ("xkb_reset_to_defaults"), enable); -} diff --git a/panels/region/gnome-region-panel-xkb.h b/panels/region/gnome-region-panel-xkb.h deleted file mode 100644 index dd8bf23fc..000000000 --- a/panels/region/gnome-region-panel-xkb.h +++ /dev/null @@ -1,96 +0,0 @@ -/* gnome-region-panel-xkb.h - * Copyright (C) 2003-2007 Sergey V Udaltsov - * - * Written by Sergey V. Udaltsov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifndef __GNOME_KEYBOARD_PROPERTY_XKB_H -#define __GNOME_KEYBOARD_PROPERTY_XKB_H - -#include - -#include "libgnomekbd/gkbd-keyboard-config.h" -#include "libgnomekbd/gkbd-util.h" - -G_BEGIN_DECLS -#define CWID(s) GTK_WIDGET (gtk_builder_get_object (chooser_dialog, s)) -#define WID(s) GTK_WIDGET (gtk_builder_get_object (dialog, s)) -extern XklEngine *engine; -extern XklConfigRegistry *config_registry; -extern GSettings *xkb_keyboard_settings; -extern GSettings *xkb_desktop_settings; -extern GkbdKeyboardConfig initial_config; - -extern void setup_xkb_tabs (GtkBuilder * dialog); - -extern void xkb_layouts_fill_selected_tree (GtkBuilder * dialog); - -extern void xkb_layouts_register_buttons_handlers (GtkBuilder * dialog); - -extern void xkb_layouts_register_conf_listener (GtkBuilder * dialog); - -extern void xkb_options_register_conf_listener (GtkBuilder * dialog); - -extern void xkb_layouts_prepare_selected_tree (GtkBuilder * dialog); - -extern void xkb_options_load_options (GtkBuilder * dialog); - -extern void xkb_options_popup_dialog (GtkBuilder * dialog); - -extern char *xci_desc_to_utf8 (const XklConfigItem * ci); - -extern gchar *xkb_layout_description_utf8 (const gchar * visible); - -extern void enable_disable_restoring (GtkBuilder * dialog); - -extern void preview_toggled (GtkBuilder * dialog, GtkWidget * button); - -extern GtkWidget *xkb_layout_choose (GtkBuilder * dialog); - -extern void xkb_layout_chooser_response (GtkDialog *dialog, gint response_id); - -extern gchar **xkb_layouts_get_selected_list (void); - -extern gchar **xkb_options_get_selected_list (void); - -#define xkb_layouts_set_selected_list(list) \ - g_settings_set_strv (xkb_keyboard_settings, \ - GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS, \ - (const gchar *const*)(list)) - -#define xkb_options_set_selected_list(list) \ - g_settings_set_strv (xkb_keyboard_settings, \ - GKBD_KEYBOARD_CONFIG_KEY_OPTIONS, \ - (const gchar *const*)(list)) - -extern GtkWidget *xkb_layout_preview_create_widget (GtkBuilder * - chooser_dialog); - -extern void xkb_layout_preview_update (GtkBuilder * chooser_dialog); - -extern void xkb_layout_preview_set_drawing_layout (GtkWidget * kbdraw, - const gchar * id); - -extern gchar *xkb_layout_chooser_get_selected_id (GtkDialog *dialog); - -extern void xkb_save_default_group (gint group_no); - -extern gint xkb_get_default_group (void); - -G_END_DECLS -#endif /* __GNOME_KEYBOARD_PROPERTY_XKB_H */ diff --git a/panels/region/gnome-region-panel-xkblt.c b/panels/region/gnome-region-panel-xkblt.c deleted file mode 100644 index 3360233cc..000000000 --- a/panels/region/gnome-region-panel-xkblt.c +++ /dev/null @@ -1,470 +0,0 @@ -/* gnome-region-panel-xkblt.c - * Copyright (C) 2003-2007 Sergey V. Udaltsov - * - * Written by: Sergey V. Udaltsov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include - -#include -#include - -#include "gnome-region-panel-xkb.h" - -enum { - SEL_LAYOUT_TREE_COL_DESCRIPTION, - SEL_LAYOUT_TREE_COL_ID, - SEL_LAYOUT_TREE_COL_ENABLED, - SEL_LAYOUT_N_COLS -}; - -static int idx2select = -1; -static int max_selected_layouts = -1; - -static GtkCellRenderer *text_renderer; - -static gboolean disable_buttons_sensibility_update = FALSE; - -static gboolean -get_selected_iter (GtkBuilder *dialog, - GtkTreeModel **model, - GtkTreeIter *iter) -{ - GtkTreeSelection *selection; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("xkb_layouts_selected"))); - - return gtk_tree_selection_get_selected (selection, model, iter); -} - -static void -set_selected_path (GtkBuilder *dialog, - GtkTreePath *path) -{ - GtkTreeSelection *selection; - - selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (WID ("xkb_layouts_selected"))); - - gtk_tree_selection_select_path (selection, path); -} - -static gint -find_selected_layout_idx (GtkBuilder *dialog) -{ - GtkTreeIter selected_iter; - GtkTreeModel *model; - GtkTreePath *path; - gint *indices; - gint rv; - - if (!get_selected_iter (dialog, &model, &selected_iter)) - return -1; - - path = gtk_tree_model_get_path (model, &selected_iter); - if (path == NULL) - return -1; - - indices = gtk_tree_path_get_indices (path); - rv = indices[0]; - gtk_tree_path_free (path); - return rv; -} - -gchar ** -xkb_layouts_get_selected_list (void) -{ - gchar **retval; - - retval = g_settings_get_strv (xkb_keyboard_settings, - GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS); - if (retval == NULL || retval[0] == NULL) { - g_strfreev (retval); - retval = g_strdupv (initial_config.layouts_variants); - } - - return retval; -} - -gint -xkb_get_default_group () -{ - return g_settings_get_int (xkb_desktop_settings, - GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP); -} - -void -xkb_save_default_group (gint default_group) -{ - g_settings_set_int (xkb_desktop_settings, - GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP, - default_group); -} - -static void -xkb_layouts_enable_disable_buttons (GtkBuilder * dialog) -{ - GtkWidget *add_layout_btn = WID ("xkb_layouts_add"); - GtkWidget *show_layout_btn = WID ("xkb_layouts_show"); - GtkWidget *del_layout_btn = WID ("xkb_layouts_remove"); - GtkWidget *selected_layouts_tree = WID ("xkb_layouts_selected"); - GtkWidget *move_up_layout_btn = WID ("xkb_layouts_move_up"); - GtkWidget *move_down_layout_btn = WID ("xkb_layouts_move_down"); - - GtkTreeSelection *s_selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW - (selected_layouts_tree)); - const int n_selected_selected_layouts = - gtk_tree_selection_count_selected_rows (s_selection); - GtkTreeModel *selected_layouts_model = gtk_tree_view_get_model - (GTK_TREE_VIEW (selected_layouts_tree)); - const int n_selected_layouts = - gtk_tree_model_iter_n_children (selected_layouts_model, - NULL); - gint sidx = find_selected_layout_idx (dialog); - - if (disable_buttons_sensibility_update) - return; - - gtk_widget_set_sensitive (add_layout_btn, - (n_selected_layouts < - max_selected_layouts - || max_selected_layouts == 0)); - gtk_widget_set_sensitive (del_layout_btn, (n_selected_layouts > 1) - && (n_selected_selected_layouts > 0)); - gtk_widget_set_sensitive (show_layout_btn, - (n_selected_selected_layouts > 0)); - gtk_widget_set_sensitive (move_up_layout_btn, sidx > 0); - gtk_widget_set_sensitive (move_down_layout_btn, sidx >= 0 - && sidx < (n_selected_layouts - 1)); -} - -static void -update_layouts_list (GtkTreeModel *model, - GtkBuilder *dialog) -{ - gboolean cont; - GtkTreeIter iter; - GPtrArray *array; - - array = g_ptr_array_new_with_free_func ((GDestroyNotify) g_free); - cont = gtk_tree_model_get_iter_first (model, &iter); - while (cont) { - char *id; - - gtk_tree_model_get (model, &iter, - SEL_LAYOUT_TREE_COL_ID, &id, - -1); - g_ptr_array_add (array, id); - cont = gtk_tree_model_iter_next (model, &iter); - } - g_ptr_array_add (array, NULL); - xkb_layouts_set_selected_list (array->pdata); - g_ptr_array_free (array, TRUE); - - xkb_layouts_enable_disable_buttons (dialog); -} - -static void -xkb_layouts_drag_end (GtkWidget *widget, - GdkDragContext *drag_context, - gpointer user_data) -{ - update_layouts_list (gtk_tree_view_get_model (GTK_TREE_VIEW (widget)), - GTK_BUILDER (user_data)); -} - -void -xkb_layouts_prepare_selected_tree (GtkBuilder * dialog) -{ - GtkListStore *list_store; - GtkWidget *tree_view = WID ("xkb_layouts_selected"); - GtkTreeSelection *selection; - GtkTreeViewColumn *desc_column; - - list_store = gtk_list_store_new (SEL_LAYOUT_N_COLS, - G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN); - - text_renderer = GTK_CELL_RENDERER (gtk_cell_renderer_text_new ()); - - desc_column = - gtk_tree_view_column_new_with_attributes (_("Layout"), - text_renderer, - "text", - SEL_LAYOUT_TREE_COL_DESCRIPTION, - "sensitive", - SEL_LAYOUT_TREE_COL_ENABLED, - NULL); - selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); - - gtk_tree_view_set_model (GTK_TREE_VIEW (tree_view), - GTK_TREE_MODEL (list_store)); - - gtk_tree_view_column_set_sizing (desc_column, - GTK_TREE_VIEW_COLUMN_AUTOSIZE); - gtk_tree_view_column_set_resizable (desc_column, TRUE); - gtk_tree_view_column_set_expand (desc_column, TRUE); - - gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), - desc_column); - - g_signal_connect_swapped (G_OBJECT (selection), "changed", - G_CALLBACK - (xkb_layouts_enable_disable_buttons), - dialog); - max_selected_layouts = xkl_engine_get_max_num_groups (engine); - - /* Setting up DnD */ - gtk_tree_view_set_reorderable (GTK_TREE_VIEW (tree_view), TRUE); - g_signal_connect (G_OBJECT (tree_view), "drag-end", - G_CALLBACK (xkb_layouts_drag_end), dialog); -} - -gchar * -xkb_layout_description_utf8 (const gchar * visible) -{ - char *l, *sl, *v, *sv; - if (gkbd_keyboard_config_get_descriptions - (config_registry, visible, &sl, &l, &sv, &v)) - visible = - gkbd_keyboard_config_format_full_description (l, v); - return g_strstrip (g_strdup (visible)); -} - -void -xkb_layouts_fill_selected_tree (GtkBuilder * dialog) -{ - gchar **layouts = xkb_layouts_get_selected_list (); - guint i; - GtkListStore *list_store = - GTK_LIST_STORE (gtk_tree_view_get_model - (GTK_TREE_VIEW - (WID ("xkb_layouts_selected")))); - - /* temporarily disable the buttons' status update */ - disable_buttons_sensibility_update = TRUE; - - gtk_list_store_clear (list_store); - - for (i = 0; layouts != NULL && layouts[i] != NULL; i++) { - char *cur_layout = layouts[i]; - gchar *utf_visible = - xkb_layout_description_utf8 (cur_layout); - - gtk_list_store_insert_with_values (list_store, NULL, G_MAXINT, - SEL_LAYOUT_TREE_COL_DESCRIPTION, - utf_visible, - SEL_LAYOUT_TREE_COL_ID, - cur_layout, - SEL_LAYOUT_TREE_COL_ENABLED, - i < max_selected_layouts, -1); - g_free (utf_visible); - } - - g_strfreev (layouts); - - /* enable the buttons' status update */ - disable_buttons_sensibility_update = FALSE; - - if (idx2select != -1) { - GtkTreeSelection *selection = - gtk_tree_view_get_selection ((GTK_TREE_VIEW - (WID - ("xkb_layouts_selected")))); - GtkTreePath *path = - gtk_tree_path_new_from_indices (idx2select, -1); - gtk_tree_selection_select_path (selection, path); - gtk_tree_path_free (path); - idx2select = -1; - } else { - /* if there is nothing to select - just enable/disable the buttons, - otherwise it would be done by the selection change */ - xkb_layouts_enable_disable_buttons (dialog); - } -} - -static void -add_default_switcher_if_necessary () -{ - gchar **layouts_list = xkb_layouts_get_selected_list(); - gchar **options_list = xkb_options_get_selected_list (); - gboolean was_appended; - - options_list = - gkbd_keyboard_config_add_default_switch_option_if_necessary - (layouts_list, options_list, &was_appended); - if (was_appended) - xkb_options_set_selected_list (options_list); - g_strfreev (options_list); -} - -static void -chooser_response (GtkDialog *chooser, - int response_id, - GtkBuilder *dialog) -{ - if (response_id == GTK_RESPONSE_OK) { - char *id, *name; - GtkListStore *list_store; - - list_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (WID ("xkb_layouts_selected")))); - id = xkb_layout_chooser_get_selected_id (chooser); - name = xkb_layout_description_utf8 (id); - gtk_list_store_insert_with_values (list_store, NULL, G_MAXINT, - SEL_LAYOUT_TREE_COL_DESCRIPTION, name, - SEL_LAYOUT_TREE_COL_ID, id, - SEL_LAYOUT_TREE_COL_ENABLED, TRUE, - -1); - g_free (name); - add_default_switcher_if_necessary (); - update_layouts_list (GTK_TREE_MODEL (list_store), dialog); - } - - xkb_layout_chooser_response (chooser, response_id); -} - -static void -add_selected_layout (GtkWidget * button, GtkBuilder * dialog) -{ - GtkWidget *chooser; - - chooser = xkb_layout_choose (dialog); - g_signal_connect (G_OBJECT (chooser), "response", - G_CALLBACK (chooser_response), dialog); -} - -static void -show_selected_layout (GtkWidget * button, GtkBuilder * dialog) -{ - gint idx = find_selected_layout_idx (dialog); - - if (idx != -1) { - GtkWidget *parent = WID ("region_notebook"); - GtkWidget *popup = gkbd_keyboard_drawing_dialog_new (); - gkbd_keyboard_drawing_dialog_set_group (popup, - config_registry, - idx); - gtk_window_set_transient_for (GTK_WINDOW (popup), - GTK_WINDOW - (gtk_widget_get_toplevel - (parent))); - gtk_widget_show_all (popup); - } -} - -static void -remove_selected_layout (GtkWidget * button, GtkBuilder * dialog) -{ - GtkTreeModel *model; - GtkTreeIter iter; - - if (get_selected_iter (dialog, &model, &iter) == FALSE) - return; - - gtk_list_store_remove (GTK_LIST_STORE (model), &iter); - update_layouts_list (model, dialog); -} - -static void -move_up_selected_layout (GtkWidget * button, GtkBuilder * dialog) -{ - GtkTreeModel *model; - GtkTreeIter iter, prev; - GtkTreePath *path; - - if (get_selected_iter (dialog, &model, &iter) == FALSE) - return; - - prev = iter; - if (!gtk_tree_model_iter_previous (model, &prev)) - return; - - path = gtk_tree_model_get_path (model, &prev); - - gtk_list_store_swap (GTK_LIST_STORE (model), &iter, &prev); - - update_layouts_list (model, dialog); - - set_selected_path (dialog, path); - - gtk_tree_path_free (path); -} - -static void -move_down_selected_layout (GtkWidget * button, GtkBuilder * dialog) -{ - GtkTreeModel *model; - GtkTreeIter iter, next; - GtkTreePath *path; - - if (get_selected_iter (dialog, &model, &iter) == FALSE) - return; - - next = iter; - if (!gtk_tree_model_iter_next (model, &next)) - return; - - path = gtk_tree_model_get_path (model, &next); - - gtk_list_store_swap (GTK_LIST_STORE (model), &iter, &next); - - update_layouts_list (model, dialog); - - set_selected_path (dialog, path); - - gtk_tree_path_free (path); -} - -void -xkb_layouts_register_buttons_handlers (GtkBuilder * dialog) -{ - g_signal_connect (G_OBJECT (WID ("xkb_layouts_add")), "clicked", - G_CALLBACK (add_selected_layout), dialog); - g_signal_connect (G_OBJECT (WID ("xkb_layouts_show")), "clicked", - G_CALLBACK (show_selected_layout), dialog); - g_signal_connect (G_OBJECT (WID ("xkb_layouts_remove")), "clicked", - G_CALLBACK (remove_selected_layout), dialog); - g_signal_connect (G_OBJECT (WID ("xkb_layouts_move_up")), - "clicked", G_CALLBACK (move_up_selected_layout), - dialog); - g_signal_connect (G_OBJECT (WID ("xkb_layouts_move_down")), - "clicked", - G_CALLBACK (move_down_selected_layout), dialog); -} - -static void -xkb_layouts_update_list (GSettings * settings, - gchar * key, GtkBuilder * dialog) -{ - if (strcmp (key, GKBD_KEYBOARD_CONFIG_KEY_LAYOUTS) == 0) { - xkb_layouts_fill_selected_tree (dialog); - enable_disable_restoring (dialog); - } -} - -void -xkb_layouts_register_conf_listener (GtkBuilder * dialog) -{ - g_signal_connect (xkb_keyboard_settings, "changed", - G_CALLBACK (xkb_layouts_update_list), dialog); -} diff --git a/panels/region/gnome-region-panel-xkbltadd.c b/panels/region/gnome-region-panel-xkbltadd.c deleted file mode 100644 index ff352c4a5..000000000 --- a/panels/region/gnome-region-panel-xkbltadd.c +++ /dev/null @@ -1,495 +0,0 @@ -/* gnome-region-panel-xkbltadd.c - * Copyright (C) 2007 Sergey V. Udaltsov - * - * Written by: Sergey V. Udaltsov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#include -#include - -#include "gnome-region-panel-xkb.h" - -enum { - COMBO_BOX_MODEL_COL_SORT, - COMBO_BOX_MODEL_COL_VISIBLE, - COMBO_BOX_MODEL_COL_XKB_ID, - COMBO_BOX_MODEL_COL_COUNTRY_DESC, - COMBO_BOX_MODEL_COL_LANGUAGE_DESC -}; - -static gchar **search_pattern_list = NULL; - -static GtkWidget *preview_dialog = NULL; - -static GRegex *left_bracket_regex = NULL; - -#define RESPONSE_PREVIEW 1 - -static void -xkb_preview_destroy_callback (GtkWidget * widget) -{ - preview_dialog = NULL; -} - -static gboolean -xkb_layout_chooser_selection_dupe (GtkDialog * dialog) -{ - gchar *selected_id = - (gchar *) xkb_layout_chooser_get_selected_id (dialog); - gchar **layouts_list, **pl; - gboolean rv = FALSE; - if (selected_id == NULL) - return rv; - layouts_list = pl = xkb_layouts_get_selected_list (); - while (pl && *pl) { - if (!g_ascii_strcasecmp (*pl++, selected_id)) { - rv = TRUE; - break; - } - } - g_strfreev (layouts_list); - return rv; -} - -void -xkb_layout_chooser_response (GtkDialog * dialog, gint response) -{ - switch (response) - case GTK_RESPONSE_OK:{ - /* Handled by the main code */ - break; - case RESPONSE_PREVIEW:{ - gchar *selected_id = (gchar *) - xkb_layout_chooser_get_selected_id - (dialog); - - if (selected_id != NULL) { - if (preview_dialog == NULL) { - preview_dialog = - gkbd_keyboard_drawing_dialog_new - (); - g_signal_connect (G_OBJECT - (preview_dialog), - "destroy", - G_CALLBACK - (xkb_preview_destroy_callback), - NULL); - /* Put into the separate group to avoid conflict - with modal parent */ - gtk_window_group_add_window - (gtk_window_group_new - (), - GTK_WINDOW - (preview_dialog)); - }; - gkbd_keyboard_drawing_dialog_set_layout - (preview_dialog, - config_registry, selected_id); - - gtk_widget_show_all - (preview_dialog); - } - } - - return; - } - if (preview_dialog != NULL) { - gtk_widget_destroy (preview_dialog); - } - if (search_pattern_list != NULL) { - g_strfreev (search_pattern_list); - search_pattern_list = NULL; - } - gtk_widget_destroy (GTK_WIDGET (dialog)); -} - -static gchar * -xkl_create_description_from_list (const XklConfigItem * item, - const XklConfigItem * subitem, - const gchar * prop_name, - const gchar * - (*desc_getter) (const gchar * code)) -{ - gchar *rv = NULL, *code = NULL; - gchar **list = NULL; - const gchar *desc; - - if (subitem != NULL) - list = - (gchar - **) (g_object_get_data (G_OBJECT (subitem), - prop_name)); - if (list == NULL || *list == 0) - list = - (gchar - **) (g_object_get_data (G_OBJECT (item), prop_name)); - - /* First try the parent id as such */ - desc = desc_getter (item->name); - if (desc != NULL) { - rv = g_utf8_strup (desc, -1); - } else { - code = g_utf8_strup (item->name, -1); - desc = desc_getter (code); - if (desc != NULL) { - rv = g_utf8_strup (desc, -1); - } - g_free (code); - } - - if (list == NULL || *list == 0) - return rv; - - while (*list != 0) { - code = *list++; - desc = desc_getter (code); - if (desc != NULL) { - gchar *udesc = g_utf8_strup (desc, -1); - if (rv == NULL) { - rv = udesc; - } else { - gchar *orv = rv; - rv = g_strdup_printf ("%s %s", rv, udesc); - g_free (orv); - g_free (udesc); - } - } - } - return rv; -} - -static void -xkl_layout_add_to_list (XklConfigRegistry * config, - const XklConfigItem * item, - const XklConfigItem * subitem, - GtkBuilder * chooser_dialog) -{ - GtkListStore *list_store = - GTK_LIST_STORE (gtk_builder_get_object (chooser_dialog, - "layout_list_model")); - GtkTreeIter iter; - - gchar *utf_variant_name = - subitem ? - xkb_layout_description_utf8 (gkbd_keyboard_config_merge_items - (item->name, - subitem->name)) : - xci_desc_to_utf8 (item); - - const gchar *xkb_id = - subitem ? gkbd_keyboard_config_merge_items (item->name, - subitem->name) : - item->name; - - gchar *country_desc = - xkl_create_description_from_list (item, subitem, - XCI_PROP_COUNTRY_LIST, - xkl_get_country_name); - gchar *language_desc = - xkl_create_description_from_list (item, subitem, - XCI_PROP_LANGUAGE_LIST, - xkl_get_language_name); - - gchar *tmp = utf_variant_name; - utf_variant_name = - g_regex_replace_literal (left_bracket_regex, tmp, -1, 0, - "<", 0, NULL); - g_free (tmp); - - if (subitem - && g_object_get_data (G_OBJECT (subitem), - XCI_PROP_EXTRA_ITEM)) { - gchar *buf = - g_strdup_printf ("%s", utf_variant_name); - gtk_list_store_insert_with_values (list_store, &iter, -1, - COMBO_BOX_MODEL_COL_SORT, - utf_variant_name, - COMBO_BOX_MODEL_COL_VISIBLE, - buf, - COMBO_BOX_MODEL_COL_XKB_ID, - xkb_id, - COMBO_BOX_MODEL_COL_COUNTRY_DESC, - country_desc, - COMBO_BOX_MODEL_COL_LANGUAGE_DESC, - language_desc, -1); - g_free (buf); - } else - gtk_list_store_insert_with_values (list_store, &iter, - -1, - COMBO_BOX_MODEL_COL_SORT, - utf_variant_name, - COMBO_BOX_MODEL_COL_VISIBLE, - utf_variant_name, - COMBO_BOX_MODEL_COL_XKB_ID, - xkb_id, - COMBO_BOX_MODEL_COL_COUNTRY_DESC, - country_desc, - COMBO_BOX_MODEL_COL_LANGUAGE_DESC, - language_desc, -1); - g_free (utf_variant_name); - g_free (country_desc); - g_free (language_desc); -} - -static void -xkb_layout_filter_clear (GtkEntry * entry, - GtkEntryIconPosition icon_pos, - GdkEvent * event, gpointer user_data) -{ - gtk_entry_set_text (entry, ""); -} - -static void -xkb_layout_filter_changed (GtkBuilder * chooser_dialog) -{ - GtkTreeModelFilter *filtered_model = - GTK_TREE_MODEL_FILTER (gtk_builder_get_object (chooser_dialog, - "filtered_layout_list_model")); - GtkWidget *xkb_layout_filter = CWID ("xkb_layout_filter"); - const gchar *pattern = - gtk_entry_get_text (GTK_ENTRY (xkb_layout_filter)); - gchar *upattern = g_utf8_strup (pattern, -1); - - if (!g_strcmp0 (pattern, "")) { - g_object_set (G_OBJECT (xkb_layout_filter), - "secondary-icon-name", "edit-find-symbolic", - "secondary-icon-activatable", FALSE, - "secondary-icon-sensitive", FALSE, NULL); - } else { - g_object_set (G_OBJECT (xkb_layout_filter), - "secondary-icon-name", "edit-clear-symbolic", - "secondary-icon-activatable", TRUE, - "secondary-icon-sensitive", TRUE, NULL); - } - - if (search_pattern_list != NULL) - g_strfreev (search_pattern_list); - - search_pattern_list = g_strsplit (upattern, " ", -1); - g_free (upattern); - - gtk_tree_model_filter_refilter (filtered_model); -} - -static void -xkb_layout_chooser_selection_changed (GtkTreeSelection * selection, - GtkBuilder * chooser_dialog) -{ - GList *selected_layouts = - gtk_tree_selection_get_selected_rows (selection, NULL); - GtkWidget *add_button = CWID ("btnOk"); - GtkWidget *preview_button = CWID ("btnPreview"); - gboolean anything_selected = g_list_length (selected_layouts) == 1; - gboolean dupe = - xkb_layout_chooser_selection_dupe (GTK_DIALOG - (CWID - ("xkb_layout_chooser"))); - - gtk_widget_set_sensitive (add_button, anything_selected && !dupe); - gtk_widget_set_sensitive (preview_button, anything_selected); -} - -static void -xkb_layout_chooser_row_activated (GtkTreeView * tree_view, - GtkTreePath * path, - GtkTreeViewColumn * column, - GtkBuilder * chooser_dialog) -{ - GtkWidget *add_button = CWID ("btnOk"); - GtkWidget *dialog = CWID ("xkb_layout_chooser"); - - if (gtk_widget_is_sensitive (add_button)) - gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); -} - -static gboolean -xkb_filter_layouts (GtkTreeModel * model, - GtkTreeIter * iter, gpointer data) -{ - gchar *desc = NULL, *country_desc = NULL, *language_desc = - NULL, **pattern; - gboolean rv = TRUE; - - if (search_pattern_list == NULL || search_pattern_list[0] == NULL) - return TRUE; - - gtk_tree_model_get (model, iter, - COMBO_BOX_MODEL_COL_SORT, &desc, - COMBO_BOX_MODEL_COL_COUNTRY_DESC, - &country_desc, - COMBO_BOX_MODEL_COL_LANGUAGE_DESC, - &language_desc, -1); - - pattern = search_pattern_list; - do { - gboolean is_pattern_found = FALSE; - gchar *udesc = g_utf8_strup (desc, -1); - if (udesc != NULL && g_strstr_len (udesc, -1, *pattern)) { - is_pattern_found = TRUE; - } else if (country_desc != NULL - && g_strstr_len (country_desc, -1, *pattern)) { - is_pattern_found = TRUE; - } else if (language_desc != NULL - && g_strstr_len (language_desc, -1, *pattern)) { - is_pattern_found = TRUE; - } - g_free (udesc); - - if (!is_pattern_found) { - rv = FALSE; - break; - } - - } while (*++pattern != NULL); - - g_free (desc); - g_free (country_desc); - g_free (language_desc); - return rv; -} - -GtkWidget * -xkb_layout_choose (GtkBuilder * dialog) -{ - GtkBuilder *chooser_dialog = gtk_builder_new (); - GtkWidget *chooser, *xkb_filtered_layouts_list, *xkb_layout_filter; - GtkTreeViewColumn *visible_column; - GtkTreeSelection *selection; - GtkListStore *model; - GtkTreeModelFilter *filtered_model; - - gtk_builder_add_from_file (chooser_dialog, GNOMECC_UI_DIR - "/gnome-region-panel-layout-chooser.ui", - NULL); - chooser = CWID ("xkb_layout_chooser"); - xkb_filtered_layouts_list = CWID ("xkb_filtered_layouts_list"); - xkb_layout_filter = CWID ("xkb_layout_filter"); - - g_object_set_data (G_OBJECT (chooser), "xkb_filtered_layouts_list", - xkb_filtered_layouts_list); - visible_column = - gtk_tree_view_column_new_with_attributes ("Layout", - gtk_cell_renderer_text_new - (), "markup", - COMBO_BOX_MODEL_COL_VISIBLE, - NULL); - - gtk_window_set_transient_for (GTK_WINDOW (chooser), - GTK_WINDOW - (gtk_widget_get_toplevel - (WID ("region_notebook")))); - - gtk_tree_view_append_column (GTK_TREE_VIEW - (xkb_filtered_layouts_list), - visible_column); - g_signal_connect_swapped (G_OBJECT (xkb_layout_filter), - "notify::text", - G_CALLBACK - (xkb_layout_filter_changed), - chooser_dialog); - - g_signal_connect (G_OBJECT (xkb_layout_filter), "icon-release", - G_CALLBACK (xkb_layout_filter_clear), NULL); - - selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW - (xkb_filtered_layouts_list)); - - g_signal_connect (G_OBJECT (selection), - "changed", - G_CALLBACK - (xkb_layout_chooser_selection_changed), - chooser_dialog); - - xkb_layout_chooser_selection_changed (selection, chooser_dialog); - - g_signal_connect (G_OBJECT (xkb_filtered_layouts_list), - "row-activated", - G_CALLBACK (xkb_layout_chooser_row_activated), - chooser_dialog); - - filtered_model = - GTK_TREE_MODEL_FILTER (gtk_builder_get_object - (chooser_dialog, - "filtered_layout_list_model")); - model = - GTK_LIST_STORE (gtk_builder_get_object - (chooser_dialog, "layout_list_model")); - - left_bracket_regex = g_regex_new ("<", 0, 0, NULL); - - xkl_config_registry_search_by_pattern (config_registry, - NULL, - (TwoConfigItemsProcessFunc) - (xkl_layout_add_to_list), - chooser_dialog); - - g_regex_unref (left_bracket_regex); - - gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model), - COMBO_BOX_MODEL_COL_SORT, - GTK_SORT_ASCENDING); - - gtk_tree_model_filter_set_visible_func (filtered_model, - xkb_filter_layouts, - NULL, NULL); - - gtk_widget_grab_focus (xkb_layout_filter); - - gtk_widget_show (chooser); - - return chooser; -} - -gchar * -xkb_layout_chooser_get_selected_id (GtkDialog * dialog) -{ - GtkTreeModel *filtered_list_model; - GtkWidget *xkb_filtered_layouts_list = - g_object_get_data (G_OBJECT (dialog), - "xkb_filtered_layouts_list"); - GtkTreeIter viter; - gchar *v_id; - GtkTreeSelection *selection = - gtk_tree_view_get_selection (GTK_TREE_VIEW - (xkb_filtered_layouts_list)); - GList *selected_layouts = - gtk_tree_selection_get_selected_rows (selection, - &filtered_list_model); - - if (g_list_length (selected_layouts) != 1) - return NULL; - - gtk_tree_model_get_iter (filtered_list_model, - &viter, - (GtkTreePath *) (selected_layouts->data)); - g_list_foreach (selected_layouts, - (GFunc) gtk_tree_path_free, NULL); - g_list_free (selected_layouts); - - gtk_tree_model_get (filtered_list_model, &viter, - COMBO_BOX_MODEL_COL_XKB_ID, &v_id, -1); - - return v_id; -} diff --git a/panels/region/gnome-region-panel-xkbot.c b/panels/region/gnome-region-panel-xkbot.c deleted file mode 100644 index 7fd643c9e..000000000 --- a/panels/region/gnome-region-panel-xkbot.c +++ /dev/null @@ -1,515 +0,0 @@ -/* gnome-region-panel-xkbot.c - * Copyright (C) 2003-2007 Sergey V. Udaltsov - * - * Written by: Sergey V. Udaltsov - * John Spray - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include -#include - -#include "gnome-region-panel-xkb.h" - -static GtkBuilder *chooser_dialog = NULL; -static const char *current1st_level_id = NULL; -static GSList *option_checks_list = NULL; -static GtkWidget *current_none_radio = NULL; -static GtkWidget *current_expander = NULL; -static gboolean current_multi_select = FALSE; -static GSList *current_radio_group = NULL; - -#define OPTION_ID_PROP "optionID" -#define SELCOUNTER_PROP "selectionCounter" -#define GCONFSTATE_PROP "gconfState" -#define EXPANDERS_PROP "expandersList" - -gchar ** -xkb_options_get_selected_list (void) -{ - gchar **retval; - - retval = - g_settings_get_strv (xkb_keyboard_settings, - GKBD_KEYBOARD_CONFIG_KEY_OPTIONS); - if (retval == NULL) { - retval = g_strdupv (initial_config.options); - } - - return retval; -} - -/* Returns the selection counter of the expander (static current_expander) */ -static int -xkb_options_expander_selcounter_get (void) -{ - return - GPOINTER_TO_INT (g_object_get_data - (G_OBJECT (current_expander), - SELCOUNTER_PROP)); -} - -/* Increments the selection counter in the expander (static current_expander) - using the value (can be 0)*/ -static void -xkb_options_expander_selcounter_add (int value) -{ - g_object_set_data (G_OBJECT (current_expander), SELCOUNTER_PROP, - GINT_TO_POINTER - (xkb_options_expander_selcounter_get () - + value)); -} - -/* Resets the seletion counter in the expander (static current_expander) */ -static void -xkb_options_expander_selcounter_reset (void) -{ - g_object_set_data (G_OBJECT (current_expander), SELCOUNTER_PROP, - GINT_TO_POINTER (0)); -} - -/* Formats the expander (static current_expander), based on the selection counter */ -static void -xkb_options_expander_highlight (void) -{ - char *utf_group_name = - g_object_get_data (G_OBJECT (current_expander), - "utfGroupName"); - int counter = xkb_options_expander_selcounter_get (); - if (utf_group_name != NULL) { - gchar *titlemarkup = - g_strconcat (counter > - 0 ? "" : "", - utf_group_name, "", NULL); - gtk_expander_set_label (GTK_EXPANDER (current_expander), - titlemarkup); - g_free (titlemarkup); - } -} - -/* Add optionname from the backend's selection list if it's not - already in there. */ -static void -xkb_options_select (gchar * optionname) -{ - gboolean already_selected = FALSE; - gchar **options_list; - guint i; - - options_list = xkb_options_get_selected_list (); - for (i = 0; options_list != NULL && options_list[i] != NULL; i++) { - gchar *option = options_list[i]; - if (!strcmp (option, optionname)) { - already_selected = TRUE; - break; - } - } - - if (!already_selected) { - options_list = - gkbd_strv_append (options_list, g_strdup (optionname)); - xkb_options_set_selected_list (options_list); - } - - g_strfreev (options_list); -} - -/* Remove all occurences of optionname from the backend's selection list */ -static void -xkb_options_deselect (gchar * optionname) -{ - gchar **options_list = xkb_options_get_selected_list (); - if (options_list != NULL) { - gchar **option = options_list; - while (*option != NULL) { - gchar *id = *option; - if (!strcmp (id, optionname)) { - gkbd_strv_behead (option); - } else - option++; - } - xkb_options_set_selected_list (options_list); - } - g_strfreev (options_list); -} - -/* Return true if optionname describes a string already in the backend's - list of selected options */ -static gboolean -xkb_options_is_selected (gchar * optionname) -{ - gboolean retval = FALSE; - gchar **options_list = xkb_options_get_selected_list (); - if (options_list != NULL) { - gchar **option = options_list; - while (*option != NULL) { - if (!strcmp (*option, optionname)) { - retval = TRUE; - break; - } - option++; - } - } - g_strfreev (options_list); - return retval; -} - -/* Make sure selected options stay visible when navigating with the keyboard */ -static gboolean -option_focused_cb (GtkWidget * widget, GdkEventFocus * event, - gpointer data) -{ - GtkScrolledWindow *win = GTK_SCROLLED_WINDOW (data); - GtkAllocation alloc; - GtkAdjustment *adj; - - gtk_widget_get_allocation (widget, &alloc); - adj = gtk_scrolled_window_get_vadjustment (win); - gtk_adjustment_clamp_page (adj, alloc.y, alloc.y + alloc.height); - - return FALSE; -} - -/* Update xkb backend to reflect the new UI state */ -static void -option_toggled_cb (GtkWidget * checkbutton, gpointer data) -{ - gpointer optionID = - g_object_get_data (G_OBJECT (checkbutton), OPTION_ID_PROP); - if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (checkbutton))) - xkb_options_select (optionID); - else - xkb_options_deselect (optionID); -} - -/* Add a check_button or radio_button to control a particular option - This function makes particular use of the current... variables at - the top of this file. */ -static void -xkb_options_add_option (XklConfigRegistry * config_registry, - XklConfigItem * config_item, GtkBuilder * dialog) -{ - GtkWidget *option_check; - gchar *utf_option_name = xci_desc_to_utf8 (config_item); - /* Copy this out because we'll load it into the widget with set_data */ - gchar *full_option_name = - g_strdup (gkbd_keyboard_config_merge_items - (current1st_level_id, config_item->name)); - gboolean initial_state; - - if (current_multi_select) - option_check = - gtk_check_button_new_with_label (utf_option_name); - else { - if (current_radio_group == NULL) { - /* The first radio in a group is to be "Default", meaning none of - the below options are to be included in the selected list. - This is a HIG-compliant alternative to allowing no - selection in the group. */ - option_check = - gtk_radio_button_new_with_label - (current_radio_group, _("Default")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON - (option_check), - TRUE); - /* Make option name underscore - - to enforce its first position in the list */ - g_object_set_data_full (G_OBJECT (option_check), - "utfOptionName", - g_strdup (" "), g_free); - option_checks_list = - g_slist_append (option_checks_list, - option_check); - current_radio_group = - gtk_radio_button_get_group (GTK_RADIO_BUTTON - (option_check)); - current_none_radio = option_check; - - g_signal_connect (option_check, "focus-in-event", - G_CALLBACK (option_focused_cb), - WID ("options_scroll")); - } - option_check = - gtk_radio_button_new_with_label (current_radio_group, - utf_option_name); - current_radio_group = - gtk_radio_button_get_group (GTK_RADIO_BUTTON - (option_check)); - g_object_set_data (G_OBJECT (option_check), "NoneRadio", - current_none_radio); - } - - initial_state = xkb_options_is_selected (full_option_name); - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (option_check), - initial_state); - - g_object_set_data_full (G_OBJECT (option_check), OPTION_ID_PROP, - full_option_name, g_free); - g_object_set_data_full (G_OBJECT (option_check), "utfOptionName", - utf_option_name, g_free); - - g_signal_connect (option_check, "toggled", - G_CALLBACK (option_toggled_cb), NULL); - - option_checks_list = - g_slist_append (option_checks_list, option_check); - - g_signal_connect (option_check, "focus-in-event", - G_CALLBACK (option_focused_cb), - WID ("options_scroll")); - - xkb_options_expander_selcounter_add (initial_state); - g_object_set_data (G_OBJECT (option_check), GCONFSTATE_PROP, - GINT_TO_POINTER (initial_state)); -} - -static gint -xkb_option_checks_compare (GtkWidget * chk1, GtkWidget * chk2) -{ - const gchar *t1 = - g_object_get_data (G_OBJECT (chk1), "utfOptionName"); - const gchar *t2 = - g_object_get_data (G_OBJECT (chk2), "utfOptionName"); - return g_utf8_collate (t1, t2); -} - -/* Add a group of options: create title and layout widgets and then - add widgets for all the options in the group. */ -static void -xkb_options_add_group (XklConfigRegistry * config_registry, - XklConfigItem * config_item, GtkBuilder * dialog) -{ - GtkWidget *align, *vbox, *option_check; - gboolean allow_multiple_selection = - GPOINTER_TO_INT (g_object_get_data (G_OBJECT (config_item), - XCI_PROP_ALLOW_MULTIPLE_SELECTION)); - - GSList *expanders_list = - g_object_get_data (G_OBJECT (dialog), EXPANDERS_PROP); - - gchar *utf_group_name = xci_desc_to_utf8 (config_item); - gchar *titlemarkup = - g_strconcat ("", utf_group_name, "", NULL); - - current_expander = gtk_expander_new (titlemarkup); - gtk_expander_set_use_markup (GTK_EXPANDER (current_expander), - TRUE); - g_object_set_data_full (G_OBJECT (current_expander), - "utfGroupName", utf_group_name, g_free); - g_object_set_data_full (G_OBJECT (current_expander), "groupId", - g_strdup (config_item->name), g_free); - - g_free (titlemarkup); - align = gtk_alignment_new (0, 0, 1, 1); - gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 12, 12, 0); - vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); - gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); - gtk_container_add (GTK_CONTAINER (align), vbox); - gtk_container_add (GTK_CONTAINER (current_expander), align); - - current_multi_select = (gboolean) allow_multiple_selection; - current_radio_group = NULL; - current1st_level_id = config_item->name; - - option_checks_list = NULL; - - xkl_config_registry_foreach_option (config_registry, - config_item->name, - (ConfigItemProcessFunc) - xkb_options_add_option, - dialog); - /* sort it */ - option_checks_list = - g_slist_sort (option_checks_list, - (GCompareFunc) xkb_option_checks_compare); - while (option_checks_list) { - option_check = GTK_WIDGET (option_checks_list->data); - gtk_box_pack_start (GTK_BOX (vbox), option_check, TRUE, - TRUE, 0); - option_checks_list = option_checks_list->next; - } - /* free it */ - g_slist_free (option_checks_list); - option_checks_list = NULL; - - xkb_options_expander_highlight (); - - expanders_list = g_slist_append (expanders_list, current_expander); - g_object_set_data (G_OBJECT (dialog), EXPANDERS_PROP, - expanders_list); - - g_signal_connect (current_expander, "focus-in-event", - G_CALLBACK (option_focused_cb), - WID ("options_scroll")); -} - -static gint -xkb_options_expanders_compare (GtkWidget * expander1, - GtkWidget * expander2) -{ - const gchar *t1 = - g_object_get_data (G_OBJECT (expander1), "utfGroupName"); - const gchar *t2 = - g_object_get_data (G_OBJECT (expander2), "utfGroupName"); - return g_utf8_collate (t1, t2); -} - -/* Create widgets to represent the options made available by the backend */ -void -xkb_options_load_options (GtkBuilder * dialog) -{ - GtkWidget *opts_vbox = WID ("options_vbox"); - GtkWidget *dialog_vbox = WID ("dialog_vbox"); - GtkWidget *options_scroll = WID ("options_scroll"); - GtkWidget *expander; - GSList *expanders_list; - - current1st_level_id = NULL; - current_none_radio = NULL; - current_multi_select = FALSE; - current_radio_group = NULL; - - /* fill the list */ - xkl_config_registry_foreach_option_group (config_registry, - (ConfigItemProcessFunc) - xkb_options_add_group, - dialog); - /* sort it */ - expanders_list = - g_object_get_data (G_OBJECT (dialog), EXPANDERS_PROP); - expanders_list = - g_slist_sort (expanders_list, - (GCompareFunc) xkb_options_expanders_compare); - g_object_set_data (G_OBJECT (dialog), EXPANDERS_PROP, - expanders_list); - while (expanders_list) { - expander = GTK_WIDGET (expanders_list->data); - gtk_box_pack_start (GTK_BOX (opts_vbox), expander, FALSE, - FALSE, 0); - expanders_list = expanders_list->next; - } - - /* Somewhere in gtk3 the top vbox in dialog is made non-expandable */ - gtk_box_set_child_packing (GTK_BOX (dialog_vbox), options_scroll, - TRUE, TRUE, 0, GTK_PACK_START); - gtk_widget_show_all (dialog_vbox); -} - -static void -chooser_response_cb (GtkDialog * dialog, gint response, gpointer data) -{ - switch (response) { - case GTK_RESPONSE_DELETE_EVENT: - case GTK_RESPONSE_CLOSE: { - /* just cleanup */ - GSList *expanders_list = - g_object_get_data (G_OBJECT (dialog), - EXPANDERS_PROP); - g_object_set_data (G_OBJECT (dialog), - EXPANDERS_PROP, NULL); - g_slist_free (expanders_list); - - gtk_widget_destroy (GTK_WIDGET (dialog)); - chooser_dialog = NULL; - } - break; - } -} - -/* Create popup dialog */ -void -xkb_options_popup_dialog (GtkBuilder * dialog) -{ - GtkWidget *chooser; - - chooser_dialog = gtk_builder_new (); - gtk_builder_add_from_file (chooser_dialog, GNOMECC_UI_DIR - "/gnome-region-panel-options-dialog.ui", - NULL); - - chooser = CWID ("xkb_options_dialog"); - gtk_window_set_transient_for (GTK_WINDOW (chooser), - GTK_WINDOW (gtk_widget_get_toplevel (WID ("region_notebook")))); - gtk_window_set_modal (GTK_WINDOW (chooser), TRUE); - xkb_options_load_options (chooser_dialog); - - g_signal_connect (chooser, "response", - G_CALLBACK (chooser_response_cb), dialog); - gtk_widget_show (chooser); -} - -/* Update selected option counters for a group-bound expander */ -static void -xkb_options_update_option_counters (XklConfigRegistry * config_registry, - XklConfigItem * config_item) -{ - gchar *full_option_name = - g_strdup (gkbd_keyboard_config_merge_items - (current1st_level_id, config_item->name)); - gboolean current_state = - xkb_options_is_selected (full_option_name); - g_free (full_option_name); - - xkb_options_expander_selcounter_add (current_state); -} - -/* Respond to a change in the xkb gconf settings */ -static void -xkb_options_update (GSettings * settings, gchar * key, GtkBuilder * dialog) -{ - if (!strcmp (key, GKBD_KEYBOARD_CONFIG_KEY_OPTIONS)) { - /* Updating options is handled by gconf notifies for each widget - This is here to avoid calling it N_OPTIONS times for each gconf - change. */ - enable_disable_restoring (dialog); - - if (chooser_dialog != NULL) { - GSList *expanders_list = - g_object_get_data (G_OBJECT (chooser_dialog), - EXPANDERS_PROP); - while (expanders_list) { - current_expander = - GTK_WIDGET (expanders_list->data); - gchar *group_id = - g_object_get_data (G_OBJECT - (current_expander), - "groupId"); - current1st_level_id = group_id; - xkb_options_expander_selcounter_reset (); - xkl_config_registry_foreach_option - (config_registry, group_id, - (ConfigItemProcessFunc) - xkb_options_update_option_counters, - current_expander); - xkb_options_expander_highlight (); - expanders_list = expanders_list->next; - } - } - } -} - -void -xkb_options_register_conf_listener (GtkBuilder * dialog) -{ - g_signal_connect (xkb_keyboard_settings, "changed", - G_CALLBACK (xkb_options_update), dialog); -} diff --git a/panels/region/gnome-region-panel-xkbpv.c b/panels/region/gnome-region-panel-xkbpv.c deleted file mode 100644 index 839aadf0d..000000000 --- a/panels/region/gnome-region-panel-xkbpv.c +++ /dev/null @@ -1,120 +0,0 @@ -/* gnome-region-panel-xkbpv.c - * Copyright (C) 2003-2007 Sergey V. Udaltsov - * - * Written by: Sergey V. Udaltsov - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -# include -#endif - -#include - -#include "gnome-region-panel-xkb.h" - -#ifdef HAVE_X11_EXTENSIONS_XKB_H -#include "X11/XKBlib.h" -/** - * BAD STYLE: Taken from xklavier_private_xkb.h - * Any ideas on architectural improvements are WELCOME - */ -extern gboolean xkl_xkb_config_native_prepare (XklEngine * engine, - const XklConfigRec * data, - XkbComponentNamesPtr - component_names); - -extern void xkl_xkb_config_native_cleanup (XklEngine * engine, - XkbComponentNamesPtr - component_names); - -/* */ -#endif - -static GkbdKeyboardDrawingGroupLevel groupsLevels[] = - { {0, 1}, {0, 3}, {0, 0}, {0, 2} }; -static GkbdKeyboardDrawingGroupLevel *pGroupsLevels[] = { - groupsLevels, groupsLevels + 1, groupsLevels + 2, groupsLevels + 3 -}; - -GtkWidget * -xkb_layout_preview_create_widget (GtkBuilder * chooserDialog) -{ - GtkWidget *kbdraw = gkbd_keyboard_drawing_new (); - - gkbd_keyboard_drawing_set_groups_levels (GKBD_KEYBOARD_DRAWING - (kbdraw), pGroupsLevels); - return kbdraw; -} - -void -xkb_layout_preview_set_drawing_layout (GtkWidget * kbdraw, - const gchar * id) -{ -#ifdef HAVE_X11_EXTENSIONS_XKB_H - if (kbdraw != NULL) { - if (id != NULL) { - XklConfigRec *data; - char **p, *layout, *variant; - XkbComponentNamesRec component_names; - - data = xkl_config_rec_new (); - if (xkl_config_rec_get_from_server (data, engine)) { - if ((p = data->layouts) != NULL) - g_strfreev (data->layouts); - - if ((p = data->variants) != NULL) - g_strfreev (data->variants); - - data->layouts = g_new0 (char *, 2); - data->variants = g_new0 (char *, 2); - if (gkbd_keyboard_config_split_items - (id, &layout, &variant) - && variant != NULL) { - data->layouts[0] = - (layout == - NULL) ? NULL : - g_strdup (layout); - data->variants[0] = - (variant == - NULL) ? NULL : - g_strdup (variant); - } else { - data->layouts[0] = - (id == - NULL) ? NULL : g_strdup (id); - data->variants[0] = NULL; - } - - if (xkl_xkb_config_native_prepare - (engine, data, &component_names)) { - gkbd_keyboard_drawing_set_keyboard - (GKBD_KEYBOARD_DRAWING - (kbdraw), &component_names); - - xkl_xkb_config_native_cleanup - (engine, &component_names); - } - } - g_object_unref (G_OBJECT (data)); - } else - gkbd_keyboard_drawing_set_keyboard - (GKBD_KEYBOARD_DRAWING (kbdraw), NULL); - - } -#endif -} diff --git a/panels/region/use_cases.txt b/panels/region/use_cases.txt deleted file mode 100644 index 33637eb35..000000000 --- a/panels/region/use_cases.txt +++ /dev/null @@ -1,42 +0,0 @@ -Preface - -This document describes the scenarios which have to be checked every time someone makes changes in the gnome keyboard handling modules, namely: - -- libxklavier (project in freedesktop.org CVS) -- libgswitchit (virtual module in gnome.org CVS) -- gnome-settings-daemon (module in gnome-control-center, gnome.org CVS) -- gnome-keyboard-properties (module in gnome-control-center, gnome.org CVS) -- gnome-keyboard-indicator (module in gnome-applets, gnome.org CVS) - -Changes in configuration - -The tests should be performed under different configurations, controlled by several variables: - -- "group per window" mode (GPW: on/off): visible in UI -- "default group" (DG: switchited off - or some group selected): only in GConf -- "keep indicators with the group" (IPW: on/off): only in GConf -- "hidden groups" (HG: some list of groups, can be empty): only in GConf - -Taking that parameters DG and IPW only make sense when GPW is on, there are 5 combinations possible for the first 3 parameters. Taking that DG and IPW do not interfere, it is reasonable to test 3 combinations: - -- GPW: off -- GPW: on, DG: off, IPW: off -- GPW: on, DG: {some value}, IPW: on - -It is necessary to perform each test with the empty and non-empty HG. If HG is not empty, every test should be performed with both "enabled" and "hidden" groups. - -Test cases - -1. Open a terminal window. Type in some characters. Change the group using some chosen keyboard combination (default LAlt-RAlt or any other from the list of available ones). Type in some characters - ensure the group was changed. - -2. Same as #1 - but change the group by clicking on the indicator applet - -3. Same as #1 - but choose the group from the applet's menu - -4. Set the US group in one terminal window. Create new terminal window. Ensure the group matches the DG setting. - -5. Switch between two terminal windows using Alt-Tab. Ensure the behaviour matches the GPW setting and IPW setting. - -6. Same as #5, but switch using the panel WindowList applet. - -7. Change the settings in g-k-p, ensure the applet picks the changes.