Author: nick
Date: 2008-07-11 21:36:31 +0000 (Fri, 11 Jul 2008)
New Revision: 27258

Modified:
   xfce4-settings/branches/multiple_pointers/daemon.c
   xfce4-settings/branches/multiple_pointers/main.c
   xfce4-settings/branches/multiple_pointers/mouse_dialog.glade
Log:
* Fix some dialog stuff.
* Implement toggle button to reverse the scroll wheel
  direction.


Modified: xfce4-settings/branches/multiple_pointers/daemon.c
===================================================================
--- xfce4-settings/branches/multiple_pointers/daemon.c  2008-07-11 19:12:26 UTC 
(rev 27257)
+++ xfce4-settings/branches/multiple_pointers/daemon.c  2008-07-11 21:36:31 UTC 
(rev 27258)
@@ -45,16 +45,52 @@
 
 
 static void
+mouse_daemon_change_button_mapping_swap (guchar   *buttonmap,
+                                         gshort    num_buttons,
+                                         gint      id_1,
+                                         gint      id_2,
+                                         gboolean  reverse)
+{
+    guint n;
+    gint  id_a;
+    gint  id_b;
+
+    /* figure out the position of the id_1 and id_2 buttons in the map */
+    for (n = 0, id_a = id_b = -1; n < num_buttons; n++)
+    {
+        if (buttonmap[n] == id_1)
+            id_a = n;
+        else if (buttonmap[n] == id_2)
+            id_b = n;
+    }
+
+    /* only change the map when id_a and id_b where found */
+    if (G_LIKELY (id_a != -1 && id_b != -1))
+    {
+        /* check if we need to change the buttonmap */
+        if ((!reverse && (id_a < id_b)) || (reverse && (id_a > id_b)))
+        {
+            /* swap the buttons in the button map */
+            buttonmap[id_a] = id_2;
+            buttonmap[id_b] = id_1;
+        }
+    }
+}
+
+
+
+static void
 mouse_daemon_change_button_mapping (XDeviceInfo *device_info,
                                     XDevice     *device,
                                     Display     *xdisplay,
-                                    gboolean     right_handed)
+                                    gint         right_handed,
+                                    gint         reverse_scrolling)
 {
     XAnyClassPtr  ptr;
     gshort        num_buttons;
     guchar       *buttonmap;
-    gint          id_1, id_3;
     gint          n;
+    gint          right_button;
 
     /* get the device classes */
     ptr = device_info->inputclassinfo;
@@ -84,30 +120,24 @@
         /* get the button mapping */
         XGetDeviceButtonMapping (xdisplay, device, buttonmap, num_buttons);
 
-        /* figure out the position of the first and second/third button in the 
map */
-        for (n = 0, id_1 = id_3 = -1; n < num_buttons; n++)
+        if (right_handed != -1)
         {
-            if (buttonmap[n] == 1)
-                id_1 = n;
-            else if (buttonmap[n] == (num_buttons < 3 ? 2 : 3))
-                id_3 = n;
+            /* get the right button number */
+            right_button = num_buttons < 3 ? 2 : 3;
+
+            /* check the buttons and swap them if needed */
+            mouse_daemon_change_button_mapping_swap (buttonmap, num_buttons, 
1, right_button, !!right_handed);
         }
 
-        /* only change the map when id_1 and id_3 where found */
-        if (G_LIKELY (id_1 != -1 && id_3 != -1))
+        if (reverse_scrolling != -1 && num_buttons >= 5)
         {
-            /* check if we need to change the buttonmap */
-            if ((!right_handed && (id_1 < id_3)) || (right_handed && (id_1 > 
id_3)))
-            {
-                /* swap the left and right button */
-                buttonmap[id_1] = (num_buttons < 3 ? 2 : 3);
-                buttonmap[id_3] = 1;
-
-                /* set the new button mapping */
-                XSetDeviceButtonMapping (xdisplay, device, buttonmap, 
num_buttons);
-            }
+            /* check the buttons and swap them if needed */
+            mouse_daemon_change_button_mapping_swap (buttonmap, num_buttons, 
4, 5, !reverse_scrolling);
         }
 
+        /* set the new button mapping */
+        XSetDeviceButtonMapping (xdisplay, device, buttonmap, num_buttons);
+
         /* cleanup */
         g_free (buttonmap);
     }
@@ -236,6 +266,7 @@
     gchar       *threshold_str;
     gchar       *acceleration_str;
     gchar       *device_name;
+    gchar       *reverse_scrolling_str;
 
     /* get the x display */
     xdisplay = gdk_x11_display_get_xdisplay (gdk_display_get_default ());
@@ -264,20 +295,23 @@
                 /* check if we have a property for this device, else continue 
*/
                 if (xfconf_channel_has_property (channel, righthanded_str))
                 {
-                    /* restore the button mapping */
-                    mouse_daemon_change_button_mapping (device_info, device, 
xdisplay,
-                                                        
xfconf_channel_get_bool (channel, righthanded_str, TRUE));
-
                     /* create property names */
+                    reverse_scrolling_str = g_strdup_printf 
("/Pointers/%s/ReverseScrolling", device_name);
                     threshold_str = g_strdup_printf ("/Pointers/%s/Threshold", 
device_name);
                     acceleration_str = g_strdup_printf 
("/Pointers/%s/Acceleration", device_name);
 
+                    /* restore the button mapping */
+                    mouse_daemon_change_button_mapping (device_info, device, 
xdisplay,
+                                                        
xfconf_channel_get_bool (channel, righthanded_str, TRUE) ? 1 : 0,
+                                                        
xfconf_channel_get_bool (channel, reverse_scrolling_str, FALSE) ? 1 : 0);
+
                     /* restore the pointer feedback */
                     mouse_daemon_change_feedback (device, xdisplay,
                                                   xfconf_channel_get_int 
(channel, threshold_str, -1),
                                                   xfconf_channel_get_double 
(channel, acceleration_str, -1.00));
 
                     /* cleanup */
+                    g_free (reverse_scrolling_str);
                     g_free (threshold_str);
                     g_free (acceleration_str);
                 }
@@ -346,7 +380,9 @@
                     {
                         /* update the right property */
                         if (strcmp (names[1], "RightHanded") == 0)
-                            mouse_daemon_change_button_mapping (device_info, 
device, xdisplay, g_value_get_boolean (value));
+                            mouse_daemon_change_button_mapping (device_info, 
device, xdisplay, !!g_value_get_boolean (value), -1);
+                        else if (strcmp (names[1], "ReverseScrolling") == 0)
+                            mouse_daemon_change_button_mapping (device_info, 
device, xdisplay, -1, !!g_value_get_boolean (value));
                         else if (strcmp (names[1], "Threshold") == 0)
                             mouse_daemon_change_feedback (device, xdisplay, 
g_value_get_int (value), -2.00);
                         else if (strcmp (names[1], "Acceleration") == 0)

Modified: xfce4-settings/branches/multiple_pointers/main.c
===================================================================
--- xfce4-settings/branches/multiple_pointers/main.c    2008-07-11 19:12:26 UTC 
(rev 27257)
+++ xfce4-settings/branches/multiple_pointers/main.c    2008-07-11 21:36:31 UTC 
(rev 27258)
@@ -543,6 +543,7 @@
     gint               i;
     guchar            *buttonmap;
     gint               id_1 = 0, id_3 = 0;
+    gint               id_4 = 0, id_5 = 0;
     gdouble            acceleration = -1.00;
     gint               threshold = -1;
     GtkWidget         *widget;
@@ -583,6 +584,10 @@
                     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;
             }
 
             /* cleanup */
@@ -619,10 +624,14 @@
         }
     }
 
-    /* update orientation */
+    /* update button order */
     widget = glade_xml_get_widget (gxml, id_1 > id_3 ? "mouse-left-handed" : 
"mouse-right-handed");
     gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), TRUE);
 
+    widget = glade_xml_get_widget (gxml, "mouse-reverse-scrolling");
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), !!(id_5 < id_4));
+    gtk_widget_set_sensitive (widget, nbuttons >= 5);
+
     /* update acceleration scale */
     widget = glade_xml_get_widget (gxml, "mouse-acceleration-scale");
     gtk_range_set_value (GTK_RANGE (widget), acceleration);
@@ -653,6 +662,7 @@
     gboolean          righthanded;
     gint              threshold;
     gdouble           acceleration;
+    gboolean          reverse_scrolling;
 
     g_return_if_fail (GLADE_IS_XML (gxml));
 
@@ -674,7 +684,7 @@
 
         if (G_LIKELY (name))
         {
-            /* store the orientation */
+            /* store the button order */
             widget = glade_xml_get_widget (gxml, "mouse-right-handed");
             property_name = g_strdup_printf ("/Pointers/%s/RightHanded", name);
             righthanded = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(widget));
@@ -682,6 +692,14 @@
                 xfconf_channel_set_bool (channel, property_name, righthanded);
             g_free (property_name);
 
+            /* store reverse scrolling */
+            widget = glade_xml_get_widget (gxml, "mouse-reverse-scrolling");
+            property_name = g_strdup_printf ("/Pointers/%s/ReverseScrolling", 
name);
+            reverse_scrolling = gtk_toggle_button_get_active 
(GTK_TOGGLE_BUTTON (widget));
+            if (xfconf_channel_get_bool (channel, property_name, TRUE) != 
reverse_scrolling)
+                xfconf_channel_set_bool (channel, property_name, 
reverse_scrolling);
+            g_free (property_name);
+
             /* store the threshold */
             widget = glade_xml_get_widget (gxml, "mouse-threshold-scale");
             property_name = g_strdup_printf ("/Pointers/%s/Threshold", name);
@@ -885,19 +903,19 @@
     GladeXML  *gxml = GLADE_XML (user_data);
     GtkWidget *treeview;
     GtkWidget *button;
-    
+
     GDK_THREADS_ENTER ();
-    
+
     /* get the treeview */
     treeview = glade_xml_get_widget (gxml, "mouse-devices-treeview");
-    
+
     /* update */
     mouse_settings_device_selection_changed (gtk_tree_view_get_selection 
(GTK_TREE_VIEW (treeview)), gxml);
-    
+
     /* make the button sensitive again */
     button = glade_xml_get_widget (gxml, "mouse-reset");
     gtk_widget_set_sensitive (button, TRUE);
-    
+
     GDK_THREADS_LEAVE ();
 
     return FALSE;
@@ -961,7 +979,7 @@
     gboolean          has_selection;
     GtkTreeModel     *model;
     GtkTreeIter       iter;
-    
+
     /* leave when locked */
     if (locked > 0)
         return;
@@ -982,7 +1000,7 @@
         {
             /* make the button insensitive */
             gtk_widget_set_sensitive (button, FALSE);
-            
+
             /* set the threshold to -1 */
             property_name = g_strdup_printf ("/Pointers/%s/Threshold", name);
             xfconf_channel_set_int (channel, property_name, -1);
@@ -992,14 +1010,14 @@
             property_name = g_strdup_printf ("/Pointers/%s/Acceleration", 
name);
             xfconf_channel_set_double (channel, property_name, -1.00);
             g_free (property_name);
-            
+
             /* update the sliders in 500ms */
             timeout_id = g_timeout_add_full (G_PRIORITY_LOW, 500, 
mouse_settings_device_update_sliders,
                                              gxml, 
mouse_settings_device_list_changed_timeout_destroyed);
 
-            
+
         }
-        
+
         /* cleanup */
         g_free (name);
     }
@@ -1086,7 +1104,10 @@
 
             widget = glade_xml_get_widget (gxml, "mouse-right-handed");
             g_signal_connect_swapped (G_OBJECT (widget), "toggled", G_CALLBACK 
(mouse_settings_device_save), gxml);
-            
+
+            widget = glade_xml_get_widget (gxml, "mouse-reverse-scrolling");
+            g_signal_connect_swapped (G_OBJECT (widget), "toggled", G_CALLBACK 
(mouse_settings_device_save), gxml);
+
             widget = glade_xml_get_widget (gxml, "mouse-reset");
             g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK 
(mouse_settings_device_reset), gxml);
 
@@ -1153,7 +1174,7 @@
                 /* cleanup */
                 LIBHAL_FREE_DBUS_ERROR (&derror);
             }
-            
+
             /* gtk the dialog */
             dialog = glade_xml_get_widget (gxml, "mouse-dialog");
 

Modified: xfce4-settings/branches/multiple_pointers/mouse_dialog.glade
===================================================================
--- xfce4-settings/branches/multiple_pointers/mouse_dialog.glade        
2008-07-11 19:12:26 UTC (rev 27257)
+++ xfce4-settings/branches/multiple_pointers/mouse_dialog.glade        
2008-07-11 21:36:31 UTC (rev 27258)
@@ -1,12 +1,12 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Tue Jul  8 19:04:35 2008 -->
+<!--Generated with glade3 3.4.5 on Fri Jul 11 23:12:37 2008 -->
 <glade-interface>
   <requires lib="xfce4"/>
   <widget class="XfceTitledDialog" id="mouse-dialog">
     <property name="title" translatable="yes">Xfce Mouse Settings</property>
     <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
-    <property name="icon_name">input-mouse</property>
+    <property name="icon_name">preferences-desktop-peripherals</property>
     <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
     <property name="has_separator">False</property>
     <property name="subtitle" translatable="yes">Configure the look and 
feeling of the pointer devices</property>
@@ -54,31 +54,52 @@
                             <property name="visible">True</property>
                             <property name="top_padding">6</property>
                             <property name="left_padding">18</property>
+                            <property name="right_padding">6</property>
                             <child>
-                              <widget class="GtkVBox" id="vbox2">
+                              <widget class="GtkVBox" id="vbox12">
                                 <property name="visible">True</property>
-                                <property name="spacing">2</property>
+                                <property name="spacing">12</property>
                                 <child>
-                                  <widget class="GtkRadioButton" 
id="mouse-right-handed">
+                                  <widget class="GtkVBox" id="vbox2">
                                     <property name="visible">True</property>
-                                    <property name="can_focus">True</property>
-                                    <property name="label" 
translatable="yes">_Right handed</property>
-                                    <property 
name="use_underline">True</property>
-                                    <property name="response_id">0</property>
-                                    <property name="active">True</property>
-                                    <property 
name="draw_indicator">True</property>
+                                    <property name="spacing">2</property>
+                                    <child>
+                                      <widget class="GtkRadioButton" 
id="mouse-right-handed">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can_focus">True</property>
+                                        <property name="label" 
translatable="yes">_Right handed</property>
+                                        <property 
name="use_underline">True</property>
+                                        <property 
name="response_id">0</property>
+                                        <property name="active">True</property>
+                                        <property 
name="draw_indicator">True</property>
+                                      </widget>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkRadioButton" 
id="mouse-left-handed">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can_focus">True</property>
+                                        <property name="label" 
translatable="yes">_Left handed</property>
+                                        <property 
name="use_underline">True</property>
+                                        <property 
name="response_id">0</property>
+                                        <property name="active">True</property>
+                                        <property 
name="draw_indicator">True</property>
+                                        <property 
name="group">mouse-right-handed</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </widget>
                                 </child>
                                 <child>
-                                  <widget class="GtkRadioButton" 
id="mouse-left-handed">
+                                  <widget class="GtkCheckButton" 
id="mouse-reverse-scrolling">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="label" 
translatable="yes">_Left handed</property>
+                                    <property name="tooltip" 
translatable="yes">When enabled, the scroll wheel will work in the opposite 
direction</property>
+                                    <property name="label" 
translatable="yes">Re_verse scroll direction</property>
                                     <property 
name="use_underline">True</property>
                                     <property name="response_id">0</property>
-                                    <property name="active">True</property>
                                     <property 
name="draw_indicator">True</property>
-                                    <property 
name="group">mouse-right-handed</property>
                                   </widget>
                                   <packing>
                                     <property name="position">1</property>
@@ -91,7 +112,7 @@
                         <child>
                           <widget class="GtkLabel" id="label4">
                             <property name="visible">True</property>
-                            <property name="label" 
translatable="yes">&lt;b&gt;Orientation&lt;/b&gt;</property>
+                            <property name="label" 
translatable="yes">&lt;b&gt;Button Order&lt;/b&gt;</property>
                             <property name="use_markup">True</property>
                           </widget>
                           <packing>
@@ -113,6 +134,7 @@
                             <property name="visible">True</property>
                             <property name="top_padding">6</property>
                             <property name="left_padding">18</property>
+                            <property name="right_padding">6</property>
                             <child>
                               <widget class="GtkVBox" id="vbox6">
                                 <property name="visible">True</property>
@@ -136,7 +158,7 @@
                                         <property 
name="can_focus">True</property>
                                         <property name="tooltip" 
translatable="yes">The pointer will go 'acceleration' times as fast when it 
travels more than 'threshold' pixels in a short time</property>
                                         <property 
name="update_policy">GTK_UPDATE_DELAYED</property>
-                                        <property name="adjustment">1 
0.10000000000000001 10 0.10000000000000001 1 1</property>
+                                        <property name="adjustment">2 
0.10000000000000001 10 0.10000000000000001 1 1</property>
                                         <property 
name="value_pos">GTK_POS_RIGHT</property>
                                       </widget>
                                       <packing>
@@ -164,7 +186,7 @@
                                         <property 
name="can_focus">True</property>
                                         <property name="tooltip" 
translatable="yes">The number of pixels the pointer has to moved in a short 
time before the acceleration starts</property>
                                         <property 
name="update_policy">GTK_UPDATE_DELAYED</property>
-                                        <property name="adjustment">10 1 30 1 
5 5</property>
+                                        <property name="adjustment">4 1 30 1 5 
5</property>
                                         <property name="digits">0</property>
                                         <property 
name="value_pos">GTK_POS_RIGHT</property>
                                       </widget>
@@ -250,6 +272,7 @@
                         <property name="visible">True</property>
                         <property name="top_padding">6</property>
                         <property name="left_padding">18</property>
+                        <property name="right_padding">6</property>
                         <child>
                           <widget class="GtkVBox" id="vbox4">
                             <property name="visible">True</property>
@@ -258,7 +281,7 @@
                               <widget class="GtkLabel" id="mouse-dnd-label">
                                 <property name="visible">True</property>
                                 <property name="xalign">0</property>
-                                <property name="label" 
translatable="yes">_Threshold:</property>
+                                <property name="label" 
translatable="yes">Thr_eshold:</property>
                                 <property name="use_underline">True</property>
                                 <property 
name="mnemonic_widget">mouse-dnd-threshold</property>
                               </widget>
@@ -269,7 +292,7 @@
                                 <property name="can_focus">True</property>
                                 <property name="tooltip" 
translatable="yes">The number of pixels the pointer can move before 
dragging</property>
                                 <property 
name="update_policy">GTK_UPDATE_DELAYED</property>
-                                <property name="adjustment">1 1 50 1 10 
10</property>
+                                <property name="adjustment">8 1 50 1 10 
10</property>
                                 <property name="digits">0</property>
                                 <property 
name="value_pos">GTK_POS_RIGHT</property>
                               </widget>
@@ -306,6 +329,7 @@
                         <property name="visible">True</property>
                         <property name="top_padding">6</property>
                         <property name="left_padding">18</property>
+                        <property name="right_padding">6</property>
                         <child>
                           <widget class="GtkVBox" id="vbox5">
                             <property name="visible">True</property>
@@ -327,9 +351,9 @@
                                   <widget class="GtkHScale" 
id="mouse-double-click-time">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="tooltip" 
translatable="yes">The maximum time allowed between two clicks for them to be 
considered a double click</property>
+                                    <property name="tooltip" 
translatable="yes">The maximum time allowed between two clicks, in 
milliseconds, for them to be considered a double click</property>
                                     <property 
name="update_policy">GTK_UPDATE_DELAYED</property>
-                                    <property name="adjustment">1000 100 2000 
10 100 100</property>
+                                    <property name="adjustment">250 100 2000 
10 100 100</property>
                                     <property name="digits">0</property>
                                     <property 
name="value_pos">GTK_POS_RIGHT</property>
                                   </widget>
@@ -356,9 +380,9 @@
                                   <widget class="GtkHScale" 
id="mouse-double-click-distance">
                                     <property name="visible">True</property>
                                     <property name="can_focus">True</property>
-                                    <property name="tooltip" 
translatable="yes">The maximum distance allowed between two clicks for them to 
be considered a double click</property>
+                                    <property name="tooltip" 
translatable="yes">The maximum distance allowed between two clicks, in pixels, 
for them to be considered a double click</property>
                                     <property 
name="update_policy">GTK_UPDATE_DELAYED</property>
-                                    <property name="adjustment">5 0 20 1 5 
5</property>
+                                    <property name="adjustment">4 0 20 1 5 
5</property>
                                     <property name="digits">0</property>
                                     <property 
name="value_pos">GTK_POS_RIGHT</property>
                                   </widget>
@@ -399,7 +423,7 @@
             <child>
               <widget class="GtkLabel" id="label2">
                 <property name="visible">True</property>
-                <property name="label" translatable="yes">Settings</property>
+                <property name="label" translatable="yes">Behaviour</property>
               </widget>
               <packing>
                 <property name="type">tab</property>
@@ -443,6 +467,7 @@
                             <property name="visible">True</property>
                             <property name="top_padding">6</property>
                             <property name="left_padding">18</property>
+                            <property name="right_padding">6</property>
                             <child>
                               <widget class="GtkHBox" id="hbox7">
                                 <property name="visible">True</property>
@@ -500,6 +525,7 @@
                             <property name="visible">True</property>
                             <property name="top_padding">6</property>
                             <property name="left_padding">18</property>
+                            <property name="right_padding">6</property>
                             <child>
                               <widget class="GtkImage" 
id="mouse-theme-preview">
                                 <property name="visible">True</property>

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to