dix: Move DeviceFocusEvent from Xi into enterleave.c
This is only called from the enterleave implementation, so move it and its
helper functions to there. No functional changes.
Fixes build error introduced in 31174565ec
if
building with '-Werror=implicit-function-declaration'
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Dave Airlie <airlied@redhat.com>
Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
This commit is contained in:
parent
749a593e49
commit
ca6d25ad2d
234
Xi/exevents.c
234
Xi/exevents.c
|
@ -2114,240 +2114,6 @@ SetScrollValuator(DeviceIntPtr dev, int axnum, enum ScrollType type,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
FixDeviceStateNotify(DeviceIntPtr dev, deviceStateNotify * ev, KeyClassPtr k,
|
|
||||||
ButtonClassPtr b, ValuatorClassPtr v, int first)
|
|
||||||
{
|
|
||||||
ev->type = DeviceStateNotify;
|
|
||||||
ev->deviceid = dev->id;
|
|
||||||
ev->time = currentTime.milliseconds;
|
|
||||||
ev->classes_reported = 0;
|
|
||||||
ev->num_keys = 0;
|
|
||||||
ev->num_buttons = 0;
|
|
||||||
ev->num_valuators = 0;
|
|
||||||
|
|
||||||
if (b) {
|
|
||||||
ev->classes_reported |= (1 << ButtonClass);
|
|
||||||
ev->num_buttons = b->numButtons;
|
|
||||||
memcpy((char *) ev->buttons, (char *) b->down, 4);
|
|
||||||
}
|
|
||||||
else if (k) {
|
|
||||||
ev->classes_reported |= (1 << KeyClass);
|
|
||||||
ev->num_keys = k->xkbInfo->desc->max_key_code -
|
|
||||||
k->xkbInfo->desc->min_key_code;
|
|
||||||
memmove((char *) &ev->keys[0], (char *) k->down, 4);
|
|
||||||
}
|
|
||||||
if (v) {
|
|
||||||
int nval = v->numAxes - first;
|
|
||||||
|
|
||||||
ev->classes_reported |= (1 << ValuatorClass);
|
|
||||||
ev->classes_reported |= valuator_get_mode(dev, 0) << ModeBitsShift;
|
|
||||||
ev->num_valuators = nval < 3 ? nval : 3;
|
|
||||||
switch (ev->num_valuators) {
|
|
||||||
case 3:
|
|
||||||
ev->valuator2 = v->axisVal[first + 2];
|
|
||||||
case 2:
|
|
||||||
ev->valuator1 = v->axisVal[first + 1];
|
|
||||||
case 1:
|
|
||||||
ev->valuator0 = v->axisVal[first];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
FixDeviceValuator(DeviceIntPtr dev, deviceValuator * ev, ValuatorClassPtr v,
|
|
||||||
int first)
|
|
||||||
{
|
|
||||||
int nval = v->numAxes - first;
|
|
||||||
|
|
||||||
ev->type = DeviceValuator;
|
|
||||||
ev->deviceid = dev->id;
|
|
||||||
ev->num_valuators = nval < 3 ? nval : 3;
|
|
||||||
ev->first_valuator = first;
|
|
||||||
switch (ev->num_valuators) {
|
|
||||||
case 3:
|
|
||||||
ev->valuator2 = v->axisVal[first + 2];
|
|
||||||
case 2:
|
|
||||||
ev->valuator1 = v->axisVal[first + 1];
|
|
||||||
case 1:
|
|
||||||
ev->valuator0 = v->axisVal[first];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
first += ev->num_valuators;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
DeliverStateNotifyEvent(DeviceIntPtr dev, WindowPtr win)
|
|
||||||
{
|
|
||||||
int evcount = 1;
|
|
||||||
deviceStateNotify *ev, *sev;
|
|
||||||
deviceKeyStateNotify *kev;
|
|
||||||
deviceButtonStateNotify *bev;
|
|
||||||
|
|
||||||
KeyClassPtr k;
|
|
||||||
ButtonClassPtr b;
|
|
||||||
ValuatorClassPtr v;
|
|
||||||
int nval = 0, nkeys = 0, nbuttons = 0, first = 0;
|
|
||||||
|
|
||||||
if (!(wOtherInputMasks(win)) ||
|
|
||||||
!(wOtherInputMasks(win)->inputEvents[dev->id] & DeviceStateNotifyMask))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if ((b = dev->button) != NULL) {
|
|
||||||
nbuttons = b->numButtons;
|
|
||||||
if (nbuttons > 32)
|
|
||||||
evcount++;
|
|
||||||
}
|
|
||||||
if ((k = dev->key) != NULL) {
|
|
||||||
nkeys = k->xkbInfo->desc->max_key_code - k->xkbInfo->desc->min_key_code;
|
|
||||||
if (nkeys > 32)
|
|
||||||
evcount++;
|
|
||||||
if (nbuttons > 0) {
|
|
||||||
evcount++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ((v = dev->valuator) != NULL) {
|
|
||||||
nval = v->numAxes;
|
|
||||||
|
|
||||||
if (nval > 3)
|
|
||||||
evcount++;
|
|
||||||
if (nval > 6) {
|
|
||||||
if (!(k && b))
|
|
||||||
evcount++;
|
|
||||||
if (nval > 9)
|
|
||||||
evcount += ((nval - 7) / 3);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sev = ev = (deviceStateNotify *) malloc(evcount * sizeof(xEvent));
|
|
||||||
FixDeviceStateNotify(dev, ev, NULL, NULL, NULL, first);
|
|
||||||
|
|
||||||
if (b != NULL) {
|
|
||||||
FixDeviceStateNotify(dev, ev++, NULL, b, v, first);
|
|
||||||
first += 3;
|
|
||||||
nval -= 3;
|
|
||||||
if (nbuttons > 32) {
|
|
||||||
(ev - 1)->deviceid |= MORE_EVENTS;
|
|
||||||
bev = (deviceButtonStateNotify *) ev++;
|
|
||||||
bev->type = DeviceButtonStateNotify;
|
|
||||||
bev->deviceid = dev->id;
|
|
||||||
memcpy((char *) &bev->buttons[4], (char *) &b->down[4],
|
|
||||||
DOWN_LENGTH - 4);
|
|
||||||
}
|
|
||||||
if (nval > 0) {
|
|
||||||
(ev - 1)->deviceid |= MORE_EVENTS;
|
|
||||||
FixDeviceValuator(dev, (deviceValuator *) ev++, v, first);
|
|
||||||
first += 3;
|
|
||||||
nval -= 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (k != NULL) {
|
|
||||||
FixDeviceStateNotify(dev, ev++, k, NULL, v, first);
|
|
||||||
first += 3;
|
|
||||||
nval -= 3;
|
|
||||||
if (nkeys > 32) {
|
|
||||||
(ev - 1)->deviceid |= MORE_EVENTS;
|
|
||||||
kev = (deviceKeyStateNotify *) ev++;
|
|
||||||
kev->type = DeviceKeyStateNotify;
|
|
||||||
kev->deviceid = dev->id;
|
|
||||||
memmove((char *) &kev->keys[0], (char *) &k->down[4], 28);
|
|
||||||
}
|
|
||||||
if (nval > 0) {
|
|
||||||
(ev - 1)->deviceid |= MORE_EVENTS;
|
|
||||||
FixDeviceValuator(dev, (deviceValuator *) ev++, v, first);
|
|
||||||
first += 3;
|
|
||||||
nval -= 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
while (nval > 0) {
|
|
||||||
FixDeviceStateNotify(dev, ev++, NULL, NULL, v, first);
|
|
||||||
first += 3;
|
|
||||||
nval -= 3;
|
|
||||||
if (nval > 0) {
|
|
||||||
(ev - 1)->deviceid |= MORE_EVENTS;
|
|
||||||
FixDeviceValuator(dev, (deviceValuator *) ev++, v, first);
|
|
||||||
first += 3;
|
|
||||||
nval -= 3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
DeliverEventsToWindow(dev, win, (xEvent *) sev, evcount,
|
|
||||||
DeviceStateNotifyMask, NullGrab);
|
|
||||||
free(sev);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
|
|
||||||
WindowPtr pWin)
|
|
||||||
{
|
|
||||||
deviceFocus event;
|
|
||||||
xXIFocusInEvent *xi2event;
|
|
||||||
DeviceIntPtr mouse;
|
|
||||||
int btlen, len, i;
|
|
||||||
|
|
||||||
mouse = IsFloating(dev) ? dev : GetMaster(dev, MASTER_POINTER);
|
|
||||||
|
|
||||||
/* XI 2 event */
|
|
||||||
btlen = (mouse->button) ? bits_to_bytes(mouse->button->numButtons) : 0;
|
|
||||||
btlen = bytes_to_int32(btlen);
|
|
||||||
len = sizeof(xXIFocusInEvent) + btlen * 4;
|
|
||||||
|
|
||||||
xi2event = calloc(1, len);
|
|
||||||
xi2event->type = GenericEvent;
|
|
||||||
xi2event->extension = IReqCode;
|
|
||||||
xi2event->evtype = type;
|
|
||||||
xi2event->length = bytes_to_int32(len - sizeof(xEvent));
|
|
||||||
xi2event->buttons_len = btlen;
|
|
||||||
xi2event->detail = detail;
|
|
||||||
xi2event->time = currentTime.milliseconds;
|
|
||||||
xi2event->deviceid = dev->id;
|
|
||||||
xi2event->sourceid = dev->id; /* a device doesn't change focus by itself */
|
|
||||||
xi2event->mode = mode;
|
|
||||||
xi2event->root_x = FP1616(mouse->spriteInfo->sprite->hot.x, 0);
|
|
||||||
xi2event->root_y = FP1616(mouse->spriteInfo->sprite->hot.y, 0);
|
|
||||||
|
|
||||||
for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++)
|
|
||||||
if (BitIsOn(mouse->button->down, i))
|
|
||||||
SetBit(&xi2event[1], mouse->button->map[i]);
|
|
||||||
|
|
||||||
if (dev->key) {
|
|
||||||
xi2event->mods.base_mods = dev->key->xkbInfo->state.base_mods;
|
|
||||||
xi2event->mods.latched_mods = dev->key->xkbInfo->state.latched_mods;
|
|
||||||
xi2event->mods.locked_mods = dev->key->xkbInfo->state.locked_mods;
|
|
||||||
xi2event->mods.effective_mods = dev->key->xkbInfo->state.mods;
|
|
||||||
|
|
||||||
xi2event->group.base_group = dev->key->xkbInfo->state.base_group;
|
|
||||||
xi2event->group.latched_group = dev->key->xkbInfo->state.latched_group;
|
|
||||||
xi2event->group.locked_group = dev->key->xkbInfo->state.locked_group;
|
|
||||||
xi2event->group.effective_group = dev->key->xkbInfo->state.group;
|
|
||||||
}
|
|
||||||
|
|
||||||
FixUpEventFromWindow(dev->spriteInfo->sprite, (xEvent *) xi2event, pWin,
|
|
||||||
None, FALSE);
|
|
||||||
|
|
||||||
DeliverEventsToWindow(dev, pWin, (xEvent *) xi2event, 1,
|
|
||||||
GetEventFilter(dev, (xEvent *) xi2event), NullGrab);
|
|
||||||
|
|
||||||
free(xi2event);
|
|
||||||
|
|
||||||
/* XI 1.x event */
|
|
||||||
event.deviceid = dev->id;
|
|
||||||
event.mode = mode;
|
|
||||||
event.type = (type == XI_FocusIn) ? DeviceFocusIn : DeviceFocusOut;
|
|
||||||
event.detail = detail;
|
|
||||||
event.window = pWin->drawable.id;
|
|
||||||
event.time = currentTime.milliseconds;
|
|
||||||
|
|
||||||
DeliverEventsToWindow(dev, pWin, (xEvent *) &event, 1,
|
|
||||||
DeviceFocusChangeMask, NullGrab);
|
|
||||||
|
|
||||||
if (event.type == DeviceFocusIn)
|
|
||||||
DeliverStateNotifyEvent(dev, pWin);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
CheckGrabValues(ClientPtr client, GrabParameters *param)
|
CheckGrabValues(ClientPtr client, GrabParameters *param)
|
||||||
{
|
{
|
||||||
|
|
239
dix/enterleave.c
239
dix/enterleave.c
|
@ -30,11 +30,15 @@
|
||||||
|
|
||||||
#include <X11/X.h>
|
#include <X11/X.h>
|
||||||
#include <X11/extensions/XI2.h>
|
#include <X11/extensions/XI2.h>
|
||||||
|
#include <X11/extensions/XIproto.h>
|
||||||
|
#include <X11/extensions/XI2proto.h>
|
||||||
#include "inputstr.h"
|
#include "inputstr.h"
|
||||||
#include "windowstr.h"
|
#include "windowstr.h"
|
||||||
#include "scrnintstr.h"
|
#include "scrnintstr.h"
|
||||||
#include "exglobals.h"
|
#include "exglobals.h"
|
||||||
#include "enterleave.h"
|
#include "enterleave.h"
|
||||||
|
#include "eventconvert.h"
|
||||||
|
#include "xkbsrv.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @file
|
* @file
|
||||||
|
@ -602,6 +606,241 @@ DoEnterLeaveEvents(DeviceIntPtr pDev,
|
||||||
DeviceEnterLeaveEvents(pDev, sourceid, fromWin, toWin, mode);
|
DeviceEnterLeaveEvents(pDev, sourceid, fromWin, toWin, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
FixDeviceValuator(DeviceIntPtr dev, deviceValuator * ev, ValuatorClassPtr v,
|
||||||
|
int first)
|
||||||
|
{
|
||||||
|
int nval = v->numAxes - first;
|
||||||
|
|
||||||
|
ev->type = DeviceValuator;
|
||||||
|
ev->deviceid = dev->id;
|
||||||
|
ev->num_valuators = nval < 3 ? nval : 3;
|
||||||
|
ev->first_valuator = first;
|
||||||
|
switch (ev->num_valuators) {
|
||||||
|
case 3:
|
||||||
|
ev->valuator2 = v->axisVal[first + 2];
|
||||||
|
case 2:
|
||||||
|
ev->valuator1 = v->axisVal[first + 1];
|
||||||
|
case 1:
|
||||||
|
ev->valuator0 = v->axisVal[first];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
first += ev->num_valuators;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
FixDeviceStateNotify(DeviceIntPtr dev, deviceStateNotify * ev, KeyClassPtr k,
|
||||||
|
ButtonClassPtr b, ValuatorClassPtr v, int first)
|
||||||
|
{
|
||||||
|
ev->type = DeviceStateNotify;
|
||||||
|
ev->deviceid = dev->id;
|
||||||
|
ev->time = currentTime.milliseconds;
|
||||||
|
ev->classes_reported = 0;
|
||||||
|
ev->num_keys = 0;
|
||||||
|
ev->num_buttons = 0;
|
||||||
|
ev->num_valuators = 0;
|
||||||
|
|
||||||
|
if (b) {
|
||||||
|
ev->classes_reported |= (1 << ButtonClass);
|
||||||
|
ev->num_buttons = b->numButtons;
|
||||||
|
memcpy((char *) ev->buttons, (char *) b->down, 4);
|
||||||
|
}
|
||||||
|
else if (k) {
|
||||||
|
ev->classes_reported |= (1 << KeyClass);
|
||||||
|
ev->num_keys = k->xkbInfo->desc->max_key_code -
|
||||||
|
k->xkbInfo->desc->min_key_code;
|
||||||
|
memmove((char *) &ev->keys[0], (char *) k->down, 4);
|
||||||
|
}
|
||||||
|
if (v) {
|
||||||
|
int nval = v->numAxes - first;
|
||||||
|
|
||||||
|
ev->classes_reported |= (1 << ValuatorClass);
|
||||||
|
ev->classes_reported |= valuator_get_mode(dev, 0) << ModeBitsShift;
|
||||||
|
ev->num_valuators = nval < 3 ? nval : 3;
|
||||||
|
switch (ev->num_valuators) {
|
||||||
|
case 3:
|
||||||
|
ev->valuator2 = v->axisVal[first + 2];
|
||||||
|
case 2:
|
||||||
|
ev->valuator1 = v->axisVal[first + 1];
|
||||||
|
case 1:
|
||||||
|
ev->valuator0 = v->axisVal[first];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void
|
||||||
|
DeliverStateNotifyEvent(DeviceIntPtr dev, WindowPtr win)
|
||||||
|
{
|
||||||
|
int evcount = 1;
|
||||||
|
deviceStateNotify *ev, *sev;
|
||||||
|
deviceKeyStateNotify *kev;
|
||||||
|
deviceButtonStateNotify *bev;
|
||||||
|
|
||||||
|
KeyClassPtr k;
|
||||||
|
ButtonClassPtr b;
|
||||||
|
ValuatorClassPtr v;
|
||||||
|
int nval = 0, nkeys = 0, nbuttons = 0, first = 0;
|
||||||
|
|
||||||
|
if (!(wOtherInputMasks(win)) ||
|
||||||
|
!(wOtherInputMasks(win)->inputEvents[dev->id] & DeviceStateNotifyMask))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((b = dev->button) != NULL) {
|
||||||
|
nbuttons = b->numButtons;
|
||||||
|
if (nbuttons > 32)
|
||||||
|
evcount++;
|
||||||
|
}
|
||||||
|
if ((k = dev->key) != NULL) {
|
||||||
|
nkeys = k->xkbInfo->desc->max_key_code - k->xkbInfo->desc->min_key_code;
|
||||||
|
if (nkeys > 32)
|
||||||
|
evcount++;
|
||||||
|
if (nbuttons > 0) {
|
||||||
|
evcount++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((v = dev->valuator) != NULL) {
|
||||||
|
nval = v->numAxes;
|
||||||
|
|
||||||
|
if (nval > 3)
|
||||||
|
evcount++;
|
||||||
|
if (nval > 6) {
|
||||||
|
if (!(k && b))
|
||||||
|
evcount++;
|
||||||
|
if (nval > 9)
|
||||||
|
evcount += ((nval - 7) / 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sev = ev = (deviceStateNotify *) malloc(evcount * sizeof(xEvent));
|
||||||
|
FixDeviceStateNotify(dev, ev, NULL, NULL, NULL, first);
|
||||||
|
|
||||||
|
if (b != NULL) {
|
||||||
|
FixDeviceStateNotify(dev, ev++, NULL, b, v, first);
|
||||||
|
first += 3;
|
||||||
|
nval -= 3;
|
||||||
|
if (nbuttons > 32) {
|
||||||
|
(ev - 1)->deviceid |= MORE_EVENTS;
|
||||||
|
bev = (deviceButtonStateNotify *) ev++;
|
||||||
|
bev->type = DeviceButtonStateNotify;
|
||||||
|
bev->deviceid = dev->id;
|
||||||
|
memcpy((char *) &bev->buttons[4], (char *) &b->down[4],
|
||||||
|
DOWN_LENGTH - 4);
|
||||||
|
}
|
||||||
|
if (nval > 0) {
|
||||||
|
(ev - 1)->deviceid |= MORE_EVENTS;
|
||||||
|
FixDeviceValuator(dev, (deviceValuator *) ev++, v, first);
|
||||||
|
first += 3;
|
||||||
|
nval -= 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (k != NULL) {
|
||||||
|
FixDeviceStateNotify(dev, ev++, k, NULL, v, first);
|
||||||
|
first += 3;
|
||||||
|
nval -= 3;
|
||||||
|
if (nkeys > 32) {
|
||||||
|
(ev - 1)->deviceid |= MORE_EVENTS;
|
||||||
|
kev = (deviceKeyStateNotify *) ev++;
|
||||||
|
kev->type = DeviceKeyStateNotify;
|
||||||
|
kev->deviceid = dev->id;
|
||||||
|
memmove((char *) &kev->keys[0], (char *) &k->down[4], 28);
|
||||||
|
}
|
||||||
|
if (nval > 0) {
|
||||||
|
(ev - 1)->deviceid |= MORE_EVENTS;
|
||||||
|
FixDeviceValuator(dev, (deviceValuator *) ev++, v, first);
|
||||||
|
first += 3;
|
||||||
|
nval -= 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (nval > 0) {
|
||||||
|
FixDeviceStateNotify(dev, ev++, NULL, NULL, v, first);
|
||||||
|
first += 3;
|
||||||
|
nval -= 3;
|
||||||
|
if (nval > 0) {
|
||||||
|
(ev - 1)->deviceid |= MORE_EVENTS;
|
||||||
|
FixDeviceValuator(dev, (deviceValuator *) ev++, v, first);
|
||||||
|
first += 3;
|
||||||
|
nval -= 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DeliverEventsToWindow(dev, win, (xEvent *) sev, evcount,
|
||||||
|
DeviceStateNotifyMask, NullGrab);
|
||||||
|
free(sev);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
DeviceFocusEvent(DeviceIntPtr dev, int type, int mode, int detail,
|
||||||
|
WindowPtr pWin)
|
||||||
|
{
|
||||||
|
deviceFocus event;
|
||||||
|
xXIFocusInEvent *xi2event;
|
||||||
|
DeviceIntPtr mouse;
|
||||||
|
int btlen, len, i;
|
||||||
|
|
||||||
|
mouse = IsFloating(dev) ? dev : GetMaster(dev, MASTER_POINTER);
|
||||||
|
|
||||||
|
/* XI 2 event */
|
||||||
|
btlen = (mouse->button) ? bits_to_bytes(mouse->button->numButtons) : 0;
|
||||||
|
btlen = bytes_to_int32(btlen);
|
||||||
|
len = sizeof(xXIFocusInEvent) + btlen * 4;
|
||||||
|
|
||||||
|
xi2event = calloc(1, len);
|
||||||
|
xi2event->type = GenericEvent;
|
||||||
|
xi2event->extension = IReqCode;
|
||||||
|
xi2event->evtype = type;
|
||||||
|
xi2event->length = bytes_to_int32(len - sizeof(xEvent));
|
||||||
|
xi2event->buttons_len = btlen;
|
||||||
|
xi2event->detail = detail;
|
||||||
|
xi2event->time = currentTime.milliseconds;
|
||||||
|
xi2event->deviceid = dev->id;
|
||||||
|
xi2event->sourceid = dev->id; /* a device doesn't change focus by itself */
|
||||||
|
xi2event->mode = mode;
|
||||||
|
xi2event->root_x = FP1616(mouse->spriteInfo->sprite->hot.x, 0);
|
||||||
|
xi2event->root_y = FP1616(mouse->spriteInfo->sprite->hot.y, 0);
|
||||||
|
|
||||||
|
for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++)
|
||||||
|
if (BitIsOn(mouse->button->down, i))
|
||||||
|
SetBit(&xi2event[1], mouse->button->map[i]);
|
||||||
|
|
||||||
|
if (dev->key) {
|
||||||
|
xi2event->mods.base_mods = dev->key->xkbInfo->state.base_mods;
|
||||||
|
xi2event->mods.latched_mods = dev->key->xkbInfo->state.latched_mods;
|
||||||
|
xi2event->mods.locked_mods = dev->key->xkbInfo->state.locked_mods;
|
||||||
|
xi2event->mods.effective_mods = dev->key->xkbInfo->state.mods;
|
||||||
|
|
||||||
|
xi2event->group.base_group = dev->key->xkbInfo->state.base_group;
|
||||||
|
xi2event->group.latched_group = dev->key->xkbInfo->state.latched_group;
|
||||||
|
xi2event->group.locked_group = dev->key->xkbInfo->state.locked_group;
|
||||||
|
xi2event->group.effective_group = dev->key->xkbInfo->state.group;
|
||||||
|
}
|
||||||
|
|
||||||
|
FixUpEventFromWindow(dev->spriteInfo->sprite, (xEvent *) xi2event, pWin,
|
||||||
|
None, FALSE);
|
||||||
|
|
||||||
|
DeliverEventsToWindow(dev, pWin, (xEvent *) xi2event, 1,
|
||||||
|
GetEventFilter(dev, (xEvent *) xi2event), NullGrab);
|
||||||
|
|
||||||
|
free(xi2event);
|
||||||
|
|
||||||
|
/* XI 1.x event */
|
||||||
|
event.deviceid = dev->id;
|
||||||
|
event.mode = mode;
|
||||||
|
event.type = (type == XI_FocusIn) ? DeviceFocusIn : DeviceFocusOut;
|
||||||
|
event.detail = detail;
|
||||||
|
event.window = pWin->drawable.id;
|
||||||
|
event.time = currentTime.milliseconds;
|
||||||
|
|
||||||
|
DeliverEventsToWindow(dev, pWin, (xEvent *) &event, 1,
|
||||||
|
DeviceFocusChangeMask, NullGrab);
|
||||||
|
|
||||||
|
if (event.type == DeviceFocusIn)
|
||||||
|
DeliverStateNotifyEvent(dev, pWin);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send focus out events to all windows between 'child' and 'ancestor'.
|
* Send focus out events to all windows between 'child' and 'ancestor'.
|
||||||
* Events are sent running up the hierarchy.
|
* Events are sent running up the hierarchy.
|
||||||
|
|
|
@ -52,6 +52,11 @@ extern void DeviceEnterLeaveEvent(DeviceIntPtr mouse,
|
||||||
int type,
|
int type,
|
||||||
int mode,
|
int mode,
|
||||||
int detail, WindowPtr pWin, Window child);
|
int detail, WindowPtr pWin, Window child);
|
||||||
|
extern void DeviceFocusEvent(DeviceIntPtr dev,
|
||||||
|
int type,
|
||||||
|
int mode,
|
||||||
|
int detail ,
|
||||||
|
WindowPtr pWin);
|
||||||
|
|
||||||
extern void EnterWindow(DeviceIntPtr dev, WindowPtr win, int mode);
|
extern void EnterWindow(DeviceIntPtr dev, WindowPtr win, int mode);
|
||||||
|
|
||||||
|
|
|
@ -162,13 +162,6 @@ extern void
|
||||||
ProcessOtherEvent(InternalEvent * /* ev */ ,
|
ProcessOtherEvent(InternalEvent * /* ev */ ,
|
||||||
DeviceIntPtr /* other */ );
|
DeviceIntPtr /* other */ );
|
||||||
|
|
||||||
extern void
|
|
||||||
DeviceFocusEvent(DeviceIntPtr /* dev */ ,
|
|
||||||
int /* type */ ,
|
|
||||||
int /* mode */ ,
|
|
||||||
int /* detail */ ,
|
|
||||||
WindowPtr /* pWin */ );
|
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
CheckGrabValues(ClientPtr /* client */ ,
|
CheckGrabValues(ClientPtr /* client */ ,
|
||||||
GrabParameters * /* param */ );
|
GrabParameters * /* param */ );
|
||||||
|
|
Loading…
Reference in New Issue