moving layout options to separate popup

svn path=/trunk/; revision=8248
This commit is contained in:
Sergey V. Udaltsov 2007-11-03 02:22:05 +00:00
parent 24f4ae9df5
commit 071af09ea6
9 changed files with 422 additions and 287 deletions

View file

@ -1,3 +1,11 @@
2007-11-03 Sergey Udaltsov <svu@gnome.org>
* gnome-keyboard-properties-xkblt.c, gnome-keyboard-properties-xkb.c,
gnome-keyboard-properties-xkbot.c, gnome-keyboard-properties-xkb.h,
gnome-keyboard-properties-xkbpv.c, gnome-keyboard-properties.glade,
gnome-keyboard-properties-xkbltadd.c, gnome-keyboard-properties.c:
moving layout options to separate popup, according to Denis's mockups.
2007-10-31 Kjartan Maraas <kmaraas@gnome.org>
* gnome-keyboard-properties-xkblt.c:

View file

@ -170,19 +170,19 @@ setup_xkb_tabs (GladeXML * dialog, GConfChangeSet * changeset)
g_signal_connect (peditor, "value-changed", (GCallback)
chk_separate_group_per_window_toggled, dialog);
/* tab 2 */
/*fill_available_layouts_tree (dialog); */
xkb_layouts_prepare_selected_tree (dialog, changeset);
xkb_layouts_fill_selected_tree (dialog);
/* tab 3 */
xkb_options_load_options (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_swapped (G_OBJECT (WID ("xkb_layout_options")),
"clicked",
G_CALLBACK (xkb_options_popup_dialog),
dialog);
g_signal_connect_swapped (G_OBJECT (WID ("xkb_model_pick")),
"clicked", G_CALLBACK (choose_model),
dialog);

View file

@ -50,6 +50,8 @@ extern void xkb_layouts_prepare_selected_tree (GladeXML * dialog,
extern void xkb_options_load_options (GladeXML * dialog);
extern void xkb_options_popup_dialog(GladeXML * dialog);
extern void clear_xkb_elements_list (GSList * list);
extern char *xci_desc_to_utf8 (XklConfigItem * ci);

View file

@ -347,9 +347,10 @@ xkb_layouts_prepare_selected_tree (GladeXML * dialog,
&self_drag_target, 1, GDK_ACTION_MOVE);
g_signal_connect (G_OBJECT (tree_view), "drag_data_get",
G_CALLBACK (xkb_layouts_dnd_data_get), dialog);
G_CALLBACK (xkb_layouts_dnd_data_get), dialog);
g_signal_connect (G_OBJECT (tree_view), "drag_data_received",
G_CALLBACK (xkb_layouts_dnd_data_received), dialog);
G_CALLBACK (xkb_layouts_dnd_data_received),
dialog);
}
void

View file

@ -41,9 +41,9 @@
#define DEFAULT_VARIANT_ID "__default__"
enum {
COMBO_BOX_MODEL_COL_DESCRIPTION,
COMBO_BOX_MODEL_COL_ID,
COMBO_BOX_MODEL_COL_IS_DEFAULT
COMBO_BOX_MODEL_COL_DESCRIPTION,
COMBO_BOX_MODEL_COL_ID,
COMBO_BOX_MODEL_COL_IS_DEFAULT
};
typedef struct {
@ -62,7 +62,7 @@ xkb_layout_chooser_add_variant_to_available_variants (XklConfigRegistry *
config_registry,
XklConfigItem *
config_item,
AddVariantData *
AddVariantData *
data)
{
char *utf_variant_name = xci_desc_to_utf8 (config_item);
@ -74,8 +74,7 @@ xkb_layout_chooser_add_variant_to_available_variants (XklConfigRegistry *
COMBO_BOX_MODEL_COL_ID,
config_item->name,
COMBO_BOX_MODEL_COL_IS_DEFAULT,
FALSE,
-1);
FALSE, -1);
g_free (utf_variant_name);
data->n_items++;
@ -86,15 +85,17 @@ xkb_layout_chooser_add_layout_to_available_layouts (XklConfigRegistry *
config_registry,
XklConfigItem *
config_item,
GtkListStore *list_store)
GtkListStore *
list_store)
{
char *utf_layout_name = xci_desc_to_utf8 (config_item);
GtkTreeIter iter;
gtk_list_store_insert_with_values (list_store, &iter, -1,
COMBO_BOX_MODEL_COL_DESCRIPTION, utf_layout_name,
COMBO_BOX_MODEL_COL_ID, config_item->name,
-1);
COMBO_BOX_MODEL_COL_DESCRIPTION,
utf_layout_name,
COMBO_BOX_MODEL_COL_ID,
config_item->name, -1);
g_free (utf_layout_name);
}
@ -106,7 +107,8 @@ xkb_layout_chooser_enable_disable_buttons (GladeXML * chooser_dialog)
GtkTreeIter liter, viter;
gboolean enable_ok =
gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbel), &liter)
&& gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbev), &viter);
&& gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbev),
&viter);
gtk_dialog_set_response_sensitive (GTK_DIALOG
(CWID ("xkb_layout_chooser")),
@ -128,23 +130,23 @@ xkb_layout_chooser_available_layout_changed (GladeXML * chooser_dialog)
}
static gint
xkb_layout_chooser_variant_compare_func (GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
xkb_layout_chooser_variant_compare_func (GtkTreeModel * model,
GtkTreeIter * a,
GtkTreeIter * b,
gpointer user_data)
{
gchar *desc_a = NULL, *desc_b = NULL;
gboolean a_is_default, b_is_default;
gint retval;
gtk_tree_model_get (model, a,
COMBO_BOX_MODEL_COL_DESCRIPTION, &desc_a,
COMBO_BOX_MODEL_COL_IS_DEFAULT, &a_is_default,
-1);
COMBO_BOX_MODEL_COL_IS_DEFAULT, &a_is_default,
-1);
gtk_tree_model_get (model, b,
COMBO_BOX_MODEL_COL_DESCRIPTION, &desc_b,
COMBO_BOX_MODEL_COL_IS_DEFAULT, &b_is_default,
-1);
COMBO_BOX_MODEL_COL_IS_DEFAULT, &b_is_default,
-1);
if (a_is_default || b_is_default)
retval = b_is_default - a_is_default;
@ -173,7 +175,8 @@ xkl_layout_chooser_separate_default_variant (GtkTreeModel * model,
gchar *id;
/* Rows with COMBO_BOX_MODEL_COL_DESCRIPTION value NULL are separators */
gtk_tree_model_get (model, iter, COMBO_BOX_MODEL_COL_DESCRIPTION, &id, -1);
gtk_tree_model_get (model, iter, COMBO_BOX_MODEL_COL_DESCRIPTION,
&id, -1);
g_free (id);
return id == NULL;
@ -189,9 +192,9 @@ xkb_layout_chooser_available_variants_fill (GladeXML * chooser_dialog)
GtkTreeIter liter, vdefault_iter;
gboolean set_default = FALSE;
model = GTK_TREE_MODEL (gtk_list_store_new
model = GTK_TREE_MODEL (gtk_list_store_new
(3, G_TYPE_STRING, G_TYPE_STRING,
G_TYPE_BOOLEAN));
G_TYPE_BOOLEAN));
if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbel), &liter)) {
GtkTreeModel *lm =
@ -201,54 +204,56 @@ xkb_layout_chooser_available_variants_fill (GladeXML * chooser_dialog)
AddVariantData data = { GTK_LIST_STORE (model), 0 };
/* The 'Default' row */
gtk_list_store_insert_with_values (GTK_LIST_STORE (model), &vdefault_iter, -1,
gtk_list_store_insert_with_values (GTK_LIST_STORE (model),
&vdefault_iter, -1,
COMBO_BOX_MODEL_COL_DESCRIPTION,
_("Default"),
COMBO_BOX_MODEL_COL_ID,
DEFAULT_VARIANT_ID,
COMBO_BOX_MODEL_COL_IS_DEFAULT, TRUE,
-1);
COMBO_BOX_MODEL_COL_IS_DEFAULT,
TRUE, -1);
set_default = TRUE;
/* Now the variants of the selected lang */
gtk_tree_model_get (lm, &liter,
COMBO_BOX_MODEL_COL_ID, &value,
-1);
COMBO_BOX_MODEL_COL_ID, &value, -1);
g_assert (value != NULL);
xkl_config_registry_foreach_layout_variant
(config_registry, value,
(ConfigItemProcessFunc)
(config_registry, value, (ConfigItemProcessFunc)
xkb_layout_chooser_add_variant_to_available_variants,
&data);
g_free (value);
/* Add a separator row, but only if we have any non-default items */
if (data.n_items > 0)
gtk_list_store_insert_with_values (GTK_LIST_STORE (model), &viter, -1,
gtk_list_store_insert_with_values (GTK_LIST_STORE
(model), &viter,
-1,
COMBO_BOX_MODEL_COL_DESCRIPTION,
NULL,
COMBO_BOX_MODEL_COL_ID,
COMBO_BOX_MODEL_COL_ID,
NULL,
COMBO_BOX_MODEL_COL_IS_DEFAULT, FALSE,
-1);
COMBO_BOX_MODEL_COL_IS_DEFAULT,
FALSE, -1);
}
/* Turn on sorting after filling the store, since that's faster */
gtk_tree_sortable_set_sort_func (GTK_TREE_SORTABLE (model),
COMBO_BOX_MODEL_COL_DESCRIPTION,
(GtkTreeIterCompareFunc)
(GtkTreeIterCompareFunc)
xkb_layout_chooser_variant_compare_func,
NULL, NULL);
NULL, NULL);
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
COMBO_BOX_MODEL_COL_DESCRIPTION,
GTK_SORT_ASCENDING);
GTK_SORT_ASCENDING);
gtk_combo_box_set_model (GTK_COMBO_BOX (cbev), model);
/* Select the default variant */
if (set_default) {
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (cbev), &vdefault_iter);
gtk_combo_box_set_active_iter (GTK_COMBO_BOX (cbev),
&vdefault_iter);
}
}
@ -259,15 +264,17 @@ xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog)
GtkWidget *cbev = CWID ("xkb_variants_available");
GtkCellRenderer *renderer;
GtkTreeModel *model =
GTK_TREE_MODEL (gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING));
GTK_TREE_MODEL (gtk_list_store_new
(2, G_TYPE_STRING, G_TYPE_STRING));
gtk_combo_box_set_model (GTK_COMBO_BOX (cbe), model);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbe), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbe), renderer,
"text", COMBO_BOX_MODEL_COL_DESCRIPTION,
NULL);
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbe), renderer, TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbe), renderer,
"text",
COMBO_BOX_MODEL_COL_DESCRIPTION,
NULL);
xkl_config_registry_foreach_layout (config_registry,
(ConfigItemProcessFunc)
@ -277,7 +284,7 @@ xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog)
/* Turn on sorting after filling the model since that's faster */
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (model),
COMBO_BOX_MODEL_COL_DESCRIPTION,
GTK_SORT_ASCENDING);
GTK_SORT_ASCENDING);
g_signal_connect_swapped (G_OBJECT (cbe), "changed",
G_CALLBACK
@ -286,9 +293,11 @@ xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog)
/* Setup the variants combo */
renderer = gtk_cell_renderer_text_new ();
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbev), renderer, TRUE);
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbev), renderer,
TRUE);
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbev), renderer,
"text", COMBO_BOX_MODEL_COL_DESCRIPTION,
"text",
COMBO_BOX_MODEL_COL_DESCRIPTION,
NULL);
g_signal_connect_swapped (G_OBJECT (cbev), "changed",
@ -298,8 +307,7 @@ xkb_layout_chooser_available_layouts_fill (GladeXML * chooser_dialog)
gtk_combo_box_set_row_separator_func (GTK_COMBO_BOX (cbev),
(GtkTreeViewRowSeparatorFunc)
xkl_layout_chooser_separate_default_variant,
chooser_dialog,
NULL);
chooser_dialog, NULL);
}
void
@ -443,20 +451,21 @@ xkb_layout_chooser_get_selected_id (GladeXML * chooser_dialog)
gchar *lname, *vname;
gchar *retval;
if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbel), &liter) ||
!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbev), &viter))
if (!gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbel), &liter)
|| !gtk_combo_box_get_active_iter (GTK_COMBO_BOX (cbev),
&viter))
return NULL;
gtk_tree_model_get (lm, &liter,
COMBO_BOX_MODEL_COL_ID, &lname,
-1);
COMBO_BOX_MODEL_COL_ID, &lname, -1);
gtk_tree_model_get (vm, &viter,
COMBO_BOX_MODEL_COL_ID, &vname,
-1);
COMBO_BOX_MODEL_COL_ID, &vname, -1);
if (strcmp (vname, DEFAULT_VARIANT_ID))
retval = g_strdup (gkbd_keyboard_config_merge_items (lname, vname));
retval =
g_strdup (gkbd_keyboard_config_merge_items
(lname, vname));
else
retval = g_strdup (lname);

View file

@ -182,38 +182,6 @@ option_toggled_cb (GtkWidget * checkbutton, gpointer data)
xkb_options_deselect (optionID);
}
/* Update UI state from xkb backend */
static void
option_update_cb (GConfClient * client,
guint cnxn_id, GConfEntry * entry, gpointer data)
{
GtkToggleButton *toggle = GTK_TOGGLE_BUTTON (data);
GtkWidget *expander =
xkb_options_get_expander (GTK_WIDGET (toggle));
gboolean old_state = gtk_toggle_button_get_active (toggle);
gboolean new_state =
xkb_options_is_selected (g_object_get_data
(G_OBJECT (toggle), OPTION_ID_PROP));
int old_gstate =
GPOINTER_TO_INT (g_object_get_data
(G_OBJECT (toggle), GCONFSTATE_PROP));
int state_diff = new_state - old_gstate;
if (GTK_WIDGET_TYPE (toggle) == GTK_TYPE_RADIO_BUTTON &&
old_state == TRUE && new_state == FALSE)
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
(g_object_get_data
(G_OBJECT (toggle),
"NoneRadio")), TRUE);
else
gtk_toggle_button_set_active (toggle, new_state);
g_object_set_data (G_OBJECT (toggle), GCONFSTATE_PROP,
GINT_TO_POINTER (new_state));
xkb_options_expander_selcounter_add (expander, state_diff);
xkb_options_expander_highlight (expander);
}
/* 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. */
@ -274,12 +242,6 @@ xkb_options_add_option (XklConfigRegistry * config_registry,
g_signal_connect (G_OBJECT (option_check), "toggled",
G_CALLBACK (option_toggled_cb), NULL);
gconf_client_notify_add (xkb_gconf_client,
GKBD_KEYBOARD_CONFIG_KEY_OPTIONS,
(GConfClientNotifyFunc)
option_update_cb, option_check, NULL,
NULL);
gtk_box_pack_start_defaults (GTK_BOX (current_vbox), option_check);
xkb_options_expander_selcounter_add (xkb_options_get_expander
@ -356,6 +318,12 @@ xkb_options_load_options (GladeXML * dialog)
GSList *expanders_list;
GtkWidget *expander;
current1st_level_id = NULL;
current_vbox = 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)
@ -383,6 +351,27 @@ xkb_options_load_options (GladeXML * dialog)
gtk_widget_show_all (opts_vbox);
}
/* Create popup dialog*/
void
xkb_options_popup_dialog (GladeXML * dialog)
{
GladeXML *chooser_dialog =
glade_xml_new (GNOMECC_GLADE_DIR
"/gnome-keyboard-properties.glade",
"xkb_options_dialog", NULL);
GtkWidget *chooser = CWID ("xkb_options_dialog");
gtk_window_set_transient_for (GTK_WINDOW (chooser),
GTK_WINDOW (WID
("keyboard_dialog")));
xkb_options_load_options (chooser_dialog);
gtk_dialog_run (GTK_DIALOG (chooser));
gtk_widget_destroy (chooser);
}
/* Respond to a change in the xkb gconf settings */
static void
xkb_options_update (GConfClient * client,

View file

@ -74,8 +74,7 @@ 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);
gchar *id = xkb_layout_chooser_get_selected_id (chooser_dialog);
if (kbdraw != NULL && id != NULL) {
XklConfigRec *data;

View file

@ -40,8 +40,7 @@
#include "gnome-keyboard-properties-xkb.h"
enum
{
enum {
RESPONSE_APPLY = 1,
RESPONSE_CLOSE
};
@ -53,7 +52,10 @@ create_dialog (void)
GtkSizeGroup *size_group;
GtkWidget *image;
dialog = glade_xml_new (GNOMECC_GLADE_DIR "/gnome-keyboard-properties.glade", "keyboard_dialog", NULL);
dialog =
glade_xml_new (GNOMECC_GLADE_DIR
"/gnome-keyboard-properties.glade",
"keyboard_dialog", NULL);
size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
gtk_size_group_add_widget (size_group, WID ("repeat_slow_label"));
@ -70,65 +72,75 @@ create_dialog (void)
size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
gtk_size_group_add_widget (size_group, WID ("repeat_delay_scale"));
gtk_size_group_add_widget (size_group, WID ("repeat_speed_scale"));
gtk_size_group_add_widget (size_group, WID ("cursor_blink_time_scale"));
gtk_size_group_add_widget (size_group,
WID ("cursor_blink_time_scale"));
g_object_unref (G_OBJECT (size_group));
image = gtk_image_new_from_stock (GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_BUTTON);
gtk_button_set_image (GTK_BUTTON (WID ("accessibility_button")), image);
image =
gtk_image_new_from_stock (GTK_STOCK_JUMP_TO,
GTK_ICON_SIZE_BUTTON);
gtk_button_set_image (GTK_BUTTON (WID ("accessibility_button")),
image);
image = gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
image =
gtk_image_new_from_stock (GTK_STOCK_ADD, GTK_ICON_SIZE_BUTTON);
gtk_button_set_image (GTK_BUTTON (WID ("xkb_layouts_add")), image);
image = gtk_image_new_from_stock (GTK_STOCK_REFRESH, GTK_ICON_SIZE_BUTTON);
gtk_button_set_image (GTK_BUTTON (WID ("xkb_reset_to_defaults")), image);
image =
gtk_image_new_from_stock (GTK_STOCK_REFRESH,
GTK_ICON_SIZE_BUTTON);
gtk_button_set_image (GTK_BUTTON (WID ("xkb_reset_to_defaults")),
image);
return dialog;
}
static GConfValue *
blink_from_widget (GConfPropertyEditor *peditor, const GConfValue *value)
blink_from_widget (GConfPropertyEditor * peditor, const GConfValue * value)
{
GConfValue *new_value;
new_value = gconf_value_new (GCONF_VALUE_INT);
gconf_value_set_int (new_value, 2600 - gconf_value_get_int (value));
gconf_value_set_int (new_value,
2600 - gconf_value_get_int (value));
return new_value;
}
static GConfValue *
blink_to_widget (GConfPropertyEditor *peditor, const GConfValue *value)
blink_to_widget (GConfPropertyEditor * peditor, const GConfValue * value)
{
GConfValue *new_value;
gint current_rate;
current_rate = gconf_value_get_int (value);
new_value = gconf_value_new (GCONF_VALUE_INT);
gconf_value_set_int (new_value, CLAMP (2600 - current_rate, 100, 2500));
gconf_value_set_int (new_value,
CLAMP (2600 - current_rate, 100, 2500));
return new_value;
}
static void
accessibility_button_clicked (GtkWidget *widget,
gpointer data)
accessibility_button_clicked (GtkWidget * widget, gpointer data)
{
GError *err = NULL;
if (!g_spawn_command_line_async ("gnome-accessibility-keyboard-properties", &err))
capplet_error_dialog (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
_("There was an error launching the keyboard tool: %s"),
err);
if (!g_spawn_command_line_async
("gnome-accessibility-keyboard-properties", &err))
capplet_error_dialog (GTK_WINDOW
(gtk_widget_get_toplevel (widget)),
_
("There was an error launching the keyboard tool: %s"),
err);
}
static void
dialog_response (GtkWidget *widget,
gint response_id,
GConfChangeSet *changeset)
dialog_response (GtkWidget * widget,
gint response_id, GConfChangeSet * changeset)
{
if (response_id == GTK_RESPONSE_HELP)
capplet_help (GTK_WINDOW (widget),
"user-guide.xml",
"goscustperiph-2");
"user-guide.xml", "goscustperiph-2");
else if (response_id == 0)
accessibility_button_clicked (NULL, NULL);
else
@ -136,8 +148,7 @@ dialog_response (GtkWidget *widget,
}
static void
setup_dialog (GladeXML *dialog,
GConfChangeSet *changeset)
setup_dialog (GladeXML * dialog, GConfChangeSet * changeset)
{
GObject *peditor;
@ -145,41 +156,57 @@ setup_dialog (GladeXML *dialog,
capplet_init_stock_icons ();
peditor = gconf_peditor_new_boolean
(changeset, "/desktop/gnome/peripherals/keyboard/repeat", WID ("repeat_toggle"), NULL);
gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("repeat_table"));
(changeset, "/desktop/gnome/peripherals/keyboard/repeat",
WID ("repeat_toggle"), NULL);
gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor),
WID ("repeat_table"));
gconf_peditor_new_numeric_range
(changeset, "/desktop/gnome/peripherals/keyboard/delay", WID ("repeat_delay_scale"),
NULL);
(changeset, "/desktop/gnome/peripherals/keyboard/delay",
WID ("repeat_delay_scale"), NULL);
gconf_peditor_new_numeric_range
(changeset, "/desktop/gnome/peripherals/keyboard/rate", WID ("repeat_speed_scale"),
NULL);
(changeset, "/desktop/gnome/peripherals/keyboard/rate",
WID ("repeat_speed_scale"), NULL);
peditor = gconf_peditor_new_boolean
(changeset, "/desktop/gnome/interface/cursor_blink", WID ("cursor_toggle"), NULL);
gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("cursor_hbox"));
gconf_peditor_new_numeric_range
(changeset, "/desktop/gnome/interface/cursor_blink_time", WID ("cursor_blink_time_scale"),
"conv-to-widget-cb", blink_to_widget,
"conv-from-widget-cb", blink_from_widget,
NULL);
(changeset, "/desktop/gnome/interface/cursor_blink",
WID ("cursor_toggle"), NULL);
gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor),
WID ("cursor_hbox"));
gconf_peditor_new_numeric_range (changeset,
"/desktop/gnome/interface/cursor_blink_time",
WID ("cursor_blink_time_scale"),
"conv-to-widget-cb",
blink_to_widget,
"conv-from-widget-cb",
blink_from_widget, NULL);
/* Ergonomics */
peditor = gconf_peditor_new_boolean
(changeset, "/desktop/gnome/typing_break/enabled", WID ("break_enabled_toggle"), NULL);
gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("break_details_table"));
gconf_peditor_new_numeric_range
(changeset, "/desktop/gnome/typing_break/type_time", WID ("break_enabled_spin"), NULL);
gconf_peditor_new_numeric_range
(changeset, "/desktop/gnome/typing_break/break_time", WID ("break_interval_spin"), NULL);
gconf_peditor_new_boolean
(changeset, "/desktop/gnome/typing_break/allow_postpone", WID ("break_postponement_toggle"), NULL);
g_signal_connect (G_OBJECT (WID ("keyboard_dialog")), "response", (GCallback) dialog_response, changeset);
(changeset, "/desktop/gnome/typing_break/enabled",
WID ("break_enabled_toggle"), NULL);
gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor),
WID ("break_details_table"));
gconf_peditor_new_numeric_range (changeset,
"/desktop/gnome/typing_break/type_time",
WID ("break_enabled_spin"), NULL);
gconf_peditor_new_numeric_range (changeset,
"/desktop/gnome/typing_break/break_time",
WID ("break_interval_spin"),
NULL);
gconf_peditor_new_boolean (changeset,
"/desktop/gnome/typing_break/allow_postpone",
WID ("break_postponement_toggle"),
NULL);
g_signal_connect (G_OBJECT (WID ("keyboard_dialog")), "response",
(GCallback) dialog_response, changeset);
gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("break_enabled_toggle"))->child), TRUE);
gtk_label_set_use_markup (GTK_LABEL
(GTK_BIN (WID ("break_enabled_toggle"))->
child), TRUE);
setup_xkb_tabs(dialog,changeset);
setup_xkb_tabs (dialog, changeset);
}
static void
@ -191,25 +218,40 @@ get_legacy_settings (void)
client = gconf_client_get_default ();
COPY_FROM_LEGACY (bool, "/gnome/desktop/peripherals/keyboard/repeat", "/Desktop/Keyboard/repeat=true");
COPY_FROM_LEGACY (bool, "/gnome/desktop/peripherals/keyboard/click", "/Desktop/Keyboard/click=true");
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/rate", "/Desktop/Keyboard/rate=30");
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/delay", "/Desktop/Keyboard/delay=500");
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/volume", "/Desktop/Keyboard/clickvolume=0");
COPY_FROM_LEGACY (bool,
"/gnome/desktop/peripherals/keyboard/repeat",
"/Desktop/Keyboard/repeat=true");
COPY_FROM_LEGACY (bool,
"/gnome/desktop/peripherals/keyboard/click",
"/Desktop/Keyboard/click=true");
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/rate",
"/Desktop/Keyboard/rate=30");
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/delay",
"/Desktop/Keyboard/delay=500");
COPY_FROM_LEGACY (int,
"/gnome/desktop/peripherals/keyboard/volume",
"/Desktop/Keyboard/clickvolume=0");
#if 0
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/bell_volume", "/Desktop/Bell/percent=50");
COPY_FROM_LEGACY (int,
"/gnome/desktop/peripherals/keyboard/bell_volume",
"/Desktop/Bell/percent=50");
#endif
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/bell_pitch", "/Desktop/Bell/pitch=50");
COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/bell_duration", "/Desktop/Bell/duration=100");
COPY_FROM_LEGACY (int,
"/gnome/desktop/peripherals/keyboard/bell_pitch",
"/Desktop/Bell/pitch=50");
COPY_FROM_LEGACY (int,
"/gnome/desktop/peripherals/keyboard/bell_duration",
"/Desktop/Bell/duration=100");
g_object_unref (G_OBJECT (client));
}
#if 0
static void
setup_accessibility (GladeXML *dialog, GConfChangeSet *changeset)
setup_accessibility (GladeXML * dialog, GConfChangeSet * changeset)
{
GtkWidget *notebook = WID ("notebook1");
GtkWidget *label = gtk_label_new_with_mnemonic (_("_Accessibility"));
GtkWidget *label =
gtk_label_new_with_mnemonic (_("_Accessibility"));
GtkWidget *page = setup_accessX_dialog (changeset, FALSE);
gtk_notebook_append_page (GTK_NOTEBOOK (notebook), page, label);
}
@ -218,9 +260,9 @@ setup_accessibility (GladeXML *dialog, GConfChangeSet *changeset)
int
main (int argc, char **argv)
{
GConfClient *client;
GConfClient *client;
GConfChangeSet *changeset;
GladeXML *dialog;
GladeXML *dialog;
GOptionContext *context;
static gboolean apply_only = FALSE;
@ -228,15 +270,23 @@ main (int argc, char **argv)
static gboolean switch_to_typing_break_page = FALSE;
static GOptionEntry cap_options[] = {
{ "apply", 0, 0, G_OPTION_ARG_NONE, &apply_only,
N_("Just apply settings and quit (compatibility only; now handled by daemon)"), NULL },
{ "init-session-settings", 0, 0, G_OPTION_ARG_NONE, &apply_only,
N_("Just apply settings and quit (compatibility only; now handled by daemon)"), NULL },
{ "get-legacy", 0, 0, G_OPTION_ARG_NONE, &get_legacy,
N_("Retrieve and store legacy settings"), NULL },
{ "typing-break", 0, 0, G_OPTION_ARG_NONE, &switch_to_typing_break_page,
N_("Start the page with the typing break settings showing"), NULL },
{ NULL }
{"apply", 0, 0, G_OPTION_ARG_NONE, &apply_only,
N_
("Just apply settings and quit (compatibility only; now handled by daemon)"),
NULL},
{"init-session-settings", 0, 0, G_OPTION_ARG_NONE,
&apply_only,
N_
("Just apply settings and quit (compatibility only; now handled by daemon)"),
NULL},
{"get-legacy", 0, 0, G_OPTION_ARG_NONE, &get_legacy,
N_("Retrieve and store legacy settings"), NULL},
{"typing-break", 0, 0, G_OPTION_ARG_NONE,
&switch_to_typing_break_page,
N_
("Start the page with the typing break settings showing"),
NULL},
{NULL}
};
bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
@ -244,9 +294,11 @@ main (int argc, char **argv)
textdomain (GETTEXT_PACKAGE);
context = g_option_context_new (_("- GNOME Keyboard Preferences"));
g_option_context_add_main_entries (context, cap_options, GETTEXT_PACKAGE);
g_option_context_add_main_entries (context, cap_options,
GETTEXT_PACKAGE);
gnome_program_init ("gnome-keyboard-properties", VERSION, LIBGNOMEUI_MODULE, argc, argv,
gnome_program_init ("gnome-keyboard-properties", VERSION,
LIBGNOMEUI_MODULE, argc, argv,
GNOME_PARAM_GOPTION_CONTEXT, context,
GNOME_PARAM_APP_DATADIR, GNOMECC_DATA_DIR,
NULL);
@ -254,8 +306,11 @@ main (int argc, char **argv)
activate_settings_daemon ();
client = gconf_client_get_default ();
gconf_client_add_dir (client, "/desktop/gnome/peripherals/keyboard", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
gconf_client_add_dir (client, "/desktop/gnome/interface", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
gconf_client_add_dir (client,
"/desktop/gnome/peripherals/keyboard",
GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
gconf_client_add_dir (client, "/desktop/gnome/interface",
GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
g_object_unref (client);
if (get_legacy) {
@ -265,7 +320,10 @@ main (int argc, char **argv)
dialog = create_dialog ();
setup_dialog (dialog, changeset);
if (switch_to_typing_break_page) {
gtk_notebook_set_current_page (GTK_NOTEBOOK (WID ("keyboard_notebook")), 3);
gtk_notebook_set_current_page (GTK_NOTEBOOK
(WID
("keyboard_notebook")),
3);
}
capplet_set_icon (WID ("keyboard_dialog"),
"gnome-dev-keyboard");

View file

@ -62,6 +62,7 @@
<property name="can_focus">True</property>
<property name="label" translatable="yes">Key presses _repeat when key is held down</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
@ -260,6 +261,7 @@
<property name="can_focus">True</property>
<property name="label" translatable="yes">Cursor _blinks in text boxes and fields</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
@ -389,9 +391,6 @@
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label1">
@ -401,7 +400,6 @@
</widget>
<packing>
<property name="type">tab</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
@ -409,59 +407,61 @@
<widget class="GtkVBox" id="vbox33">
<property name="visible">True</property>
<property name="border_width">12</property>
<property name="spacing">18</property>
<child>
<widget class="GtkVBox" id="vbox34">
<widget class="GtkHBox" id="xkb_models_box">
<property name="visible">True</property>
<property name="spacing">6</property>
<property name="spacing">12</property>
<child>
<widget class="GtkHBox" id="xkb_models_box">
<widget class="GtkLabel" id="label48">
<property name="visible">True</property>
<property name="spacing">12</property>
<child>
<widget class="GtkLabel" id="label48">
<property name="visible">True</property>
<property name="xalign">0</property>
<property name="label" translatable="yes">Keyboard _model:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">xkb_model</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="xkb_model">
<property name="visible">True</property>
<property name="editable">False</property>
<property name="text" translatable="yes">Microsoft Natural Keyboard</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="xkb_model_pick">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Choose...</property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<property name="xalign">0</property>
<property name="label" translatable="yes">Keyboard _model:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">xkb_model</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="xkb_model">
<property name="visible">True</property>
<property name="editable">False</property>
<property name="text" translatable="yes">Microsoft Natural Keyboard</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="xkb_model_pick">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">Choose...</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox34">
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
<widget class="GtkVBox" id="vbox41">
<property name="visible">True</property>
@ -504,9 +504,6 @@
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="chk_separate_group_per_window">
@ -514,36 +511,42 @@
<property name="can_focus">True</property>
<property name="label" translatable="yes">Separate _layout for each window</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox30">
<widget class="GtkHButtonBox" id="hbuttonbox2">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">6</property>
<child>
<widget class="GtkButton" id="xkb_layouts_add">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Add...</property>
<property name="use_underline">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="xkb_layouts_remove">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-remove</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="xkb_layouts_add">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Add...</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="expand">False</property>
@ -557,26 +560,51 @@
<property name="can_focus">True</property>
<property name="label" translatable="yes">Reset to De_faults</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="pack_type">GTK_PACK_END</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">3</property>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkHButtonBox" id="hbuttonbox3">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="xkb_layout_options">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Layout _Options...</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
@ -587,43 +615,6 @@
<packing>
<property name="type">tab</property>
<property name="position">1</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow7">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">12</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<child>
<widget class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkVBox" id="options_vbox">
<property name="visible">True</property>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">2</property>
<property name="tab_expand">False</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label64">
<property name="visible">True</property>
<property name="label" translatable="yes">Layout Options</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="position">2</property>
<property name="tab_expand">False</property>
<property name="tab_fill">False</property>
</packing>
</child>
@ -647,6 +638,7 @@
<property name="tooltip" translatable="yes">Lock screen after a certain duration to help prevent repetitive keyboard use injuries</property>
<property name="label" translatable="yes">&lt;b&gt;_Lock screen to enforce typing break&lt;/b&gt;</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
@ -780,6 +772,7 @@
<property name="tooltip" translatable="yes">Check if breaks are allowed to be postponed</property>
<property name="label" translatable="yes">All_ow postponing of breaks</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
@ -806,8 +799,7 @@
</child>
</widget>
<packing>
<property name="position">3</property>
<property name="tab_expand">False</property>
<property name="position">2</property>
</packing>
</child>
<child>
@ -817,8 +809,7 @@
</widget>
<packing>
<property name="type">tab</property>
<property name="position">3</property>
<property name="tab_expand">False</property>
<property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
@ -848,6 +839,7 @@
<property name="can_default">True</property>
<property name="label" translatable="yes">_Accessibility...</property>
<property name="use_underline">True</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="position">1</property>
@ -1154,4 +1146,81 @@
</widget>
</child>
</widget>
<widget class="GtkDialog" id="xkb_options_dialog">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="border_width">5</property>
<property name="title" translatable="yes">Keyboard Layout Options</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="default_width">550</property>
<property name="default_height">400</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="spacing">2</property>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow7">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="border_width">5</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="shadow_type">GTK_SHADOW_OUT</property>
<child>
<widget class="GtkViewport" id="viewport1">
<property name="visible">True</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkVBox" id="options_vbox">
<property name="visible">True</property>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area4">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button3">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">gtk-help</property>
<property name="use_stock">True</property>
<property name="response_id">-11</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="button2">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">gtk-close</property>
<property name="use_stock">True</property>
<property name="response_id">0</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>