XKB: Explicitly decode action data
Rather than requiring a one-to-one correspondence between XKM and struct formats in action data, explicitly fill the action data, so we can break API. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
699824a357
commit
edeb033f29
|
@ -417,6 +417,7 @@ xkmSymInterpretDesc wire;
|
|||
unsigned tmp;
|
||||
int nRead=0;
|
||||
XkbCompatMapPtr compat;
|
||||
XkbAction *act;
|
||||
|
||||
if ((tmp= XkmGetCountedString(file,name,100))<1) {
|
||||
_XkbLibError(_XkbErrBadLength,"ReadXkmCompatMap",0);
|
||||
|
@ -447,13 +448,96 @@ XkbCompatMapPtr compat;
|
|||
interp->virtual_mod= wire.virtualMod;
|
||||
interp->flags= wire.flags;
|
||||
interp->act.type= wire.actionType;
|
||||
interp->act.data[0]= wire.actionData[0];
|
||||
interp->act.data[1]= wire.actionData[1];
|
||||
interp->act.data[2]= wire.actionData[2];
|
||||
interp->act.data[3]= wire.actionData[3];
|
||||
interp->act.data[4]= wire.actionData[4];
|
||||
interp->act.data[5]= wire.actionData[5];
|
||||
interp->act.data[6]= wire.actionData[6];
|
||||
act = (XkbAction *) &interp->act;
|
||||
|
||||
switch (interp->act.type) {
|
||||
case XkbSA_SetMods:
|
||||
case XkbSA_LatchMods:
|
||||
case XkbSA_LockMods:
|
||||
act->mods.flags = wire.actionData[0];
|
||||
act->mods.mask = wire.actionData[1];
|
||||
act->mods.real_mods = wire.actionData[2];
|
||||
act->mods.vmods1 = wire.actionData[3];
|
||||
act->mods.vmods2 = wire.actionData[4];
|
||||
break;
|
||||
case XkbSA_SetGroup:
|
||||
case XkbSA_LatchGroup:
|
||||
case XkbSA_LockGroup:
|
||||
act->group.flags = wire.actionData[0];
|
||||
act->group.group_XXX = wire.actionData[1];
|
||||
break;
|
||||
case XkbSA_MovePtr:
|
||||
act->ptr.flags = wire.actionData[0];
|
||||
act->ptr.high_XXX = wire.actionData[1];
|
||||
act->ptr.low_XXX = wire.actionData[2];
|
||||
act->ptr.high_YYY = wire.actionData[3];
|
||||
act->ptr.low_YYY = wire.actionData[4];
|
||||
break;
|
||||
case XkbSA_PtrBtn:
|
||||
case XkbSA_LockPtrBtn:
|
||||
act->btn.flags = wire.actionData[0];
|
||||
act->btn.count = wire.actionData[1];
|
||||
act->btn.button = wire.actionData[2];
|
||||
break;
|
||||
case XkbSA_DeviceBtn:
|
||||
case XkbSA_LockDeviceBtn:
|
||||
act->devbtn.flags = wire.actionData[0];
|
||||
act->devbtn.count = wire.actionData[1];
|
||||
act->devbtn.button = wire.actionData[2];
|
||||
act->devbtn.device = wire.actionData[3];
|
||||
break;
|
||||
case XkbSA_SetPtrDflt:
|
||||
act->dflt.flags = wire.actionData[0];
|
||||
act->dflt.affect = wire.actionData[1];
|
||||
act->dflt.valueXXX = wire.actionData[2];
|
||||
break;
|
||||
case XkbSA_ISOLock:
|
||||
act->iso.flags = wire.actionData[0];
|
||||
act->iso.mask = wire.actionData[1];
|
||||
act->iso.real_mods = wire.actionData[2];
|
||||
act->iso.group_XXX = wire.actionData[3];
|
||||
act->iso.affect = wire.actionData[4];
|
||||
act->iso.vmods1 = wire.actionData[5];
|
||||
act->iso.vmods2 = wire.actionData[6];
|
||||
break;
|
||||
case XkbSA_SwitchScreen:
|
||||
act->screen.flags = wire.actionData[0];
|
||||
act->screen.screenXXX = wire.actionData[1];
|
||||
break;
|
||||
case XkbSA_SetControls:
|
||||
case XkbSA_LockControls:
|
||||
act->ctrls.flags = wire.actionData[0];
|
||||
act->ctrls.ctrls3 = wire.actionData[1];
|
||||
act->ctrls.ctrls2 = wire.actionData[2];
|
||||
act->ctrls.ctrls1 = wire.actionData[3];
|
||||
act->ctrls.ctrls0 = wire.actionData[4];
|
||||
break;
|
||||
case XkbSA_RedirectKey:
|
||||
act->redirect.new_key = wire.actionData[0];
|
||||
act->redirect.mods_mask = wire.actionData[1];
|
||||
act->redirect.mods = wire.actionData[2];
|
||||
act->redirect.vmods_mask0 = wire.actionData[3];
|
||||
act->redirect.vmods_mask1 = wire.actionData[4];
|
||||
act->redirect.vmods0 = wire.actionData[4];
|
||||
act->redirect.vmods1 = wire.actionData[5];
|
||||
break;
|
||||
case XkbSA_DeviceValuator:
|
||||
act->devval.device = wire.actionData[0];
|
||||
act->devval.v1_what = wire.actionData[1];
|
||||
act->devval.v1_ndx = wire.actionData[2];
|
||||
act->devval.v1_value = wire.actionData[3];
|
||||
act->devval.v2_what = wire.actionData[4];
|
||||
act->devval.v2_ndx = wire.actionData[5];
|
||||
act->devval.v2_what = wire.actionData[6];
|
||||
break;
|
||||
case XkbSA_XFree86Private:
|
||||
case XkbSA_Terminate:
|
||||
/* no args, kinda (note: untrue for xfree86). */
|
||||
break;
|
||||
case XkbSA_ActionMessage:
|
||||
/* unsupported. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((num_si>0)&&(changes)) {
|
||||
changes->compat.first_si= 0;
|
||||
|
|
Loading…
Reference in New Issue