[Xfce4-commits] <xfce4-settings:nick/pointers> Add new dialog and read properties, writing not working yet.

Nick Schermer noreply at xfce.org
Sun May 22 23:22:01 CEST 2011


Updating branch refs/heads/nick/pointers
         to 4f41535e0fd2a7444c3f22948eeea149763a09c0 (commit)
       from b08a56478038a044958ac9758ee978f132b84b0e (commit)

commit 4f41535e0fd2a7444c3f22948eeea149763a09c0
Author: Nick Schermer <nick at xfce.org>
Date:   Sun May 22 23:07:58 2011 +0200

    Add new dialog and read properties, writing not working yet.

 configure.ac.in                                    |    8 +-
 dialogs/mouse-settings/Makefile.am                 |    2 +
 dialogs/mouse-settings/main.c                      |  483 ++++++++---
 dialogs/mouse-settings/mouse-dialog.glade          |  870 +++++++++++++++-----
 .../mouse-settings/xfce-mouse-settings.desktop.in  |    2 +-
 5 files changed, 999 insertions(+), 366 deletions(-)

diff --git a/configure.ac.in b/configure.ac.in
index 800e30a..82e9a24 100644
--- a/configure.ac.in
+++ b/configure.ac.in
@@ -63,7 +63,7 @@ AC_PROG_LIBTOOL()
 dnl **********************************
 dnl *** Check for standard headers ***
 dnl **********************************
-AC_CHECK_HEADERS([errno.h memory.h math.h stdlib.h string.h unistd.h signal.h time.h])
+AC_CHECK_HEADERS([errno.h memory.h math.h stdlib.h string.h unistd.h signal.h time.h sys/types.h])
 
 dnl ******************************
 dnl *** Check for i18n support ***
@@ -74,9 +74,9 @@ dnl ***********************************
 dnl *** Check for required packages ***
 dnl ***********************************
 XDT_CHECK_PACKAGE([EXO], [exo-1], [0.6.0])
-XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.14.0])
-XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.16.0])
-XDT_CHECK_PACKAGE([GIO], [gio-2.0], [2.16.0])
+XDT_CHECK_PACKAGE([GTK], [gtk+-2.0], [2.20.0])
+XDT_CHECK_PACKAGE([GLIB], [glib-2.0], [2.24.0])
+XDT_CHECK_PACKAGE([GIO], [gio-2.0], [2.24.0])
 XDT_CHECK_PACKAGE([LIBXFCE4UTIL], [libxfce4util-1.0], [4.8.0])
 XDT_CHECK_PACKAGE([LIBXFCE4UI], [libxfce4ui-1], [4.8.0])
 XDT_CHECK_PACKAGE([LIBXFCE4KBD_PRIVATE], [libxfce4kbd-private-2], [4.8.0])
diff --git a/dialogs/mouse-settings/Makefile.am b/dialogs/mouse-settings/Makefile.am
index 9da814f..3975905 100644
--- a/dialogs/mouse-settings/Makefile.am
+++ b/dialogs/mouse-settings/Makefile.am
@@ -22,6 +22,7 @@ xfce4_mouse_settings_CFLAGS = \
 	$(XFCONF_CFLAGS) \
 	$(XI_CFLAGS) \
 	$(XFCONF_CFLAGS) \
+	$(LIBX11_CFLAGS) \
 	$(PLATFORM_CFLAGS)
 
 xfce4_mouse_settings_LDFLAGS = \
@@ -34,6 +35,7 @@ xfce4_mouse_settings_LDADD = \
 	$(LIBXFCE4UI_LIBS) \
 	$(XFCONF_LIBS) \
 	$(XI_LIBS) \
+	$(LIBX11_LIBS) \
 	-lm
 
 if HAVE_XCURSOR
diff --git a/dialogs/mouse-settings/main.c b/dialogs/mouse-settings/main.c
index 595339b..86b9a4b 100644
--- a/dialogs/mouse-settings/main.c
+++ b/dialogs/mouse-settings/main.c
@@ -33,6 +33,7 @@
 #endif
 
 #include <X11/Xlib.h>
+#include <X11/Xatom.h>
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XInput.h>
 #include <X11/extensions/XIproto.h>
@@ -132,11 +133,30 @@ enum
     COLUMN_DEVICE_NAME,
     COLUMN_DEVICE_XFCONF_NAME,
     COLUMN_DEVICE_XID,
-    COLUMN_DEVICE_NBUTTONS,
     N_DEVICE_COLUMNS
 };
 
 
+
+static gchar *
+mouse_settings_format_value_px (GtkScale *scale,
+                                gdouble   value)
+{
+   return g_strdup_printf ("%g px", value);
+}
+
+
+
+static gchar *
+mouse_settings_format_value_ms (GtkScale *scale,
+                                gdouble   value)
+{
+   return g_strdup_printf ("%g ms", value);
+}
+
+
+
+
 #ifdef HAVE_XCURSOR
 static GdkPixbuf *
 mouse_settings_themes_pixbuf_from_filename (const gchar *filename,
@@ -316,7 +336,7 @@ mouse_settings_themes_selection_changed (GtkTreeSelection *selection,
                             COLUMN_THEME_NAME, &name, -1);
 
         /* update the preview widget */
-        image = gtk_builder_get_object (builder, "mouse-theme-preview");
+        image = gtk_builder_get_object (builder, "theme-preview");
         mouse_settings_themes_preview_image (path, GTK_IMAGE (image));
 
         /* write configuration (not during a lock) */
@@ -529,7 +549,7 @@ mouse_settings_themes_populate_store (GtkBuilder *builder)
     g_free (active_theme);
 
     /* set the treeview store */
-    treeview = gtk_builder_get_object (builder, "mouse-theme-treeview");
+    treeview = gtk_builder_get_object (builder, "theme-treeview");
     gtk_tree_view_set_model (GTK_TREE_VIEW (treeview), GTK_TREE_MODEL (store));
     gtk_tree_view_set_tooltip_column (GTK_TREE_VIEW (treeview), COLUMN_THEME_COMMENT);
 
@@ -564,16 +584,51 @@ mouse_settings_themes_populate_store (GtkBuilder *builder)
 
 
 
+static gint
+mouse_settings_device_get_int_property (XDevice *device,
+                                        Atom     prop,
+                                        gint    *horiz)
+{
+    Display *xdisplay = gdk_x11_display_get_xdisplay (display);
+    Atom     type;
+    gint     format;
+    gulong   n_items, bytes_after;
+    guchar  *data;
+    gint     val = -1;
+
+    if (XGetDeviceProperty (xdisplay, device, prop, 0, 1000, False,
+                            AnyPropertyType, &type, &format,
+                            &n_items, &bytes_after, &data) == Success)
+    {
+        if (type == XA_INTEGER)
+        {
+            if (n_items > 0)
+                val = data[0];
+
+            if (n_items > 1 && horiz != NULL)
+                *horiz = data[1];
+        }
+
+        XFree (data);
+    }
+
+    return val;
+}
+
+
+
 static void
 mouse_settings_device_selection_changed (GtkBuilder *builder)
 {
-    gint               nbuttons;
+    gint               nbuttons = 0;
     Display           *xdisplay;
     XDevice           *device;
+    XDeviceInfo       *device_info;
     XFeedbackState    *states, *pt;
+    XAnyClassPtr       any;
     gint               nstates;
     XPtrFeedbackState *state;
-    gint               i;
+    gint               i, n;
     guchar            *buttonmap;
     gint               id_1 = 0, id_3 = 0;
     gint               id_4 = 0, id_5 = 0;
@@ -582,58 +637,120 @@ mouse_settings_device_selection_changed (GtkBuilder *builder)
     GObject           *object;
     GtkTreeModel      *model;
     GObject           *combobox;
+    gint               ndevices;
     GtkTreeIter        iter;
-    XID                xid;
+    gulong             xid;
+    Atom               synaptics_prop;
+    Atom               wacom_prop;
+    Atom               synaptics_tap_prop;
+    Atom               synaptics_edge_scroll_prop;
+    Atom               synaptics_two_scroll_prop;
+    Atom               device_enabled_prop;
+    Atom               wacom_rotation_prop;
+    gint               is_enabled = -1;
+    gboolean           is_synaptics = FALSE;
+    gboolean           is_wacom = FALSE;
+    gint               synaptics_tap_to_click = -1;
+    gint               synaptics_edge_scroll = -1;
+    gint               synaptics_edge_hscroll = -1;
+    gint               synaptics_two_scroll = -1;
+    gint               synaptics_two_hscroll = -1;
+    gint               wacom_rotation = -1;
+    Atom              *props;
+    gint               nprops;
+    gint               wacom_mode = -1;
 
     /* lock the dialog */
     locked++;
 
-    /* flush x and trap errors */
-    gdk_flush ();
-    gdk_error_trap_push ();
-
     /* get the selected item */
     combobox = gtk_builder_get_object (builder, "device-combobox");
     if (gtk_combo_box_get_active_iter (GTK_COMBO_BOX (combobox), &iter))
     {
         /* get device id and number of buttons */
         model = gtk_combo_box_get_model (GTK_COMBO_BOX (combobox));
-        gtk_tree_model_get (model, &iter, COLUMN_DEVICE_XID, &xid,
-                            COLUMN_DEVICE_NBUTTONS, &nbuttons, -1);
+        gtk_tree_model_get (model, &iter, COLUMN_DEVICE_XID, &xid, -1);
 
         /* get the x display */
         xdisplay = gdk_x11_display_get_xdisplay (display);
 
         /* open the device */
+        gdk_error_trap_push ();
         device = XOpenDevice (xdisplay, xid);
-
-        if (G_LIKELY (device))
+        if (gdk_error_trap_pop () != 0 || device == NULL)
         {
-            /* allocate button map */
-            buttonmap = g_new0 (guchar, nbuttons);
+            g_critical ("Unable to open device %ld", xid);
+        }
+        else
+        {
+            gdk_error_trap_push ();
+            device_info = XListInputDevices (xdisplay, &ndevices);
+            if (gdk_error_trap_pop () == 0 && device_info != NULL)
+            {
+                /* find mode and number of buttons */
+                for (i = 0; i < ndevices; i++)
+                {
+                    if (device_info[i].id != xid)
+                        continue;
 
-            /* get the button mapping */
-            XGetDeviceButtonMapping (xdisplay, device, buttonmap, nbuttons);
+                    any = device_info[i].inputclassinfo;
+                    for (n = 0; n < device_info[i].num_classes; n++)
+                    {
+                        if (any->class == ButtonClass)
+                            nbuttons = ((XButtonInfoPtr) any)->num_buttons;
+                        else if (any->class == ValuatorClass)
+                            wacom_mode = ((XValuatorInfoPtr) any)->mode == Absolute ? 0 : 1;
 
-            /* figure out the position of the first and second/third button in the map */
-            for (i = 0; i < nbuttons; i++)
+                        any = (XAnyClassPtr) ((gchar *) any + any->length);
+                    }
+
+                    break;
+                }
+
+                XFreeDeviceList (device_info);
+            }
+            else
             {
-                if (buttonmap[i] == 1)
-                    id_1 = i;
-                else if (buttonmap[i] == (nbuttons < 3 ? 2 : 3))
-                    id_3 = i;
-                else if (buttonmap[i] == 4)
-                    id_4 = i;
-                else if (buttonmap[i] == 5)
-                    id_5 = i;
+                g_message ("error %p", device_info);
             }
 
-            /* cleanup */
-            g_free (buttonmap);
+            /* get the button mapping */
+            if (nbuttons > 0)
+            {
+                buttonmap = g_new0 (guchar, nbuttons);
+                gdk_error_trap_push ();
+                XGetDeviceButtonMapping (xdisplay, device, buttonmap, nbuttons);
+                if (gdk_error_trap_pop () != 0)
+                    g_critical ("Failed to get button map");
+
+                /* figure out the position of the first and second/third button in the map */
+                for (i = 0; i < nbuttons; i++)
+                {
+                    if (buttonmap[i] == 1)
+                        id_1 = i;
+                    else if (buttonmap[i] == (nbuttons < 3 ? 2 : 3))
+                        id_3 = i;
+                    else if (buttonmap[i] == 4)
+                        id_4 = i;
+                    else if (buttonmap[i] == 5)
+                        id_5 = i;
+                }
+
+                g_free (buttonmap);
+            }
+            else
+            {
+                g_critical ("Device has no buttons");
+            }
 
             /* get the feedback states for this device */
+            gdk_error_trap_push ();
             states = XGetFeedbackControl (xdisplay, device, &nstates);
-            if (states != NULL)
+            if (gdk_error_trap_pop () != 0 || states == NULL)
+            {
+                 g_critical ("Failed to get feedback states");
+            }
+            else
             {
                 /* get the pointer feedback class */
                 for (pt = states, i = 0; i < nstates; i++)
@@ -644,9 +761,6 @@ mouse_settings_device_selection_changed (GtkBuilder *builder)
                         state = (XPtrFeedbackState *) pt;
                         acceleration = (gdouble) state->accelNum / (gdouble) state->accelDenom;
                         threshold = state->threshold;
-
-                        /* done */
-                        break;
                     }
 
                     /* advance the offset */
@@ -656,32 +770,117 @@ mouse_settings_device_selection_changed (GtkBuilder *builder)
                 XFreeFeedbackList (states);
             }
 
+            /* wacom and synaptics specific properties */
+            device_enabled_prop = XInternAtom (xdisplay, "Device Enabled", True);
+            synaptics_prop = XInternAtom (xdisplay, "Synaptics Off", True);
+            wacom_prop = XInternAtom (xdisplay, "Wacom Tool Type", True);
+            synaptics_tap_prop = XInternAtom (xdisplay, "Synaptics Tap Action", True);
+            synaptics_edge_scroll_prop = XInternAtom (xdisplay, "Synaptics Edge Scrolling", True);
+            synaptics_two_scroll_prop = XInternAtom (xdisplay, "Synaptics Two-Finger Scrolling", True);
+            wacom_rotation_prop = XInternAtom (xdisplay, "Wacom Rotation", True);
+
+            /* check if this is a synaptics or wacom device */
+            gdk_error_trap_push ();
+            props = XListDeviceProperties (xdisplay, device, &nprops);
+            if (gdk_error_trap_pop () == 0 && props != NULL)
+            {
+                for (i = 0; i < nprops; i++)
+                {
+                    if (props[i] == device_enabled_prop)
+                        is_enabled = mouse_settings_device_get_int_property (device, props[i], NULL);
+                    else if (props[i] == synaptics_prop)
+                        is_synaptics = TRUE;
+                    else if (props[i] == wacom_prop)
+                        is_wacom = TRUE;
+                    else if (props[i] == synaptics_tap_prop)
+                        synaptics_tap_to_click = mouse_settings_device_get_int_property (device, props[i], NULL);
+                    else if (props[i] == synaptics_edge_scroll_prop)
+                        synaptics_edge_scroll = mouse_settings_device_get_int_property (device, props[i], &synaptics_edge_hscroll);
+                    else if (props[i] == synaptics_two_scroll_prop)
+                        synaptics_two_scroll = mouse_settings_device_get_int_property (device, props[i], &synaptics_two_hscroll);
+                    else if (props[i] == wacom_rotation_prop)
+                        wacom_rotation = mouse_settings_device_get_int_property (device, props[i], NULL);
+                }
+
+                XFree (props);
+            }
+
             /* close the device */
             XCloseDevice (xdisplay, device);
         }
     }
 
     /* update button order */
-    object = gtk_builder_get_object (builder, id_1 > id_3 ? "mouse-left-handed" : "mouse-right-handed");
+    object = gtk_builder_get_object (builder, id_1 > id_3 ? "device-left-handed" : "device-right-handed");
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object), TRUE);
 
-    object = gtk_builder_get_object (builder, "mouse-reverse-scrolling");
+    object = gtk_builder_get_object (builder, "device-reverse-scrolling");
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object), !!(id_5 < id_4));
     gtk_widget_set_sensitive (GTK_WIDGET (object), nbuttons >= 5);
 
     /* update acceleration scale */
-    object = gtk_builder_get_object (builder, "mouse-acceleration-scale");
+    object = gtk_builder_get_object (builder, "device-acceleration-scale");
     gtk_range_set_value (GTK_RANGE (object), acceleration);
     gtk_widget_set_sensitive (GTK_WIDGET (object), acceleration != -1);
 
     /* update threshold scale */
-    object = gtk_builder_get_object (builder, "mouse-threshold-scale");
+    object = gtk_builder_get_object (builder, "device-threshold-scale");
     gtk_range_set_value (GTK_RANGE (object), threshold);
     gtk_widget_set_sensitive (GTK_WIDGET (object), threshold != -1);
 
-    /* flush and remove the x error trap */
-    gdk_flush ();
-    gdk_error_trap_pop ();
+    object = gtk_builder_get_object (builder, "device-enabled");
+    gtk_widget_set_sensitive (GTK_WIDGET (object), is_enabled != -1);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object), is_enabled > 0);
+
+    object = gtk_builder_get_object (builder, "device-notebook");
+    gtk_notebook_set_show_tabs (GTK_NOTEBOOK (object), is_synaptics || is_wacom);
+
+    /* synaptics options */
+    object = gtk_builder_get_object (builder, "synaptics-tab");
+    gtk_widget_set_visible (GTK_WIDGET (object), is_synaptics);
+
+    if (is_synaptics)
+    {
+        object = gtk_builder_get_object (builder, "synaptics-tap-to-click");
+        gtk_widget_set_sensitive (GTK_WIDGET (object), synaptics_tap_to_click != -1);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object), synaptics_tap_to_click > 0);
+
+        object = gtk_builder_get_object (builder, "synaptics-scroll-edge");
+        gtk_widget_set_sensitive (GTK_WIDGET (object), synaptics_edge_scroll != -1);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object), synaptics_edge_scroll > 0);
+
+        object = gtk_builder_get_object (builder, "synaptics-scroll-two");
+        gtk_widget_set_sensitive (GTK_WIDGET (object), synaptics_two_scroll != -1);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object), synaptics_two_scroll > 0);
+
+        object = gtk_builder_get_object (builder, "synaptics-scroll-horiz");
+        gtk_widget_set_sensitive (GTK_WIDGET (object), synaptics_two_hscroll != -1 || synaptics_edge_hscroll != 1);
+        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (object),
+                                      (synaptics_edge_scroll == 1 && synaptics_edge_hscroll == 1)
+                                      || (synaptics_two_scroll == 1 && synaptics_two_hscroll == 1));
+    }
+
+    /* wacom options */
+    object = gtk_builder_get_object (builder, "wacom-tab");
+    gtk_widget_set_visible (GTK_WIDGET (object), is_wacom);
+
+    if (is_wacom)
+    {
+        object = gtk_builder_get_object (builder, "wacom-mode");
+        gtk_widget_set_sensitive (GTK_WIDGET (object), wacom_mode != -1);
+        gtk_combo_box_set_active (GTK_COMBO_BOX (object), wacom_mode == -1 ? 1 : wacom_mode);
+
+        object = gtk_builder_get_object (builder, "wacom-rotation");
+        gtk_widget_set_sensitive (GTK_WIDGET (object), wacom_rotation != -1);
+        /* 3 (half) comes afer none */
+        if (wacom_rotation == 3)
+            wacom_rotation = 1;
+        else if (wacom_rotation > 0)
+            wacom_rotation++;
+        else if (wacom_rotation == -1)
+            wacom_rotation = 0;
+        gtk_combo_box_set_active (GTK_COMBO_BOX (object), wacom_rotation);
+    }
 
     /* unlock */
     locked--;
@@ -717,7 +916,7 @@ mouse_settings_device_save (GtkBuilder *builder)
         if (G_LIKELY (name))
         {
             /* store the button order */
-            object = gtk_builder_get_object (builder, "mouse-right-handed");
+            object = gtk_builder_get_object (builder, "device-right-handed");
             g_snprintf (property_name, sizeof (property_name), "/%s/RightHanded", name);
             righthanded = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object));
             if (!xfconf_channel_has_property (pointers_channel, property_name)
@@ -725,21 +924,21 @@ mouse_settings_device_save (GtkBuilder *builder)
                 xfconf_channel_set_bool (pointers_channel, property_name, righthanded);
 
             /* store reverse scrolling */
-            object = gtk_builder_get_object (builder, "mouse-reverse-scrolling");
+            object = gtk_builder_get_object (builder, "device-reverse-scrolling");
             g_snprintf (property_name, sizeof (property_name), "/%s/ReverseScrolling", name);
             reverse_scrolling = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (object));
             if (xfconf_channel_get_bool (pointers_channel, property_name, FALSE) != reverse_scrolling)
                 xfconf_channel_set_bool (pointers_channel, property_name, reverse_scrolling);
 
             /* store the threshold */
-            object = gtk_builder_get_object (builder, "mouse-threshold-scale");
+            object = gtk_builder_get_object (builder, "device-threshold-scale");
             g_snprintf (property_name, sizeof (property_name), "/%s/Threshold", name);
             threshold = gtk_range_get_value (GTK_RANGE (object));
             if (xfconf_channel_get_int (pointers_channel, property_name, -1) != threshold)
                 xfconf_channel_set_int (pointers_channel, property_name, threshold);
 
             /* store the acceleration */
-            object = gtk_builder_get_object (builder, "mouse-acceleration-scale");
+            object = gtk_builder_get_object (builder, "device-acceleration-scale");
             g_snprintf (property_name, sizeof (property_name), "/%s/Acceleration", name);
             acceleration = gtk_range_get_value (GTK_RANGE (object));
             if (xfconf_channel_get_double (pointers_channel, property_name, -1) != acceleration)
@@ -789,10 +988,8 @@ mouse_settings_device_populate_store (GtkBuilder *builder,
 {
     Display         *xdisplay;
     XDeviceInfo     *device_list, *device_info;
-    gshort           num_buttons;
     gint             ndevices;
-    gint             i, m;
-    XAnyClassPtr     ptr;
+    gint             i;
     GtkTreeIter      iter;
     GtkListStore    *store;
     GObject         *combobox;
@@ -803,22 +1000,22 @@ mouse_settings_device_populate_store (GtkBuilder *builder,
     /* lock */
     locked++;
 
-    /* flush x and trap errors */
-    gdk_flush ();
-    gdk_error_trap_push ();
-
     combobox = gtk_builder_get_object (builder, "device-combobox");
 
     /* create or get the store */
     if (G_LIKELY (create_store))
     {
-        store = gtk_list_store_new (N_DEVICE_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT);
+        store = gtk_list_store_new (N_DEVICE_COLUMNS,
+                                    G_TYPE_STRING /* COLUMN_DEVICE_NAME */,
+                                    G_TYPE_STRING /* COLUMN_DEVICE_XFCONF_NAME */,
+                                    G_TYPE_ULONG /* COLUMN_DEVICE_XID */);
         gtk_combo_box_set_model (GTK_COMBO_BOX (combobox), GTK_TREE_MODEL (store));
 
         /* text renderer */
         renderer = gtk_cell_renderer_text_new ();
         gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combobox), renderer, TRUE);
-        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer, "text", COLUMN_DEVICE_NAME, NULL);
+        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combobox), renderer,
+                                        "text", COLUMN_DEVICE_NAME, NULL);
 
         g_signal_connect_swapped (G_OBJECT (combobox), "changed",
             G_CALLBACK (mouse_settings_device_selection_changed), builder);
@@ -833,67 +1030,47 @@ mouse_settings_device_populate_store (GtkBuilder *builder,
     xdisplay = gdk_x11_display_get_xdisplay (display);
 
     /* get all the registered devices */
+    gdk_error_trap_push ();
     device_list = XListInputDevices (xdisplay, &ndevices);
+    if (gdk_error_trap_pop () != 0 || device_list == NULL)
+    {
+        g_message ("No devices found");
+        goto bailout;
+    }
 
     for (i = 0; i < ndevices; i++)
     {
         /* get the device */
         device_info = &device_list[i];
 
-        /* filter out the pointer devices */
-        if (device_info->use == IsXExtensionPointer)
+        /* filter out the pointer and virtual devices */
+        if (device_info->use != IsXExtensionPointer
+            || g_str_has_prefix (device_info->name, "Virtual core XTEST"))
+            continue;
+
+        /* create a valid xfconf device name */
+        xfconf_name = mouse_settings_device_xfconf_name (device_info->name);
+
+        /* insert in the store */
+        gtk_list_store_insert_with_values (store, &iter, i,
+                                           COLUMN_DEVICE_XFCONF_NAME, xfconf_name,
+                                           COLUMN_DEVICE_NAME, device_info->name,
+                                           COLUMN_DEVICE_XID, device_info->id,
+                                           -1);
+
+        /* check if we should select this device */
+        if (device_info->name != NULL
+            && opt_device_name != NULL
+            && strcmp (opt_device_name, device_info->name) == 0)
         {
-            /* get the device classes */
-            ptr = device_info->inputclassinfo;
-
-            /* walk all the classes */
-            for (m = 0, num_buttons = 0; m < device_info->num_classes; m++)
-            {
-                /* find the button class */
-                if (ptr->class == ButtonClass)
-                {
-                    /* get the number of buttons */
-                    num_buttons = ((XButtonInfoPtr) ptr)->num_buttons;
-
-                    /* done */
-                    break;
-                }
-
-                /* advance the offset */
-                ptr = (XAnyClassPtr) ((gchar *) ptr + ptr->length);
-            }
-
-            /* only append devices with buttons */
-            if (G_UNLIKELY (num_buttons <= 0))
-                continue;
-
-            /* ignore XTEST device */
-            if (g_str_has_prefix (device_info->name, "Virtual core XTEST"))
-                continue;
-
-            /* create a valid xfconf device name */
-            xfconf_name = mouse_settings_device_xfconf_name (device_info->name);
+            gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
+            g_free (opt_device_name);
+            opt_device_name = NULL;
+            has_active_item = TRUE;
+        }
 
-            /* insert in the store */
-            gtk_list_store_insert_with_values (store, &iter, i,
-                                               COLUMN_DEVICE_XFCONF_NAME, xfconf_name,
-                                               COLUMN_DEVICE_NAME, device_info->name,
-                                               COLUMN_DEVICE_XID, device_info->id,
-                                               COLUMN_DEVICE_NBUTTONS, num_buttons, -1);
+        g_free (xfconf_name);
 
-            /* check if we should select this device */
-            if (device_info->name != NULL
-                && opt_device_name != NULL
-                && strcmp (opt_device_name, device_info->name) == 0)
-            {
-                gtk_combo_box_set_active_iter (GTK_COMBO_BOX (combobox), &iter);
-                g_free (opt_device_name);
-                opt_device_name = NULL;
-                has_active_item = TRUE;
-            }
-
-            g_free (xfconf_name);
-        }
     }
 
     XFreeDeviceList (device_list);
@@ -901,9 +1078,7 @@ mouse_settings_device_populate_store (GtkBuilder *builder,
     if (!has_active_item)
         gtk_combo_box_set_active (GTK_COMBO_BOX (combobox), 0);
 
-    /* flush and remove the x error trap */
-    gdk_flush ();
-    gdk_error_trap_pop ();
+    bailout:
 
     /* unlock */
     locked--;
@@ -923,7 +1098,7 @@ mouse_settings_device_update_sliders (gpointer user_data)
     mouse_settings_device_selection_changed (builder);
 
     /* make the button sensitive again */
-    button = gtk_builder_get_object (builder, "mouse-reset");
+    button = gtk_builder_get_object (builder, "device-reset-feedback");
     gtk_widget_set_sensitive (GTK_WIDGET (button), TRUE);
 
     GDK_THREADS_LEAVE ();
@@ -1016,22 +1191,20 @@ mouse_settings_create_event_filter (GtkBuilder *builder)
     Display     *xdisplay;
     XEventClass  event_class;
 
-    /* flush x and trap errors */
-    gdk_flush ();
-    gdk_error_trap_push ();
-
     /* get the default display and root window */
     xdisplay = gdk_x11_display_get_xdisplay (display);
     if (G_UNLIKELY (!xdisplay))
         return;
 
     /* monitor device change events */
+    gdk_error_trap_push ();
     DevicePresence (xdisplay, device_presence_event_type, event_class);
     XSelectExtensionEvent (xdisplay, RootWindow (xdisplay, DefaultScreen (xdisplay)), &event_class, 1);
-
-    /* flush and remove the x error trap */
-    gdk_flush ();
-    gdk_error_trap_pop ();
+    if (gdk_error_trap_pop () != 0)
+    {
+        g_critical ("Failed to setup the device event filter");
+        return;
+    }
 
     /* add an event filter */
     gdk_window_add_filter (NULL, mouse_settings_event_filter, builder);
@@ -1050,6 +1223,7 @@ main (gint argc, gchar **argv)
     GError            *error = NULL;
     GObject           *object;
     XExtensionVersion *version = NULL;
+    gchar             *syndaemon;
 
     /* setup translation domain */
     xfce_textdomain (GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
@@ -1140,46 +1314,79 @@ main (gint argc, gchar **argv)
             mouse_settings_device_populate_store (builder, TRUE);
 
             /* connect signals */
-            object = gtk_builder_get_object (builder, "mouse-acceleration-scale");
-            g_signal_connect_swapped (G_OBJECT (object), "value-changed", G_CALLBACK (mouse_settings_device_save), builder);
+            object = gtk_builder_get_object (builder, "device-acceleration-scale");
+            g_signal_connect_swapped (G_OBJECT (object), "value-changed",
+                                      G_CALLBACK (mouse_settings_device_save), builder);
 
-            object = gtk_builder_get_object (builder, "mouse-threshold-scale");
-            g_signal_connect_swapped (G_OBJECT (object), "value-changed", G_CALLBACK (mouse_settings_device_save), builder);
+            object = gtk_builder_get_object (builder, "device-threshold-scale");
+            g_signal_connect (G_OBJECT (object), "format-value",
+                              G_CALLBACK (mouse_settings_format_value_px), NULL);
+            g_signal_connect_swapped (G_OBJECT (object), "value-changed",
+                                      G_CALLBACK (mouse_settings_device_save), builder);
 
-            object = gtk_builder_get_object (builder, "mouse-left-handed");
-            g_signal_connect_swapped (G_OBJECT (object), "toggled", G_CALLBACK (mouse_settings_device_save), builder);
+            object = gtk_builder_get_object (builder, "device-left-handed");
+            g_signal_connect_swapped (G_OBJECT (object), "toggled",
+                                      G_CALLBACK (mouse_settings_device_save), builder);
 
-            object = gtk_builder_get_object (builder, "mouse-right-handed");
-            g_signal_connect_swapped (G_OBJECT (object), "toggled", G_CALLBACK (mouse_settings_device_save), builder);
+            object = gtk_builder_get_object (builder, "device-right-handed");
+            g_signal_connect_swapped (G_OBJECT (object), "toggled",
+                                      G_CALLBACK (mouse_settings_device_save), builder);
+
+            object = gtk_builder_get_object (builder, "device-reverse-scrolling");
+            g_signal_connect_swapped (G_OBJECT (object), "toggled",
+                                      G_CALLBACK (mouse_settings_device_save), builder);
+
+            object = gtk_builder_get_object (builder, "device-reset-feedback");
+            g_signal_connect (G_OBJECT (object), "clicked",
+                              G_CALLBACK (mouse_settings_device_reset), builder);
+
+            object = gtk_builder_get_object (builder, "synaptics-disable-while-type");
+            syndaemon = g_find_program_in_path ("syndaemon");
+            gtk_widget_set_sensitive (GTK_WIDGET (object), syndaemon != NULL);
+            g_free (syndaemon);
+            xfconf_g_property_bind (xsettings_channel, "/DisableTouchpadWhileTyping",
+                                    G_TYPE_INT, G_OBJECT (object), "active");
 
-            object = gtk_builder_get_object (builder, "mouse-reverse-scrolling");
-            g_signal_connect_swapped (G_OBJECT (object), "toggled", G_CALLBACK (mouse_settings_device_save), builder);
 
-            object = gtk_builder_get_object (builder, "mouse-reset");
-            g_signal_connect (G_OBJECT (object), "clicked", G_CALLBACK (mouse_settings_device_reset), builder);
 
 #ifdef HAVE_XCURSOR
             /* populate the themes treeview */
             mouse_settings_themes_populate_store (builder);
 
             /* connect the cursor size in the cursor tab */
-            object = gtk_builder_get_object (builder, "mouse-cursor-size");
-            xfconf_g_property_bind (xsettings_channel, "/Gtk/CursorThemeSize", G_TYPE_INT, G_OBJECT (object), "value");
+            object = gtk_builder_get_object (builder, "theme-cursor-size");
+            xfconf_g_property_bind (xsettings_channel, "/Gtk/CursorThemeSize",
+                                    G_TYPE_INT, G_OBJECT (object), "value");
 #else
             /* hide the themes tab */
-            object = gtk_builder_get_object (builder, "mouse-themes-hbox");
+            object = gtk_builder_get_object (builder, "themes-hbox");
             gtk_widget_hide (GTK_WIDGET (object));
 #endif /* !HAVE_XCURSOR */
 
             /* connect sliders in the gtk tab */
-            object = gtk_builder_get_object (builder, "mouse-dnd-threshold");
-            xfconf_g_property_bind (xsettings_channel, "/Net/DndDragThreshold", G_TYPE_INT, G_OBJECT (object), "value");
+            object = gtk_builder_get_object (builder, "dnd-threshold");
+            xfconf_g_property_bind (xsettings_channel, "/Net/DndDragThreshold",
+                                    G_TYPE_INT, G_OBJECT (object), "value");\
+
+            object = gtk_builder_get_object (builder, "dnd-threshold-scale");
+            g_signal_connect (G_OBJECT (object), "format-value",
+                              G_CALLBACK (mouse_settings_format_value_px), NULL);
+
+            object = gtk_builder_get_object (builder, "dclick-time");
+            xfconf_g_property_bind (xsettings_channel, "/Net/DoubleClickTime",
+                                    G_TYPE_INT, G_OBJECT (object), "value");
+
+            object = gtk_builder_get_object (builder, "dclick-time-scale");
+            g_signal_connect (G_OBJECT (object), "format-value",
+                              G_CALLBACK (mouse_settings_format_value_ms), NULL);
 
-            object = gtk_builder_get_object (builder, "mouse-double-click-time");
-            xfconf_g_property_bind (xsettings_channel, "/Net/DoubleClickTime", G_TYPE_INT, G_OBJECT (object), "value");
+            object = gtk_builder_get_object (builder, "dclick-distance");
+            xfconf_g_property_bind (xsettings_channel, "/Net/DoubleClickDistance",
+                                    G_TYPE_INT, G_OBJECT (object), "value");
 
-            object = gtk_builder_get_object (builder, "mouse-double-click-distance");
-            xfconf_g_property_bind (xsettings_channel, "/Net/DoubleClickDistance", G_TYPE_INT, G_OBJECT (object), "value");
+            object = gtk_builder_get_object (builder, "dclick-distance-scale");
+            g_signal_connect (G_OBJECT (object), "format-value",
+                              G_CALLBACK (mouse_settings_format_value_px), NULL);
 
 #ifdef HAS_DEVICE_HOTPLUGGING
             /* create the event filter for device monitoring */
diff --git a/dialogs/mouse-settings/mouse-dialog.glade b/dialogs/mouse-settings/mouse-dialog.glade
index c4a0d95..74e9ef0 100644
--- a/dialogs/mouse-settings/mouse-dialog.glade
+++ b/dialogs/mouse-settings/mouse-dialog.glade
@@ -3,28 +3,48 @@
   <requires lib="gtk+" version="2.20"/>
   <!-- interface-requires libxfce4ui 4.5 -->
   <!-- interface-naming-policy project-wide -->
-  <object class="GtkAdjustment" id="adjustment6">
-    <property name="lower">16</property>
-    <property name="upper">48</property>
-    <property name="value">24</property>
+  <object class="GtkAdjustment" id="dclick-distance">
+    <property name="upper">20</property>
+    <property name="value">4</property>
     <property name="step_increment">1</property>
-    <property name="page_increment">11</property>
+    <property name="page_increment">5</property>
   </object>
-  <object class="GtkImage" id="image1">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-revert-to-saved</property>
+  <object class="GtkAdjustment" id="dclick-time">
+    <property name="lower">100</property>
+    <property name="upper">2000</property>
+    <property name="value">250</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">100</property>
   </object>
-  <object class="GtkAdjustment" id="mouse-acceleration">
+  <object class="GtkAdjustment" id="device-acceleration">
     <property name="lower">0.10000000000000001</property>
     <property name="upper">10</property>
     <property name="value">2</property>
     <property name="step_increment">0.10000000000000001</property>
     <property name="page_increment">1</property>
   </object>
+  <object class="GtkAdjustment" id="device-threshold">
+    <property name="lower">1</property>
+    <property name="upper">30</property>
+    <property name="value">4</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">5</property>
+  </object>
+  <object class="GtkAdjustment" id="dnd-threshold">
+    <property name="lower">1</property>
+    <property name="upper">50</property>
+    <property name="value">8</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-revert-to-saved</property>
+  </object>
   <object class="XfceTitledDialog" id="mouse-dialog">
     <property name="can_focus">False</property>
-    <property name="title" translatable="yes">Mouse</property>
+    <property name="title" translatable="yes">Mouse and Touchpad</property>
     <property name="window_position">center-on-parent</property>
     <property name="icon_name">preferences-desktop-peripherals</property>
     <property name="type_hint">dialog</property>
@@ -82,7 +102,7 @@
                       <object class="GtkLabel" id="label7">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="label" translatable="yes">_Device:</property>
+                        <property name="label" translatable="yes">De_vice:</property>
                         <property name="use_underline">True</property>
                         <property name="mnemonic_widget">device-combobox</property>
                         <property name="angle">0.050000000000000003</property>
@@ -112,9 +132,14 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkHSeparator" id="hseparator1">
+                  <object class="GtkCheckButton" id="device-enabled">
+                    <property name="label" translatable="yes">_Enable this device</property>
                     <property name="visible">True</property>
-                    <property name="can_focus">False</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="expand">False</property>
@@ -123,226 +148,598 @@
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkVBox" id="vbox2">
+                  <object class="GtkNotebook" id="device-notebook">
                     <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="spacing">6</property>
+                    <property name="can_focus">True</property>
                     <child>
-                      <object class="GtkFrame" id="frame1">
+                      <object class="GtkVBox" id="device-box">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="label_xalign">0</property>
-                        <property name="shadow_type">none</property>
+                        <property name="border_width">6</property>
+                        <property name="spacing">6</property>
                         <child>
-                          <object class="GtkAlignment" id="alignment1">
+                          <object class="GtkFrame" id="frame1">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="left_padding">12</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
                             <child>
-                              <object class="GtkVBox" id="vbox12">
+                              <object class="GtkAlignment" id="alignment1">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="border_width">6</property>
-                                <property name="spacing">6</property>
+                                <property name="left_padding">12</property>
                                 <child>
-                                  <object class="GtkRadioButton" id="mouse-right-handed">
-                                    <property name="label" translatable="yes">_Right handed</property>
+                                  <object class="GtkVBox" id="vbox12">
                                     <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="active">True</property>
-                                    <property name="draw_indicator">True</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">True</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkRadioButton" id="mouse-left-handed">
-                                    <property name="label" translatable="yes">_Left handed</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>
-                                    <property name="group">mouse-right-handed</property>
-                                  </object>
-                                  <packing>
-                                    <property name="expand">True</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">1</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkCheckButton" id="mouse-reverse-scrolling">
-                                    <property name="label" translatable="yes">Re_verse scroll direction</property>
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="receives_default">False</property>
-                                    <property name="tooltip_text" translatable="yes">When selected, the scroll wheel will work in the opposite direction</property>
-                                    <property name="use_action_appearance">False</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="draw_indicator">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="border_width">6</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkHBox" id="hbox3">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="spacing">12</property>
+                                        <child>
+                                          <object class="GtkRadioButton" id="device-right-handed">
+                                            <property name="label" translatable="yes">_Right-handed</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="active">True</property>
+                                            <property name="draw_indicator">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">True</property>
+                                            <property name="position">0</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkRadioButton" id="device-left-handed">
+                                            <property name="label" translatable="yes">_Left-handed</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>
+                                            <property name="group">device-right-handed</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">False</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="GtkCheckButton" id="device-reverse-scrolling">
+                                        <property name="label" translatable="yes">Reverse scroll d_irection</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">When selected, the scroll wheel will work in the opposite direction</property>
+                                        <property name="use_action_appearance">False</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="draw_indicator">True</property>
+                                      </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">2</property>
-                                  </packing>
                                 </child>
                               </object>
                             </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label14">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">Buttons</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                </attributes>
+                              </object>
+                            </child>
                           </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
                         </child>
-                        <child type="label">
-                          <object class="GtkLabel" id="label4">
+                        <child>
+                          <object class="GtkFrame" id="frame2">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="label" translatable="yes">General</property>
-                            <attributes>
-                              <attribute name="weight" value="bold"/>
-                            </attributes>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment2">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">12</property>
+                                <child>
+                                  <object class="GtkTable" id="table1">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="border_width">6</property>
+                                    <property name="n_rows">3</property>
+                                    <property name="n_columns">2</property>
+                                    <property name="column_spacing">12</property>
+                                    <property name="row_spacing">6</property>
+                                    <child>
+                                      <object class="GtkLabel" id="device-acceleration-label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">_Acceleration:</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">device-acceleration-scale</property>
+                                      </object>
+                                      <packing>
+                                        <property name="x_options">GTK_FILL</property>
+                                        <property name="y_options">GTK_FILL</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkHScale" id="device-acceleration-scale">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">The factor at which the pointer's speed will increase as the mouse is moved</property>
+                                        <property name="update_policy">delayed</property>
+                                        <property name="adjustment">device-acceleration</property>
+                                        <property name="round_digits">1</property>
+                                        <property name="value_pos">right</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkHScale" id="device-threshold-scale">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="tooltip_text" translatable="yes">The number of pixels the pointer must move in a short time before it starts accelerating</property>
+                                        <property name="update_policy">delayed</property>
+                                        <property name="adjustment">device-threshold</property>
+                                        <property name="round_digits">0</property>
+                                        <property name="digits">0</property>
+                                        <property name="value_pos">right</property>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="device-threshold-label">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">_Sensitivity:</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">device-threshold-scale</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                        <property name="x_options">GTK_FILL</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkAlignment" id="alignment7">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="xscale">0</property>
+                                        <property name="yscale">0</property>
+                                        <child>
+                                          <object class="GtkButton" id="device-reset-feedback">
+                                            <property name="label" translatable="yes">Reset to De_faults</property>
+                                            <property name="visible">True</property>
+                                            <property name="can_focus">True</property>
+                                            <property name="receives_default">True</property>
+                                            <property name="tooltip_text" translatable="yes">Set the acceleration and sensitivity for the selected device to the default values</property>
+                                            <property name="use_action_appearance">False</property>
+                                            <property name="image">image5</property>
+                                            <property name="use_underline">True</property>
+                                          </object>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">2</property>
+                                        <property name="bottom_attach">3</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label15">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">Pointer Speed</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                </attributes>
+                              </object>
+                            </child>
                           </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
                         </child>
                       </object>
+                    </child>
+                    <child type="tab">
+                      <object class="GtkLabel" id="label4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">_General</property>
+                        <property name="use_underline">True</property>
+                      </object>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">0</property>
+                        <property name="tab_fill">False</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkFrame" id="frame2">
+                      <object class="GtkVBox" id="synaptics-tab">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="label_xalign">0</property>
-                        <property name="shadow_type">none</property>
+                        <property name="border_width">6</property>
+                        <property name="spacing">6</property>
                         <child>
-                          <object class="GtkAlignment" id="alignment2">
+                          <object class="GtkFrame" id="frame11">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="left_padding">12</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
                             <child>
-                              <object class="GtkTable" id="table1">
+                              <object class="GtkAlignment" id="alignment13">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
-                                <property name="border_width">6</property>
-                                <property name="n_rows">3</property>
-                                <property name="n_columns">2</property>
-                                <property name="column_spacing">12</property>
-                                <property name="row_spacing">6</property>
-                                <child>
-                                  <object class="GtkLabel" id="mouse-acceleration-label">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">False</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">_Acceleration:</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="mnemonic_widget">mouse-acceleration-scale</property>
-                                  </object>
-                                  <packing>
-                                    <property name="x_options">GTK_FILL</property>
-                                    <property name="y_options">GTK_FILL</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkHScale" id="mouse-acceleration-scale">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">The factor at which the pointer's speed will increase as the mouse is moved</property>
-                                    <property name="update_policy">delayed</property>
-                                    <property name="adjustment">mouse-acceleration</property>
-                                    <property name="round_digits">1</property>
-                                    <property name="value_pos">right</property>
-                                  </object>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
-                                  </packing>
-                                </child>
+                                <property name="left_padding">12</property>
                                 <child>
-                                  <object class="GtkHScale" id="mouse-threshold-scale">
-                                    <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="tooltip_text" translatable="yes">The number of pixels the pointer must move in a short time before it starts accelerating</property>
-                                    <property name="update_policy">delayed</property>
-                                    <property name="adjustment">mouse-threshold</property>
-                                    <property name="round_digits">0</property>
-                                    <property name="digits">0</property>
-                                    <property name="value_pos">right</property>
-                                  </object>
-                                  <packing>
-                                    <property name="left_attach">1</property>
-                                    <property name="right_attach">2</property>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
-                                  </packing>
-                                </child>
-                                <child>
-                                  <object class="GtkLabel" id="mouse-threshold-label">
+                                  <object class="GtkVBox" id="vbox11">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="xalign">0</property>
-                                    <property name="label" translatable="yes">S_ensitivity:</property>
-                                    <property name="use_underline">True</property>
-                                    <property name="mnemonic_widget">mouse-threshold-scale</property>
+                                    <property name="border_width">6</property>
+                                    <property name="spacing">6</property>
+                                    <child>
+                                      <object class="GtkCheckButton" id="synaptics-disable-while-type">
+                                        <property name="label" translatable="yes">Disable to_uchpad while typing</property>
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">True</property>
+                                        <property name="receives_default">False</property>
+                                        <property name="tooltip_text" translatable="yes">When selected, the touchpad will be disabled when the keyboard is being used</property>
+                                        <property name="use_action_appearance">False</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="draw_indicator">True</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="synaptics-tap-to-click">
+                                        <property name="label" translatable="yes">T_ap touchpad to click</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="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </object>
-                                  <packing>
-                                    <property name="top_attach">1</property>
-                                    <property name="bottom_attach">2</property>
-                                    <property name="x_options">GTK_FILL</property>
-                                  </packing>
                                 </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label16">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">General</property>
+                                <property name="use_markup">True</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                </attributes>
+                              </object>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkFrame" id="frame10">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment12">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">12</property>
                                 <child>
-                                  <object class="GtkAlignment" id="alignment7">
+                                  <object class="GtkVBox" id="vbox10">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="xalign">0</property>
-                                    <property name="xscale">0</property>
-                                    <property name="yscale">0</property>
+                                    <property name="border_width">6</property>
+                                    <property name="spacing">6</property>
                                     <child>
-                                      <object class="GtkButton" id="mouse-reset">
-                                        <property name="label" translatable="yes">Re_set to Defaults</property>
+                                      <object class="GtkHBox" id="hbox4">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="spacing">12</property>
+                                        <child>
+                                          <object class="GtkRadioButton" id="synaptics-scroll-no">
+                                            <property name="label" translatable="yes">Di_sabled</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="active">True</property>
+                                            <property name="draw_indicator">True</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">True</property>
+                                            <property name="position">0</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkRadioButton" id="synaptics-scroll-edge">
+                                            <property name="label" translatable="yes">Edge scro_lling</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>
+                                            <property name="group">synaptics-scroll-no</property>
+                                          </object>
+                                          <packing>
+                                            <property name="expand">False</property>
+                                            <property name="fill">True</property>
+                                            <property name="position">1</property>
+                                          </packing>
+                                        </child>
+                                        <child>
+                                          <object class="GtkRadioButton" id="synaptics-scroll-two">
+                                            <property name="label" translatable="yes">Two-_finger scrolling</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>
+                                            <property name="group">synaptics-scroll-no</property>
+                                          </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">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkCheckButton" id="synaptics-scroll-horiz">
+                                        <property name="label" translatable="yes">Enable hori_zontal scrolling</property>
                                         <property name="visible">True</property>
                                         <property name="can_focus">True</property>
-                                        <property name="receives_default">True</property>
-                                        <property name="tooltip_text" translatable="yes">Set the acceleration and threshold for the selected device to the default values</property>
+                                        <property name="receives_default">False</property>
                                         <property name="use_action_appearance">False</property>
-                                        <property name="image">image1</property>
                                         <property name="use_underline">True</property>
+                                        <property name="draw_indicator">True</property>
                                       </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">1</property>
+                                      </packing>
                                     </child>
                                   </object>
-                                  <packing>
-                                    <property name="right_attach">2</property>
-                                    <property name="top_attach">2</property>
-                                    <property name="bottom_attach">3</property>
-                                  </packing>
                                 </child>
                               </object>
                             </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label17">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">Scrolling</property>
+                                <property name="use_markup">True</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                </attributes>
+                              </object>
+                            </child>
                           </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
                         </child>
-                        <child type="label">
-                          <object class="GtkLabel" id="label5">
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child type="tab">
+                      <object class="GtkLabel" id="label5">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">T_ouchpad</property>
+                        <property name="use_underline">True</property>
+                      </object>
+                      <packing>
+                        <property name="position">1</property>
+                        <property name="tab_fill">False</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkVBox" id="wacom-tab">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="border_width">6</property>
+                        <property name="spacing">6</property>
+                        <child>
+                          <object class="GtkFrame" id="frame12">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="label" translatable="yes">Pointer Speed</property>
-                            <attributes>
-                              <attribute name="weight" value="bold"/>
-                            </attributes>
+                            <property name="label_xalign">0</property>
+                            <property name="shadow_type">none</property>
+                            <child>
+                              <object class="GtkAlignment" id="alignment14">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="left_padding">12</property>
+                                <child>
+                                  <object class="GtkTable" id="table2">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="border_width">6</property>
+                                    <property name="n_rows">2</property>
+                                    <property name="n_columns">2</property>
+                                    <property name="column_spacing">12</property>
+                                    <property name="row_spacing">6</property>
+                                    <child>
+                                      <object class="GtkLabel" id="label9">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">Tr_acking mode:</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">wacom-mode</property>
+                                      </object>
+                                      <packing>
+                                        <property name="x_options">GTK_FILL</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel" id="label10">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="xalign">0</property>
+                                        <property name="label" translatable="yes">_Rotation:</property>
+                                        <property name="use_underline">True</property>
+                                        <property name="mnemonic_widget">wacom-rotation</property>
+                                      </object>
+                                      <packing>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                        <property name="x_options">GTK_FILL</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkComboBox" id="wacom-mode">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="model">wacom-mode-store</property>
+                                        <child>
+                                          <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                                          <attributes>
+                                            <attribute name="text">1</attribute>
+                                          </attributes>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkComboBox" id="wacom-rotation">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="model">wacom-rotation-store</property>
+                                        <child>
+                                          <object class="GtkCellRendererText" id="cellrenderertext2"/>
+                                          <attributes>
+                                            <attribute name="text">1</attribute>
+                                          </attributes>
+                                        </child>
+                                      </object>
+                                      <packing>
+                                        <property name="left_attach">1</property>
+                                        <property name="right_attach">2</property>
+                                        <property name="top_attach">1</property>
+                                        <property name="bottom_attach">2</property>
+                                      </packing>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" id="label18">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">General</property>
+                                <property name="use_markup">True</property>
+                                <attributes>
+                                  <attribute name="weight" value="bold"/>
+                                </attributes>
+                              </object>
+                            </child>
                           </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
                         </child>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                    <child type="tab">
+                      <object class="GtkLabel" id="label13">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Table_t</property>
+                        <property name="use_underline">True</property>
+                      </object>
+                      <packing>
+                        <property name="position">2</property>
+                        <property name="tab_fill">False</property>
                       </packing>
                     </child>
                   </object>
@@ -358,7 +755,7 @@
               <object class="GtkLabel" id="label1">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="label" translatable="yes">De_vices</property>
+                <property name="label" translatable="yes">_Devices</property>
                 <property name="use_underline">True</property>
               </object>
               <packing>
@@ -381,7 +778,6 @@
                       <object class="GtkAlignment" id="alignment3">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="bottom_padding">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox4">
@@ -394,9 +790,9 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">T_hreshold:</property>
+                                <property name="label" translatable="yes">Th_reshold:</property>
                                 <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">mouse-dnd-widget</property>
+                                <property name="mnemonic_widget">dnd-threshold-scale</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
@@ -405,12 +801,12 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHScale" id="mouse-dnd-widget">
+                              <object class="GtkHScale" id="dnd-threshold-scale">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="tooltip_text" translatable="yes">The number of pixels the pointer must move before a drag operation will start</property>
                                 <property name="update_policy">delayed</property>
-                                <property name="adjustment">mouse-dnd-threshold</property>
+                                <property name="adjustment">dnd-threshold</property>
                                 <property name="digits">0</property>
                                 <property name="value_pos">right</property>
                               </object>
@@ -451,22 +847,21 @@
                       <object class="GtkAlignment" id="alignment4">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="border_width">6</property>
-                        <property name="bottom_padding">6</property>
                         <property name="left_padding">12</property>
                         <child>
                           <object class="GtkVBox" id="vbox5">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
+                            <property name="border_width">6</property>
                             <property name="spacing">6</property>
                             <child>
-                              <object class="GtkLabel" id="mouse-double-click-time-label">
+                              <object class="GtkLabel" id="dclick-time-label">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
                                 <property name="label" translatable="yes">Ti_me:</property>
                                 <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">mouse-double-click-time-widget</property>
+                                <property name="mnemonic_widget">dclick-time-scale</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
@@ -475,12 +870,12 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHScale" id="mouse-double-click-time-widget">
+                              <object class="GtkHScale" id="dclick-time-scale">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="tooltip_text" translatable="yes">Two mouse clicks in less than this length of time (in milliseconds) will be considered a double click</property>
                                 <property name="update_policy">delayed</property>
-                                <property name="adjustment">mouse-double-click-time</property>
+                                <property name="adjustment">dclick-time</property>
                                 <property name="digits">0</property>
                                 <property name="value_pos">right</property>
                               </object>
@@ -491,13 +886,13 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkLabel" id="mouse-double-click-distance-label">
+                              <object class="GtkLabel" id="dclick-distance-label">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="xalign">0</property>
-                                <property name="label" translatable="yes">_Distance:</property>
+                                <property name="label" translatable="yes">D_istance:</property>
                                 <property name="use_underline">True</property>
-                                <property name="mnemonic_widget">mouse-double-click-distance-widget</property>
+                                <property name="mnemonic_widget">dclick-distance-scale</property>
                               </object>
                               <packing>
                                 <property name="expand">True</property>
@@ -506,12 +901,12 @@
                               </packing>
                             </child>
                             <child>
-                              <object class="GtkHScale" id="mouse-double-click-distance-widget">
+                              <object class="GtkHScale" id="dclick-distance-scale">
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="tooltip_text" translatable="yes">The mouse pointer cannot move farther than this distance between two clicks for them to be considered a double click</property>
                                 <property name="update_policy">delayed</property>
-                                <property name="adjustment">mouse-double-click-distance</property>
+                                <property name="adjustment">dclick-distance</property>
                                 <property name="digits">0</property>
                                 <property name="value_pos">right</property>
                               </object>
@@ -560,7 +955,7 @@
               </packing>
             </child>
             <child>
-              <object class="GtkHBox" id="mouse-themes-hbox">
+              <object class="GtkHBox" id="themes-hbox">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
                 <property name="border_width">12</property>
@@ -573,7 +968,7 @@
                     <property name="vscrollbar_policy">automatic</property>
                     <property name="shadow_type">etched-in</property>
                     <child>
-                      <object class="GtkTreeView" id="mouse-theme-treeview">
+                      <object class="GtkTreeView" id="theme-treeview">
                         <property name="width_request">200</property>
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
@@ -602,21 +997,20 @@
                           <object class="GtkAlignment" id="alignment5">
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
-                            <property name="border_width">6</property>
-                            <property name="bottom_padding">6</property>
                             <property name="left_padding">12</property>
                             <child>
                               <object class="GtkHBox" id="hbox7">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
+                                <property name="border_width">6</property>
                                 <property name="spacing">12</property>
                                 <child>
                                   <object class="GtkLabel" id="label21">
                                     <property name="visible">True</property>
                                     <property name="can_focus">False</property>
-                                    <property name="label" translatable="yes">Cursor _Size:</property>
+                                    <property name="label" translatable="yes">Cursor _size:</property>
                                     <property name="use_underline">True</property>
-                                    <property name="mnemonic_widget">mouse-cursor-size</property>
+                                    <property name="mnemonic_widget">spin1</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -625,14 +1019,14 @@
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkSpinButton" id="mouse-cursor-size">
+                                  <object class="GtkSpinButton" id="spin1">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
                                     <property name="primary_icon_activatable">False</property>
                                     <property name="secondary_icon_activatable">False</property>
                                     <property name="primary_icon_sensitive">True</property>
                                     <property name="secondary_icon_sensitive">True</property>
-                                    <property name="adjustment">adjustment6</property>
+                                    <property name="adjustment">theme-cursor-size</property>
                                     <property name="snap_to_ticks">True</property>
                                     <property name="numeric">True</property>
                                   </object>
@@ -674,10 +1068,16 @@
                             <property name="visible">True</property>
                             <property name="can_focus">False</property>
                             <property name="border_width">6</property>
+                            <property name="xalign">0</property>
+                            <property name="yalign">0</property>
+                            <property name="xscale">0</property>
+                            <property name="yscale">0</property>
+                            <property name="top_padding">6</property>
                             <property name="bottom_padding">6</property>
-                            <property name="left_padding">12</property>
+                            <property name="left_padding">18</property>
+                            <property name="right_padding">6</property>
                             <child>
-                              <object class="GtkImage" id="mouse-theme-preview">
+                              <object class="GtkImage" id="theme-preview">
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="stock">gtk-missing-image</property>
@@ -718,7 +1118,7 @@
               <object class="GtkLabel" id="label3">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
-                <property name="label" translatable="yes">_Theme</property>
+                <property name="label" translatable="yes">T_heme</property>
                 <property name="use_underline">True</property>
               </object>
               <packing>
@@ -739,31 +1139,55 @@
       <action-widget response="0">button1</action-widget>
     </action-widgets>
   </object>
-  <object class="GtkAdjustment" id="mouse-dnd-threshold">
-    <property name="lower">1</property>
-    <property name="upper">50</property>
-    <property name="value">8</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-  </object>
-  <object class="GtkAdjustment" id="mouse-double-click-distance">
-    <property name="upper">20</property>
-    <property name="value">4</property>
+  <object class="GtkAdjustment" id="theme-cursor-size">
+    <property name="lower">16</property>
+    <property name="upper">48</property>
+    <property name="value">24</property>
     <property name="step_increment">1</property>
-    <property name="page_increment">5</property>
+    <property name="page_increment">11</property>
   </object>
-  <object class="GtkAdjustment" id="mouse-double-click-time">
-    <property name="lower">100</property>
-    <property name="upper">2000</property>
-    <property name="value">250</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">100</property>
+  <object class="GtkListStore" id="wacom-mode-store">
+    <columns>
+      <!-- column-name mode -->
+      <column type="gchararray"/>
+      <!-- column-name title -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0">ABSOLUTE</col>
+        <col id="1" translatable="yes">Pen (absolute)</col>
+      </row>
+      <row>
+        <col id="0">RELATIVE</col>
+        <col id="1" translatable="yes">Mouse (relative)</col>
+      </row>
+    </data>
   </object>
-  <object class="GtkAdjustment" id="mouse-threshold">
-    <property name="lower">1</property>
-    <property name="upper">30</property>
-    <property name="value">4</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">5</property>
+  <object class="GtkListStore" id="wacom-rotation-store">
+    <columns>
+      <!-- column-name rotation -->
+      <column type="gint"/>
+      <!-- column-name title -->
+      <column type="gchararray"/>
+    </columns>
+    <data>
+      <row>
+        <col id="0">0</col>
+        <col id="1" translatable="yes">None (right-handed)</col>
+      </row>
+      <row>
+        <col id="0">3</col>
+        <col id="1" translatable="yes">Half (left-handed)</col>
+      </row>
+      <row>
+        <col id="0">1</col>
+        <col id="1" translatable="yes">Clockwise</col>
+      </row>
+      <row>
+        <col id="0">2</col>
+        <col id="1" translatable="yes">Counterclockwise</col>
+      </row>
+    </data>
   </object>
 </interface>
diff --git a/dialogs/mouse-settings/xfce-mouse-settings.desktop.in b/dialogs/mouse-settings/xfce-mouse-settings.desktop.in
index 3bd540f..56c194b 100644
--- a/dialogs/mouse-settings/xfce-mouse-settings.desktop.in
+++ b/dialogs/mouse-settings/xfce-mouse-settings.desktop.in
@@ -1,6 +1,6 @@
 [Desktop Entry]
 Version=1.0
-_Name=Mouse
+_Name=Mouse and Touchpad
 _Comment=Configure pointer device behavior and appearance
 Exec=xfce4-mouse-settings
 Icon=preferences-desktop-peripherals



More information about the Xfce4-commits mailing list