prefs: Convert Interface page to glade.

Mon, 25 Jun 2018 04:20:09 -0400

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Mon, 25 Jun 2018 04:20:09 -0400
changeset 39188
093a6314d473
parent 39187
ff095c074d32
child 39189
d2ca6e91fff8

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, &current);
 	gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbox),
 		accel_is_escape(&current));
@@ -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"/>

mercurial