diff options
author | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-03-26 14:23:28 +0200 |
commit | 76bcc36ed305418a3ddc5752d287ede894243e1b (patch) | |
tree | bacb320c825768471ce56f058f17ce863d592376 /xorg-server/Xi/xiselectev.c | |
parent | 7d894e32566b710952c44cbc71939ad1d9e2fa8d (diff) | |
parent | 0f834b91a4768673833ab4917e87d86c237bb1a6 (diff) | |
download | vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.gz vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.tar.bz2 vcxsrv-76bcc36ed305418a3ddc5752d287ede894243e1b.zip |
Merge remote-tracking branch 'origin/released'
Conflicts:
pixman/pixman/pixman-mmx.c
xorg-server/Xext/shm.c
xorg-server/Xext/syncsrv.h
xorg-server/Xext/xvmain.c
xorg-server/Xi/exevents.c
xorg-server/Xi/opendev.c
xorg-server/composite/compalloc.c
xorg-server/composite/compoverlay.c
xorg-server/dix/colormap.c
xorg-server/dix/devices.c
xorg-server/dix/dispatch.c
xorg-server/dix/dixfonts.c
xorg-server/dix/eventconvert.c
xorg-server/dix/events.c
xorg-server/dix/gc.c
xorg-server/dix/getevents.c
xorg-server/dix/main.c
xorg-server/dix/privates.c
xorg-server/dix/registry.c
xorg-server/dix/resource.c
xorg-server/exa/exa_accel.c
xorg-server/exa/exa_migration_classic.c
xorg-server/exa/exa_unaccel.c
xorg-server/fb/fb.h
xorg-server/fb/fbcopy.c
xorg-server/fb/fbpixmap.c
xorg-server/glx/dispatch.h
xorg-server/glx/glapi.h
xorg-server/glx/glapi_gentable.c
xorg-server/glx/glapitable.h
xorg-server/glx/glprocs.h
xorg-server/glx/glxcmds.c
xorg-server/glx/glxcmdsswap.c
xorg-server/glx/glxdricommon.c
xorg-server/glx/glxdriswrast.c
xorg-server/glx/glxext.c
xorg-server/glx/indirect_dispatch.c
xorg-server/glx/indirect_dispatch.h
xorg-server/glx/indirect_dispatch_swap.c
xorg-server/glx/indirect_size.h
xorg-server/glx/indirect_size_get.h
xorg-server/glx/indirect_table.c
xorg-server/glx/indirect_util.c
xorg-server/glx/rensize.c
xorg-server/glx/single2swap.c
xorg-server/glx/singlepix.c
xorg-server/glx/singlepixswap.c
xorg-server/glx/singlesize.c
xorg-server/hw/dmx/dmxinit.c
xorg-server/hw/kdrive/ephyr/ephyr.c
xorg-server/hw/kdrive/ephyr/hostx.c
xorg-server/hw/kdrive/ephyr/hostx.h
xorg-server/hw/kdrive/src/kinput.c
xorg-server/hw/xfree86/common/compiler.h
xorg-server/hw/xwin/InitInput.c
xorg-server/hw/xwin/InitOutput.c
xorg-server/hw/xwin/ddraw.h
xorg-server/hw/xwin/glx/glwrap.c
xorg-server/hw/xwin/glx/indirect.c
xorg-server/hw/xwin/glx/wgl_ext_api.h
xorg-server/hw/xwin/glx/winpriv.c
xorg-server/hw/xwin/win.h
xorg-server/hw/xwin/winallpriv.c
xorg-server/hw/xwin/winauth.c
xorg-server/hw/xwin/winclipboard.h
xorg-server/hw/xwin/winclipboardinit.c
xorg-server/hw/xwin/winclipboardthread.c
xorg-server/hw/xwin/winclipboardunicode.c
xorg-server/hw/xwin/winclipboardwndproc.c
xorg-server/hw/xwin/winclipboardwrappers.c
xorg-server/hw/xwin/winclipboardxevents.c
xorg-server/hw/xwin/wincmap.c
xorg-server/hw/xwin/winconfig.c
xorg-server/hw/xwin/wincreatewnd.c
xorg-server/hw/xwin/wincursor.c
xorg-server/hw/xwin/windialogs.c
xorg-server/hw/xwin/winengine.c
xorg-server/hw/xwin/winerror.c
xorg-server/hw/xwin/wingc.c
xorg-server/hw/xwin/wingetsp.c
xorg-server/hw/xwin/winkeybd.c
xorg-server/hw/xwin/winkeybd.h
xorg-server/hw/xwin/winlayouts.h
xorg-server/hw/xwin/winmisc.c
xorg-server/hw/xwin/winmonitors.c
xorg-server/hw/xwin/winmouse.c
xorg-server/hw/xwin/winmsg.c
xorg-server/hw/xwin/winmsg.h
xorg-server/hw/xwin/winmultiwindowclass.c
xorg-server/hw/xwin/winmultiwindowicons.c
xorg-server/hw/xwin/winmultiwindowshape.c
xorg-server/hw/xwin/winmultiwindowwindow.c
xorg-server/hw/xwin/winmultiwindowwm.c
xorg-server/hw/xwin/winmultiwindowwndproc.c
xorg-server/hw/xwin/winnativegdi.c
xorg-server/hw/xwin/winpfbdd.c
xorg-server/hw/xwin/winpixmap.c
xorg-server/hw/xwin/winpolyline.c
xorg-server/hw/xwin/winprefs.c
xorg-server/hw/xwin/winprocarg.c
xorg-server/hw/xwin/winregistry.c
xorg-server/hw/xwin/winscrinit.c
xorg-server/hw/xwin/winsetsp.c
xorg-server/hw/xwin/winshaddd.c
xorg-server/hw/xwin/winshadddnl.c
xorg-server/hw/xwin/winshadgdi.c
xorg-server/hw/xwin/wintrayicon.c
xorg-server/hw/xwin/winwin32rootless.c
xorg-server/hw/xwin/winwin32rootlesswindow.c
xorg-server/hw/xwin/winwin32rootlesswndproc.c
xorg-server/hw/xwin/winwindow.c
xorg-server/hw/xwin/winwindow.h
xorg-server/hw/xwin/winwindowswm.c
xorg-server/hw/xwin/winwndproc.c
xorg-server/include/callback.h
xorg-server/include/dixstruct.h
xorg-server/include/misc.h
xorg-server/include/os.h
xorg-server/include/scrnintstr.h
xorg-server/mi/micmap.c
xorg-server/mi/miinitext.c
xorg-server/mi/mioverlay.c
xorg-server/mi/misprite.c
xorg-server/mi/mivaltree.c
xorg-server/mi/miwindow.c
xorg-server/miext/damage/damage.c
xorg-server/miext/rootless/rootlessGC.c
xorg-server/miext/rootless/rootlessWindow.c
xorg-server/os/WaitFor.c
xorg-server/os/access.c
xorg-server/os/connection.c
xorg-server/os/io.c
xorg-server/os/log.c
xorg-server/os/osinit.c
xorg-server/os/utils.c
xorg-server/os/xdmcp.c
xorg-server/os/xprintf.c
xorg-server/os/xstrans.c
xorg-server/render/mipict.c
xorg-server/xkb/xkbActions.c
xorg-server/xkb/xkbInit.c
xorg-server/xkeyboard-config/compat/default.in
Diffstat (limited to 'xorg-server/Xi/xiselectev.c')
-rw-r--r-- | xorg-server/Xi/xiselectev.c | 140 |
1 files changed, 64 insertions, 76 deletions
diff --git a/xorg-server/Xi/xiselectev.c b/xorg-server/Xi/xiselectev.c index 1b6c47a87..43a67c833 100644 --- a/xorg-server/Xi/xiselectev.c +++ b/xorg-server/Xi/xiselectev.c @@ -27,7 +27,6 @@ #include <dix-config.h> #endif - #include "dixstruct.h" #include "windowstr.h" #include "exglobals.h" @@ -43,15 +42,14 @@ * * @return BadValue if at least one invalid bit is set or Success otherwise. */ -int XICheckInvalidMaskBits(ClientPtr client, unsigned char *mask, int len) +int +XICheckInvalidMaskBits(ClientPtr client, unsigned char *mask, int len) { - if (len >= XIMaskLen(XI2LASTEVENT)) - { + if (len >= XIMaskLen(XI2LASTEVENT)) { int i; - for (i = XI2LASTEVENT + 1; i < len * 8; i++) - { - if (BitIsOn(mask, i)) - { + + for (i = XI2LASTEVENT + 1; i < len * 8; i++) { + if (BitIsOn(mask, i)) { client->errorValue = i; return BadValue; } @@ -65,7 +63,7 @@ int SProcXISelectEvents(ClientPtr client) { int i; - xXIEventMask* evmask; + xXIEventMask *evmask; REQUEST(xXISelectEventsReq); swaps(&stuff->length); @@ -73,12 +71,12 @@ SProcXISelectEvents(ClientPtr client) swapl(&stuff->win); swaps(&stuff->num_masks); - evmask = (xXIEventMask*)&stuff[1]; - for (i = 0; i < stuff->num_masks; i++) - { + evmask = (xXIEventMask *) &stuff[1]; + for (i = 0; i < stuff->num_masks; i++) { swaps(&evmask->deviceid); swaps(&evmask->mask_len); - evmask = (xXIEventMask*)(((char*)&evmask[1]) + evmask->mask_len * 4); + evmask = + (xXIEventMask *) (((char *) &evmask[1]) + evmask->mask_len * 4); } return (ProcXISelectEvents(client)); @@ -108,10 +106,9 @@ ProcXISelectEvents(ClientPtr client) len = sz_xXISelectEventsReq; /* check request validity */ - evmask = (xXIEventMask*)&stuff[1]; + evmask = (xXIEventMask *) &stuff[1]; num_masks = stuff->num_masks; - while(num_masks--) - { + while (num_masks--) { len += sizeof(xXIEventMask) + evmask->mask_len * 4; if (bytes_to_int32(len) > stuff->length) @@ -127,20 +124,19 @@ ProcXISelectEvents(ClientPtr client) return rc; /* hierarchy event mask is not allowed on devices */ - if (evmask->deviceid != XIAllDevices && evmask->mask_len >= 1) - { - unsigned char *bits = (unsigned char*)&evmask[1]; - if (BitIsOn(bits, XI_HierarchyChanged)) - { + if (evmask->deviceid != XIAllDevices && evmask->mask_len >= 1) { + unsigned char *bits = (unsigned char *) &evmask[1]; + + if (BitIsOn(bits, XI_HierarchyChanged)) { client->errorValue = XI_HierarchyChanged; return BadValue; } } /* Raw events may only be selected on root windows */ - if (win->parent && evmask->mask_len >= 1) - { - unsigned char *bits = (unsigned char*)&evmask[1]; + if (win->parent && evmask->mask_len >= 1) { + unsigned char *bits = (unsigned char *) &evmask[1]; + if (BitIsOn(bits, XI_RawKeyPress) || BitIsOn(bits, XI_RawKeyRelease) || BitIsOn(bits, XI_RawButtonPress) || @@ -148,16 +144,14 @@ ProcXISelectEvents(ClientPtr client) BitIsOn(bits, XI_RawMotion) || BitIsOn(bits, XI_RawTouchBegin) || BitIsOn(bits, XI_RawTouchUpdate) || - BitIsOn(bits, XI_RawTouchEnd)) - { + BitIsOn(bits, XI_RawTouchEnd)) { client->errorValue = XI_RawKeyPress; return BadValue; } } - if (evmask->mask_len >= 1) - { - unsigned char *bits = (unsigned char*)&evmask[1]; + if (evmask->mask_len >= 1) { + unsigned char *bits = (unsigned char *) &evmask[1]; /* All three touch events must be selected at once */ if ((BitIsOn(bits, XI_TouchBegin) || @@ -166,8 +160,7 @@ ProcXISelectEvents(ClientPtr client) BitIsOn(bits, XI_TouchEnd)) && (!BitIsOn(bits, XI_TouchBegin) || !BitIsOn(bits, XI_TouchUpdate) || - !BitIsOn(bits, XI_TouchEnd))) - { + !BitIsOn(bits, XI_TouchEnd))) { client->errorValue = XI_TouchBegin; return BadValue; } @@ -175,22 +168,22 @@ ProcXISelectEvents(ClientPtr client) /* Only one client per window may select for touch events on the * same devices, including master devices. * XXX: This breaks if a device goes from floating to attached. */ - if (BitIsOn(bits, XI_TouchBegin)) - { + if (BitIsOn(bits, XI_TouchBegin)) { OtherInputMasks *inputMasks = wOtherInputMasks(win); InputClients *iclient = NULL; + if (inputMasks) iclient = inputMasks->inputClients; - for (; iclient; iclient = iclient->next) - { + for (; iclient; iclient = iclient->next) { DeviceIntPtr dummy; if (CLIENT_ID(iclient->resource) == client->index) continue; - dixLookupDevice(&dummy, evmask->deviceid, serverClient, DixReadAccess); + dixLookupDevice(&dummy, evmask->deviceid, serverClient, + DixReadAccess); if (!dummy) - return BadImplementation; /* this shouldn't happen */ + return BadImplementation; /* this shouldn't happen */ if (xi2mask_isset(iclient->xi2mask, dummy, XI_TouchBegin)) return BadAccess; @@ -198,11 +191,13 @@ ProcXISelectEvents(ClientPtr client) } } - if (XICheckInvalidMaskBits(client, (unsigned char*)&evmask[1], + if (XICheckInvalidMaskBits(client, (unsigned char *) &evmask[1], evmask->mask_len * 4) != Success) return BadValue; - evmask = (xXIEventMask*)(((unsigned char*)evmask) + evmask->mask_len * 4); + evmask = + (xXIEventMask *) (((unsigned char *) evmask) + + evmask->mask_len * 4); evmask++; } @@ -210,21 +205,22 @@ ProcXISelectEvents(ClientPtr client) return BadLength; /* Set masks on window */ - evmask = (xXIEventMask*)&stuff[1]; + evmask = (xXIEventMask *) &stuff[1]; num_masks = stuff->num_masks; - while(num_masks--) - { + while (num_masks--) { if (evmask->deviceid == XIAllDevices || - evmask->deviceid == XIAllMasterDevices) - { + evmask->deviceid == XIAllMasterDevices) { dummy.id = evmask->deviceid; dev = &dummy; - } else + } + else dixLookupDevice(&dev, evmask->deviceid, client, DixUseAccess); if (XISetEventMask(dev, win, client, evmask->mask_len * 4, - (unsigned char*)&evmask[1]) != Success) + (unsigned char *) &evmask[1]) != Success) return BadAlloc; - evmask = (xXIEventMask*)(((unsigned char*)evmask) + evmask->mask_len * 4); + evmask = + (xXIEventMask *) (((unsigned char *) evmask) + + evmask->mask_len * 4); evmask++; } @@ -234,7 +230,6 @@ ProcXISelectEvents(ClientPtr client) return Success; } - int SProcXIGetSelectedEvents(ClientPtr client) { @@ -272,59 +267,53 @@ ProcXIGetSelectedEvents(ClientPtr client) reply.num_masks = 0; masks = wOtherInputMasks(win); - if (masks) - { - for (others = wOtherInputMasks(win)->inputClients; others; - others = others->next) { - if (SameClient(others, client)) { + if (masks) { + for (others = wOtherInputMasks(win)->inputClients; others; + others = others->next) { + if (SameClient(others, client)) { break; } } } - if (!others) - { + if (!others) { WriteReplyToClient(client, sizeof(xXIGetSelectedEventsReply), &reply); return Success; } - buffer = calloc(MAXDEVICES, sizeof(xXIEventMask) + pad_to_int32(XI2MASKSIZE)); + buffer = + calloc(MAXDEVICES, sizeof(xXIEventMask) + pad_to_int32(XI2MASKSIZE)); if (!buffer) return BadAlloc; - evmask = (xXIEventMask*)buffer; - for (i = 0; i < MAXDEVICES; i++) - { + evmask = (xXIEventMask *) buffer; + for (i = 0; i < MAXDEVICES; i++) { int j; const unsigned char *devmask = xi2mask_get_one_mask(others->xi2mask, i); - if (i > 2) - { + if (i > 2) { rc = dixLookupDevice(&dev, i, client, DixGetAttrAccess); if (rc != Success) continue; } + for (j = xi2mask_mask_size(others->xi2mask) - 1; j >= 0; j--) { + if (devmask[j] != 0) { + int mask_len = (j + 4) / 4; /* j is an index, hence + 4, not + 3 */ - for (j = xi2mask_mask_size(others->xi2mask) - 1; j >= 0; j--) - { - if (devmask[j] != 0) - { - int mask_len = (j + 4)/4; /* j is an index, hence + 4, not + 3 */ evmask->deviceid = i; evmask->mask_len = mask_len; reply.num_masks++; - reply.length += sizeof(xXIEventMask)/4 + evmask->mask_len; + reply.length += sizeof(xXIEventMask) / 4 + evmask->mask_len; - if (client->swapped) - { + if (client->swapped) { swaps(&evmask->deviceid); swaps(&evmask->mask_len); } memcpy(&evmask[1], devmask, j + 1); - evmask = (xXIEventMask*)((char*)evmask + - sizeof(xXIEventMask) + mask_len * 4); + evmask = (xXIEventMask *) ((char *) evmask + + sizeof(xXIEventMask) + mask_len * 4); break; } } @@ -339,13 +328,12 @@ ProcXIGetSelectedEvents(ClientPtr client) return Success; } -void SRepXIGetSelectedEvents(ClientPtr client, - int len, xXIGetSelectedEventsReply *rep) +void +SRepXIGetSelectedEvents(ClientPtr client, + int len, xXIGetSelectedEventsReply * rep) { swaps(&rep->sequenceNumber); swapl(&rep->length); swaps(&rep->num_masks); - WriteToClient(client, len, (char *)rep); + WriteToClient(client, len, (char *) rep); } - - |