input: reshuffle CreateGrab and friends to take a GrabParameters param.
This is cleaning up work in preparation for XI2 passive grabs.
This commit is contained in:
parent
e8e26f700c
commit
6a618929a0
|
@ -1349,36 +1349,34 @@ DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int
|
||||||
CheckGrabValues(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
CheckGrabValues(ClientPtr client, GrabParameters* param)
|
||||||
BYTE other_devices_mode, CARD16 modifiers, BOOL ownerEvents)
|
|
||||||
{
|
{
|
||||||
if ((this_device_mode != GrabModeSync) &&
|
if ((param->this_device_mode != GrabModeSync) &&
|
||||||
(this_device_mode != GrabModeAsync)) {
|
(param->this_device_mode != GrabModeAsync)) {
|
||||||
client->errorValue = this_device_mode;
|
client->errorValue = param->this_device_mode;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
if ((other_devices_mode != GrabModeSync) &&
|
if ((param->other_devices_mode != GrabModeSync) &&
|
||||||
(other_devices_mode != GrabModeAsync)) {
|
(param->other_devices_mode != GrabModeAsync)) {
|
||||||
client->errorValue = other_devices_mode;
|
client->errorValue = param->other_devices_mode;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
if ((modifiers != AnyModifier) && (modifiers & ~AllModifiersMask)) {
|
if ((param->modifiers != AnyModifier) && (param->modifiers & ~AllModifiersMask)) {
|
||||||
client->errorValue = modifiers;
|
client->errorValue = param->modifiers;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
if ((ownerEvents != xFalse) && (ownerEvents != xTrue)) {
|
if ((param->ownerEvents != xFalse) && (param->ownerEvents != xTrue)) {
|
||||||
client->errorValue = ownerEvents;
|
client->errorValue = param->ownerEvents;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
return Success;
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
GrabButton(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
|
||||||
BYTE other_devices_mode, CARD16 modifiers,
|
int button, GrabParameters *param, GrabType grabtype,
|
||||||
DeviceIntPtr modifier_device, CARD8 button, Window grabWindow,
|
GrabMask *mask)
|
||||||
BOOL ownerEvents, Cursor rcursor, Window rconfineTo, Mask eventMask)
|
|
||||||
{
|
{
|
||||||
WindowPtr pWin, confineTo;
|
WindowPtr pWin, confineTo;
|
||||||
CursorPtr cursor;
|
CursorPtr cursor;
|
||||||
|
@ -1386,53 +1384,48 @@ GrabButton(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
||||||
int rc;
|
int rc;
|
||||||
Mask access_mode = DixGrabAccess;
|
Mask access_mode = DixGrabAccess;
|
||||||
|
|
||||||
rc = CheckGrabValues(client, dev, this_device_mode, other_devices_mode,
|
rc = CheckGrabValues(client, param);
|
||||||
modifiers, ownerEvents);
|
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
if (rconfineTo == None)
|
if (param->confineTo == None)
|
||||||
confineTo = NullWindow;
|
confineTo = NullWindow;
|
||||||
else {
|
else {
|
||||||
rc = dixLookupWindow(&confineTo, rconfineTo, client, DixSetAttrAccess);
|
rc = dixLookupWindow(&confineTo, param->confineTo, client, DixSetAttrAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
if (rcursor == None)
|
if (param->cursor == None)
|
||||||
cursor = NullCursor;
|
cursor = NullCursor;
|
||||||
else {
|
else {
|
||||||
rc = dixLookupResourceByType((pointer *)&cursor, rcursor, RT_CURSOR,
|
rc = dixLookupResourceByType((pointer *)&cursor, param->cursor,
|
||||||
client, DixUseAccess);
|
RT_CURSOR, client, DixUseAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
{
|
{
|
||||||
client->errorValue = rcursor;
|
client->errorValue = param->cursor;
|
||||||
return (rc == BadValue) ? BadCursor : rc;
|
return (rc == BadValue) ? BadCursor : rc;
|
||||||
}
|
}
|
||||||
access_mode |= DixForceAccess;
|
access_mode |= DixForceAccess;
|
||||||
}
|
}
|
||||||
if (this_device_mode == GrabModeSync || other_devices_mode == GrabModeSync)
|
if (param->this_device_mode == GrabModeSync || param->other_devices_mode == GrabModeSync)
|
||||||
access_mode |= DixFreezeAccess;
|
access_mode |= DixFreezeAccess;
|
||||||
rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, access_mode);
|
rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, access_mode);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
rc = dixLookupWindow(&pWin, grabWindow, client, DixSetAttrAccess);
|
rc = dixLookupWindow(&pWin, param->grabWindow, client, DixSetAttrAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
|
||||||
grab = CreateGrab(client->index, dev, pWin, eventMask,
|
grab = CreateGrab(client->index, dev, modifier_device, pWin, grabtype,
|
||||||
(Bool) ownerEvents, (Bool) this_device_mode,
|
mask, param, DeviceButtonPress, button, confineTo, cursor);
|
||||||
(Bool) other_devices_mode, modifier_device, modifiers,
|
|
||||||
DeviceButtonPress, GRABTYPE_XI, button, confineTo, cursor);
|
|
||||||
if (!grab)
|
if (!grab)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
return AddPassiveGrabToList(client, grab);
|
return AddPassiveGrabToList(client, grab);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
GrabKey(ClientPtr client, DeviceIntPtr dev, DeviceIntPtr modifier_device,
|
||||||
BYTE other_devices_mode, CARD16 modifiers,
|
int key, GrabParameters *param, GrabType grabtype, GrabMask *mask)
|
||||||
DeviceIntPtr modifier_device, CARD8 key, Window grabWindow,
|
|
||||||
BOOL ownerEvents, Mask mask)
|
|
||||||
{
|
{
|
||||||
WindowPtr pWin;
|
WindowPtr pWin;
|
||||||
GrabPtr grab;
|
GrabPtr grab;
|
||||||
|
@ -1440,8 +1433,7 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
||||||
Mask access_mode = DixGrabAccess;
|
Mask access_mode = DixGrabAccess;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = CheckGrabValues(client, dev, this_device_mode, other_devices_mode,
|
rc = CheckGrabValues(client, param);
|
||||||
modifiers, ownerEvents);
|
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
if (k == NULL)
|
if (k == NULL)
|
||||||
|
@ -1452,19 +1444,17 @@ GrabKey(ClientPtr client, DeviceIntPtr dev, BYTE this_device_mode,
|
||||||
client->errorValue = key;
|
client->errorValue = key;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
rc = dixLookupWindow(&pWin, grabWindow, client, DixSetAttrAccess);
|
rc = dixLookupWindow(&pWin, param->grabWindow, client, DixSetAttrAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
if (this_device_mode == GrabModeSync || other_devices_mode == GrabModeSync)
|
if (param->this_device_mode == GrabModeSync || param->other_devices_mode == GrabModeSync)
|
||||||
access_mode |= DixFreezeAccess;
|
access_mode |= DixFreezeAccess;
|
||||||
rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, access_mode);
|
rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, access_mode);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
grab = CreateGrab(client->index, dev, pWin,
|
grab = CreateGrab(client->index, dev, modifier_device, pWin, grabtype,
|
||||||
mask, ownerEvents, this_device_mode, other_devices_mode,
|
mask, param, DeviceKeyPress, key, NULL, NULL);
|
||||||
modifier_device, modifiers, DeviceKeyPress, GRABTYPE_XI,
|
|
||||||
key, NullWindow, NullCursor);
|
|
||||||
if (!grab)
|
if (!grab)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
return AddPassiveGrabToList(client, grab);
|
return AddPassiveGrabToList(client, grab);
|
||||||
|
|
|
@ -103,6 +103,8 @@ ProcXGrabDeviceButton(ClientPtr client)
|
||||||
DeviceIntPtr mdev;
|
DeviceIntPtr mdev;
|
||||||
XEventClass *class;
|
XEventClass *class;
|
||||||
struct tmask tmp[EMASKSIZE];
|
struct tmask tmp[EMASKSIZE];
|
||||||
|
GrabParameters param;
|
||||||
|
GrabMask mask;
|
||||||
|
|
||||||
REQUEST(xGrabDeviceButtonReq);
|
REQUEST(xGrabDeviceButtonReq);
|
||||||
REQUEST_AT_LEAST_SIZE(xGrabDeviceButtonReq);
|
REQUEST_AT_LEAST_SIZE(xGrabDeviceButtonReq);
|
||||||
|
@ -135,10 +137,17 @@ ProcXGrabDeviceButton(ClientPtr client)
|
||||||
stuff->event_count, tmp, dev,
|
stuff->event_count, tmp, dev,
|
||||||
X_GrabDeviceButton)) != Success)
|
X_GrabDeviceButton)) != Success)
|
||||||
return ret;
|
return ret;
|
||||||
ret = GrabButton(client, dev, stuff->this_device_mode,
|
|
||||||
stuff->other_devices_mode, stuff->modifiers, mdev,
|
memset(¶m, 0, sizeof(param));
|
||||||
stuff->button, stuff->grabWindow, stuff->ownerEvents,
|
param.ownerEvents = stuff->ownerEvents;
|
||||||
(Cursor) 0, (Window) 0, tmp[stuff->grabbed_device].mask);
|
param.this_device_mode = stuff->this_device_mode;
|
||||||
|
param.other_devices_mode = stuff->other_devices_mode;
|
||||||
|
param.grabWindow = stuff->grabWindow;
|
||||||
|
param.modifiers = stuff->modifiers;
|
||||||
|
mask.xi = tmp[stuff->grabbed_device].mask;
|
||||||
|
|
||||||
|
ret = GrabButton(client, dev, mdev, stuff->button, ¶m,
|
||||||
|
GRABTYPE_XI, &mask);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,6 +101,8 @@ ProcXGrabDeviceKey(ClientPtr client)
|
||||||
DeviceIntPtr mdev;
|
DeviceIntPtr mdev;
|
||||||
XEventClass *class;
|
XEventClass *class;
|
||||||
struct tmask tmp[EMASKSIZE];
|
struct tmask tmp[EMASKSIZE];
|
||||||
|
GrabParameters param;
|
||||||
|
GrabMask mask;
|
||||||
|
|
||||||
REQUEST(xGrabDeviceKeyReq);
|
REQUEST(xGrabDeviceKeyReq);
|
||||||
REQUEST_AT_LEAST_SIZE(xGrabDeviceKeyReq);
|
REQUEST_AT_LEAST_SIZE(xGrabDeviceKeyReq);
|
||||||
|
@ -133,10 +135,16 @@ ProcXGrabDeviceKey(ClientPtr client)
|
||||||
X_GrabDeviceKey)) != Success)
|
X_GrabDeviceKey)) != Success)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
ret = GrabKey(client, dev, stuff->this_device_mode,
|
|
||||||
stuff->other_devices_mode, stuff->modifiers, mdev,
|
memset(¶m, 0, sizeof(param));
|
||||||
stuff->key, stuff->grabWindow, stuff->ownerEvents,
|
param.ownerEvents = stuff->ownerEvents;
|
||||||
tmp[stuff->grabbed_device].mask);
|
param.this_device_mode = stuff->this_device_mode;
|
||||||
|
param.other_devices_mode = stuff->other_devices_mode;
|
||||||
|
param.grabWindow = stuff->grabWindow;
|
||||||
|
param.modifiers = stuff->modifiers;
|
||||||
|
mask.xi = tmp[stuff->grabbed_device].mask;
|
||||||
|
|
||||||
|
ret = GrabKey(client, dev, mdev, stuff->key, ¶m, GRABTYPE_XI, &mask);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
62
dix/events.c
62
dix/events.c
|
@ -5022,25 +5022,21 @@ ProcGrabKey(ClientPtr client)
|
||||||
GrabPtr grab;
|
GrabPtr grab;
|
||||||
DeviceIntPtr keybd = PickKeyboard(client);
|
DeviceIntPtr keybd = PickKeyboard(client);
|
||||||
int rc;
|
int rc;
|
||||||
|
GrabParameters param;
|
||||||
|
GrabMask mask;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGrabKeyReq);
|
REQUEST_SIZE_MATCH(xGrabKeyReq);
|
||||||
if ((stuff->ownerEvents != xTrue) && (stuff->ownerEvents != xFalse))
|
|
||||||
{
|
memset(¶m, 0, sizeof(param));
|
||||||
client->errorValue = stuff->ownerEvents;
|
param.ownerEvents = stuff->ownerEvents;
|
||||||
return(BadValue);
|
param.this_device_mode = stuff->keyboardMode;
|
||||||
}
|
param.other_devices_mode = stuff->pointerMode;
|
||||||
if ((stuff->pointerMode != GrabModeSync) &&
|
param.modifiers = stuff->modifiers;
|
||||||
(stuff->pointerMode != GrabModeAsync))
|
|
||||||
{
|
rc = CheckGrabValues(client, ¶m);
|
||||||
client->errorValue = stuff->pointerMode;
|
if (rc != Success)
|
||||||
return BadValue;
|
return rc;
|
||||||
}
|
|
||||||
if ((stuff->keyboardMode != GrabModeSync) &&
|
|
||||||
(stuff->keyboardMode != GrabModeAsync))
|
|
||||||
{
|
|
||||||
client->errorValue = stuff->keyboardMode;
|
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
if (((stuff->key > keybd->key->xkbInfo->desc->max_key_code) ||
|
if (((stuff->key > keybd->key->xkbInfo->desc->max_key_code) ||
|
||||||
(stuff->key < keybd->key->xkbInfo->desc->min_key_code))
|
(stuff->key < keybd->key->xkbInfo->desc->min_key_code))
|
||||||
&& (stuff->key != AnyKey))
|
&& (stuff->key != AnyKey))
|
||||||
|
@ -5048,21 +5044,15 @@ ProcGrabKey(ClientPtr client)
|
||||||
client->errorValue = stuff->key;
|
client->errorValue = stuff->key;
|
||||||
return BadValue;
|
return BadValue;
|
||||||
}
|
}
|
||||||
if ((stuff->modifiers != AnyModifier) &&
|
|
||||||
(stuff->modifiers & ~AllModifiersMask))
|
|
||||||
{
|
|
||||||
client->errorValue = stuff->modifiers;
|
|
||||||
return BadValue;
|
|
||||||
}
|
|
||||||
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixSetAttrAccess);
|
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixSetAttrAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
grab = CreateGrab(client->index, keybd, pWin,
|
|
||||||
(Mask)(KeyPressMask | KeyReleaseMask), (Bool)stuff->ownerEvents,
|
mask.core = (KeyPressMask | KeyReleaseMask);
|
||||||
(Bool)stuff->keyboardMode, (Bool)stuff->pointerMode,
|
|
||||||
keybd, stuff->modifiers, KeyPress, GRABTYPE_CORE, stuff->key,
|
grab = CreateGrab(client->index, keybd, keybd, pWin, GRABTYPE_CORE, &mask,
|
||||||
NullWindow, NullCursor);
|
¶m, KeyPress, stuff->key, NullWindow, NullCursor);
|
||||||
if (!grab)
|
if (!grab)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
return AddPassiveGrabToList(client, grab);
|
return AddPassiveGrabToList(client, grab);
|
||||||
|
@ -5084,6 +5074,8 @@ ProcGrabButton(ClientPtr client)
|
||||||
GrabPtr grab;
|
GrabPtr grab;
|
||||||
DeviceIntPtr ptr, modifierDevice;
|
DeviceIntPtr ptr, modifierDevice;
|
||||||
Mask access_mode = DixGrabAccess;
|
Mask access_mode = DixGrabAccess;
|
||||||
|
GrabMask mask;
|
||||||
|
GrabParameters param;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xGrabButtonReq);
|
REQUEST_SIZE_MATCH(xGrabButtonReq);
|
||||||
|
@ -5150,10 +5142,16 @@ ProcGrabButton(ClientPtr client)
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
grab = CreateGrab(client->index, ptr, pWin,
|
memset(¶m, 0, sizeof(param));
|
||||||
(Mask)stuff->eventMask, (Bool)stuff->ownerEvents,
|
param.ownerEvents = stuff->ownerEvents;
|
||||||
(Bool) stuff->keyboardMode, (Bool)stuff->pointerMode,
|
param.this_device_mode = stuff->keyboardMode;
|
||||||
modifierDevice, stuff->modifiers, ButtonPress, GRABTYPE_CORE,
|
param.other_devices_mode = stuff->pointerMode;
|
||||||
|
param.modifiers = stuff->modifiers;
|
||||||
|
|
||||||
|
mask.core = stuff->eventMask;
|
||||||
|
|
||||||
|
grab = CreateGrab(client->index, ptr, modifierDevice, pWin,
|
||||||
|
GRABTYPE_CORE, &mask, ¶m, ButtonPress,
|
||||||
stuff->button, confineTo, cursor);
|
stuff->button, confineTo, cursor);
|
||||||
if (!grab)
|
if (!grab)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
|
|
36
dix/grabs.c
36
dix/grabs.c
|
@ -58,6 +58,7 @@ SOFTWARE.
|
||||||
#include "cursorstr.h"
|
#include "cursorstr.h"
|
||||||
#include "dixgrabs.h"
|
#include "dixgrabs.h"
|
||||||
#include "xace.h"
|
#include "xace.h"
|
||||||
|
#include "exevents.h"
|
||||||
|
|
||||||
#define BITMASK(i) (((Mask)1) << ((i) & 31))
|
#define BITMASK(i) (((Mask)1) << ((i) & 31))
|
||||||
#define MASKIDX(i) ((i) >> 5)
|
#define MASKIDX(i) ((i) >> 5)
|
||||||
|
@ -70,13 +71,12 @@ GrabPtr
|
||||||
CreateGrab(
|
CreateGrab(
|
||||||
int client,
|
int client,
|
||||||
DeviceIntPtr device,
|
DeviceIntPtr device,
|
||||||
WindowPtr window,
|
|
||||||
Mask eventMask,
|
|
||||||
Bool ownerEvents, Bool keyboardMode, Bool pointerMode,
|
|
||||||
DeviceIntPtr modDevice,
|
DeviceIntPtr modDevice,
|
||||||
unsigned short modifiers,
|
WindowPtr window,
|
||||||
|
GrabType grabtype,
|
||||||
|
GrabMask *mask,
|
||||||
|
GrabParameters *param,
|
||||||
int type,
|
int type,
|
||||||
int grabtype,
|
|
||||||
KeyCode keybut, /* key or button */
|
KeyCode keybut, /* key or button */
|
||||||
WindowPtr confineTo,
|
WindowPtr confineTo,
|
||||||
CursorPtr cursor)
|
CursorPtr cursor)
|
||||||
|
@ -89,12 +89,12 @@ CreateGrab(
|
||||||
grab->resource = FakeClientID(client);
|
grab->resource = FakeClientID(client);
|
||||||
grab->device = device;
|
grab->device = device;
|
||||||
grab->window = window;
|
grab->window = window;
|
||||||
grab->eventMask = eventMask;
|
grab->eventMask = mask->core; /* same for XI */
|
||||||
grab->deviceMask = 0;
|
grab->deviceMask = 0;
|
||||||
grab->ownerEvents = ownerEvents;
|
grab->ownerEvents = param->ownerEvents;
|
||||||
grab->keyboardMode = keyboardMode;
|
grab->keyboardMode = param->this_device_mode;
|
||||||
grab->pointerMode = pointerMode;
|
grab->pointerMode = param->other_devices_mode;
|
||||||
grab->modifiersDetail.exact = modifiers;
|
grab->modifiersDetail.exact = param->modifiers;
|
||||||
grab->modifiersDetail.pMask = NULL;
|
grab->modifiersDetail.pMask = NULL;
|
||||||
grab->modifierDevice = modDevice;
|
grab->modifierDevice = modDevice;
|
||||||
grab->type = type;
|
grab->type = type;
|
||||||
|
@ -434,17 +434,21 @@ DeletePassiveGrabFromList(GrabPtr pMinuendGrab)
|
||||||
&& (pMinuendGrab->modifiersDetail.exact != AnyModifier))
|
&& (pMinuendGrab->modifiersDetail.exact != AnyModifier))
|
||||||
{
|
{
|
||||||
GrabPtr pNewGrab;
|
GrabPtr pNewGrab;
|
||||||
|
GrabParameters param;
|
||||||
|
|
||||||
UPDATE(grab->detail.pMask, pMinuendGrab->detail.exact);
|
UPDATE(grab->detail.pMask, pMinuendGrab->detail.exact);
|
||||||
|
|
||||||
|
memset(¶m, 0, sizeof(param));
|
||||||
|
param.ownerEvents = grab->ownerEvents;
|
||||||
|
param.this_device_mode = grab->keyboardMode;
|
||||||
|
param.other_devices_mode = grab->pointerMode;
|
||||||
|
param.modifiers = AnyModifier;
|
||||||
|
|
||||||
pNewGrab = CreateGrab(CLIENT_ID(grab->resource), grab->device,
|
pNewGrab = CreateGrab(CLIENT_ID(grab->resource), grab->device,
|
||||||
grab->window, (Mask)grab->eventMask,
|
grab->modifierDevice, grab->window,
|
||||||
(Bool)grab->ownerEvents,
|
|
||||||
(Bool)grab->keyboardMode,
|
|
||||||
(Bool)grab->pointerMode,
|
|
||||||
grab->modifierDevice,
|
|
||||||
AnyModifier, (int)grab->type,
|
|
||||||
grab->grabtype,
|
grab->grabtype,
|
||||||
|
(GrabMask*)grab->eventMask,
|
||||||
|
¶m, (int)grab->type,
|
||||||
pMinuendGrab->detail.exact,
|
pMinuendGrab->detail.exact,
|
||||||
grab->confineTo, grab->cursor);
|
grab->confineTo, grab->cursor);
|
||||||
if (!pNewGrab)
|
if (!pNewGrab)
|
||||||
|
|
|
@ -26,18 +26,17 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
#ifndef DIXGRABS_H
|
#ifndef DIXGRABS_H
|
||||||
#define DIXGRABS_H 1
|
#define DIXGRABS_H 1
|
||||||
|
|
||||||
extern _X_EXPORT GrabPtr CreateGrab(
|
struct _GrabParameters;
|
||||||
|
|
||||||
|
extern GrabPtr CreateGrab(
|
||||||
int /* client */,
|
int /* client */,
|
||||||
DeviceIntPtr /* device */,
|
DeviceIntPtr /* device */,
|
||||||
WindowPtr /* window */,
|
|
||||||
Mask /* eventMask */,
|
|
||||||
Bool /* ownerEvents */,
|
|
||||||
Bool /* keyboardMode */,
|
|
||||||
Bool /* pointerMode */,
|
|
||||||
DeviceIntPtr /* modDevice */,
|
DeviceIntPtr /* modDevice */,
|
||||||
unsigned short /* modifiers */,
|
WindowPtr /* window */,
|
||||||
|
GrabType /* grabtype */,
|
||||||
|
GrabMask * /* mask */,
|
||||||
|
struct _GrabParameters * /* param */,
|
||||||
int /* type */,
|
int /* type */,
|
||||||
int /* grabtype */,
|
|
||||||
KeyCode /* keybut */,
|
KeyCode /* keybut */,
|
||||||
WindowPtr /* confineTo */,
|
WindowPtr /* confineTo */,
|
||||||
CursorPtr /* cursor */);
|
CursorPtr /* cursor */);
|
||||||
|
|
|
@ -42,6 +42,18 @@ typedef struct _XIClientRec {
|
||||||
int minor_version;
|
int minor_version;
|
||||||
} XIClientRec, *XIClientPtr;
|
} XIClientRec, *XIClientPtr;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct _GrabParameters {
|
||||||
|
unsigned int ownerEvents;
|
||||||
|
unsigned int this_device_mode;
|
||||||
|
unsigned int other_devices_mode;
|
||||||
|
Window grabWindow;
|
||||||
|
Window confineTo;
|
||||||
|
Cursor cursor;
|
||||||
|
unsigned int modifiers;
|
||||||
|
} GrabParameters;
|
||||||
|
|
||||||
|
|
||||||
extern _X_EXPORT void RegisterOtherDevice (
|
extern _X_EXPORT void RegisterOtherDevice (
|
||||||
DeviceIntPtr /* device */);
|
DeviceIntPtr /* device */);
|
||||||
|
|
||||||
|
@ -73,31 +85,27 @@ extern _X_EXPORT void DeviceFocusEvent(
|
||||||
int /* detail */,
|
int /* detail */,
|
||||||
WindowPtr /* pWin */);
|
WindowPtr /* pWin */);
|
||||||
|
|
||||||
extern _X_EXPORT int GrabButton(
|
extern int CheckGrabValues(
|
||||||
ClientPtr /* client */,
|
ClientPtr /* client */,
|
||||||
DeviceIntPtr /* dev */,
|
GrabParameters* /* param */);
|
||||||
BYTE /* this_device_mode */,
|
|
||||||
BYTE /* other_devices_mode */,
|
|
||||||
CARD16 /* modifiers */,
|
|
||||||
DeviceIntPtr /* modifier_device */,
|
|
||||||
CARD8 /* button */,
|
|
||||||
Window /* grabWindow */,
|
|
||||||
BOOL /* ownerEvents */,
|
|
||||||
Cursor /* rcursor */,
|
|
||||||
Window /* rconfineTo */,
|
|
||||||
Mask /* eventMask */);
|
|
||||||
|
|
||||||
extern _X_EXPORT int GrabKey(
|
extern int GrabButton(
|
||||||
ClientPtr /* client */,
|
ClientPtr /* client */,
|
||||||
DeviceIntPtr /* dev */,
|
DeviceIntPtr /* dev */,
|
||||||
BYTE /* this_device_mode */,
|
|
||||||
BYTE /* other_devices_mode */,
|
|
||||||
CARD16 /* modifiers */,
|
|
||||||
DeviceIntPtr /* modifier_device */,
|
DeviceIntPtr /* modifier_device */,
|
||||||
CARD8 /* key */,
|
int /* button */,
|
||||||
Window /* grabWindow */,
|
GrabParameters* /* param */,
|
||||||
BOOL /* ownerEvents */,
|
GrabType /* grabtype */,
|
||||||
Mask /* mask */);
|
GrabMask* /* eventMask */);
|
||||||
|
|
||||||
|
extern int GrabKey(
|
||||||
|
ClientPtr /* client */,
|
||||||
|
DeviceIntPtr /* dev */,
|
||||||
|
DeviceIntPtr /* modifier_device */,
|
||||||
|
int /* key */,
|
||||||
|
GrabParameters* /* param */,
|
||||||
|
GrabType /* grabtype */,
|
||||||
|
GrabMask* /* eventMask */);
|
||||||
|
|
||||||
extern int SelectForWindow(
|
extern int SelectForWindow(
|
||||||
DeviceIntPtr /* dev */,
|
DeviceIntPtr /* dev */,
|
||||||
|
|
62
test/input.c
62
test/input.c
|
@ -33,6 +33,7 @@
|
||||||
#include "windowstr.h"
|
#include "windowstr.h"
|
||||||
#include "inputstr.h"
|
#include "inputstr.h"
|
||||||
#include "eventconvert.h"
|
#include "eventconvert.h"
|
||||||
|
#include "exevents.h"
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
|
||||||
|
@ -73,6 +74,66 @@ static void dix_init_valuators(void)
|
||||||
g_assert(dev.last.numValuators == num_axes);
|
g_assert(dev.last.numValuators == num_axes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* just check the known success cases, and that error cases set the client's
|
||||||
|
* error value correctly. */
|
||||||
|
static void dix_check_grab_values(void)
|
||||||
|
{
|
||||||
|
ClientRec client;
|
||||||
|
GrabParameters param;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
memset(&client, 0, sizeof(client));
|
||||||
|
|
||||||
|
param.this_device_mode = GrabModeSync;
|
||||||
|
param.other_devices_mode = GrabModeSync;
|
||||||
|
param.modifiers = AnyModifier;
|
||||||
|
param.ownerEvents = FALSE;
|
||||||
|
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == Success);
|
||||||
|
|
||||||
|
param.this_device_mode = GrabModeAsync;
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == Success);
|
||||||
|
|
||||||
|
param.this_device_mode = GrabModeAsync + 1;
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == BadValue);
|
||||||
|
g_assert(client.errorValue == param.this_device_mode);
|
||||||
|
g_assert(client.errorValue == GrabModeAsync + 1);
|
||||||
|
|
||||||
|
param.this_device_mode = GrabModeSync;
|
||||||
|
param.other_devices_mode = GrabModeAsync;
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == Success);
|
||||||
|
|
||||||
|
param.other_devices_mode = GrabModeAsync + 1;
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == BadValue);
|
||||||
|
g_assert(client.errorValue == param.other_devices_mode);
|
||||||
|
g_assert(client.errorValue == GrabModeAsync + 1);
|
||||||
|
|
||||||
|
param.other_devices_mode = GrabModeSync;
|
||||||
|
|
||||||
|
param.modifiers = 1 << 13;
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == BadValue);
|
||||||
|
g_assert(client.errorValue == param.modifiers);
|
||||||
|
g_assert(client.errorValue == (1 << 13));
|
||||||
|
|
||||||
|
|
||||||
|
param.modifiers = AnyModifier;
|
||||||
|
param.ownerEvents = TRUE;
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == Success);
|
||||||
|
|
||||||
|
param.ownerEvents = 3;
|
||||||
|
rc = CheckGrabValues(&client, ¶m);
|
||||||
|
g_assert(rc == BadValue);
|
||||||
|
g_assert(client.errorValue == param.ownerEvents);
|
||||||
|
g_assert(client.errorValue == 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert various internal events to the matching core event and verify the
|
* Convert various internal events to the matching core event and verify the
|
||||||
|
@ -222,6 +283,7 @@ int main(int argc, char** argv)
|
||||||
|
|
||||||
g_test_add_func("/dix/input/init-valuators", dix_init_valuators);
|
g_test_add_func("/dix/input/init-valuators", dix_init_valuators);
|
||||||
g_test_add_func("/dix/input/event-core-conversion", dix_event_to_core_conversion);
|
g_test_add_func("/dix/input/event-core-conversion", dix_event_to_core_conversion);
|
||||||
|
g_test_add_func("/dix/input/check-grab-values", dix_check_grab_values);
|
||||||
|
|
||||||
return g_test_run();
|
return g_test_run();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue