input: add support for XIAnyModifier in passive XI2 grabs.
This commit is contained in:
parent
80ea32ad4f
commit
ff1d6244eb
|
@ -1406,10 +1406,13 @@ CheckGrabValues(ClientPtr client, GrabParameters* param)
|
||||||
client->errorValue = param->other_devices_mode;
|
client->errorValue = param->other_devices_mode;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
if ((param->modifiers != AnyModifier) && (param->modifiers & ~AllModifiersMask)) {
|
|
||||||
|
if (param->grabtype != GRABTYPE_XI2 && (param->modifiers != AnyModifier) &&
|
||||||
|
(param->modifiers & ~AllModifiersMask)) {
|
||||||
client->errorValue = param->modifiers;
|
client->errorValue = param->modifiers;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((param->ownerEvents != xFalse) && (param->ownerEvents != xTrue)) {
|
if ((param->ownerEvents != xFalse) && (param->ownerEvents != xTrue)) {
|
||||||
client->errorValue = param->ownerEvents;
|
client->errorValue = param->ownerEvents;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
|
|
44
dix/grabs.c
44
dix/grabs.c
|
@ -229,9 +229,12 @@ DetailSupersedesSecond(
|
||||||
static Bool
|
static Bool
|
||||||
GrabSupersedesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
|
GrabSupersedesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
|
||||||
{
|
{
|
||||||
|
unsigned int any_modifier = (pFirstGrab->grabtype == GRABTYPE_XI2) ?
|
||||||
|
(unsigned int)XIAnyModifier :
|
||||||
|
(unsigned int)AnyModifier;
|
||||||
if (!DetailSupersedesSecond(pFirstGrab->modifiersDetail,
|
if (!DetailSupersedesSecond(pFirstGrab->modifiersDetail,
|
||||||
pSecondGrab->modifiersDetail,
|
pSecondGrab->modifiersDetail,
|
||||||
(unsigned int)AnyModifier))
|
any_modifier))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (DetailSupersedesSecond(pFirstGrab->detail,
|
if (DetailSupersedesSecond(pFirstGrab->detail,
|
||||||
|
@ -257,6 +260,9 @@ GrabSupersedesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
|
||||||
Bool
|
Bool
|
||||||
GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice)
|
GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice)
|
||||||
{
|
{
|
||||||
|
unsigned int any_modifier = (pFirstGrab->grabtype == GRABTYPE_XI2) ?
|
||||||
|
(unsigned int)XIAnyModifier :
|
||||||
|
(unsigned int)AnyModifier;
|
||||||
|
|
||||||
if (pFirstGrab->grabtype != pSecondGrab->grabtype)
|
if (pFirstGrab->grabtype != pSecondGrab->grabtype)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -278,7 +284,7 @@ GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice)
|
||||||
&&
|
&&
|
||||||
DetailSupersedesSecond(pFirstGrab->modifiersDetail,
|
DetailSupersedesSecond(pFirstGrab->modifiersDetail,
|
||||||
pSecondGrab->modifiersDetail,
|
pSecondGrab->modifiersDetail,
|
||||||
(unsigned int)AnyModifier))
|
any_modifier))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
if (DetailSupersedesSecond(pFirstGrab->detail, pSecondGrab->detail,
|
if (DetailSupersedesSecond(pFirstGrab->detail, pSecondGrab->detail,
|
||||||
|
@ -286,7 +292,7 @@ GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice)
|
||||||
&&
|
&&
|
||||||
DetailSupersedesSecond(pSecondGrab->modifiersDetail,
|
DetailSupersedesSecond(pSecondGrab->modifiersDetail,
|
||||||
pFirstGrab->modifiersDetail,
|
pFirstGrab->modifiersDetail,
|
||||||
(unsigned int)AnyModifier))
|
any_modifier))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -295,6 +301,10 @@ GrabMatchesSecond(GrabPtr pFirstGrab, GrabPtr pSecondGrab, Bool ignoreDevice)
|
||||||
static Bool
|
static Bool
|
||||||
GrabsAreIdentical(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
|
GrabsAreIdentical(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
|
||||||
{
|
{
|
||||||
|
unsigned int any_modifier = (pFirstGrab->grabtype == GRABTYPE_XI2) ?
|
||||||
|
(unsigned int)XIAnyModifier :
|
||||||
|
(unsigned int)AnyModifier;
|
||||||
|
|
||||||
if (pFirstGrab->grabtype != pSecondGrab->grabtype)
|
if (pFirstGrab->grabtype != pSecondGrab->grabtype)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
@ -311,12 +321,13 @@ GrabsAreIdentical(GrabPtr pFirstGrab, GrabPtr pSecondGrab)
|
||||||
(unsigned int)AnyKey)))
|
(unsigned int)AnyKey)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
|
||||||
if (!(DetailSupersedesSecond(pFirstGrab->modifiersDetail,
|
if (!(DetailSupersedesSecond(pFirstGrab->modifiersDetail,
|
||||||
pSecondGrab->modifiersDetail,
|
pSecondGrab->modifiersDetail,
|
||||||
(unsigned int)AnyModifier) &&
|
any_modifier) &&
|
||||||
DetailSupersedesSecond(pSecondGrab->modifiersDetail,
|
DetailSupersedesSecond(pSecondGrab->modifiersDetail,
|
||||||
pFirstGrab->modifiersDetail,
|
pFirstGrab->modifiersDetail,
|
||||||
(unsigned int)AnyModifier)))
|
any_modifier)))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -391,6 +402,8 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
|
||||||
Mask ***updates, **details;
|
Mask ***updates, **details;
|
||||||
int i, ndels, nadds, nups;
|
int i, ndels, nadds, nups;
|
||||||
Bool ok;
|
Bool ok;
|
||||||
|
unsigned int any_modifier;
|
||||||
|
unsigned int any_key;
|
||||||
|
|
||||||
#define UPDATE(mask,exact) \
|
#define UPDATE(mask,exact) \
|
||||||
if (!(details[nups] = DeleteDetailFromMask(mask, exact))) \
|
if (!(details[nups] = DeleteDetailFromMask(mask, exact))) \
|
||||||
|
@ -415,6 +428,11 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
|
||||||
if (deletes) xfree(deletes);
|
if (deletes) xfree(deletes);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
any_modifier = (pMinuendGrab->grabtype == GRABTYPE_XI2) ?
|
||||||
|
(unsigned int)XIAnyModifier : (unsigned int)AnyModifier;
|
||||||
|
any_key = (pMinuendGrab->grabtype == GRABTYPE_XI2) ?
|
||||||
|
(unsigned int)XIAnyKeysym : (unsigned int)AnyKey;
|
||||||
ndels = nadds = nups = 0;
|
ndels = nadds = nups = 0;
|
||||||
ok = TRUE;
|
ok = TRUE;
|
||||||
for (grab = wPassiveGrabs(pMinuendGrab->window);
|
for (grab = wPassiveGrabs(pMinuendGrab->window);
|
||||||
|
@ -429,19 +447,19 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
|
||||||
{
|
{
|
||||||
deletes[ndels++] = grab;
|
deletes[ndels++] = grab;
|
||||||
}
|
}
|
||||||
else if ((grab->detail.exact == AnyKey)
|
else if ((grab->detail.exact == any_key)
|
||||||
&& (grab->modifiersDetail.exact != AnyModifier))
|
&& (grab->modifiersDetail.exact != any_modifier))
|
||||||
{
|
{
|
||||||
UPDATE(grab->detail.pMask, pMinuendGrab->detail.exact);
|
UPDATE(grab->detail.pMask, pMinuendGrab->detail.exact);
|
||||||
}
|
}
|
||||||
else if ((grab->modifiersDetail.exact == AnyModifier)
|
else if ((grab->modifiersDetail.exact == any_modifier)
|
||||||
&& (grab->detail.exact != AnyKey))
|
&& (grab->detail.exact != any_key))
|
||||||
{
|
{
|
||||||
UPDATE(grab->modifiersDetail.pMask,
|
UPDATE(grab->modifiersDetail.pMask,
|
||||||
pMinuendGrab->modifiersDetail.exact);
|
pMinuendGrab->modifiersDetail.exact);
|
||||||
}
|
}
|
||||||
else if ((pMinuendGrab->detail.exact != AnyKey)
|
else if ((pMinuendGrab->detail.exact != any_key)
|
||||||
&& (pMinuendGrab->modifiersDetail.exact != AnyModifier))
|
&& (pMinuendGrab->modifiersDetail.exact != any_modifier))
|
||||||
{
|
{
|
||||||
GrabPtr pNewGrab;
|
GrabPtr pNewGrab;
|
||||||
GrabParameters param;
|
GrabParameters param;
|
||||||
|
@ -452,7 +470,7 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
|
||||||
param.ownerEvents = grab->ownerEvents;
|
param.ownerEvents = grab->ownerEvents;
|
||||||
param.this_device_mode = grab->keyboardMode;
|
param.this_device_mode = grab->keyboardMode;
|
||||||
param.other_devices_mode = grab->pointerMode;
|
param.other_devices_mode = grab->pointerMode;
|
||||||
param.modifiers = AnyModifier;
|
param.modifiers = any_modifier;
|
||||||
|
|
||||||
pNewGrab = CreateGrab(CLIENT_ID(grab->resource), grab->device,
|
pNewGrab = CreateGrab(CLIENT_ID(grab->resource), grab->device,
|
||||||
grab->modifierDevice, grab->window,
|
grab->modifierDevice, grab->window,
|
||||||
|
@ -479,7 +497,7 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
|
||||||
else
|
else
|
||||||
adds[nadds++] = pNewGrab;
|
adds[nadds++] = pNewGrab;
|
||||||
}
|
}
|
||||||
else if (pMinuendGrab->detail.exact == AnyKey)
|
else if (pMinuendGrab->detail.exact == any_key)
|
||||||
{
|
{
|
||||||
UPDATE(grab->modifiersDetail.pMask,
|
UPDATE(grab->modifiersDetail.pMask,
|
||||||
pMinuendGrab->modifiersDetail.exact);
|
pMinuendGrab->modifiersDetail.exact);
|
||||||
|
|
Loading…
Reference in New Issue