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"><b>Orientation</b></property>
+ <property name="label"
translatable="yes"><b>Button Order</b></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