aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/dix
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-10-16 11:23:27 +0200
committermarha <marha@users.sourceforge.net>2013-10-16 11:23:27 +0200
commit9e23b44bfe1e6e85231b1c07d945cadf0c868648 (patch)
tree0bd2b4d0521570bf020452591c895b90bda51095 /xorg-server/dix
parent81fd17c8678e89cea6610b8b2996b028b21eb5dc (diff)
downloadvcxsrv-9e23b44bfe1e6e85231b1c07d945cadf0c868648.tar.gz
vcxsrv-9e23b44bfe1e6e85231b1c07d945cadf0c868648.tar.bz2
vcxsrv-9e23b44bfe1e6e85231b1c07d945cadf0c868648.zip
fontconfig libxcb libxcb/xcb-proto xserver mesa pixman xkbcomp git update 16 oct 2013
xserver commit 7cf1b595c8c8f9776a39559d2878cf90af3f2859 libxcb commit e4e0c6eec861f4c69da12060dc8dbe7a63fa5eb6 libxcb/xcb-proto commit 55c75accecf0e76d2aa38656efd2be4044b9e643 xkbcomp commit 839ccda42d8b088d94324cd77c4be954859914d3 pixman commit 9e81419ed5c0ee490ddacf7bada516a25cae87eb fontconfig commit 5406919c5e186f74ccdade1a65344ce7b5c56a64 mesa commit 6e444a72c1f9e4446e025b8cb780523cb89f0584
Diffstat (limited to 'xorg-server/dix')
-rw-r--r--xorg-server/dix/events.c22
-rw-r--r--xorg-server/dix/inpututils.c30
2 files changed, 23 insertions, 29 deletions
diff --git a/xorg-server/dix/events.c b/xorg-server/dix/events.c
index 086601a69..7a1b1c3c6 100644
--- a/xorg-server/dix/events.c
+++ b/xorg-server/dix/events.c
@@ -4142,6 +4142,9 @@ DeliverOneGrabbedEvent(InternalEvent *event, DeviceIntPtr dev,
GrabPtr grab = grabinfo->grab;
Mask filter;
+ if (grab->grabtype != level)
+ return 0;
+
switch (level) {
case XI2:
rc = EventToXI2(event, &xE);
@@ -4253,22 +4256,17 @@ DeliverGrabbedEvent(InternalEvent *event, DeviceIntPtr thisDev,
sendCore = (IsMaster(thisDev) && thisDev->coreEvents);
/* try core event */
- if (sendCore && grab->grabtype == CORE) {
- deliveries = DeliverOneGrabbedEvent(event, thisDev, CORE);
- }
-
- if (!deliveries) {
- deliveries = DeliverOneGrabbedEvent(event, thisDev, XI2);
- }
-
- if (!deliveries) {
- deliveries = DeliverOneGrabbedEvent(event, thisDev, XI);
- }
+ if ((sendCore && grab->grabtype == CORE) || grab->grabtype != CORE)
+ deliveries = DeliverOneGrabbedEvent(event, thisDev, grab->grabtype);
if (deliveries && (event->any.type == ET_Motion))
thisDev->valuator->motionHintWindow = grab->window;
}
- if (deliveries && !deactivateGrab && event->any.type != ET_Motion) {
+ if (deliveries && !deactivateGrab &&
+ (event->any.type == ET_KeyPress ||
+ event->any.type == ET_KeyRelease ||
+ event->any.type == ET_ButtonPress ||
+ event->any.type == ET_ButtonRelease)) {
switch (grabinfo->sync.state) {
case FREEZE_BOTH_NEXT_EVENT:
dev = GetPairedDevice(thisDev);
diff --git a/xorg-server/dix/inpututils.c b/xorg-server/dix/inpututils.c
index 9e38e1742..a10a7c761 100644
--- a/xorg-server/dix/inpututils.c
+++ b/xorg-server/dix/inpututils.c
@@ -960,8 +960,15 @@ XI2Mask *
xi2mask_new_with_size(size_t nmasks, size_t size)
{
int i;
+ int alloc_size;
+ unsigned char *cursor;
+ XI2Mask *mask;
- XI2Mask *mask = calloc(1, sizeof(*mask));
+ alloc_size = sizeof(struct _XI2Mask)
+ + nmasks * sizeof(unsigned char *)
+ + nmasks * size;
+
+ mask = calloc(1, alloc_size);
if (!mask)
return NULL;
@@ -969,20 +976,14 @@ xi2mask_new_with_size(size_t nmasks, size_t size)
mask->nmasks = nmasks;
mask->mask_size = size;
- mask->masks = calloc(mask->nmasks, sizeof(*mask->masks));
- if (!mask->masks)
- goto unwind;
+ mask->masks = (unsigned char **)(mask + 1);
+ cursor = (unsigned char *)(mask + 1) + nmasks * sizeof(unsigned char *);
- for (i = 0; i < mask->nmasks; i++) {
- mask->masks[i] = calloc(1, mask->mask_size);
- if (!mask->masks[i])
- goto unwind;
+ for (i = 0; i < nmasks; i++) {
+ mask->masks[i] = cursor;
+ cursor += size;
}
return mask;
-
- unwind:
- xi2mask_free(&mask);
- return NULL;
}
/**
@@ -1003,14 +1004,9 @@ xi2mask_new(void)
void
xi2mask_free(XI2Mask **mask)
{
- int i;
-
if (!(*mask))
return;
- for (i = 0; (*mask)->masks && i < (*mask)->nmasks; i++)
- free((*mask)->masks[i]);
- free((*mask)->masks);
free((*mask));
*mask = NULL;
}