Only load the necessary toplevel widget in the non-dialog case.

2002-03-25  Jody Goldberg <jody@gnome.org>

	* accessibility-keyboard.c (setup_accessX_dialog) : Only load the
	  necessary toplevel widget in the non-dialog case.
	(setup_dialog) : pass as_dialog to the sub-init routines.
	(setup_images) : only load widgets appropriate for the current state.
	(setup_ranges) : ditto, and be more vocal about invalid glade.
	(setup_simple_toggles) : ditto.
	(setup_toggles) : ditto.
This commit is contained in:
Jody Goldberg 2002-03-25 16:39:42 +00:00 committed by Jody Goldberg
parent 02b2ad66f7
commit 85e7f61ad7
2 changed files with 86 additions and 54 deletions

View file

@ -0,0 +1,9 @@
2002-03-25 Jody Goldberg <jody@gnome.org>
* accessibility-keyboard.c (setup_accessX_dialog) : Only load the
necessary toplevel widget in the non-dialog case.
(setup_dialog) : pass as_dialog to the sub-init routines.
(setup_images) : only load widgets appropriate for the current state.
(setup_ranges) : ditto, and be more vocal about invalid glade.
(setup_simple_toggles) : ditto.
(setup_toggles) : ditto.

View file

@ -43,25 +43,26 @@ static struct {
char const * const image; char const * const image;
char const * const image_file; char const * const image_file;
char const * const gconf_key; char const * const gconf_key;
gboolean only_for_dialog;
char const * const content [5]; char const * const content [5];
} const features [] = { } const features [] = {
{ "bouncekeys_enable", "bouncekeys_image", IDIR "accessibility-keyboard-bouncekey.png", { "bouncekeys_enable", "bouncekeys_image", IDIR "accessibility-keyboard-bouncekey.png",
CONFIG_ROOT "/bouncekeys_enable", CONFIG_ROOT "/bouncekeys_enable", FALSE,
{ "bouncekeys_delay_slide", "bouncekeys_delay_spin", "bouncekeys_label1", "bouncekeys_label2", "bouncekeys_box" } }, { "bouncekeys_delay_slide", "bouncekeys_delay_spin", "bouncekeys_label1", "bouncekeys_label2", "bouncekeys_box" } },
{ "slowkeys_enable", "slowkeys_image", IDIR "accessibility-keyboard-slowkey.png", { "slowkeys_enable", "slowkeys_image", IDIR "accessibility-keyboard-slowkey.png",
CONFIG_ROOT "/slowkeys_enable", CONFIG_ROOT "/slowkeys_enable", FALSE,
{ "slowkeys_delay_slide", "slowkeys_delay_spin", "slowkeys_table", "slowkeys_label", NULL } }, { "slowkeys_delay_slide", "slowkeys_delay_spin", "slowkeys_table", "slowkeys_label", NULL } },
{ "mousekeys_enable", "mousekeys_image", IDIR "accessibility-keyboard-mousekey.png", { "mousekeys_enable", "mousekeys_image", IDIR "accessibility-keyboard-mousekey.png",
CONFIG_ROOT "/mousekeys_enable", CONFIG_ROOT "/mousekeys_enable", FALSE,
{ "mousekeys_table", NULL, NULL, NULL, NULL } }, { "mousekeys_table", NULL, NULL, NULL, NULL } },
{ "stickykeys_enable", "stickykeys_image", IDIR "accessibility-keyboard-stickykey.png", { "stickykeys_enable", "stickykeys_image", IDIR "accessibility-keyboard-stickykey.png",
CONFIG_ROOT "/stickykeys_enable", CONFIG_ROOT "/stickykeys_enable", FALSE,
{ "stickykeys_two_key_off", "stickykeys_modifier_beep", NULL, NULL, NULL } }, { "stickykeys_two_key_off", "stickykeys_modifier_beep", NULL, NULL, NULL } },
{ "togglekeys_enable", "togglekeys_image", IDIR "accessibility-keyboard-togglekey.png", { "togglekeys_enable", "togglekeys_image", IDIR "accessibility-keyboard-togglekey.png",
CONFIG_ROOT "/togglekeys_enable", CONFIG_ROOT "/togglekeys_enable", FALSE,
{ NULL, NULL, NULL, NULL, NULL } }, { NULL, NULL, NULL, NULL, NULL } },
{ "timeout_enable", NULL, NULL, { "timeout_enable", NULL, NULL,
CONFIG_ROOT "/timeout_enable", CONFIG_ROOT "/timeout_enable", TRUE,
{ "timeout_slide", "timeout_spin", NULL, NULL, NULL } } { "timeout_slide", "timeout_spin", NULL, NULL, NULL } }
}; };
@ -73,19 +74,20 @@ static struct {
int max_val; int max_val;
int step_size; int step_size;
char const * const gconf_key; char const * const gconf_key;
gboolean only_for_dialog;
} const ranges [] = { } const ranges [] = {
{ "bouncekeys_delay_slide", "bouncekeys_delay_spin", 300, 10, 900, 10, { "bouncekeys_delay_slide", "bouncekeys_delay_spin", 300, 10, 900, 10,
CONFIG_ROOT "/bouncekeys_delay" }, CONFIG_ROOT "/bouncekeys_delay", FALSE },
{ "slowkeys_delay_slide", "slowkeys_delay_spin", 300, 10, 900, 10, { "slowkeys_delay_slide", "slowkeys_delay_spin", 300, 10, 900, 10,
CONFIG_ROOT "/slowkeys_delay" }, CONFIG_ROOT "/slowkeys_delay", FALSE },
{ "mousekeys_max_speed_slide", "mousekeys_max_speed_spin", 70, 10, 500, 10, { "mousekeys_max_speed_slide", "mousekeys_max_speed_spin", 70, 10, 500, 10,
CONFIG_ROOT "/mousekeys_max_speed" }, CONFIG_ROOT "/mousekeys_max_speed", FALSE },
{ "mousekeys_accel_time_slide", "mousekeys_accel_time_spin", 300, 10, 900, 10, { "mousekeys_accel_time_slide", "mousekeys_accel_time_spin", 300, 10, 900, 10,
CONFIG_ROOT "/mousekeys_accel_time" }, CONFIG_ROOT "/mousekeys_accel_time", FALSE },
{ "mousekeys_init_delay_slide", "mousekeys_init_delay_spin", 200, 10, 500, 10, { "mousekeys_init_delay_slide", "mousekeys_init_delay_spin", 200, 10, 500, 10,
CONFIG_ROOT "/mousekeys_init_delay" }, CONFIG_ROOT "/mousekeys_init_delay", FALSE },
{ "timeout_slide", "timeout_spin", 200, 10, 500, 10, { "timeout_slide", "timeout_spin", 200, 10, 500, 10,
CONFIG_ROOT "/timeout" }, CONFIG_ROOT "/timeout", TRUE },
}; };
static void static void
@ -125,45 +127,56 @@ cb_feature_toggled (GtkToggleButton *btn, gpointer feature_index)
} }
static void static void
setup_toggles (GladeXML *dialog, GConfChangeSet *changeset) setup_toggles (GladeXML *dialog, GConfChangeSet *changeset, gboolean as_dialog)
{ {
GObject *peditor; GObject *peditor;
GtkWidget *checkbox; GtkWidget *checkbox;
int i = G_N_ELEMENTS (features); int i = G_N_ELEMENTS (features);
while (i-- > 0) { while (i-- > 0)
checkbox = WID (features [i].checkbox); if (as_dialog || !features [i].only_for_dialog) {
g_object_set_data (G_OBJECT (checkbox), "dialog", dialog); checkbox = WID (features [i].checkbox);
g_signal_connect (G_OBJECT (checkbox),
"toggled", g_return_if_fail (checkbox != NULL);
G_CALLBACK (cb_feature_toggled), GINT_TO_POINTER (i));
peditor = gconf_peditor_new_boolean (changeset, g_object_set_data (G_OBJECT (checkbox), "dialog", dialog);
(gchar *)features [i].gconf_key, checkbox, NULL); g_signal_connect (G_OBJECT (checkbox),
} "toggled",
G_CALLBACK (cb_feature_toggled), GINT_TO_POINTER (i));
peditor = gconf_peditor_new_boolean (changeset,
(gchar *)features [i].gconf_key, checkbox, NULL);
}
} }
static void static void
setup_simple_toggles (GladeXML *dialog, GConfChangeSet *changeset) setup_simple_toggles (GladeXML *dialog, GConfChangeSet *changeset, gboolean as_dialog)
{ {
static struct { static struct {
char const * const gconf_key; char const *gconf_key;
char const * const checkbox; char const *checkbox;
gboolean only_for_dialog;
} const simple_toggles [] = { } const simple_toggles [] = {
{ CONFIG_ROOT "/feature_state_change_beep","feature_state_change_beep" }, { CONFIG_ROOT "/feature_state_change_beep","feature_state_change_beep", TRUE },
{ CONFIG_ROOT "/bouncekeys_beep_reject", "bouncekeys_beep_reject" }, { CONFIG_ROOT "/bouncekeys_beep_reject", "bouncekeys_beep_reject", FALSE },
{ CONFIG_ROOT "/slowkeys_beep_press", "slowkeys_beep_press" }, { CONFIG_ROOT "/slowkeys_beep_press", "slowkeys_beep_press", FALSE },
{ CONFIG_ROOT "/slowkeys_beep_accept", "slowkeys_beep_accept" }, { CONFIG_ROOT "/slowkeys_beep_accept", "slowkeys_beep_accept", FALSE },
{ CONFIG_ROOT "/slowkeys_beep_reject", "slowkeys_beep_reject"}, { CONFIG_ROOT "/slowkeys_beep_reject", "slowkeys_beep_reject", FALSE},
{ CONFIG_ROOT "/stickykeys_two_key_off", "stickykeys_two_key_off" }, { CONFIG_ROOT "/stickykeys_two_key_off", "stickykeys_two_key_off", FALSE },
{ CONFIG_ROOT "/stickykeys_modifier_beep", "stickykeys_modifier_beep" }, { CONFIG_ROOT "/stickykeys_modifier_beep", "stickykeys_modifier_beep", FALSE},
}; };
int i = G_N_ELEMENTS (simple_toggles); int i = G_N_ELEMENTS (simple_toggles);
while (i-- > 0) while (i-- > 0)
gconf_peditor_new_boolean (changeset, if (as_dialog || !simple_toggles [i].only_for_dialog) {
(gchar *) simple_toggles [i].gconf_key, GtkWidget *w = WID (simple_toggles [i].checkbox);
WID (simple_toggles [i].checkbox), NULL);
g_return_if_fail (w != NULL);
gconf_peditor_new_boolean (changeset,
(gchar *) simple_toggles [i].gconf_key,
w, NULL);
}
} }
static GConfValue* static GConfValue*
@ -178,7 +191,7 @@ cb_from_widget (GConfPropertyEditor *peditor, const GConfValue *value)
} }
static void static void
setup_ranges (GladeXML *dialog, GConfChangeSet *changeset) setup_ranges (GladeXML *dialog, GConfChangeSet *changeset, gboolean as_dialog)
{ {
GObject *peditor; GObject *peditor;
GtkWidget *slide, *spin; GtkWidget *slide, *spin;
@ -186,8 +199,14 @@ setup_ranges (GladeXML *dialog, GConfChangeSet *changeset)
int i = G_N_ELEMENTS (ranges); int i = G_N_ELEMENTS (ranges);
while (i-- > 0) { while (i-- > 0) {
if (!as_dialog && ranges [i].only_for_dialog)
continue;
slide = WID (ranges [i].slide); slide = WID (ranges [i].slide);
spin = WID (ranges [i].spin); spin = WID (ranges [i].spin);
g_return_if_fail (slide != NULL);
g_return_if_fail (spin != NULL);
adjustment = gtk_range_get_adjustment (GTK_RANGE (slide)); adjustment = gtk_range_get_adjustment (GTK_RANGE (slide));
g_return_if_fail (adjustment != NULL); g_return_if_fail (adjustment != NULL);
@ -211,32 +230,37 @@ setup_ranges (GladeXML *dialog, GConfChangeSet *changeset)
} }
static void static void
setup_images (GladeXML *dialog) setup_images (GladeXML *dialog, gboolean as_dialog)
{ {
int i = G_N_ELEMENTS (features); int i = G_N_ELEMENTS (features);
while (i-- > 0) while (i-- > 0)
if (features [i].image != NULL) if (features [i].image != NULL &&
(as_dialog || !features [i].only_for_dialog))
gtk_image_set_from_file (GTK_IMAGE (WID (features [i].image)), gtk_image_set_from_file (GTK_IMAGE (WID (features [i].image)),
features [i].image_file); features [i].image_file);
} }
static void static void
setup_dialog (GladeXML *dialog, GConfChangeSet *changeset) setup_dialog (GladeXML *dialog, GConfChangeSet *changeset, gboolean as_dialog)
{ {
GtkWidget *content = WID ("keyboard_table"); GtkWidget *content = WID ("keyboard_table");
GtkWidget *page = WID ("accessX_page"); GtkWidget *page = WID ("accessX_page");
GObject *label = g_object_new (GTK_TYPE_CHECK_BUTTON, GObject *label;
g_return_if_fail (content != NULL);
g_return_if_fail (page != NULL);
setup_images (dialog, as_dialog);
setup_ranges (dialog, changeset, as_dialog);
setup_toggles (dialog, changeset, as_dialog);
setup_simple_toggles (dialog, changeset, as_dialog);
label = g_object_new (GTK_TYPE_CHECK_BUTTON,
"label", _("_Enable keyboard accesibility"), "label", _("_Enable keyboard accesibility"),
"use_underline", TRUE, "use_underline", TRUE,
/* init true so that if gconf is false toggle will fire */ /* init true so that if gconf is false toggle will fire */
"active", TRUE, "active", TRUE,
NULL); NULL);
setup_images (dialog);
setup_ranges (dialog, changeset);
setup_toggles (dialog, changeset);
setup_simple_toggles (dialog, changeset);
gtk_frame_set_label_widget (GTK_FRAME (page), GTK_WIDGET (label)); gtk_frame_set_label_widget (GTK_FRAME (page), GTK_WIDGET (label));
g_signal_connect (label, g_signal_connect (label,
"toggled", "toggled",
@ -441,23 +465,22 @@ GtkWidget *
setup_accessX_dialog (GConfChangeSet *changeset, gboolean as_dialog) setup_accessX_dialog (GConfChangeSet *changeset, gboolean as_dialog)
{ {
GConfClient *client; GConfClient *client;
char const *toplevel_name = as_dialog ? "accessX_dialog" : "accessX_page";
GladeXML *dialog = glade_xml_new (GNOMECC_DATA_DIR GladeXML *dialog = glade_xml_new (GNOMECC_DATA_DIR
"/interfaces/gnome-accessibility-keyboard-properties.glade2", "/interfaces/gnome-accessibility-keyboard-properties.glade2",
"accessX_dialog", NULL); toplevel_name, NULL);
GtkWidget *toplevel = WID (toplevel_name);
client = gconf_client_get_default (); client = gconf_client_get_default ();
gconf_client_add_dir (client, CONFIG_ROOT, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); gconf_client_add_dir (client, CONFIG_ROOT, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
setup_dialog (dialog, changeset); setup_dialog (dialog, changeset, as_dialog);
if (as_dialog) { if (as_dialog) {
GtkWidget *accessX = WID ("accessX_dialog");
GtkWidget *load_cde = WID ("load_CDE_file"); GtkWidget *load_cde = WID ("load_CDE_file");
g_signal_connect (G_OBJECT (load_cde), g_signal_connect (G_OBJECT (load_cde),
"activate", "activate",
G_CALLBACK (cb_load_CDE_file), accessX); G_CALLBACK (cb_load_CDE_file), toplevel);
}
return accessX; return toplevel;
} else
return WID ("accessX_page");
} }