xserver: Branch 'master' - 15 commits
Peter Hutterer
whot at kemper.freedesktop.org
Sun Mar 15 20:38:54 PDT 2009
Xi/exevents.c | 2 --
dix/devices.c | 39 ++++++++++++++++++++++-----------------
dix/events.c | 29 ++++++++++++++++++-----------
hw/xfree86/common/xf86Cursor.c | 2 --
mi/misprite.c | 12 ++++++------
render/animcur.c | 2 +-
xfixes/cursor.c | 10 +++++-----
xkb/xkb.c | 13 ++++---------
xkb/xkbActions.c | 6 +++---
xkb/xkbEvents.c | 9 ++++-----
10 files changed, 63 insertions(+), 61 deletions(-)
New commits:
commit be6dc9023b5fb3995a9ce56d607627e247918aef
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 16:29:36 2009 +1000
xfree86: remove a superfluous assignment.
If dev is NULL, we don't have a VCP and that means we have other issues
anyway.
diff --git a/hw/xfree86/common/xf86Cursor.c b/hw/xfree86/common/xf86Cursor.c
index 29b690a..6740faf 100644
--- a/hw/xfree86/common/xf86Cursor.c
+++ b/hw/xfree86/common/xf86Cursor.c
@@ -227,8 +227,6 @@ xf86SwitchMode(ScreenPtr pScreen, DisplayModePtr mode)
if (IsPointerDevice(dev) && dev->spriteInfo->spriteOwner)
break;
}
- if (!dev)
- dev = inputInfo.pointer;
pCursorScreen = miPointerGetScreen(dev);
if (pScreen == pCursorScreen)
commit bfab422dcdbb9c009b2a91fe0dba288fac9bc859
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 16:27:49 2009 +1000
xfixes: useless (void) typecast removal
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/xfixes/cursor.c b/xfixes/cursor.c
index 3f26988..99403e5 100644
--- a/xfixes/cursor.c
+++ b/xfixes/cursor.c
@@ -404,7 +404,7 @@ ProcXFixesGetCursorImage (ClientPtr client)
swapl (&rep->cursorSerial, n);
SwapLongs (image, npixels);
}
- (void) WriteToClient(client, sizeof (xXFixesGetCursorImageReply) +
+ WriteToClient(client, sizeof (xXFixesGetCursorImageReply) +
(npixels << 2), (char *) rep);
xfree (rep);
return client->noClientException;
@@ -482,7 +482,7 @@ ProcXFixesGetCursorName (ClientPtr client)
swaps (&reply.nbytes, n);
}
WriteReplyToClient(client, sizeof(xXFixesGetCursorNameReply), &reply);
- (void)WriteToClient(client, len, str);
+ WriteToClient(client, len, str);
return(client->noClientException);
}
@@ -564,7 +564,7 @@ ProcXFixesGetCursorImageAndName (ClientPtr client)
swaps (&rep->nbytes, n);
SwapLongs (image, npixels);
}
- (void) WriteToClient(client, sizeof (xXFixesGetCursorImageAndNameReply) +
+ WriteToClient(client, sizeof (xXFixesGetCursorImageAndNameReply) +
(npixels << 2) + nbytesRound, (char *) rep);
xfree (rep);
return client->noClientException;
@@ -893,7 +893,7 @@ ProcXFixesHideCursor (ClientPtr client)
ret = createCursorHideCount(client, pWin->drawable.pScreen);
if (ret == Success) {
- (void) CursorDisplayCursor(PickPointer(client), pWin->drawable.pScreen, CursorCurrent);
+ CursorDisplayCursor(PickPointer(client), pWin->drawable.pScreen, CursorCurrent);
}
return ret;
@@ -987,7 +987,7 @@ CursorFreeHideCount (pointer data, XID id)
ScreenPtr pScreen = pChc->pScreen;
deleteCursorHideCount(pChc, pChc->pScreen);
- (void) CursorDisplayCursor(inputInfo.pointer, pScreen, CursorCurrent);
+ CursorDisplayCursor(inputInfo.pointer, pScreen, CursorCurrent);
return 1;
}
commit 4eeaee1e5a05ea973cbeb653abf99f2a352edc70
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 16:25:12 2009 +1000
xkb: xkbi has a pointer to the device - use this instead of inputInfo.pointer.
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index f3fcef0..fe58a18 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -812,7 +812,7 @@ ProcessInputProc backupproc;
if ((filter->keycode!=0)&&(filter->keycode!=keycode))
return 1;
- GetSpritePosition(inputInfo.pointer, &x,&y);
+ GetSpritePosition(xkbi->device, &x,&y);
ev.header = ET_Internal;
ev.length = sizeof(DeviceEvent);
ev.time = GetTimeInMillis();
commit 3f801ba62ac493d4aeb664a5ae638e3fb0c9a262
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 16:23:50 2009 +1000
xkb: the VCP can post device events, don't stop xkb filtering on it.
diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
index 7d17ad4..f3fcef0 100644
--- a/xkb/xkbActions.c
+++ b/xkb/xkbActions.c
@@ -964,7 +964,7 @@ int button;
if (filter->keycode==0) { /* initial press */
_XkbLookupButtonDevice(&dev, pAction->devbtn.device, serverClient,
DixUnknownAccess, &button);
- if (!dev || !dev->public.on || dev == inputInfo.pointer)
+ if (!dev || !dev->public.on)
return 1;
button= pAction->devbtn.button;
@@ -1005,7 +1005,7 @@ int button;
filter->active= 0;
_XkbLookupButtonDevice(&dev, filter->upAction.devbtn.device,
serverClient, DixUnknownAccess, &button);
- if (!dev || !dev->public.on || dev == inputInfo.pointer)
+ if (!dev || !dev->public.on)
return 1;
button= filter->upAction.btn.button;
commit 23686e5680d565c36e0b6320ce62c38c7830d06b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 16:20:56 2009 +1000
xkb: Fix a mis-use of inputInfo.keyboard.
diff --git a/xkb/xkbEvents.c b/xkb/xkbEvents.c
index a2b99a2..9293c60 100644
--- a/xkb/xkbEvents.c
+++ b/xkb/xkbEvents.c
@@ -918,15 +918,14 @@ Bool
XkbFilterEvents(ClientPtr pClient,int nEvents,xEvent *xE)
{
int i, button_mask;
-DeviceIntPtr pXDev = inputInfo.keyboard;
+DeviceIntPtr pXDev = NULL;
XkbSrvInfoPtr xkbi;
if (xE->u.u.type & EXTENSION_EVENT_BASE)
- {
pXDev = XIGetDevice(xE);
- if (!pXDev)
- pXDev = inputInfo.keyboard;
- }
+
+ if (!pXDev)
+ pXDev = PickKeyboard(pClient);
xkbi= (pXDev->key) ? pXDev->key->xkbInfo : NULL;
commit c97c6c3de337f247406eaffd5845a847630ee6c1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 16:17:20 2009 +1000
xkb: fix a couple of device checks when looping through all devices.
Generally, we want to apply stuff to the device and to all attached slave
devices.
diff --git a/xkb/xkb.c b/xkb/xkb.c
index 7e756d1..ba1a4f6 100644
--- a/xkb/xkb.c
+++ b/xkb/xkb.c
@@ -604,8 +604,7 @@ ProcXkbLatchLockState(ClientPtr client)
status = Success;
for (tmpd = inputInfo.devices; tmpd; tmpd = tmpd->next) {
- if ((dev == inputInfo.keyboard && tmpd->key && tmpd->coreEvents) ||
- tmpd == dev) {
+ if ((tmpd == dev) || (!tmpd->isMaster && tmpd->u.master == dev)) {
if (!tmpd->key->xkbInfo)
continue;
@@ -744,10 +743,8 @@ ProcXkbSetControls(ClientPtr client)
CHK_KBD_DEVICE(dev, stuff->deviceSpec, client, DixManageAccess);
CHK_MASK_LEGAL(0x01, stuff->changeCtrls, XkbAllControlsMask);
- for (tmpd = inputInfo.keyboard; tmpd; tmpd = tmpd->next) {
- if ((dev == inputInfo.keyboard && tmpd->key && tmpd->coreEvents) ||
- tmpd == dev) {
-
+ for (tmpd = inputInfo.devices; tmpd; tmpd = tmpd->next) {
+ if ((tmpd == dev) || (!tmpd->isMaster && tmpd->u.master == dev)) {
xkbi = tmpd->key->xkbInfo;
ctrl = xkbi->desc->ctrls;
new = *ctrl;
@@ -5834,9 +5831,7 @@ ProcXkbGetKbdByName(ClientPtr client)
xkb->ctrls->num_groups= nTG;
for (tmpd = inputInfo.devices; tmpd; tmpd = tmpd->next) {
- if (tmpd == dev ||
- (dev->id == inputInfo.keyboard->id && tmpd->key &&
- tmpd->coreEvents)) {
+ if ((tmpd == dev) || (!tmpd->isMaster && tmpd->u.master == dev)) {
if (tmpd != dev)
XkbCopyDeviceKeymap(tmpd, dev);
commit d21a546e9604ce2d3c914900f6e6ff2df9f5ca8b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 16:02:22 2009 +1000
Xi: VCP and VCK may register for ext. events, so delete them if necessary.
diff --git a/Xi/exevents.c b/Xi/exevents.c
index 90005f4..670d509 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -1717,8 +1717,6 @@ DeleteWindowFromAnyExtEvents(WindowPtr pWin, Bool freeResources)
struct _OtherInputMasks *inputMasks;
for (dev = inputInfo.devices; dev; dev = dev->next) {
- if (dev == inputInfo.pointer || dev == inputInfo.keyboard)
- continue;
DeleteDeviceFromAnyExtEvents(pWin, dev);
}
commit 6ec49098f7ef259b43870139511006627b308bb6
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 15:57:27 2009 +1000
render: replace a wrong inputInfo.pointer with pDev
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/render/animcur.c b/render/animcur.c
index d80094d..e7bc4e5 100644
--- a/render/animcur.c
+++ b/render/animcur.c
@@ -157,7 +157,7 @@ AnimCurCursorLimits (DeviceIntPtr pDev,
}
else
{
- (*pScreen->CursorLimits) (inputInfo.pointer, pScreen, pCursor,
+ (*pScreen->CursorLimits) (pDev, pScreen, pCursor,
pHotBox, pTopLeftBox);
}
Wrap (as, pScreen, CursorLimits, AnimCurCursorLimits);
commit 0b2b330f6fbf8633ae682a17fbd95f6b5db2c112
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 15:54:27 2009 +1000
mi: remove a bunch of useless inputInfo.pointer assignments.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/mi/misprite.c b/mi/misprite.c
index f4b281a..1cf643a 100644
--- a/mi/misprite.c
+++ b/mi/misprite.c
@@ -327,7 +327,7 @@ miSpriteGetImage (DrawablePtr pDrawable, int sx, int sy, int w, int h,
{
ScreenPtr pScreen = pDrawable->pScreen;
miSpriteScreenPtr pScreenPriv;
- DeviceIntPtr pDev = inputInfo.pointer;
+ DeviceIntPtr pDev;
miCursorInfoPtr pCursorInfo;
SCREEN_PROLOGUE (pScreen, GetImage);
@@ -363,7 +363,7 @@ miSpriteGetSpans (DrawablePtr pDrawable, int wMax, DDXPointPtr ppt,
{
ScreenPtr pScreen = pDrawable->pScreen;
miSpriteScreenPtr pScreenPriv;
- DeviceIntPtr pDev = inputInfo.pointer;
+ DeviceIntPtr pDev;
miCursorInfoPtr pCursorInfo;
SCREEN_PROLOGUE (pScreen, GetSpans);
@@ -417,7 +417,7 @@ miSpriteSourceValidate (DrawablePtr pDrawable, int x, int y, int width,
{
ScreenPtr pScreen = pDrawable->pScreen;
miSpriteScreenPtr pScreenPriv;
- DeviceIntPtr pDev = inputInfo.pointer;
+ DeviceIntPtr pDev;
miCursorInfoPtr pCursorInfo;
SCREEN_PROLOGUE (pScreen, SourceValidate);
@@ -452,7 +452,7 @@ miSpriteCopyWindow (WindowPtr pWindow, DDXPointRec ptOldOrg, RegionPtr prgnSrc)
{
ScreenPtr pScreen = pWindow->drawable.pScreen;
miSpriteScreenPtr pScreenPriv;
- DeviceIntPtr pDev = inputInfo.pointer;
+ DeviceIntPtr pDev;
miCursorInfoPtr pCursorInfo;
SCREEN_PROLOGUE (pScreen, CopyWindow);
@@ -487,7 +487,7 @@ miSpriteBlockHandler (int i, pointer blockData, pointer pTimeout,
{
ScreenPtr pScreen = screenInfo.screens[i];
miSpriteScreenPtr pPriv;
- DeviceIntPtr pDev = inputInfo.pointer;
+ DeviceIntPtr pDev;
miCursorInfoPtr pCursorInfo;
pPriv = (miSpriteScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
@@ -570,7 +570,7 @@ miSpriteStoreColors (ColormapPtr pMap, int ndef, xColorItem *pdef)
int i;
int updated;
VisualPtr pVisual;
- DeviceIntPtr pDev = inputInfo.pointer;
+ DeviceIntPtr pDev;
miCursorInfoPtr pCursorInfo;
pPriv = (miSpriteScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
commit 31301861c1dd87a2f55c5c4300ac7c8f54154bf8
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 15:49:22 2009 +1000
dix: remove wrong InputInfo.pointer usage - should be pDev instead.
diff --git a/dix/events.c b/dix/events.c
index 11a8fa5..12a3122 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -5233,7 +5233,7 @@ CheckCursorConfinement(WindowPtr pWin)
if (grab && (confineTo = grab->confineTo))
{
if (!BorderSizeNotEmpty(pDev, confineTo))
- (*inputInfo.pointer->deviceGrab.DeactivateGrab)(pDev);
+ (*pDev->deviceGrab.DeactivateGrab)(pDev);
else if ((pWin == confineTo) || IsParent(pWin, confineTo))
ConfineCursorToWindow(pDev, confineTo, TRUE, TRUE);
}
commit 639658b2eab480a5bfb943dff51e4bdfc1e16e3b
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 15:34:29 2009 +1000
dix: use GetPairedDevice in ProcQueryPointer rather than inputInfo.keyboard.
diff --git a/dix/events.c b/dix/events.c
index 8b30706..11a8fa5 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4626,6 +4626,7 @@ ProcQueryPointer(ClientPtr client)
xQueryPointerReply rep;
WindowPtr pWin, t;
DeviceIntPtr mouse = PickPointer(client);
+ DeviceIntPtr keyboard;
SpritePtr pSprite;
int rc;
REQUEST(xResourceReq);
@@ -4638,6 +4639,8 @@ ProcQueryPointer(ClientPtr client)
if (rc != Success)
return rc;
+ keyboard = GetPairedDevice(mouse);
+
pSprite = mouse->spriteInfo->sprite;
if (mouse->valuator->motionHintWindow)
MaybeStopHint(mouse, client);
@@ -4645,7 +4648,7 @@ ProcQueryPointer(ClientPtr client)
rep.type = X_Reply;
rep.sequenceNumber = client->sequence;
rep.mask = mouse->button->state;
- rep.mask |= XkbStateFieldFromRec(&inputInfo.keyboard->key->xkbInfo->state);
+ rep.mask |= XkbStateFieldFromRec(&keyboard->key->xkbInfo->state);
rep.length = 0;
rep.root = (RootWindow(mouse))->drawable.id;
rep.rootX = pSprite->hot.x;
commit f01ee198ff0cbd7ca418217a84248d1c6131a0c6
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 15:22:23 2009 +1000
dix: don't use inputInfo.keyboard to get the focus window in ActivateKbdGrab
I'm not sure if that's the right solution, but the other one is wronger.
diff --git a/dix/events.c b/dix/events.c
index 14f5a99..8b30706 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1517,7 +1517,7 @@ ActivateKeyboardGrab(DeviceIntPtr keybd, GrabPtr grab, TimeStamp time, Bool pass
else
oldWin = keybd->spriteInfo->sprite->win;
if (oldWin == FollowKeyboardWin)
- oldWin = inputInfo.keyboard->focus->win;
+ oldWin = keybd->focus->win;
if (keybd->valuator)
keybd->valuator->motionHintWindow = NullWindow;
DoFocusEvents(keybd, oldWin, grab->window, NotifyGrab);
commit de415743f4c1878df2de79f84f5fe087a88d5241
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 15:19:23 2009 +1000
dix: fix XACE checks in ProcWarpPointer
diff --git a/dix/events.c b/dix/events.c
index d8d8ec5..14f5a99 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3044,22 +3044,22 @@ ProcWarpPointer(ClientPtr client)
WindowPtr dest = NULL;
int x, y, rc;
ScreenPtr newScreen;
- DeviceIntPtr dev;
+ DeviceIntPtr dev, tmp;
SpritePtr pSprite;
REQUEST(xWarpPointerReq);
REQUEST_SIZE_MATCH(xWarpPointerReq);
- /* XXX XACE ??*/
- for (dev = inputInfo.devices; dev; dev = dev->next) {
- if ((dev->coreEvents || dev == inputInfo.pointer) && dev->button) {
+ dev = PickPointer(client);
+
+ for (tmp = inputInfo.devices; tmp; tmp = tmp->next) {
+ if ((tmp == dev) || (!tmp->isMaster && tmp->u.master == dev)) {
rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixWriteAccess);
if (rc != Success)
return rc;
}
}
- dev = PickPointer(client);
if (dev->u.lastSlave)
dev = dev->u.lastSlave;
pSprite = dev->spriteInfo->sprite;
commit 18430616cfd5d0bc5a3efe61fcc2982b1726b0de
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 14:59:18 2009 +1000
dix: use PickPointer() and PickKeyboard instead of inputInfo.pointer/keyboard.
Affected calls:
ProcChangeKeyboardControl
ProcBell
ProcUngrabKey
ProcUngrabButton
diff --git a/dix/devices.c b/dix/devices.c
index 4406fcd..a79d04e 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1824,13 +1824,16 @@ DoChangeKeyboardControl (ClientPtr client, DeviceIntPtr keybd, XID *vlist,
#undef DO_ALL
}
+/**
+ * Changes kbd control on the ClientPointer and all attached SDs.
+ */
int
ProcChangeKeyboardControl (ClientPtr client)
{
XID *vlist;
BITS32 vmask;
int ret = Success, error = Success;
- DeviceIntPtr pDev = NULL;
+ DeviceIntPtr pDev = NULL, keyboard;
REQUEST(xChangeKeyboardControlReq);
REQUEST_AT_LEAST_SIZE(xChangeKeyboardControlReq);
@@ -1841,8 +1844,10 @@ ProcChangeKeyboardControl (ClientPtr client)
if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))
return BadLength;
+ keyboard = PickKeyboard(client);
+
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
- if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
+ if ((pDev == keyboard || (!pDev->isMaster && pDev->u.master == keyboard)) &&
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
ret = XaceHook(XACE_DEVICE_ACCESS, client, pDev, DixManageAccess);
if (ret != Success)
@@ -1851,7 +1856,7 @@ ProcChangeKeyboardControl (ClientPtr client)
}
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
- if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
+ if ((pDev == keyboard || (!pDev->isMaster && pDev->u.master == keyboard)) &&
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
ret = DoChangeKeyboardControl(client, pDev, vlist, vmask);
if (ret != Success)
@@ -1893,7 +1898,7 @@ ProcGetKeyboardControl (ClientPtr client)
int
ProcBell(ClientPtr client)
{
- DeviceIntPtr keybd = PickKeyboard(client);
+ DeviceIntPtr dev, keybd = PickKeyboard(client);
int base = keybd->kbdfeed->ctrl.bell;
int newpercent;
int rc;
@@ -1920,14 +1925,14 @@ ProcBell(ClientPtr client)
newpercent = base - newpercent + stuff->percent;
for (keybd = inputInfo.devices; keybd; keybd = keybd->next) {
- if ((keybd->coreEvents || keybd == inputInfo.keyboard) &&
+ if ((dev == keybd || (!dev->isMaster && dev->u.master == keybd)) &&
keybd->kbdfeed && keybd->kbdfeed->BellProc) {
- rc = XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixBellAccess);
+ rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixBellAccess);
if (rc != Success)
return rc;
XkbHandleBell(FALSE, FALSE, keybd, newpercent,
- &keybd->kbdfeed->ctrl, 0, None, NULL, client);
+ &dev->kbdfeed->ctrl, 0, None, NULL, client);
}
}
diff --git a/dix/events.c b/dix/events.c
index 68826c2..d8d8ec5 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4880,7 +4880,7 @@ ProcUngrabKey(ClientPtr client)
tempGrab.window = pWin;
tempGrab.modifiersDetail.exact = stuff->modifiers;
tempGrab.modifiersDetail.pMask = NULL;
- tempGrab.modifierDevice = inputInfo.keyboard;
+ tempGrab.modifierDevice = GetPairedDevice(keybd);
tempGrab.type = KeyPress;
tempGrab.detail.exact = stuff->key;
tempGrab.detail.pMask = NULL;
@@ -5055,6 +5055,7 @@ ProcUngrabButton(ClientPtr client)
WindowPtr pWin;
GrabRec tempGrab;
int rc;
+ DeviceIntPtr ptr;
REQUEST_SIZE_MATCH(xUngrabButtonReq);
if ((stuff->modifiers != AnyModifier) &&
@@ -5066,12 +5067,15 @@ ProcUngrabButton(ClientPtr client)
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
if (rc != Success)
return rc;
+
+ ptr = PickPointer(client);
+
tempGrab.resource = client->clientAsMask;
- tempGrab.device = PickPointer(client);
+ tempGrab.device = ptr;
tempGrab.window = pWin;
tempGrab.modifiersDetail.exact = stuff->modifiers;
tempGrab.modifiersDetail.pMask = NULL;
- tempGrab.modifierDevice = inputInfo.keyboard;
+ tempGrab.modifierDevice = GetPairedDevice(ptr);
tempGrab.type = ButtonPress;
tempGrab.detail.exact = stuff->button;
tempGrab.detail.pMask = NULL;
commit e31727158cda7729283233cfdc9bc5bcb59a52c1
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date: Fri Mar 13 14:51:55 2009 +1000
dix: fix ProcChangePointerControl's wrong inputInfo.pointer usage.
Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
diff --git a/dix/devices.c b/dix/devices.c
index f89e8e7..4406fcd 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1937,7 +1937,7 @@ ProcBell(ClientPtr client)
int
ProcChangePointerControl(ClientPtr client)
{
- DeviceIntPtr mouse = PickPointer(client);
+ DeviceIntPtr dev, mouse = PickPointer(client);
PtrCtrl ctrl; /* might get BadValue part way through */
int rc;
REQUEST(xChangePointerControlReq);
@@ -1991,20 +1991,20 @@ ProcChangePointerControl(ClientPtr client)
}
}
- for (mouse = inputInfo.devices; mouse; mouse = mouse->next) {
- if ((mouse->coreEvents || mouse == inputInfo.pointer) &&
- mouse->ptrfeed && mouse->ptrfeed->CtrlProc) {
- rc = XaceHook(XACE_DEVICE_ACCESS, client, mouse, DixManageAccess);
+ for (dev = inputInfo.devices; dev; dev = dev->next) {
+ if ((dev == mouse || (!dev->isMaster && dev->u.master == mouse)) &&
+ dev->ptrfeed && dev->ptrfeed->CtrlProc) {
+ rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixManageAccess);
if (rc != Success)
return rc;
}
}
- for (mouse = inputInfo.devices; mouse; mouse = mouse->next) {
- if ((mouse->coreEvents || mouse == PickPointer(client)) &&
- mouse->ptrfeed && mouse->ptrfeed->CtrlProc) {
- mouse->ptrfeed->ctrl = ctrl;
- (*mouse->ptrfeed->CtrlProc)(mouse, &mouse->ptrfeed->ctrl);
+ for (dev = inputInfo.devices; dev; dev = dev->next) {
+ if ((dev == mouse || (!dev->isMaster && dev->u.master == mouse)) &&
+ dev->ptrfeed && dev->ptrfeed->CtrlProc) {
+ dev->ptrfeed->ctrl = ctrl;
+ (*dev->ptrfeed->CtrlProc)(dev, &mouse->ptrfeed->ctrl);
}
}
More information about the xorg-commit
mailing list