2006-04-10  Marien Zwart <marienz@gentoo.org>

	Fixes #323724

	* gnome-settings-mouse.c (configure_button_layout): fixed button
	mapping with evdev/left handed.
This commit is contained in:
Marien Zwart 2006-04-10 12:45:08 +00:00 committed by Rodrigo Moya
parent b062d0c301
commit 5f2d2e2b75
2 changed files with 48 additions and 8 deletions

View file

@ -1,3 +1,10 @@
2006-04-10 Marien Zwart <marienz@gentoo.org>
Fixes #323724
* gnome-settings-mouse.c (configure_button_layout): fixed button
mapping with evdev/left handed.
2006-03-29 Arjan Timmerman <arjani@soulfly.nl>
Fixes #334153

View file

@ -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;
}
}