XInput allows up to 255 buttons
Signed-off-by: Thomas Jaeger <ThJaeger@gmail.com> https://bugzilla.gnome.org/show_bug.cgi?id=588649
This commit is contained in:
parent
abf7742beb
commit
2635fb75c6
@ -135,7 +135,8 @@ gdk_input_device_new (GdkDisplay *display,
|
|||||||
gdkdev->info.has_cursor = 0;
|
gdkdev->info.has_cursor = 0;
|
||||||
gdkdev->needs_update = FALSE;
|
gdkdev->needs_update = FALSE;
|
||||||
gdkdev->claimed = FALSE;
|
gdkdev->claimed = FALSE;
|
||||||
gdkdev->button_state = 0;
|
memset(gdkdev->button_state, 0, sizeof (gdkdev->button_state));
|
||||||
|
gdkdev->button_count = 0;
|
||||||
|
|
||||||
class = device->inputclassinfo;
|
class = device->inputclassinfo;
|
||||||
for (i=0;i<device->num_classes;i++)
|
for (i=0;i<device->num_classes;i++)
|
||||||
@ -556,15 +557,24 @@ _gdk_input_common_other_event (GdkEvent *event,
|
|||||||
{
|
{
|
||||||
XDeviceButtonEvent *xdbe = (XDeviceButtonEvent *)(xevent);
|
XDeviceButtonEvent *xdbe = (XDeviceButtonEvent *)(xevent);
|
||||||
|
|
||||||
|
g_return_val_if_fail (xdbe->button < 256, FALSE);
|
||||||
if (xdbe->type == gdkdev->buttonpress_type)
|
if (xdbe->type == gdkdev->buttonpress_type)
|
||||||
{
|
{
|
||||||
event->button.type = GDK_BUTTON_PRESS;
|
event->button.type = GDK_BUTTON_PRESS;
|
||||||
gdkdev->button_state |= 1 << xdbe->button;
|
if (!(gdkdev->button_state[xdbe->button/8] & 1 << (xdbe->button%8)))
|
||||||
|
{
|
||||||
|
gdkdev->button_state[xdbe->button/8] |= 1 << (xdbe->button%8);
|
||||||
|
gdkdev->button_count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
event->button.type = GDK_BUTTON_RELEASE;
|
event->button.type = GDK_BUTTON_RELEASE;
|
||||||
gdkdev->button_state &= ~(1 << xdbe->button);
|
if (gdkdev->button_state[xdbe->button/8] & 1 << (xdbe->button%8))
|
||||||
|
{
|
||||||
|
gdkdev->button_state[xdbe->button/8] &= ~(1 << (xdbe->button%8));
|
||||||
|
gdkdev->button_count--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
event->button.device = &gdkdev->info;
|
event->button.device = &gdkdev->info;
|
||||||
event->button.window = window;
|
event->button.window = window;
|
||||||
|
@ -369,10 +369,11 @@ _gdk_input_grab_pointer (GdkWindow *window,
|
|||||||
{
|
{
|
||||||
gdkdev = (GdkDevicePrivate *)tmp_list->data;
|
gdkdev = (GdkDevicePrivate *)tmp_list->data;
|
||||||
if (!GDK_IS_CORE (gdkdev) && gdkdev->xdevice &&
|
if (!GDK_IS_CORE (gdkdev) && gdkdev->xdevice &&
|
||||||
((gdkdev->button_state != 0) || need_ungrab))
|
((gdkdev->button_count != 0) || need_ungrab))
|
||||||
{
|
{
|
||||||
XUngrabDevice (display_impl->xdisplay, gdkdev->xdevice, time);
|
XUngrabDevice (display_impl->xdisplay, gdkdev->xdevice, time);
|
||||||
gdkdev->button_state = 0;
|
memset(gdkdev->button_state, 0, sizeof (gdkdev->button_state));
|
||||||
|
gdkdev->button_count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tmp_list = tmp_list->next;
|
tmp_list = tmp_list->next;
|
||||||
|
@ -89,7 +89,8 @@ struct _GdkDevicePrivate
|
|||||||
gint needs_update;
|
gint needs_update;
|
||||||
|
|
||||||
/* Mask of buttons (used for button grabs) */
|
/* Mask of buttons (used for button grabs) */
|
||||||
gint button_state;
|
char button_state[32];
|
||||||
|
gint button_count;
|
||||||
|
|
||||||
/* true if we've claimed the device as active. (used only for XINPUT_GXI) */
|
/* true if we've claimed the device as active. (used only for XINPUT_GXI) */
|
||||||
gint claimed;
|
gint claimed;
|
||||||
|
Loading…
Reference in New Issue
Block a user