From 819c1d2b8fe37a3ecb5a8c8dc8d53d52b55bf792 Mon Sep 17 00:00:00 2001 From: Bradford Hovinen Date: Tue, 18 Dec 2001 20:15:03 +0000 Subject: [PATCH] Port to GConf/GNOME 2.0. Many changes. 2001-12-18 Bradford Hovinen * keyboard-properties.c: Port to GConf/GNOME 2.0. Many changes. --- capplets/keyboard/ChangeLog | 4 + capplets/keyboard/keyboard-properties.c | 233 ++-- capplets/keyboard/keyboard-properties.glade | 1128 ++++++++++--------- 3 files changed, 747 insertions(+), 618 deletions(-) diff --git a/capplets/keyboard/ChangeLog b/capplets/keyboard/ChangeLog index c173abaac..57ce59489 100644 --- a/capplets/keyboard/ChangeLog +++ b/capplets/keyboard/ChangeLog @@ -1,3 +1,7 @@ +2001-12-18 Bradford Hovinen + + * keyboard-properties.c: Port to GConf/GNOME 2.0. Many changes. + 2001-10-12 Bradford Hovinen * Makefile.am: Make OAF file creation generic diff --git a/capplets/keyboard/keyboard-properties.c b/capplets/keyboard/keyboard-properties.c index 72183b5cc..de7ab9187 100644 --- a/capplets/keyboard/keyboard-properties.c +++ b/capplets/keyboard/keyboard-properties.c @@ -1,10 +1,11 @@ /* -*- mode: c; style: linux -*- */ -/* main.c +/* keyboard-properties.c * Copyright (C) 2000-2001 Ximian, Inc. * * Written by: Bradford Hovinen * Richard Hestilow + * * 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) @@ -25,11 +26,17 @@ # include #endif -#include "capplet-util.h" -#include "bonobo-property-editor-range.h" - +#include +#include #include -#include +#include + +#include "capplet-util.h" +#include "gconf-property-editor.h" + +#if 0 +# include +#endif #include #include @@ -39,8 +46,10 @@ #endif static void -apply_settings (Bonobo_ConfigDatabase db) +apply_settings (void) { + GConfClient *client; + gboolean repeat, click; int rate, delay, volume; int bell_volume, bell_pitch, bell_duration; @@ -58,14 +67,16 @@ apply_settings (Bonobo_ConfigDatabase db) XKeyboardControl kbdcontrol; int event_base_return, error_base_return; - repeat = bonobo_config_get_boolean (db, "/main/repeat", NULL); - click = bonobo_config_get_boolean (db, "/main/click", NULL); - rate = bonobo_config_get_ulong (db, "/main/rate", NULL); - delay = bonobo_config_get_ulong (db, "/main/delay", NULL); - volume = bonobo_config_get_ulong (db, "/main/volume", NULL); - bell_volume = bonobo_config_get_ulong (db, "/main/bell_volume", NULL); - bell_pitch = bonobo_config_get_ulong (db, "/main/bell_pitch", NULL); - bell_duration = bonobo_config_get_ulong (db, "/main/bell_duration", NULL); + client = gconf_client_get_default (); + + repeat = gconf_client_get_bool (client, "/gnome/desktop/peripherals/keyboard/repeat", NULL); + click = gconf_client_get_bool (client, "/gnome/desktop/peripherals/keyboard/click", NULL); + rate = gconf_client_get_int (client, "/gnome/desktop/peripherals/keyboard/rate", NULL); + delay = gconf_client_get_int (client, "/gnome/desktop/peripherals/keyboard/delay", NULL); + volume = gconf_client_get_int (client, "/gnome/desktop/peripherals/keyboard/volume", NULL); + bell_volume = gconf_client_get_int (client, "/gnome/desktop/peripherals/keyboard/bell_volume", NULL); + bell_pitch = gconf_client_get_int (client, "/gnome/desktop/peripherals/keyboard/bell_pitch", NULL); + bell_duration = gconf_client_get_int (client, "/gnome/desktop/peripherals/keyboard/bell_duration", NULL); if (repeat) { XAutoRepeatOn (GDK_DISPLAY ()); @@ -97,29 +108,49 @@ apply_settings (Bonobo_ConfigDatabase db) &kbdcontrol); } -static gulong -get_value_ulong (Bonobo_PropertyBag bag, const gchar *prop) +static void +get_legacy_settings (void) { - BonoboArg *arg; - gulong val; - - arg = bonobo_property_bag_client_get_value_any (bag, prop, NULL); - val = BONOBO_ARG_GET_GENERAL (arg, TC_ulong, CORBA_unsigned_long, NULL); - bonobo_arg_release (arg); - return val; + gboolean val_boolean, def; + gulong val_ulong; + +#if 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"); + COPY_FROM_LEGACY (int, "/gnome/desktop/peripherals/keyboard/bell_volume", "/Desktop/Bell/percent=50"); + 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"); +#endif +} + +static int +get_int_from_changeset (GConfChangeSet *changeset, gchar *key) +{ + GConfValue *value; + + gconf_change_set_check_value (changeset, key, &value); + + if (value == NULL) + return gconf_client_get_int (gconf_client_get_default (), key, NULL); + else + return gconf_value_get_int (value); } static void -bell_cb (GtkWidget *widget, Bonobo_PropertyBag bag) +bell_cb (GtkWidget *widget, GConfChangeSet *changeset) { XKeyboardState backup; XKeyboardControl kbdcontrol; XGetKeyboardControl (GDK_DISPLAY (), &backup); - kbdcontrol.bell_percent = get_value_ulong (bag, "bell_volume"); - kbdcontrol.bell_pitch = get_value_ulong (bag, "bell_pitch"); - kbdcontrol.bell_duration = get_value_ulong (bag, "bell_duration"); + kbdcontrol.bell_percent = get_int_from_changeset (changeset, "/gnome/desktop/peripherals/keyboard/bell_volume"); + kbdcontrol.bell_pitch = get_int_from_changeset (changeset, "/gnome/desktop/peripherals/keyboard/bell_pitch"); + kbdcontrol.bell_duration = get_int_from_changeset (changeset, "/gnome/desktop/peripherals/keyboard/bell_duration"); + XChangeKeyboardControl (GDK_DISPLAY (), KBBellPercent | KBBellPitch | KBBellDuration, &kbdcontrol); @@ -134,94 +165,112 @@ bell_cb (GtkWidget *widget, Bonobo_PropertyBag bag) &kbdcontrol); } -static GtkWidget* +static void +setup_dialog (GladeXML *dialog, GConfChangeSet *changeset) +{ + GObject *peditor; + + peditor = gconf_peditor_new_boolean (changeset, "/gnome/desktop/peripherals/keyboard/repeat", WID ("repeat_toggle")); + gconf_peditor_new_select_menu (changeset, "/gnome/desktop/peripherals/keyboard/delay", WID ("delay_menu")); + gconf_peditor_new_select_menu (changeset, "/gnome/desktop/peripherals/keyboard/rate", WID ("repate_menu")); + + gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("repeat_table")); + + peditor = gconf_peditor_new_boolean (changeset, "/gnome/desktop/peripherals/keyboard/click", WID ("click_toggle")); + gconf_peditor_new_int_range (changeset, "/gnome/desktop/peripherals/keyboard/volume", WID ("click_volume_entry")); + + gconf_peditor_widget_set_guard (GCONF_PROPERTY_EDITOR (peditor), WID ("click_hbox")); + + /* Bell properties */ + gconf_peditor_new_int_range (changeset, "/gnome/desktop/peripherals/keyboard/bell_volume", WID ("bell_volume_range")); + gconf_peditor_new_int_range (changeset, "/gnome/desktop/peripherals/keyboard/bell_pitch", WID ("bell_pitch_range")); + gconf_peditor_new_int_range (changeset, "/gnome/desktop/peripherals/keyboard/bell_duration", WID ("bell_duration_range")); + + g_signal_connect (G_OBJECT (WID ("bell_test_button")), "clicked", (GCallback) bell_cb, changeset); +} + +static GladeXML * create_dialog (void) { GladeXML *dialog; GtkWidget *widget, *pixmap; - dialog = glade_xml_new (GNOMECC_GLADE_DIR "/keyboard-properties.glade", "prefs_widget"); + dialog = glade_xml_new (GNOMECC_GLADE_DIR "/keyboard-properties.glade", "prefs_widget", NULL); widget = glade_xml_get_widget (dialog, "prefs_widget"); - gtk_object_set_data (GTK_OBJECT (widget), "glade-data", dialog); +#if 0 /* Minor GUI addition */ pixmap = gnome_stock_pixmap_widget (WID ("bell_test_button"), GNOME_STOCK_PIXMAP_VOLUME); gtk_box_pack_start (GTK_BOX (WID ("bell_test_holder")), pixmap, TRUE, TRUE, 0); gtk_widget_show_all (WID ("bell_test_button")); +#endif - gtk_signal_connect_object (GTK_OBJECT (widget), "destroy", - GTK_SIGNAL_FUNC (gtk_object_destroy), - GTK_OBJECT (dialog)); - - return widget; + return dialog; } static void -setup_dialog (GtkWidget *widget, Bonobo_PropertyBag bag) +dialog_button_clicked_cb (GnomeDialog *dialog, gint button_number, GConfChangeSet *changeset) { - GladeXML *dialog; - BonoboPEditor *ed; - - dialog = gtk_object_get_data (GTK_OBJECT (widget), "glade-data"); - - CREATE_PEDITOR (boolean, "repeat", "repeat_toggle"); - - ed = BONOBO_PEDITOR (bonobo_peditor_option_menu_construct (WID ("delay_menu"))); - bonobo_peditor_set_property (ed, bag, "delay", TC_ulong, NULL); - - ed = BONOBO_PEDITOR (bonobo_peditor_option_menu_construct (WID ("repeat_menu"))); - bonobo_peditor_set_property (ed, bag, "rate", TC_ulong, NULL); - bonobo_peditor_set_guard (WID ("repeat_table"), bag, "repeat"); - - CREATE_PEDITOR (boolean, "click", "click_toggle"); - - ed = BONOBO_PEDITOR (bonobo_peditor_range_construct (WID ("click_volume_entry"))); - bonobo_peditor_set_property (ed, bag, "volume", TC_ulong, NULL); - bonobo_peditor_set_guard (WID ("click_hbox"), bag, "click"); - - /* Bell properties */ - ed = BONOBO_PEDITOR (bonobo_peditor_range_construct (WID ("bell_volume_range"))); - bonobo_peditor_set_property (ed, bag, "bell_volume", TC_ulong, NULL); - - ed = BONOBO_PEDITOR (bonobo_peditor_range_construct (WID ("bell_pitch_range"))); - bonobo_peditor_set_property (ed, bag, "bell_pitch", TC_ulong, NULL); - - ed = BONOBO_PEDITOR (bonobo_peditor_range_construct (WID ("bell_duration_range"))); - bonobo_peditor_set_property (ed, bag, "bell_duration", TC_ulong, NULL); - - gtk_signal_connect (GTK_OBJECT (WID ("bell_test_button")), - "clicked", bell_cb, bag); -} - -static void -get_legacy_settings (Bonobo_ConfigDatabase db) -{ - gboolean val_boolean, def; - gulong val_ulong; - - COPY_FROM_LEGACY (boolean, "/main/repeat", bool, "/Desktop/Keyboard/repeat=true"); - COPY_FROM_LEGACY (boolean, "/main/click", bool, "/Desktop/Keyboard/click=true"); - COPY_FROM_LEGACY (ulong, "/main/rate", int, "/Desktop/Keyboard/rate=30"); - COPY_FROM_LEGACY (ulong, "/main/delay", int, "/Desktop/Keyboard/delay=500"); - COPY_FROM_LEGACY (ulong, "/main/volume", int, "/Desktop/Keyboard/clickvolume=0"); - COPY_FROM_LEGACY (ulong, "/main/bell_volume", int, "/Desktop/Bell/percent=50"); - COPY_FROM_LEGACY (ulong, "/main/bell_pitch", int, "/Desktop/Bell/pitch=50"); - COPY_FROM_LEGACY (ulong, "/main/bell_duration", int, "/Desktop/Bell/duration=100"); + if (button_number == 0) + gconf_client_commit_change_set (gconf_client_get_default (), changeset, TRUE, NULL); + else if (button_number == 1) + gnome_dialog_close (dialog); } int main (int argc, char **argv) { - const gchar* legacy_files[] = { "Desktop", NULL }; - - glade_gnome_init (); - - capplet_init (argc, argv, legacy_files, apply_settings, create_dialog, setup_dialog, get_legacy_settings); + GConfClient *client; + GConfChangeSet *changeset; + GladeXML *dialog; + GtkWidget *dialog_win; + + static gboolean apply_only; + static gboolean get_legacy; + static struct poptOption cap_options[] = { + { "apply", '\0', POPT_ARG_NONE, &apply_only, 0, + N_("Just apply settings and quit (compatibility only; now handled by daemon)"), NULL }, + { "init-session-settings", '\0', POPT_ARG_NONE, &apply_only, 0, + N_("Just apply settings and quit (compatibility only; now handled by daemon)"), NULL }, + { "get-legacy", '\0', POPT_ARG_NONE, &get_legacy, 0, + N_("Retrieve and store legacy settings"), NULL }, + { NULL, '\0', 0, NULL, 0, NULL, NULL } + }; + + bindtextdomain (PACKAGE, GNOMELOCALEDIR); + bind_textdomain_codeset (PACKAGE, "UTF-8"); + textdomain (PACKAGE); + + gnome_program_init (argv[0], VERSION, LIBGNOMEUI_MODULE, argc, argv, + GNOME_PARAM_POPT_TABLE, cap_options, + NULL); + + client = gconf_client_get_default (); + gconf_client_add_dir (client, "/desktop/gnome/peripherals/keyboard", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + + if (get_legacy) { + get_legacy_settings (); + } else { + changeset = gconf_change_set_new (); + dialog = create_dialog (); + setup_dialog (dialog, changeset); + +#if 0 + gnome_window_icon_set_default_from_file + (GNOMECC_ICONS_DIR "keyboard-capplet.png"); +#endif + + dialog_win = gnome_dialog_new (_("Keyboard properties"), GTK_STOCK_APPLY, GTK_STOCK_CLOSE, NULL); + g_signal_connect (G_OBJECT (dialog_win), "clicked", (GCallback) dialog_button_clicked_cb, changeset); + g_object_weak_ref (G_OBJECT (dialog_win), (GWeakNotify) gtk_main_quit, NULL); + gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (dialog_win)->vbox), WID ("prefs_widget"), TRUE, TRUE, GNOME_PAD_SMALL); + gtk_widget_show_all (dialog_win); + + gtk_main (); + gconf_change_set_unref (changeset); + } - gnome_window_icon_set_default_from_file - (GNOMECC_ICONS_DIR"keyboard-capplet.png.png"); - return 0; } diff --git a/capplets/keyboard/keyboard-properties.glade b/capplets/keyboard/keyboard-properties.glade index e6ba4e4a6..ede81ea7b 100644 --- a/capplets/keyboard/keyboard-properties.glade +++ b/capplets/keyboard/keyboard-properties.glade @@ -1,533 +1,609 @@ - - + + - - New-keyboard-properties - new-keyboard-properties - - src - pixmaps - C - True - True - True - keyboard-properties.glade.h - + + + window1 + GTK_WINDOW_TOPLEVEL + no + no + yes + no + GTK_WIN_POS_NONE - - GtkWindow - window1 - window1 - GTK_WINDOW_TOPLEVEL - GTK_WIN_POS_NONE - False - False - True - False + + + yes + yes + yes + GTK_POS_TOP + no + 2 + 2 + no + yes - - GtkNotebook - prefs_widget - True - True - True - GTK_POS_TOP - False - 2 - 2 - False + + + 4 + no + 4 + yes - - GtkVBox - keyboard_vbox - 4 - False - 4 + + + yes + Enable Keyboard Repeat + no + yes + yes - - GtkCheckButton - repeat_toggle - True - - toggled - repeat_toggled_cb - Thu, 30 Nov 2000 23:56:30 GMT - - - False - True - - 0 - False - False - + + + + 0 + no + no + + + + + + yes + + + + + + no + 4 + 4 + 2 + 2 + yes + + + + Delay before repeat: + GTK_JUSTIFY_CENTER + no + 0 + 0.5 + 0 + 0 + yes + + + 0 + 1 + 0 + 1 + 0 + 0 + fill + + + + + + + Key repeat rate: + GTK_JUSTIFY_CENTER + no + 0 + 0.5 + 0 + 0 + yes + + + 0 + 1 + 1 + 2 + 0 + 0 + fill + + + + + + + yes + 2 + yes + + + + yes + + + + yes + + + + Very long + 0.0 + convertwidget2 + yes + yes + + + + + + + + yes + + + + Long + 0.0 + convertwidget3 + yes + yes + + + + + + + + yes + + + + Medium + 0.0 + convertwidget4 + yes + yes + + + + + + + + yes + + + + Short + 0.0 + convertwidget5 + yes + yes + + + + + + + + + 1 + 2 + 0 + 1 + 0 + 0 + fill + + + + + + + yes + 2 + yes + + + + yes + + + + yes + + + + Very fast + 0.0 + convertwidget11 + yes + yes + + + + + + + + yes + + + + Fast + 0.0 + convertwidget12 + yes + yes + + + + + + + + yes + + + + Medium + 0.0 + convertwidget13 + yes + yes + + + + + + + + yes + + + + Slow + 0.0 + convertwidget14 + yes + yes + + + + + + + + + 1 + 2 + 1 + 2 + 0 + 0 + fill + + + + + + 4 + no + no + + + + + + yes + Enable Keyboard Click + no + yes + yes + + + + + 0 + no + no + + + + + + no + 4 + yes + + + + Click volume + GTK_JUSTIFY_RIGHT + no + 0 + 0.5 + 0 + 0 + yes + + + 0 + no + no + + + + + + yes + no + GTK_POS_TOP + 0 + yes + 0 0 100 0 0 0 + + + 0 + yes + yes + + + + + 0 + no + no + + + + + + yes + + + + + + + + Keyboard + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + tab + + + + + + 4 + no + 4 + 4 + 4 + 2 + yes + + + + Volume + GTK_JUSTIFY_CENTER + no + 0 + 0.5 + 0 + 0 + yes + + + 0 + 1 + 0 + 1 + 0 + 0 + fill + + + + + + + Pitch (Hz) + GTK_JUSTIFY_CENTER + no + 0 + 0.5 + 0 + 0 + yes + + + 0 + 1 + 1 + 2 + 0 + 0 + fill + + + + + + + Duration (ms) + GTK_JUSTIFY_CENTER + no + 0 + 0.5 + 0 + 0 + yes + + + 0 + 1 + 2 + 3 + 0 + 0 + fill + + + + + + + yes + yes + GTK_POS_TOP + 0 + yes + 0 0 100 0 0 0 + + + 1 + 2 + 0 + 1 + 0 + 0 + expand|fill + fill + + + + + + yes + yes + GTK_POS_TOP + 0 + yes + 0 0 2000 0 0 0 + + + 1 + 2 + 1 + 2 + 0 + 0 + fill + fill + + + + + + yes + yes + GTK_POS_TOP + 0 + yes + 0 0 500 0 0 0 + + + 1 + 2 + 2 + 3 + 0 + 0 + fill + fill + + + + + + 4 + yes + GTK_RELIEF_NORMAL + yes + + + + 4 + no + 0 + yes + + + + no + 0 + yes + + + + yes + + + + + 0 + no + no + + + + + + Test + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + 0 + no + no + + + + + + + 0 + 1 + 3 + 4 + 0 + 0 + + + + + + + + + + Bell + GTK_JUSTIFY_CENTER + no + 0.5 + 0.5 + 0 + 0 + yes + + + tab + + - - - Placeholder - - - - GtkTable - repeat_table - 2 - 2 - False - 4 - 4 - - 4 - False - False - - - - GtkLabel - label8 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label9 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkOptionMenu - delay_menu - True - Very long -Long -Medium -Short - - 2 - - 1 - 2 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkOptionMenu - repeat_menu - True - Very fast -Fast -Medium -Slow - - 2 - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - - GtkCheckButton - click_toggle - True - - toggled - click_toggled_cb - Mon, 11 Sep 2000 02:02:18 GMT - - - False - True - - 0 - False - False - - - - - GtkHBox - click_hbox - False - 4 - - 0 - False - False - - - - GtkLabel - label3 - - GTK_JUSTIFY_RIGHT - False - 0 - 0.5 - 0 - 0 - - 0 - False - False - - - - - GtkHScale - click_volume_entry - True - False - GTK_POS_TOP - 0 - GTK_UPDATE_CONTINUOUS - 0 - 0 - 100 - 0 - 0 - 0 - - 0 - True - True - - - - - - Placeholder - - - - - GtkLabel - Notebook:tab - label8 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - - - GtkTable - table1 - 4 - 4 - 2 - False - 4 - 4 - - - GtkLabel - label11 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 0 - 1 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label12 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 1 - 2 - 0 - 0 - False - False - False - False - True - False - - - - - GtkLabel - label13 - - GTK_JUSTIFY_CENTER - False - 0 - 0.5 - 0 - 0 - - 0 - 1 - 2 - 3 - 0 - 0 - False - False - False - False - True - False - - - - - GtkHScale - bell_volume_range - True - True - GTK_POS_TOP - 0 - GTK_UPDATE_CONTINUOUS - 0 - 0 - 100 - 0 - 0 - 0 - - 1 - 2 - 0 - 1 - 0 - 0 - True - False - False - False - True - True - - - - - GtkHScale - bell_pitch_range - True - True - GTK_POS_TOP - 0 - GTK_UPDATE_CONTINUOUS - 0 - 0 - 2000 - 0 - 0 - 0 - - 1 - 2 - 1 - 2 - 0 - 0 - False - False - False - False - True - True - - - - - GtkHScale - bell_duration_range - True - True - GTK_POS_TOP - 0 - GTK_UPDATE_CONTINUOUS - 0 - 0 - 500 - 0 - 0 - 0 - - 1 - 2 - 2 - 3 - 0 - 0 - False - False - False - False - True - True - - - - - GtkButton - bell_test_button - 4 - True - GTK_RELIEF_NORMAL - - 0 - 1 - 3 - 4 - 0 - 0 - False - False - False - False - False - False - - - - GtkHBox - hbox1 - 4 - False - 0 - - - GtkHBox - bell_test_holder - False - 0 - - 0 - False - False - - - - Placeholder - - - - - GtkLabel - label14 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - - 0 - False - False - - - - - - - - GtkLabel - Notebook:tab - label9 - - GTK_JUSTIFY_CENTER - False - 0.5 - 0.5 - 0 - 0 - + - - - +