dix: split out core state and event state setting into helper functions
no functional changes. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
This commit is contained in:
parent
fb010c5436
commit
1d01e861b6
|
@ -915,7 +915,7 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
|
||||||
int key = 0, rootX, rootY;
|
int key = 0, rootX, rootY;
|
||||||
ButtonClassPtr b;
|
ButtonClassPtr b;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int corestate, i;
|
int corestate;
|
||||||
DeviceIntPtr mouse = NULL, kbd = NULL;
|
DeviceIntPtr mouse = NULL, kbd = NULL;
|
||||||
DeviceEvent *event = &ev->device_event;
|
DeviceEvent *event = &ev->device_event;
|
||||||
|
|
||||||
|
@ -945,33 +945,8 @@ ProcessOtherEvent(InternalEvent *ev, DeviceIntPtr device)
|
||||||
mouse = NULL;
|
mouse = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* core state needs to be assembled BEFORE the device is updated. */
|
corestate = event_get_corestate(mouse, kbd);
|
||||||
corestate = (kbd && kbd->key) ? XkbStateFieldFromRec(&kbd->key->xkbInfo->state) : 0;
|
event_set_state(mouse, kbd, event);
|
||||||
corestate |= (mouse && mouse->button) ? (mouse->button->state) : 0;
|
|
||||||
|
|
||||||
for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++)
|
|
||||||
if (BitIsOn(mouse->button->down, i))
|
|
||||||
SetBit(event->buttons, i);
|
|
||||||
|
|
||||||
if (kbd && kbd->key)
|
|
||||||
{
|
|
||||||
XkbStatePtr state;
|
|
||||||
/* we need the state before the event happens */
|
|
||||||
if (event->type == ET_KeyPress || event->type == ET_KeyRelease)
|
|
||||||
state = &kbd->key->xkbInfo->prev_state;
|
|
||||||
else
|
|
||||||
state = &kbd->key->xkbInfo->state;
|
|
||||||
|
|
||||||
event->mods.base = state->base_mods;
|
|
||||||
event->mods.latched = state->latched_mods;
|
|
||||||
event->mods.locked = state->locked_mods;
|
|
||||||
event->mods.effective = state->mods;
|
|
||||||
|
|
||||||
event->group.base = state->base_group;
|
|
||||||
event->group.latched = state->latched_group;
|
|
||||||
event->group.locked = state->locked_group;
|
|
||||||
event->group.effective = state->group;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = UpdateDeviceState(device, event);
|
ret = UpdateDeviceState(device, event);
|
||||||
if (ret == DONT_PROCESS)
|
if (ret == DONT_PROCESS)
|
||||||
|
|
|
@ -657,6 +657,45 @@ void init_device_event(DeviceEvent *event, DeviceIntPtr dev, Time ms)
|
||||||
event->sourceid = dev->id;
|
event->sourceid = dev->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int event_get_corestate(DeviceIntPtr mouse, DeviceIntPtr kbd)
|
||||||
|
{
|
||||||
|
int corestate;
|
||||||
|
/* core state needs to be assembled BEFORE the device is updated. */
|
||||||
|
corestate = (kbd && kbd->key) ? XkbStateFieldFromRec(&kbd->key->xkbInfo->state) : 0;
|
||||||
|
corestate |= (mouse && mouse->button) ? (mouse->button->state) : 0;
|
||||||
|
return corestate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void event_set_state(DeviceIntPtr mouse, DeviceIntPtr kbd, DeviceEvent *event)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; mouse && mouse->button && i < mouse->button->numButtons; i++)
|
||||||
|
if (BitIsOn(mouse->button->down, i))
|
||||||
|
SetBit(event->buttons, i);
|
||||||
|
|
||||||
|
if (kbd && kbd->key)
|
||||||
|
{
|
||||||
|
XkbStatePtr state;
|
||||||
|
/* we need the state before the event happens */
|
||||||
|
if (event->type == ET_KeyPress || event->type == ET_KeyRelease)
|
||||||
|
state = &kbd->key->xkbInfo->prev_state;
|
||||||
|
else
|
||||||
|
state = &kbd->key->xkbInfo->state;
|
||||||
|
|
||||||
|
event->mods.base = state->base_mods;
|
||||||
|
event->mods.latched = state->latched_mods;
|
||||||
|
event->mods.locked = state->locked_mods;
|
||||||
|
event->mods.effective = state->mods;
|
||||||
|
|
||||||
|
event->group.base = state->base_group;
|
||||||
|
event->group.latched = state->latched_group;
|
||||||
|
event->group.locked = state->locked_group;
|
||||||
|
event->group.effective = state->group;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
point_on_screen(ScreenPtr pScreen, int x, int y)
|
point_on_screen(ScreenPtr pScreen, int x, int y)
|
||||||
{
|
{
|
||||||
|
|
|
@ -40,6 +40,8 @@ struct _ValuatorMask {
|
||||||
|
|
||||||
extern void verify_internal_event(const InternalEvent *ev);
|
extern void verify_internal_event(const InternalEvent *ev);
|
||||||
extern void init_device_event(DeviceEvent *event, DeviceIntPtr dev, Time ms);
|
extern void init_device_event(DeviceEvent *event, DeviceIntPtr dev, Time ms);
|
||||||
|
extern int event_get_corestate(DeviceIntPtr mouse, DeviceIntPtr kbd);
|
||||||
|
extern void event_set_state(DeviceIntPtr mouse, DeviceIntPtr kbd, DeviceEvent *event);
|
||||||
|
|
||||||
FP3232 double_to_fp3232(double in);
|
FP3232 double_to_fp3232(double in);
|
||||||
FP1616 double_to_fp1616(double in);
|
FP1616 double_to_fp1616(double in);
|
||||||
|
|
Loading…
Reference in New Issue