[gnome-control-center] mouse: port panel to the new design



commit 1896fafef65c5d7daff83fc4591803daac8652db
Author: Felipe Borges <feborges redhat com>
Date:   Thu Oct 22 15:33:08 2015 +0200

    mouse: port panel to the new design
    
    https://wiki.gnome.org/Design/SystemSettings/Mouse
    
    https://bugzilla.gnome.org/show_bug.cgi?id=756863

 panels/mouse/cc-mouse-caps-helper.c    |   12 +-
 panels/mouse/cc-mouse-caps-helper.h    |    1 +
 panels/mouse/cc-mouse-panel.c          |   58 +--
 panels/mouse/gnome-mouse-properties.c  |  201 ++++---
 panels/mouse/gnome-mouse-properties.ui |  910 ++++++++++++++++----------------
 5 files changed, 607 insertions(+), 575 deletions(-)
---
diff --git a/panels/mouse/cc-mouse-caps-helper.c b/panels/mouse/cc-mouse-caps-helper.c
index e2c7f32..cf6e415 100644
--- a/panels/mouse/cc-mouse-caps-helper.c
+++ b/panels/mouse/cc-mouse-caps-helper.c
@@ -22,6 +22,7 @@
 
 static gboolean
 synaptics_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
+                                  gboolean *have_edge_scrolling,
                                   gboolean *have_tap_to_click)
 {
        int numdevices, i;
@@ -38,6 +39,7 @@ synaptics_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
                return FALSE;
 
        *have_two_finger_scrolling = FALSE;
+       *have_edge_scrolling = FALSE;
        *have_tap_to_click = FALSE;
 
        devicelist = XListInputDevices (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &numdevices);
@@ -68,6 +70,9 @@ synaptics_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
                        if (data[3])
                                *have_two_finger_scrolling = TRUE;
 
+                       /* Edge scrolling should be supported for all synaptics touchpads */
+                       *have_edge_scrolling = TRUE;
+
                        XFree (data);
                }
 
@@ -77,9 +82,12 @@ synaptics_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
                                         &bytes_after, &data) == Success) && (realtype != None)) {
                        /* Property data is booleans for two-finger, edge, on-button scroll available. */
 
-                       if (data[0] && data[1])
+                       if (data[0])
                                *have_two_finger_scrolling = TRUE;
 
+                       if (data[1])
+                               *have_edge_scrolling = TRUE;
+
                        XFree (data);
                }
 
@@ -103,10 +111,12 @@ synaptics_check_capabilities_x11 (gboolean *have_two_finger_scrolling,
 
 gboolean
 synaptics_check_capabilities (gboolean *have_two_finger_scrolling,
+                              gboolean *have_edge_scrolling,
                               gboolean *have_tap_to_click)
 {
        if (GDK_IS_X11_DISPLAY (gdk_display_get_default ()))
                return synaptics_check_capabilities_x11 (have_two_finger_scrolling,
+                                                        have_edge_scrolling,
                                                         have_tap_to_click);
        /* else we unconditionally show all touchpad knobs */
        return FALSE;
diff --git a/panels/mouse/cc-mouse-caps-helper.h b/panels/mouse/cc-mouse-caps-helper.h
index a5f9802..7ab2605 100644
--- a/panels/mouse/cc-mouse-caps-helper.h
+++ b/panels/mouse/cc-mouse-caps-helper.h
@@ -28,6 +28,7 @@
 #include <X11/extensions/XInput.h>
 
 gboolean synaptics_check_capabilities (gboolean *have_two_finger_scrolling,
+                                       gboolean *have_edge_scrolling,
                                        gboolean *have_tap_to_click);
 
 #endif /* _CC_MOUSE_CAPS_HELPER_H_ */
diff --git a/panels/mouse/cc-mouse-panel.c b/panels/mouse/cc-mouse-panel.c
index 9aa3107..f88b70f 100644
--- a/panels/mouse/cc-mouse-panel.c
+++ b/panels/mouse/cc-mouse-panel.c
@@ -37,9 +37,7 @@ CC_PANEL_REGISTER (CcMousePanel, cc_mouse_panel)
 
 struct _CcMousePanelPrivate
 {
-  GtkWidget  *test_dialog;
-  GtkWidget  *prefs_widget;
-  GtkWidget  *test_widget;
+  GtkWidget  *stack;
 };
 
 enum {
@@ -50,14 +48,6 @@ enum {
 static void
 cc_mouse_panel_dispose (GObject *object)
 {
-  CcMousePanelPrivate *priv = CC_MOUSE_PANEL (object)->priv;
-
-  if (priv->test_dialog)
-    {
-      gtk_widget_destroy (priv->test_dialog);
-      priv->test_dialog = NULL;
-    }
-
   G_OBJECT_CLASS (cc_mouse_panel_parent_class)->dispose (object);
 }
 
@@ -68,22 +58,20 @@ cc_mouse_panel_get_help_uri (CcPanel *panel)
 }
 
 static void
-shell_test_button_clicked (GtkButton *button, CcMousePanel *panel)
+shell_test_button_toggled (GtkToggleButton *button, CcMousePanel *panel)
 {
   CcMousePanelPrivate *priv = panel->priv;
+  gboolean active;
 
-  /* GTK_RESPONSE_NONE is returned if the dialog is being destroyed, so only
-   * hide the dialog if it is not being destroyed */
-  if (gtk_dialog_run (GTK_DIALOG (priv->test_dialog)) != GTK_RESPONSE_NONE)
-    gtk_widget_hide (priv->test_dialog);
+  active = gtk_toggle_button_get_active (button);
+  gtk_stack_set_visible_child_name (GTK_STACK (priv->stack), active ? "test_widget" : "prefs_widget");
 }
 
 static void
 cc_mouse_panel_constructed (GObject *object)
 {
   CcMousePanel *self = CC_MOUSE_PANEL (object);
-  CcMousePanelPrivate *priv = self->priv;
-  GtkWidget *button, *container, *toplevel;
+  GtkWidget *button;
   CcShell *shell;
 
   G_OBJECT_CLASS (cc_mouse_panel_parent_class)->constructed (object);
@@ -91,7 +79,7 @@ cc_mouse_panel_constructed (GObject *object)
   /* Add test area button to shell header. */
   shell = cc_panel_get_shell (CC_PANEL (self));
 
-  button = gtk_button_new_with_mnemonic (_("Test Your _Settings"));
+  button = gtk_toggle_button_new_with_mnemonic (_("Test Your _Settings"));
   gtk_style_context_add_class (gtk_widget_get_style_context (button),
                                "text-button");
   gtk_widget_set_valign (button, GTK_ALIGN_CENTER);
@@ -99,41 +87,29 @@ cc_mouse_panel_constructed (GObject *object)
 
   cc_shell_embed_widget_in_header (shell, button);
 
-  g_signal_connect (GTK_BUTTON (button), "clicked",
-                    G_CALLBACK (shell_test_button_clicked),
+  g_signal_connect (GTK_BUTTON (button), "toggled",
+                    G_CALLBACK (shell_test_button_toggled),
                     self);
-
-  toplevel = cc_shell_get_toplevel (shell);
-  priv->test_dialog = g_object_new (GTK_TYPE_DIALOG, "title", _("Test Your Settings"),
-                                                     "transient-for", GTK_WINDOW (toplevel),
-                                                     "modal", TRUE,
-                                                     "use_header-bar", TRUE,
-                                                     "resizable", FALSE,
-                                                     NULL);
-
-  container = gtk_dialog_get_content_area (GTK_DIALOG (priv->test_dialog));
-  gtk_container_add (GTK_CONTAINER (container), priv->test_widget);
 }
 
 static void
 cc_mouse_panel_init (CcMousePanel *self)
 {
   CcMousePanelPrivate *priv;
+  GtkWidget *prefs_widget, *test_widget;
 
   priv = self->priv = MOUSE_PANEL_PRIVATE (self);
   g_resources_register (cc_mouse_get_resource ());
 
-  priv->prefs_widget = cc_mouse_properties_new ();
-  priv->test_widget = cc_mouse_test_new ();
+  prefs_widget = cc_mouse_properties_new ();
+  test_widget = cc_mouse_test_new ();
 
-  gtk_widget_set_margin_start (priv->prefs_widget, 6);
-  gtk_widget_set_margin_end (priv->prefs_widget, 6);
-  gtk_widget_set_margin_top (priv->prefs_widget, 6);
-  gtk_widget_set_margin_bottom (priv->prefs_widget, 6);
+  priv->stack = gtk_stack_new ();
+  gtk_stack_add_named (GTK_STACK (priv->stack), prefs_widget, "prefs_widget");
+  gtk_stack_add_named (GTK_STACK (priv->stack), test_widget, "test_widget");
 
-  gtk_container_add (GTK_CONTAINER (self), priv->prefs_widget);
-  gtk_widget_show (priv->prefs_widget);
-  gtk_widget_show (priv->test_widget);
+  gtk_container_add (GTK_CONTAINER (self), priv->stack);
+  gtk_widget_show_all (priv->stack);
 }
 
 static void
diff --git a/panels/mouse/gnome-mouse-properties.c b/panels/mouse/gnome-mouse-properties.c
index c8b9a70..0b1b5ae 100644
--- a/panels/mouse/gnome-mouse-properties.c
+++ b/panels/mouse/gnome-mouse-properties.c
@@ -35,6 +35,7 @@
 #include "gnome-mouse-properties.h"
 #include "gsd-input-helper.h"
 #include "gsd-device-manager.h"
+#include "shell/list-box-helper.h"
 #include "cc-mouse-caps-helper.h"
 
 #include <sys/types.h>
@@ -61,50 +62,100 @@ struct _CcMousePropertiesPrivate
        gboolean have_touchpad;
        gboolean have_touchscreen;
 
+       gboolean left_handed;
+
        gboolean changing_scroll;
 };
 
 G_DEFINE_TYPE (CcMouseProperties, cc_mouse_properties, GTK_TYPE_BIN);
 
 static void
-orientation_radio_button_release_event (GtkWidget   *widget,
-                                       GdkEventButton *event)
+on_mouse_orientation_changed (GtkToggleButton *button,
+                             gpointer         user_data)
+{
+       CcMousePropertiesPrivate *d = user_data;
+
+       if (gtk_toggle_button_get_active (button)) {
+               g_settings_set_boolean (d->mouse_settings, "left-handed", !d->left_handed);
+               gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID (d->left_handed ? "primary-button-right" 
: "primary-button-left")), FALSE);
+               d->left_handed = !d->left_handed;
+       }
+}
+
+static void
+orientation_button_release_event (GtkWidget   *widget,
+                                 GdkEventButton *event)
 {
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
 }
 
 static void
-setup_scrollmethod_radios (CcMousePropertiesPrivate *d)
+natural_scrolling_state_set (GtkSwitch *button,
+                            gboolean   state,
+                            gpointer user_data)
 {
-        GsdTouchpadScrollMethod method;
-        gboolean active;
-        gboolean two_finger_scrolling;
-        gboolean tap_to_click;
-
-        if (synaptics_check_capabilities (&two_finger_scrolling, &tap_to_click)) {
-                gtk_widget_set_sensitive (WID ("two_finger_scroll_toggle"), two_finger_scrolling);
-                gtk_widget_set_sensitive (WID ("tap_to_click_toggle"), tap_to_click);
-        }
-
-        method = g_settings_get_enum (d->touchpad_settings, "scroll-method");
-       active = (method == GSD_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING);
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (WID ("two_finger_scroll_toggle")), active);
+       CcMousePropertiesPrivate *d = user_data;
+
+       g_settings_set_boolean (d->mouse_settings, "natural-scroll", state);
+       g_settings_set_boolean (d->touchpad_settings, "natural-scroll", state);
+       gtk_switch_set_state (button, state);
 }
 
 static void
-scrollmethod_changed_event (GtkToggleButton *button, CcMousePropertiesPrivate *d)
+setup_touchpad_options (CcMousePropertiesPrivate *d)
 {
        GsdTouchpadScrollMethod method;
+       gboolean have_two_finger_scrolling;
+       gboolean have_edge_scrolling;
+       gboolean have_tap_to_click;
+
+       synaptics_check_capabilities (&have_two_finger_scrolling, &have_edge_scrolling, &have_tap_to_click);
+
+       gtk_widget_show_all (WID ("touchpad-frame"));
+
+       if (have_two_finger_scrolling)
+               gtk_widget_show (WID ("two-finger-scrolling-row"));
+       else if (have_edge_scrolling)
+               gtk_widget_show (WID ("edge-scrolling-row"));
+       if (have_tap_to_click)
+               gtk_widget_show (WID ("tap-to-click-row"));
+
+       method = g_settings_get_enum (d->touchpad_settings, "scroll-method");
+       gtk_switch_set_active (GTK_SWITCH (WID ("two-finger-scrolling-switch")),
+                              method == GSD_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING);
+
+       gtk_switch_set_active (GTK_SWITCH (WID ("edge-scrolling-switch")),
+                              method == GSD_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING);
+}
+
+static void
+two_finger_scrollmethod_changed_event (GtkSwitch *button,
+                                      gboolean   state,
+                                      gpointer   user_data)
+{
+       CcMousePropertiesPrivate *d = user_data;
 
        if (d->changing_scroll)
                return;
 
-       if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (WID ("two_finger_scroll_toggle"))))
-               method = GSD_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING;
-       else
-               method = GSD_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING;
+       g_settings_set_enum (d->touchpad_settings, "scroll-method",
+                            state ? GSD_TOUCHPAD_SCROLL_METHOD_TWO_FINGER_SCROLLING : 
GSD_TOUCHPAD_SCROLL_METHOD_DISABLED);
+       gtk_switch_set_state (button, state);
+}
+
+static void
+edge_scrolling_changed_event (GtkSwitch *button,
+                             gboolean   state,
+                             gpointer user_data)
+{
+       CcMousePropertiesPrivate *d = user_data;
 
-       g_settings_set_enum (d->touchpad_settings, "scroll-method", method);
+       if (d->changing_scroll)
+               return;
+
+       g_settings_set_enum (d->touchpad_settings, "scroll-method",
+                            state ? GSD_TOUCHPAD_SCROLL_METHOD_EDGE_SCROLLING : 
GSD_TOUCHPAD_SCROLL_METHOD_DISABLED);
+       gtk_switch_set_state (button, state);
 }
 
 static gboolean
@@ -163,94 +214,79 @@ touchpad_enabled_set_mapping (const GValue              *value,
 static void
 setup_dialog (CcMousePropertiesPrivate *d)
 {
-       GtkRadioButton *radio;
+       GtkToggleButton *button;
 
-       /* Orientation radio buttons */
-       radio = GTK_RADIO_BUTTON (WID ("left_handed_radio"));
-       g_settings_bind (d->mouse_settings, "left-handed", radio, "active", G_SETTINGS_BIND_DEFAULT);
+       d->left_handed = g_settings_get_boolean (d->mouse_settings, "left-handed");
+       button = GTK_TOGGLE_BUTTON (WID (d->left_handed ? "primary-button-right" : "primary-button-left"));
+       gtk_toggle_button_set_active (button, TRUE);
+       g_signal_connect (WID ("primary-button-left"), "toggled",
+                         G_CALLBACK (on_mouse_orientation_changed), d);
+       g_signal_connect (WID ("primary-button-right"), "toggled",
+                         G_CALLBACK (on_mouse_orientation_changed), d);
 
        /* explicitly connect to button-release so that you can change orientation with either button */
-       g_signal_connect (WID ("right_handed_radio"), "button_release_event",
-               G_CALLBACK (orientation_radio_button_release_event), NULL);
-       g_signal_connect (WID ("left_handed_radio"), "button_release_event",
-               G_CALLBACK (orientation_radio_button_release_event), NULL);
-
-       /* Double-click time */
-       g_settings_bind (d->gsd_mouse_settings, "double-click",
-                        gtk_range_get_adjustment (GTK_RANGE (WID ("double_click_scale"))), "value",
+       g_signal_connect (WID ("primary-button-right"), "button_release_event",
+               G_CALLBACK (orientation_button_release_event), NULL);
+       g_signal_connect (WID ("primary-button-left"), "button_release_event",
+               G_CALLBACK (orientation_button_release_event), NULL);
+
+       /* bind natural-scroll setting for mice and touchpad */
+       g_settings_bind (d->touchpad_settings, "natural-scroll",
+                        WID ("natural-scrolling-switch"), "active",
                         G_SETTINGS_BIND_DEFAULT);
+       g_signal_connect (WID ("natural-scrolling-switch"), "state-set",
+                         G_CALLBACK (natural_scrolling_state_set), d);
+
+       gtk_list_box_set_header_func (GTK_LIST_BOX (WID ("general-listbox")), cc_list_box_update_header_func, 
NULL, NULL);
 
        /* Mouse section */
-       gtk_widget_set_visible (WID ("mouse_vbox"), d->have_mouse);
+       gtk_widget_set_visible (WID ("mouse-frame"), d->have_mouse);
 
-       gtk_scale_add_mark (GTK_SCALE (WID ("pointer_speed_scale")), 0,
+       gtk_scale_add_mark (GTK_SCALE (WID ("mouse-speed-scale")), 0,
                            GTK_POS_TOP, NULL);
        g_settings_bind (d->mouse_settings, "speed",
-                        gtk_range_get_adjustment (GTK_RANGE (WID ("pointer_speed_scale"))), "value",
+                        gtk_range_get_adjustment (GTK_RANGE (WID ("mouse-speed-scale"))), "value",
                         G_SETTINGS_BIND_DEFAULT);
 
-       /* Trackpad page */
-       gtk_widget_set_visible (WID ("touchpad_vbox"), d->have_touchpad);
-       gtk_widget_set_visible (WID ("touchpad_enabled_switch"), 
+       /* Touchpad section */
+       gtk_widget_set_visible (WID ("touchpad-frame"), d->have_touchpad);
+       gtk_widget_set_visible (WID ("touchpad-toggle-switch"),
                                show_touchpad_enabling_switch (d));
 
        g_settings_bind_with_mapping (d->touchpad_settings, "send-events",
-                                     WID ("touchpad_enabled_switch"), "active",
+                                     WID ("touchpad-toggle-switch"), "active",
                                      G_SETTINGS_BIND_DEFAULT,
                                      touchpad_enabled_get_mapping,
                                      touchpad_enabled_set_mapping,
                                      NULL, NULL);
        g_settings_bind_with_mapping (d->touchpad_settings, "send-events",
-                                     WID ("touchpad_options_box"), "sensitive",
+                                     WID ("touchpad-options-revealer"), "reveal-child",
                                      G_SETTINGS_BIND_GET,
                                      touchpad_enabled_get_mapping,
                                      touchpad_enabled_set_mapping,
                                      NULL, NULL);
 
-       g_settings_bind (d->touchpad_settings, "tap-to-click",
-                        WID ("tap_to_click_toggle"), "active",
-                        G_SETTINGS_BIND_DEFAULT);
-       g_settings_bind (d->touchpad_settings, "natural-scroll",
-                        WID ("natural_scroll_toggle"), "active",
-                        G_SETTINGS_BIND_DEFAULT);
-       gtk_scale_add_mark (GTK_SCALE (WID ("touchpad_pointer_speed_scale")), 0,
+       gtk_scale_add_mark (GTK_SCALE (WID ("touchpad-speed-scale")), 0,
                            GTK_POS_TOP, NULL);
        g_settings_bind (d->touchpad_settings, "speed",
-                        gtk_range_get_adjustment (GTK_RANGE (WID ("touchpad_pointer_speed_scale"))), "value",
+                        gtk_range_get_adjustment (GTK_RANGE (WID ("touchpad-speed-scale"))), "value",
+                        G_SETTINGS_BIND_DEFAULT);
+
+       g_settings_bind (d->touchpad_settings, "tap-to-click",
+                        WID ("tap-to-click-switch"), "active",
                         G_SETTINGS_BIND_DEFAULT);
 
        if (d->have_touchpad) {
-               setup_scrollmethod_radios (d);
+               setup_touchpad_options (d);
        }
 
-       g_signal_connect (WID ("two_finger_scroll_toggle"), "toggled",
-                         G_CALLBACK (scrollmethod_changed_event), d);
-}
-
-/* Construct the dialog */
-
-static void
-create_dialog (CcMousePropertiesPrivate *d)
-{
-       GtkSizeGroup *size_group;
-
-       size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-       gtk_size_group_add_widget (size_group, WID ("primary_button_label"));
-       gtk_size_group_add_widget (size_group, WID ("pointer_speed_label"));
-       gtk_size_group_add_widget (size_group, WID ("double_click_label"));
-       gtk_size_group_add_widget (size_group, WID ("touchpad_pointer_speed_label"));
-
-       size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-       gtk_size_group_add_widget (size_group, WID ("pointer_speed_fast_label"));
-       gtk_size_group_add_widget (size_group, WID ("double_click_fast_label"));
-       gtk_size_group_add_widget (size_group, WID ("touchpad_pointer_speed_fast_label"));
+       g_signal_connect (WID ("two-finger-scrolling-switch"), "state-set",
+                         G_CALLBACK (two_finger_scrollmethod_changed_event), d);
 
-       size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-       gtk_size_group_add_widget (size_group, WID ("pointer_speed_slow_label"));
-       gtk_size_group_add_widget (size_group, WID ("double_click_slow_label"));
-       gtk_size_group_add_widget (size_group, WID ("touchpad_pointer_speed_slow_label"));
+       g_signal_connect (WID ("edge-scrolling-switch"), "state-set",
+                         G_CALLBACK (edge_scrolling_changed_event), d);
 
-       gtk_widget_set_direction (WID ("primary_button_box"), GTK_TEXT_DIR_LTR);
+       gtk_list_box_set_header_func (GTK_LIST_BOX (WID ("touchpad-options-listbox")), 
cc_list_box_update_header_func, NULL, NULL);
 }
 
 /* Callback issued when a button is clicked on the dialog */
@@ -261,17 +297,17 @@ device_changed (GsdDeviceManager *device_manager,
                CcMousePropertiesPrivate *d)
 {
        d->have_touchpad = touchpad_is_present ();
-       gtk_widget_set_visible (WID ("touchpad_vbox"), d->have_touchpad);
+       gtk_widget_set_visible (WID ("touchpad-frame"), d->have_touchpad);
 
        if (d->have_touchpad) {
                d->changing_scroll = TRUE;
-               setup_scrollmethod_radios (d);
+               setup_touchpad_options (d);
                d->changing_scroll = FALSE;
        }
 
        d->have_mouse = mouse_is_present ();
-       gtk_widget_set_visible (WID ("mouse_vbox"), d->have_mouse);
-       gtk_widget_set_visible (WID ("touchpad_enabled_switch"), 
+       gtk_widget_set_visible (WID ("mouse-frame"), d->have_mouse);
+       gtk_widget_set_visible (WID ("touchpad-toggle-switch"),
                                show_touchpad_enabling_switch (d));
 }
 
@@ -335,9 +371,8 @@ cc_mouse_properties_init (CcMouseProperties *object)
 
        d->changing_scroll = FALSE;
 
-       gtk_container_add (GTK_CONTAINER (object), WID ("prefs_widget"));
+       gtk_container_add (GTK_CONTAINER (object), WID ("scrolled-window"));
 
-       create_dialog (d);
        setup_dialog (d);
 }
 
diff --git a/panels/mouse/gnome-mouse-properties.ui b/panels/mouse/gnome-mouse-properties.ui
index 582ab55..81430bf 100644
--- a/panels/mouse/gnome-mouse-properties.ui
+++ b/panels/mouse/gnome-mouse-properties.ui
@@ -16,610 +16,620 @@
     <property name="step_increment">100</property>
     <property name="page_increment">100</property>
   </object>
-          <object class="GtkBox" id="prefs_widget">
+  <object class="GtkScrolledWindow" id="scrolled-window">
+    <property name="visible">True</property>
+    <property name="can_focus">True</property>
+    <property name="shadow_type">none</property>
+    <property name="hscrollbar_policy">never</property>
+    <property name="height_request">460</property>
+    <child>
+      <object class="GtkBox" id="prefs_widget">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="margin_start">134</property>
+        <property name="margin_end">134</property>
+        <property name="margin_top">12</property>
+        <property name="margin_bottom">12</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkFrame" id="general-frame">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
-            <property name="valign">start</property>
-            <property name="orientation">vertical</property>
+            <property name="shadow_type">in</property>
+            <property name="margin_top">12</property>
+            <property name="margin_bottom">12</property>
+            <property name="label" translatable="yes">General</property>
+            <property name="shadow_type">none</property>
+            <child type="label">
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="margin_start">3</property>
+                <property name="label" translatable="yes">General</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+            </child>
             <child>
-              <object class="GtkVBox" id="vbox">
+              <object class="GtkFrame" id="general-frame-listbox">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                <property name="border_width">10</property>
-                <property name="spacing">10</property>
+                <property name="shadow_type">in</property>
+                <property name="margin_top">12</property>
+                <property name="margin_bottom">12</property>
+                <property name="shadow_type">in</property>
                 <child>
-                  <object class="GtkVBox" id="primary_button_vbox">
+                  <object class="GtkListBox" id="general-listbox">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <child>
-                          <object class="GtkLabel" id="label27">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes">General</property>
-                            <property name="margin_start">5</property>
-                            <property name="margin_end">5</property>
-                            <attributes>
-                              <attribute name="weight" value="bold"/>
-                            </attributes>
-                          </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
+                    <property name="can_focus">True</property>
+                    <property name="selection_mode">none</property>
+                    <child>
+                      <object class="GtkListBoxRow" id="primary-button-row">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
                         <child>
-                          <object class="GtkTable" id="table3">
+                          <object class="GtkGrid" id="primary-button-grid">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="n_rows">2</property>
-                            <property name="n_columns">3</property>
-                            <property name="column_spacing">40</property>
-                            <property name="row_spacing">10</property>
-                            <property name="margin_top">5</property>
-                            <property name="margin_start">20</property>
-                            <property name="margin_end">240</property>
+                            <property name="row_spacing">0</property>
+                            <property name="column_spacing">16</property>
+                            <property name="margin_start">12</property>
+                            <property name="margin_end">6</property>
+                            <property name="margin_top">6</property>
+                            <property name="margin_bottom">6</property>
                             <child>
-                              <object class="GtkHBox" id="hbox5">
+                              <object class="GtkLabel" id="primary-button-label">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="spacing">5</property>
-                                <child>
-                                  <object class="GtkLabel" id="double_click_slow_label">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">1</property>
-                                    <property name="label" translatable="yes" context="double click, 
speed">Slow</property>
-                                    <attributes>
-                                      <attribute name="scale" value="0.82999999999999996"/>
-                                    </attributes>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkHScale" id="double_click_scale">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="adjustment">adjustment4</property>
-                                    <property name="inverted">True</property>
-                                    <property name="draw_value">False</property>
-                                    <child internal-child="accessible">
-                                      <object class="AtkObject" id="double_click_scale-atkobject">
-                                        <property name="AtkObject::accessible-description" 
translatable="yes">Double-click timeout</property>
-                                      </object>
-                                    </child>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">True</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="double_click_fast_label">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes" context="double click, 
speed">Fast</property>
-                                    <attributes>
-                                      <attribute name="scale" value="0.82999999999999996"/>
-                                    </attributes>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">False</property>
-                                    <property name="position">2</property>
-                                  </packing>
-                                </child>
-                              </object>
-                              <packing>
-                                <property name="left_attach">1</property>
-                                <property name="right_attach">3</property>
-                                <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
-                                <property name="x_padding">2</property>
-                              </packing>
-                            </child>
-                            <child>
-                              <object class="GtkLabel" id="double_click_label">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="halign">start</property>
+                                <property name="hexpand">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">_Double-click</property>
+                                <property name="label" translatable="yes">Primary Button</property>
                                 <property name="use_underline">True</property>
-                                <property name="justify">center</property>
-                                <property name="mnemonic_widget">double_click_scale</property>
+                                <property name="mnemonic_widget">primary-button-chooser-grid</property>
                               </object>
                               <packing>
-                                <property name="top_attach">1</property>
-                                <property name="bottom_attach">2</property>
-                                <property name="x_options">GTK_FILL</property>
-                                <property name="y_options">GTK_FILL</property>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="primary_button_label">
+                              <object class="GtkLabel" id="primary-button-description">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="halign">start</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Primary _button</property>
-                                <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">right_handed_radio</property>
+                                <property name="label" translatable="yes">For mice and touchpads.</property>
+                                <style>
+                                  <class name="dim-label"/>
+                                </style>
                               </object>
                               <packing>
-                                <property name="x_options">GTK_FILL</property>
-                                <property name="y_options">GTK_FILL</property>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkBox" id="primary_button_box">
+                              <object class="GtkGrid" id="primary-button-chooser-grid">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="spacing">10</property>
+                                <style>
+                                  <class name="linked"/>
+                                </style>
                                 <child>
-                                  <object class="GtkRadioButton" id="right_handed_radio">
-                                    <property name="label" translatable="yes" context="mouse, left button as 
primary">_Left</property>
-                                    <property name="use_action_appearance">False</property>
+                                  <object class="GtkToggleButton" id="primary-button-left">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="active">True</property>
-                                    <property name="draw_indicator">True</property>
+                                    <property name="hexpand">True</property>
+                                    <property name="label">Left</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkRadioButton" id="left_handed_radio">
-                                    <property name="label" translatable="yes" context="mouse, right button 
as primary">_Right</property>
-                                    <property name="use_action_appearance">False</property>
+                                  <object class="GtkToggleButton" id="primary-button-right">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="draw_indicator">True</property>
-                                    <property name="group">right_handed_radio</property>
+                                    <property name="hexpand">True</property>
+                                    <property name="label">Right</property>
                                   </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
                                 </child>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
-                                <property name="right_attach">3</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">2</property>
                               </packing>
                             </child>
                           </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">1</property>
-                          </packing>
                         </child>
                       </object>
-                      <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
-                      </packing>
                     </child>
                     <child>
-                      <object class="GtkVBox" id="mouse_vbox">
+                      <object class="GtkListBoxRow" id="natural-scrolling-row">
                         <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="can_focus">True</property>
                         <child>
-                          <object class="GtkSeparator" id="separator2">
+                          <object class="GtkGrid" id="natural-scrolling-grid">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                          </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkLabel" id="label29">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Mouse</property>
-                            <property name="margin_top">10</property>
-                            <property name="margin_start">5</property>
-                            <property name="margin_end">5</property>
-                            <attributes>
-                              <attribute name="weight" value="bold"/>
-                            </attributes>
-                          </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <object class="GtkTable" id="table2">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="n_columns">3</property>
-                            <property name="column_spacing">40</property>
-                            <property name="row_spacing">5</property>
-                            <property name="margin_top">5</property>
-                            <property name="margin_start">20</property>
-                            <property name="margin_end">240</property>
+                            <property name="row_spacing">0</property>
+                            <property name="column_spacing">16</property>
+                            <property name="margin_start">12</property>
+                            <property name="margin_end">6</property>
+                            <property name="margin_top">6</property>
+                            <property name="margin_bottom">6</property>
                             <child>
-                              <object class="GtkLabel" id="pointer_speed_label">
+                              <object class="GtkLabel" id="natural-scrolling-label">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="halign">start</property>
+                                <property name="hexpand">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">_Pointer speed</property>
+                                <property name="label" translatable="yes" comments="Translators: This switch 
reverses the scrolling direction for touchpads. The term used comes from OS X so use the same translation if 
possible. ">Natural Scrolling</property>
                                 <property name="use_underline">True</property>
-                                <property name="justify">center</property>
-                                <property name="mnemonic_widget">pointer_speed_scale</property>
+                                <property name="mnemonic_widget">natural-scrolling-switch</property>
                               </object>
                               <packing>
-                                <property name="x_options">GTK_FILL</property>
-                                <property name="y_options">GTK_FILL</property>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHBox" id="hbox1">
+                              <object class="GtkLabel" id="natural-scrolling-description">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                <property name="spacing">5</property>
-                                <child>
-                                  <object class="GtkLabel" id="pointer_speed_slow_label">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">1</property>
-                                    <property name="label" translatable="yes" context="mouse pointer, 
speed">Slow</property>
-                                    <property name="justify">center</property>
-                                    <attributes>
-                                      <attribute name="style" value="normal"/>
-                                      <attribute name="scale" value="0.82999999999999996"/>
-                                    </attributes>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkScale" id="pointer_speed_scale">
-                                    <property name="orientation">horizontal</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="adjustment">adjustment1</property>
-                                    <property name="draw_value">False</property>
-                                    <property name="has_origin">False</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">True</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="pointer_speed_fast_label">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes" context="mouse pointer, 
speed">Fast</property>
-                                    <property name="justify">center</property>
-                                    <attributes>
-                                      <attribute name="style" value="normal"/>
-                                      <attribute name="scale" value="0.82999999999999996"/>
-                                    </attributes>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">2</property>
-                                  </packing>
-                                </child>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">For mice and touchpads.</property>
+                                <style>
+                                  <class name="dim-label"/>
+                                </style>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkSwitch" id="natural-scrolling-switch">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="halign">end</property>
+                                <property name="valign">center</property>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
-                                <property name="right_attach">3</property>
-                                <property name="x_padding">2</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">2</property>
                               </packing>
                             </child>
                           </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">2</property>
-                          </packing>
                         </child>
                       </object>
-                      <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
                     </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkFrame" id="mouse-frame">
+            <property name="visible">False</property>
+            <property name="can_focus">False</property>
+            <property name="shadow_type">in</property>
+            <property name="margin_top">12</property>
+            <property name="margin_bottom">12</property>
+            <property name="shadow_type">none</property>
+            <child type="label">
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="margin_start">3</property>
+                <property name="label" translatable="yes">Mouse</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+            </child>
+            <child>
+              <object class="GtkFrame" id="mouse-frame-listbox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="shadow_type">in</property>
+                <property name="margin_top">12</property>
+                <property name="margin_bottom">12</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkListBox" id="mouse-listbox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="selection_mode">none</property>
                     <child>
-                      <object class="GtkVBox" id="touchpad_vbox">
+                      <object class="GtkListBoxRow" id="mouse-row">
                         <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | 
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                        <child>
-                          <object class="GtkSeparator" id="separator1">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                          </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
+                        <property name="can_focus">True</property>
                         <child>
-                          <object class="GtkBox" id="box3">
+                          <object class="GtkGrid" id="mouse-grid">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="margin_top">10</property>
-                            <property name="margin_start">5</property>
-                            <property name="margin_end">5</property>
+                            <property name="row_spacing">0</property>
+                            <property name="column_spacing">32</property>
+                            <property name="margin_start">12</property>
+                            <property name="margin_end">12</property>
+                            <property name="margin_top">12</property>
+                            <property name="margin_bottom">12</property>
                             <child>
-                              <object class="GtkLabel" id="label6">
+                              <object class="GtkLabel" id="mouse-label">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">Touchpad</property>
-                                <property name="mnemonic-widget">touchpad_enabled_switch</property>
-                                <attributes>
-                                  <attribute name="weight" value="bold"/>
-                                </attributes>
+                                <property name="label" translatable="yes">Mouse Speed</property>
+                                <property name="use_underline">True</property>
+                                <property name="mnemonic_widget">primary-button-chooser-grid</property>
                               </object>
                               <packing>
-                                <property name="expand">False</property>
-                                <property name="fill">False</property>
-                                <property name="position">0</property>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                                <property name="width">1</property>
+                                <property name="height">1</property>
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkSwitch" id="touchpad_enabled_switch">
-                                <property name="use_action_appearance">False</property>
+                              <object class="GtkScale" id="mouse-speed-scale">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
-                                <property name="halign">end</property>
-                                <property name="use_action_appearance">False</property>
-                              </object>
-                              <packing>
+                                <property name="adjustment">adjustment1</property>
+                                <property name="inverted">True</property>
+                                <property name="draw_value">False</property>
+                                <property name="width-request">200</property>
                                 <property name="expand">True</property>
-                                <property name="fill">True</property>
-                                <property name="position">1</property>
-                              </packing>
+                                <child internal-child="accessible">
+                                  <object class="AtkObject" id="mouse_speed_scale-atkobject">
+                                    <property name="AtkObject::accessible-description" 
translatable="yes">Double-click timeout</property>
+                                  </object>
+                                </child>
+                              </object>
                             </child>
                           </object>
-                          <packing>
-                            <property name="expand">True</property>
-                            <property name="fill">True</property>
-                            <property name="position">1</property>
-                          </packing>
                         </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+        <child>
+          <object class="GtkFrame" id="touchpad-frame">
+            <property name="visible">False</property>
+            <property name="can_focus">False</property>
+            <property name="shadow_type">in</property>
+            <property name="margin_top">12</property>
+            <property name="margin_bottom">12</property>
+            <property name="shadow_type">none</property>
+            <child type="label">
+              <object class="GtkLabel" id="label3">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="xalign">0</property>
+                <property name="margin_start">3</property>
+                <property name="label" translatable="yes">Touchpad</property>
+                <attributes>
+                  <attribute name="weight" value="bold"/>
+                </attributes>
+              </object>
+            </child>
+            <child>
+              <object class="GtkFrame" id="touchpad-frame-listbox">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="shadow_type">in</property>
+                <property name="margin_top">12</property>
+                <property name="margin_bottom">12</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkBox" id="touchpad-box">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="orientation">vertical</property>
+                    <child>
+                      <object class="GtkListBox" id="touchpad-listbox">
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="selection_mode">none</property>
                         <child>
-                          <object class="GtkBox" id="touchpad_options_box">
+                          <object class="GtkListBoxRow" id="touchpad-toggle-row">
                             <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="orientation">vertical</property>
-                            <property name="spacing">15</property>
-                            <property name="margin_top">5</property>
-                            <property name="margin_start">20</property>
-                            <property name="margin_end">20</property>
+                            <property name="can_focus">True</property>
                             <child>
-                              <object class="GtkTable" id="table1">
+                              <object class="GtkGrid" id="touchpad-toggle-grid">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="margin_end">220</property>
-                                <property name="n_columns">3</property>
-                                <property name="column_spacing">40</property>
-                                <property name="row_spacing">5</property>
+                                <property name="row_spacing">0</property>
+                                <property name="column_spacing">32</property>
+                                <property name="margin_start">12</property>
+                                <property name="margin_end">6</property>
+                                <property name="margin_top">6</property>
+                                <property name="margin_bottom">6</property>
                                 <child>
-                                  <object class="GtkLabel" id="touchpad_pointer_speed_label">
+                                  <object class="GtkLabel" id="touchpad-toggle-label">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="halign">start</property>
+                                    <property name="hexpand">True</property>
                                     <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">_Pointer speed</property>
+                                    <property name="label" translatable="yes">Touchpad</property>
                                     <property name="use_underline">True</property>
-                                    <property name="justify">center</property>
-                                    <property name="mnemonic_widget">touchpad_pointer_speed_scale</property>
+                                    <property name="mnemonic_widget">touchpad-toggle-switch</property>
                                   </object>
                                   <packing>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options"></property>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">0</property>
+                                    <property name="width">1</property>
+                                    <property name="height">1</property>
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkHBox" id="hbox7">
+                                  <object class="GtkSwitch" id="touchpad-toggle-switch">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="halign">end</property>
+                                    <property name="valign">center</property>
                                     <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="spacing">5</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="top_attach">0</property>
+                                    <property name="width">1</property>
+                                    <property name="height">2</property>
+                                  </packing>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                        <child>
+                          <object class="GtkListBoxRow" id="touchpad-separator-row1">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkSeparator" id="touchpad-separator1">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                              </object>
+                            </child>
+                          </object>
+                        </child>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkRevealer" id="touchpad-options-revealer">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkListBox" id="touchpad-options-listbox">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="selection_mode">none</property>
+                            <child>
+                              <object class="GtkListBoxRow" id="touchpad-speed-row">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <child>
+                                  <object class="GtkGrid" id="touchpad-speed-grid">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">0</property>
+                                    <property name="column_spacing">32</property>
+                                    <property name="margin_start">12</property>
+                                    <property name="margin_end">6</property>
+                                    <property name="margin_top">6</property>
+                                    <property name="margin_bottom">6</property>
                                     <child>
-                                      <object class="GtkLabel" id="touchpad_pointer_speed_slow_label">
+                                      <object class="GtkLabel" id="touchpad-speed-label">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
-                                        <property name="xalign">1</property>
-                                        <property name="label" translatable="yes" context="touchpad pointer, 
speed">Slow</property>
-                                        <property name="justify">center</property>
-                                        <attributes>
-                                          <attribute name="scale" value="0.82999999999999996"/>
-                                        </attributes>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Touchpad Speed</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">touchpad-speed-scale</property>
                                       </object>
                                       <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">True</property>
-                                        <property name="position">0</property>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
                                       </packing>
                                     </child>
                                     <child>
-                                      <object class="GtkScale" id="touchpad_pointer_speed_scale">
-                                        <property name="orientation">horizontal</property>
+                                      <object class="GtkScale" id="touchpad-speed-scale">
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
                                         <property name="adjustment">adjustment11</property>
+                                        <property name="inverted">True</property>
                                         <property name="draw_value">False</property>
-                                        <property name="has_origin">False</property>
+                                        <property name="width-request">200</property>
+                                        <property name="hexpand">True</property>
+                                        <child internal-child="accessible">
+                                          <object class="AtkObject" id="touchpad_speed_scale-atkobject">
+                                            <property name="AtkObject::accessible-description" 
translatable="yes">Double-click timeout</property>
+                                          </object>
+                                        </child>
                                       </object>
-                                      <packing>
-                                        <property name="expand">True</property>
-                                        <property name="fill">True</property>
-                                        <property name="position">1</property>
-                                      </packing>
                                     </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkListBoxRow" id="tap-to-click-row">
+                                <property name="visible">False</property>
+                                <property name="can_focus">True</property>
+                                <child>
+                                  <object class="GtkGrid" id="tap-to-click-grid">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">0</property>
+                                    <property name="column_spacing">32</property>
+                                    <property name="margin_start">12</property>
+                                    <property name="margin_end">6</property>
+                                    <property name="margin_top">6</property>
+                                    <property name="margin_bottom">6</property>
                                     <child>
-                                      <object class="GtkLabel" id="touchpad_pointer_speed_fast_label">
+                                      <object class="GtkLabel" id="tap-to-click-label">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
+                                        <property name="hexpand">True</property>
                                         <property name="xalign">0</property>
-                                        <property name="label" translatable="yes" context="touchpad pointer, 
speed">Fast</property>
-                                        <property name="justify">center</property>
-                                        <attributes>
-                                          <attribute name="scale" value="0.82999999999999996"/>
-                                        </attributes>
+                                        <property name="label" translatable="yes">Tap to Click</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">tap-to-click-switch</property>
                                       </object>
                                       <packing>
-                                        <property name="expand">False</property>
-                                        <property name="fill">True</property>
-                                        <property name="position">2</property>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSwitch" id="tap-to-click-switch">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="halign">end</property>
+                                        <property name="valign">center</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">2</property>
                                       </packing>
                                     </child>
                                   </object>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">3</property>
-                                    <property name="y_options"></property>
-                                    <property name="x_padding">2</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="GtkGrid" id="grid1">
-                                <property name="visible">True</property>
-                                <property name="can_focus">False</property>
-                                <property name="row_spacing">5</property>
-                                <property name="column_spacing">10</property>
+                              <object class="GtkListBoxRow" id="two-finger-scrolling-row">
+                                <property name="visible">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="no_show_all">True</property>
                                 <child>
-                                  <object class="GtkCheckButton" id="tap_to_click_toggle">
-                                    <property name="label" translatable="yes">Tap to _click</property>
-                                    <property name="use_action_appearance">False</property>
+                                  <object class="GtkGrid" id="two-finger-scrolling-grid">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="active">True</property>
-                                    <property name="draw_indicator">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">0</property>
+                                    <property name="column_spacing">32</property>
+                                    <property name="margin_start">12</property>
+                                    <property name="margin_end">6</property>
+                                    <property name="margin_top">6</property>
+                                    <property name="margin_bottom">6</property>
+                                    <child>
+                                      <object class="GtkLabel" id="two-finger-scrolling-label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Two Finger 
Scrolling</property>
+                                        <property name="use_underline">True</property>
+                                        <property 
name="mnemonic_widget">two-finger-scrolling-switch</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSwitch" id="two-finger-scrolling-switch">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="halign">end</property>
+                                        <property name="valign">center</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="left_attach">0</property>
-                                    <property name="top_attach">0</property>
-                                    <property name="width">1</property>
-                                    <property name="height">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="two_finger_scroll_toggle">
-                                    <property name="label" translatable="yes">Two _finger scroll</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="draw_indicator">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="top_attach">0</property>
-                                    <property name="width">1</property>
-                                    <property name="height">1</property>
-                                  </packing>
                                 </child>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkListBoxRow" id="edge-scrolling-row">
+                                <property name="visible">False</property>
+                                <property name="can_focus">True</property>
+                                <property name="no_show_all">True</property>
                                 <child>
-                                  <object class="GtkCheckButton" id="natural_scroll_toggle">
-                                    <property name="label" translatable="yes" comments="Translators: This 
switch reverses the scrolling direction for touchpads. The term used comes from OS X so use the same 
translation if possible. ">_Natural scrolling</property>
-                                    <property name="use_action_appearance">False</property>
+                                  <object class="GtkGrid" id="edge-scrolling-grid">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="events">GDK_POINTER_MOTION_MASK | 
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="active">True</property>
-                                    <property name="draw_indicator">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="row_spacing">0</property>
+                                    <property name="column_spacing">32</property>
+                                    <property name="margin_start">12</property>
+                                    <property name="margin_end">6</property>
+                                    <property name="margin_top">6</property>
+                                    <property name="margin_bottom">6</property>
+                                    <child>
+                                      <object class="GtkLabel" id="edge-scrolling-label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="hexpand">True</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Edge Scrolling</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">edge-scrolling-switch</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">0</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkSwitch" id="edge-scrolling-switch">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="halign">end</property>
+                                        <property name="valign">center</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="top_attach">0</property>
+                                        <property name="width">1</property>
+                                        <property name="height">2</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="left_attach">2</property>
-                                    <property name="top_attach">0</property>
-                                    <property name="width">1</property>
-                                    <property name="height">1</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>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">2</property>
-                      </packing>
                     </child>
                   </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
-                    <property name="position">4</property>
-                  </packing>
                 </child>
               </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
             </child>
           </object>
+        </child>
+      </object>
+    </child>
+  </object>
 </interface>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]