aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/Xi/xipassivegrab.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2011-12-23 11:12:22 +0100
committermarha <marha@users.sourceforge.net>2011-12-23 11:12:22 +0100
commit6f6a4d4a600eabf5d6a624eb5b0e98ee67afb52d (patch)
tree8dc28411ab42ebb9183bc090c10024a39fc669d6 /xorg-server/Xi/xipassivegrab.c
parent22891980a76b862bfcda406521b454f072090fb8 (diff)
parente22891346b85a7db40dec7260a100f90b451cbc8 (diff)
downloadvcxsrv-6f6a4d4a600eabf5d6a624eb5b0e98ee67afb52d.tar.gz
vcxsrv-6f6a4d4a600eabf5d6a624eb5b0e98ee67afb52d.tar.bz2
vcxsrv-6f6a4d4a600eabf5d6a624eb5b0e98ee67afb52d.zip
Merge remote-tracking branch 'origin/released'
Conflicts: xorg-server/glx/dispatch.h xorg-server/glx/glapi.c xorg-server/glx/indirect_dispatch.h xorg-server/glx/indirect_reqsize.c xorg-server/glx/indirect_reqsize.h xorg-server/glx/indirect_size.h xorg-server/glx/indirect_size_get.c xorg-server/glx/indirect_size_get.h xorg-server/glx/indirect_table.c xorg-server/mi/mieq.c
Diffstat (limited to 'xorg-server/Xi/xipassivegrab.c')
-rw-r--r--xorg-server/Xi/xipassivegrab.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/xorg-server/Xi/xipassivegrab.c b/xorg-server/Xi/xipassivegrab.c
index 713a1654e..c80da8044 100644
--- a/xorg-server/Xi/xipassivegrab.c
+++ b/xorg-server/Xi/xipassivegrab.c
@@ -108,19 +108,29 @@ ProcXIPassiveGrabDevice(ClientPtr client)
if (stuff->grab_type != XIGrabtypeButton &&
stuff->grab_type != XIGrabtypeKeycode &&
stuff->grab_type != XIGrabtypeEnter &&
- stuff->grab_type != XIGrabtypeFocusIn)
+ stuff->grab_type != XIGrabtypeFocusIn &&
+ stuff->grab_type != XIGrabtypeTouchBegin)
{
client->errorValue = stuff->grab_type;
return BadValue;
}
if ((stuff->grab_type == XIGrabtypeEnter ||
- stuff->grab_type == XIGrabtypeFocusIn) && stuff->detail != 0)
+ stuff->grab_type == XIGrabtypeFocusIn ||
+ stuff->grab_type == XIGrabtypeTouchBegin) && stuff->detail != 0)
{
client->errorValue = stuff->detail;
return BadValue;
}
+ if (stuff->grab_type == XIGrabtypeTouchBegin &&
+ (stuff->grab_mode != XIGrabModeTouch ||
+ stuff->paired_device_mode != GrabModeAsync))
+ {
+ client->errorValue = stuff->grab_mode;
+ return BadValue;
+ }
+
if (XICheckInvalidMaskBits(client, (unsigned char*)&stuff[1],
stuff->mask_len * 4) != Success)
return BadValue;
@@ -141,11 +151,17 @@ ProcXIPassiveGrabDevice(ClientPtr client)
memset(&param, 0, sizeof(param));
param.grabtype = XI2;
param.ownerEvents = stuff->owner_events;
- param.this_device_mode = stuff->grab_mode;
- param.other_devices_mode = stuff->paired_device_mode;
param.grabWindow = stuff->grab_window;
param.cursor = stuff->cursor;
+ if (IsKeyboardDevice(dev)) {
+ param.this_device_mode = stuff->grab_mode;
+ param.other_devices_mode = stuff->paired_device_mode;
+ } else {
+ param.this_device_mode = stuff->paired_device_mode;
+ param.other_devices_mode = stuff->grab_mode;
+ }
+
if (stuff->cursor != None)
{
ret = dixLookupResourceByType(&tmp, stuff->cursor,
@@ -194,6 +210,9 @@ ProcXIPassiveGrabDevice(ClientPtr client)
status = GrabWindow(client, dev, stuff->grab_type,
&param, &mask);
break;
+ case XIGrabtypeTouchBegin:
+ status = GrabTouch(client, dev, mod_dev, &param, &mask);
+ break;
}
if (status != GrabSuccess)