xkb: factor out state update into a function

No functional changes

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
This commit is contained in:
Peter Hutterer 2014-02-26 16:16:10 +10:00
parent dda2468e57
commit 656841798c

View File

@ -1143,13 +1143,43 @@ _XkbEnsureStateChange(XkbSrvInfoPtr xkbi)
return genStateNotify; return genStateNotify;
} }
static void
_XkbApplyState(DeviceIntPtr dev, Bool genStateNotify, int evtype, int key)
{
XkbSrvInfoPtr xkbi = dev->key->xkbInfo;
int changed;
XkbComputeDerivedState(xkbi);
changed = XkbStateChangedFlags(&xkbi->prev_state, &xkbi->state);
if (genStateNotify) {
if (changed) {
xkbStateNotify sn;
sn.keycode = key;
sn.eventType = evtype;
sn.requestMajor = sn.requestMinor = 0;
sn.changed = changed;
XkbSendStateNotify(dev, &sn);
}
xkbi->flags &= ~_XkbStateNotifyInProgress;
}
changed = XkbIndicatorsToUpdate(dev, changed, FALSE);
if (changed) {
XkbEventCauseRec cause;
XkbSetCauseKey(&cause, key, evtype);
XkbUpdateIndicators(dev, changed, FALSE, NULL, &cause);
}
}
void void
XkbHandleActions(DeviceIntPtr dev, DeviceIntPtr kbd, DeviceEvent *event) XkbHandleActions(DeviceIntPtr dev, DeviceIntPtr kbd, DeviceEvent *event)
{ {
int key, bit, i; int key, bit, i;
XkbSrvInfoPtr xkbi; XkbSrvInfoPtr xkbi;
KeyClassPtr keyc; KeyClassPtr keyc;
int changed, sendEvent; int sendEvent;
Bool genStateNotify; Bool genStateNotify;
XkbAction act; XkbAction act;
XkbFilterPtr filter; XkbFilterPtr filter;
@ -1296,28 +1326,7 @@ XkbHandleActions(DeviceIntPtr dev, DeviceIntPtr kbd, DeviceEvent *event)
FixKeyState(event, dev); FixKeyState(event, dev);
} }
XkbComputeDerivedState(xkbi); _XkbApplyState(dev, genStateNotify, event->type, key);
changed = XkbStateChangedFlags(&xkbi->prev_state, &xkbi->state);
if (genStateNotify) {
if (changed) {
xkbStateNotify sn;
sn.keycode = key;
sn.eventType = event->type;
sn.requestMajor = sn.requestMinor = 0;
sn.changed = changed;
XkbSendStateNotify(dev, &sn);
}
xkbi->flags &= ~_XkbStateNotifyInProgress;
}
changed = XkbIndicatorsToUpdate(dev, changed, FALSE);
if (changed) {
XkbEventCauseRec cause;
XkbSetCauseKey(&cause, key, event->type);
XkbUpdateIndicators(dev, changed, FALSE, NULL, &cause);
}
return;
} }
int int