From 5f2d2e2b759b1735e589234eb516c8331e4d8612 Mon Sep 17 00:00:00 2001 From: Marien Zwart Date: Mon, 10 Apr 2006 12:45:08 +0000 Subject: [PATCH] Fixes #323724 2006-04-10 Marien Zwart Fixes #323724 * gnome-settings-mouse.c (configure_button_layout): fixed button mapping with evdev/left handed. --- gnome-settings-daemon/ChangeLog | 7 +++ gnome-settings-daemon/gnome-settings-mouse.c | 49 ++++++++++++++++---- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/gnome-settings-daemon/ChangeLog b/gnome-settings-daemon/ChangeLog index 18588ac44..ab28e8289 100644 --- a/gnome-settings-daemon/ChangeLog +++ b/gnome-settings-daemon/ChangeLog @@ -1,3 +1,10 @@ +2006-04-10 Marien Zwart + + Fixes #323724 + + * gnome-settings-mouse.c (configure_button_layout): fixed button + mapping with evdev/left handed. + 2006-03-29 Arjan Timmerman Fixes #334153 diff --git a/gnome-settings-daemon/gnome-settings-mouse.c b/gnome-settings-daemon/gnome-settings-mouse.c index 66aef21f3..5975bca67 100644 --- a/gnome-settings-daemon/gnome-settings-mouse.c +++ b/gnome-settings-daemon/gnome-settings-mouse.c @@ -33,24 +33,57 @@ configure_button_layout (guchar *buttons, 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); + right_button = MIN (n_buttons, 3); - if (left_handed) + /* 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) { - buttons[left_button] = right_button + 1; - buttons[right_button] = left_button + 1; + /* 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; } - else + /* check if we are not left_handed but are swapped */ + else if (!left_handed && buttons[left_button - 1] == right_button) { - buttons[left_button] = left_button + 1; - buttons[right_button] = right_button + 1; + /* 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; } }