Mon, 25 Jun 2018 04:20:09 -0400
prefs: Convert Interface page to glade.
| pidgin/gtkprefs.c | file | annotate | diff | comparison | revisions | |
| pidgin/resources/Prefs/prefs.ui | file | annotate | diff | comparison | revisions |
--- a/pidgin/gtkprefs.c Mon Jun 25 03:52:25 2018 -0400 +++ b/pidgin/gtkprefs.c Mon Jun 25 04:20:09 2018 -0400 @@ -106,6 +106,27 @@ /* Notebook */ GtkWidget *notebook; + /* Interface page */ + struct { + PidginPrefCombo docklet; + struct { + PidginPrefCombo hide_new; + } im; + struct { + GtkWidget *minimize_new_convs; + } win32; + struct { + GtkWidget *tabs; + GtkWidget *tabs_vbox; + GtkWidget *close_on_tabs; + PidginPrefCombo tab_side; + PidginPrefCombo placement; + } conversations; + struct { + GtkWidget *escape; + } keys; + } interface; + /* Browser page */ struct { GtkWidget *page; @@ -1975,10 +1996,8 @@ * standard Gtk accelerator-changing mechanism. */ static void -keyboard_shortcuts(GtkWidget *page) +keyboard_shortcuts(GtkWidget *checkbox) { - GtkWidget *vbox = pidgin_make_frame(page, _("Keyboard Shortcuts")); - GtkWidget *checkbox; GtkAccelKey current = { 0, 0, 0 }; GtkAccelMap *map = gtk_accel_map_get(); @@ -1996,8 +2015,6 @@ g_assert(escape.accel_key != 0); } - checkbox = gtk_check_button_new_with_mnemonic( - _("Cl_ose conversations with the Escape key")); gtk_accel_map_lookup_entry(CONVERSATION_CLOSE_ACCEL_PATH, ¤t); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox), accel_is_escape(¤t)); @@ -2007,99 +2024,58 @@ g_signal_connect_object(map, "changed::" CONVERSATION_CLOSE_ACCEL_PATH, G_CALLBACK(conversation_close_accel_changed_cb), checkbox, (GConnectFlags)0); - - gtk_box_pack_start(GTK_BOX(vbox), checkbox, FALSE, FALSE, 0); } -static GtkWidget * -interface_page(void) +static void +bind_interface_page(PidginPrefsWindow *win) { - GtkWidget *ret; - GtkWidget *vbox; - GtkWidget *vbox2; - GtkWidget *label; - GtkWidget *button; - GtkSizeGroup *sg; GList *names = NULL; - ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE); - gtk_container_set_border_width(GTK_CONTAINER(ret), PIDGIN_HIG_BORDER); - - sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - /* System Tray */ - vbox = pidgin_make_frame(ret, _("System Tray Icon")); - label = pidgin_prefs_dropdown(vbox, _("_Show system tray icon:"), PURPLE_PREF_STRING, - PIDGIN_PREFS_ROOT "/docklet/show", - _("Always"), "always", - _("On unread messages"), "pending", - _("Never"), "never", - NULL); - gtk_size_group_add_widget(sg, label); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_label_set_yalign(GTK_LABEL(label), 0.5); - - vbox = pidgin_make_frame(ret, _("Conversation Window")); - label = pidgin_prefs_dropdown(vbox, _("_Hide new IM conversations:"), - PURPLE_PREF_STRING, PIDGIN_PREFS_ROOT "/conversations/im/hide_new", - _("Never"), "never", - _("When away"), "away", - _("Always"), "always", - NULL); - gtk_size_group_add_widget(sg, label); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_label_set_yalign(GTK_LABEL(label), 0.5); + win->interface.docklet.type = PURPLE_PREF_STRING; + win->interface.docklet.key = PIDGIN_PREFS_ROOT "/docklet/show"; + pidgin_prefs_bind_dropdown(&win->interface.docklet); + + win->interface.im.hide_new.type = PURPLE_PREF_STRING; + win->interface.im.hide_new.key = PIDGIN_PREFS_ROOT "/conversations/im/hide_new"; + pidgin_prefs_bind_dropdown(&win->interface.im.hide_new); #ifdef _WIN32 - pidgin_prefs_checkbox(_("Minimi_ze new conversation windows"), PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", vbox); + pidgin_prefs_bind_checkbox(PIDGIN_PREFS_ROOT "/win32/minimize_new_convs", + win->interface.win32.minimize_new_convs); +#else + gtk_widget_hide(win->interface.win32.minimize_new_convs); #endif /* All the tab options! */ - vbox = pidgin_make_frame(ret, _("Tabs")); - - button = pidgin_prefs_checkbox(_("Show IMs and chats in _tabbed windows"), - PIDGIN_PREFS_ROOT "/conversations/tabs", vbox); + pidgin_prefs_bind_checkbox(PIDGIN_PREFS_ROOT "/conversations/tabs", + win->interface.conversations.tabs); /* * Connect a signal to the above preference. When conversations are not * shown in a tabbed window then all tabbing options should be disabled. */ - vbox2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 9); - gtk_box_pack_start(GTK_BOX(vbox), vbox2, FALSE, FALSE, 0); - g_object_bind_property(button, "active", vbox2, "sensitive", + g_object_bind_property(win->interface.conversations.tabs, "active", + win->interface.conversations.tabs_vbox, "sensitive", G_BINDING_SYNC_CREATE); - pidgin_prefs_checkbox(_("Show close b_utton on tabs"), - PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", vbox2); - - label = pidgin_prefs_dropdown(vbox2, _("_Placement:"), PURPLE_PREF_INT, - PIDGIN_PREFS_ROOT "/conversations/tab_side", - _("Top"), GTK_POS_TOP, - _("Bottom"), GTK_POS_BOTTOM, - _("Left"), GTK_POS_LEFT, - _("Right"), GTK_POS_RIGHT, - _("Left Vertical"), GTK_POS_LEFT|8, - _("Right Vertical"), GTK_POS_RIGHT|8, - NULL); - gtk_size_group_add_widget(sg, label); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_label_set_yalign(GTK_LABEL(label), 0.5); - + pidgin_prefs_bind_checkbox( + PIDGIN_PREFS_ROOT "/conversations/close_on_tabs", + win->interface.conversations.close_on_tabs); + + win->interface.conversations.tab_side.type = PURPLE_PREF_INT; + win->interface.conversations.tab_side.key = PIDGIN_PREFS_ROOT "/conversations/tab_side"; + pidgin_prefs_bind_dropdown(&win->interface.conversations.tab_side); + + win->interface.conversations.placement.type = PURPLE_PREF_STRING; + win->interface.conversations.placement.key = PIDGIN_PREFS_ROOT "/conversations/placement"; names = pidgin_conv_placement_get_options(); - label = pidgin_prefs_dropdown_from_list(vbox2, _("N_ew conversations:"), - PURPLE_PREF_STRING, PIDGIN_PREFS_ROOT "/conversations/placement", names); - gtk_label_set_xalign(GTK_LABEL(label), 0.0); - gtk_label_set_yalign(GTK_LABEL(label), 0.5); - - gtk_size_group_add_widget(sg, label); - + pidgin_prefs_bind_dropdown_from_list( + &win->interface.conversations.placement, + names); g_list_free(names); - keyboard_shortcuts(ret); - - gtk_widget_show_all(ret); - g_object_unref(sg); - return ret; + keyboard_shortcuts(win->interface.keys.escape); } /* This is also Win32-specific, but must be visible for Glade binding. */ @@ -4010,7 +3986,8 @@ GtkNotebook *notebook = GTK_NOTEBOOK(win->notebook); int notebook_page = 0; - prefs_notebook_add_page(notebook, _("Interface"), interface_page(), notebook_page++); + bind_interface_page(win); + notebook_page++; #ifdef _WIN32 /* We use the registered default browser in windows */ @@ -4058,6 +4035,35 @@ widget_class, PidginPrefsWindow, notebook); gtk_widget_class_bind_template_callback(widget_class, delete_prefs); + /* Interface page */ + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.docklet.combo); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.im.hide_new.combo); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.win32.minimize_new_convs); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.conversations.tabs); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.conversations.tabs_vbox); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.conversations.close_on_tabs); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.conversations.tab_side.combo); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.conversations.placement.combo); + gtk_widget_class_bind_template_child( + widget_class, PidginPrefsWindow, + interface.keys.escape); + /* Browser page */ gtk_widget_class_bind_template_child( widget_class, PidginPrefsWindow, browser.page);
--- a/pidgin/resources/Prefs/prefs.ui Mon Jun 25 03:52:25 2018 -0400 +++ b/pidgin/resources/Prefs/prefs.ui Mon Jun 25 04:20:09 2018 -0400 @@ -68,6 +68,92 @@ </row> </data> </object> + <object class="GtkListStore" id="interface.conversations.placement.store"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> + </columns> + </object> + <object class="GtkListStore" id="interface.conversations.tab_side.store"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gint"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Top</col> + <col id="1">2</col> + </row> + <row> + <col id="0" translatable="yes">Bottom</col> + <col id="1">3</col> + </row> + <row> + <col id="0" translatable="yes">Left</col> + <col id="1">0</col> + </row> + <row> + <col id="0" translatable="yes">Right</col> + <col id="1">1</col> + </row> + <row> + <col id="0" translatable="yes">Left Vertical</col> + <col id="1">8</col> + </row> + <row> + <col id="0" translatable="yes">Right Vertical</col> + <col id="1">9</col> + </row> + </data> + </object> + <object class="GtkListStore" id="interface.docklet.store"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Always</col> + <col id="1">always</col> + </row> + <row> + <col id="0" translatable="yes">On unread messages</col> + <col id="1">pending</col> + </row> + <row> + <col id="0" translatable="yes">Never</col> + <col id="1">never</col> + </row> + </data> + </object> + <object class="GtkListStore" id="interface.im.hide_new.store"> + <columns> + <!-- column-name text --> + <column type="gchararray"/> + <!-- column-name value --> + <column type="gchararray"/> + </columns> + <data> + <row> + <col id="0" translatable="yes">Never</col> + <col id="1">never</col> + </row> + <row> + <col id="0" translatable="yes">When away</col> + <col id="1">away</col> + </row> + <row> + <col id="0" translatable="yes">Always</col> + <col id="1">always</col> + </row> + </data> + </object> <object class="GtkListStore" id="logging.format.store"> <columns> <!-- column-name text --> @@ -180,6 +266,410 @@ <property name="can_focus">True</property> <property name="tab_pos">left</property> <child> + <object class="GtkBox" id="interface.page"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="margin_left">12</property> + <property name="margin_right">12</property> + <property name="margin_top">12</property> + <property name="margin_bottom">12</property> + <property name="orientation">vertical</property> + <property name="spacing">18</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">12</property> + <property name="left_padding">12</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label1"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">_Show system tray icon:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">interface.docklet.combo</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="interface.docklet.combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">interface.docklet.store</property> + <child> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">System Tray Icon</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">12</property> + <property name="left_padding">12</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label2"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">_Hide new IM conversations:</property> + <property name="use_underline">True</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="interface.im.hide_new.combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">interface.im.hide_new.store</property> + <child> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="interface.win32.minimize_new_convs"> + <property name="label" translatable="yes">Minimi_ze new conversation windows</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Conversation Window</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">12</property> + <property name="left_padding">12</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="interface.conversations.tabs"> + <property name="label" translatable="yes">Show IMs and chats in _tabbed windows</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="interface.conversations.tabs_vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <property name="spacing">6</property> + <child> + <object class="GtkCheckButton" id="interface.conversations.close_on_tabs"> + <property name="label" translatable="yes">Show closed b_utton on tabs</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label3"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">_Placement:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">interface.conversations.tab_side.combo</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="interface.conversations.tab_side.combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">interface.conversations.tab_side.store</property> + <child> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">6</property> + <child> + <object class="GtkLabel" id="label4"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">N_ew conversations:</property> + <property name="use_underline">True</property> + <property name="mnemonic_widget">interface.conversations.placement.combo</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkComboBox" id="interface.conversations.placement.combo"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">interface.conversations.placement.store</property> + <child> + <object class="GtkCellRendererText"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Tabs</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label_xalign">0</property> + <property name="shadow_type">none</property> + <child> + <object class="GtkAlignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="bottom_padding">12</property> + <property name="left_padding">12</property> + <child> + <object class="GtkCheckButton" id="interface.keys.escape"> + <property name="label" translatable="yes">Cl_ose conversations with the Escape key</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + </child> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Keyboard Shortcuts</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Interface</property> + </object> + <packing> + <property name="tab_fill">False</property> + </packing> + </child> + <child> <object class="GtkBox" id="browser.page"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -446,6 +936,9 @@ </packing> </child> </object> + <packing> + <property name="position">1</property> + </packing> </child> <child type="tab"> <object class="GtkLabel"> @@ -454,6 +947,7 @@ <property name="label" translatable="yes">Browser</property> </object> <packing> + <property name="position">1</property> <property name="tab_fill">False</property> </packing> </child> @@ -889,7 +1383,7 @@ </child> </object> <packing> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> <child type="tab"> @@ -899,7 +1393,7 @@ <property name="label" translatable="yes">Conversations</property> </object> <packing> - <property name="position">1</property> + <property name="position">2</property> <property name="tab_fill">False</property> </packing> </child> @@ -1042,7 +1536,7 @@ </child> </object> <packing> - <property name="position">2</property> + <property name="position">3</property> </packing> </child> <child type="tab"> @@ -1052,7 +1546,7 @@ <property name="label" translatable="yes">Logging</property> </object> <packing> - <property name="position">2</property> + <property name="position">3</property> <property name="tab_fill">False</property> </packing> </child> @@ -1545,7 +2039,7 @@ </child> </object> <packing> - <property name="position">3</property> + <property name="position">4</property> </packing> </child> <child type="tab"> @@ -1555,7 +2049,7 @@ <property name="label" translatable="yes">Network</property> </object> <packing> - <property name="position">3</property> + <property name="position">4</property> <property name="tab_fill">False</property> </packing> </child> @@ -1873,7 +2367,7 @@ </child> </object> <packing> - <property name="position">4</property> + <property name="position">5</property> </packing> </child> <child type="tab"> @@ -1883,7 +2377,7 @@ <property name="label" translatable="yes">Proxy</property> </object> <packing> - <property name="position">4</property> + <property name="position">5</property> <property name="tab_fill">False</property> </packing> </child> @@ -1904,6 +2398,14 @@ <widget name="label7"/> </widgets> </object> + <object class="GtkSizeGroup" id="interface.sg"> + <widgets> + <widget name="label1"/> + <widget name="label2"/> + <widget name="label3"/> + <widget name="label4"/> + </widgets> + </object> <object class="GtkSizeGroup" id="network.sg"> <widgets> <widget name="label8"/>