+++ /dev/null
-=== modified file 'gnome-settings-daemon/gnome-settings-mouse.c'
---- gnome-settings-daemon/gnome-settings-mouse.c
-+++ gnome-settings-daemon/gnome-settings-mouse.c
-@@ -33,24 +33,57 @@
- gint n_buttons,
- gboolean left_handed)
- {
-- const gint left_button = 0;
-+ const gint left_button = 1;
- gint right_button;
-+ gint i;
-
- /* if the button is higher than 2 (3rd button) then it's
- * probably one direction of a scroll wheel or something else
- * uninteresting
- */
-- right_button = MIN (n_buttons - 1, 2);
--
-- if (left_handed)
-- {
-- buttons[left_button] = right_button + 1;
-- buttons[right_button] = left_button + 1;
-- }
-- else
-- {
-- buttons[left_button] = left_button + 1;
-- buttons[right_button] = right_button + 1;
-+ right_button = MIN (n_buttons, 3);
-+
-+ /* If we change things we need to make sure we only swap buttons.
-+ * If we end up with multiple physical buttons assigned to the same
-+ * logical button the server will complain. This code assumes physical
-+ * button 0 is the physical left mouse button, and that the physical
-+ * button other than 0 currently assigned left_button or right_button
-+ * is the physical right mouse button.
-+ */
-+
-+ /* check if the current mapping satisfies the above assumptions */
-+ if (buttons[left_button - 1] != left_button &&
-+ buttons[left_button - 1] != right_button)
-+ /* The current mapping is weird. Swapping buttons is probably not a
-+ * good idea.
-+ */
-+ return;
-+
-+ /* check if we are left_handed and currently not swapped */
-+ if (left_handed && buttons[left_button - 1] == left_button)
-+ {
-+ /* find the right button */
-+ for (i = 0; i < n_buttons; i++)
-+ {
-+ if (buttons[i] == right_button)
-+ break;
-+ }
-+ /* swap the buttons */
-+ buttons[left_button - 1] = right_button;
-+ buttons[i] = left_button;
-+ }
-+ /* check if we are not left_handed but are swapped */
-+ else if (!left_handed && buttons[left_button - 1] == right_button)
-+ {
-+ /* find the right button */
-+ for (i = 0; i < n_buttons; i++)
-+ {
-+ if (buttons[i] == left_button)
-+ break;
-+ }
-+ /* swap the buttons */
-+ buttons[i] = right_button;
-+ buttons[left_button - 1] = left_button;
- }
- }
-
-