Regroup actions into current vs. deprecated, resize vmod

Use Xkbc* for all our actions that we intend to keep around, and Xkb*
for deprecated ones we can hopefully get rid of, at least internally.

While we're at it, make vmods be a uint32_t.

Signed-off-by: Daniel Stone <daniel@fooishbar.org>
master
Daniel Stone 2010-06-17 00:51:49 +01:00
parent e564235b43
commit d2d787df65
4 changed files with 92 additions and 61 deletions

View File

@ -28,85 +28,116 @@ authorization from the authors.
#ifndef _XKBCOMMON_H_
#define _XKBCOMMON_H_
#include <stdint.h>
#include <stdio.h>
#include <X11/Xfuncproto.h>
#include <X11/extensions/XKBstrcommon.h>
#include <X11/extensions/XKBrulescommon.h>
/* Action structures used in the server */
#define XkbcAnyActionDataSize 18
typedef struct _XkbcAnyAction {
unsigned char type;
unsigned char pad[XkbcAnyActionDataSize];
} XkbcAnyAction;
typedef struct _XkbcModAction {
unsigned char type;
unsigned char flags;
unsigned char mask;
unsigned char real_mods;
unsigned int vmods;
uint8_t flags;
uint32_t mask;
uint32_t real_mods;
uint32_t vmods;
} XkbcModAction;
typedef struct _XkbcGroupAction {
unsigned char type;
unsigned char flags;
int16_t group;
} XkbcGroupAction;
typedef struct _XkbcISOAction {
unsigned char type;
unsigned char flags;
unsigned char mask;
unsigned char real_mods;
/* FIXME: Make this an int. */
char group_XXX;
unsigned char affect;
unsigned int vmods;
uint8_t flags;
int16_t group;
uint32_t mask;
uint32_t vmods;
uint32_t real_mods;
uint8_t affect;
} XkbcISOAction;
typedef struct _XkbcPtrAction {
unsigned char type;
unsigned char flags;
int x;
int y;
} XkbcPtrAction;
typedef struct _XkbcCtrlsAction {
unsigned char type;
unsigned char flags;
unsigned long ctrls;
uint32_t ctrls;
} XkbcCtrlsAction;
typedef struct _XkbcRedirectKeyAction {
typedef struct _XkbcDeviceBtnAction {
unsigned char type;
unsigned char new_key;
unsigned char mods_mask;
unsigned char mods;
unsigned int vmods_mask;
unsigned int vmods;
} XkbcRedirectKeyAction;
unsigned char flags;
uint16_t device;
uint16_t button;
uint8_t count;
} XkbcDeviceBtnAction;
typedef struct _XkbcDeviceValuatorAction {
unsigned char type;
uint8_t v1_what;
uint16_t device;
uint16_t v1_index;
int16_t v1_value;
uint16_t v2_index;
int16_t v2_value;
uint8_t v2_what;
} XkbcDeviceValuatorAction;
typedef struct _XkbcPtrDfltAction {
unsigned char type;
uint8_t flags;
uint8_t affect;
uint8_t value;
} XkbcPtrDfltAction;
typedef struct _XkbcSwitchScreenAction {
unsigned char type;
uint8_t flags;
uint8_t screen;
} XkbcSwitchScreenAction;
typedef union _XkbcAction {
XkbAnyAction any;
XkbcModAction mods;
XkbGroupAction group;
XkbcISOAction iso;
XkbcPtrAction ptr;
XkbPtrBtnAction btn;
XkbPtrDfltAction dflt;
XkbSwitchScreenAction screen;
XkbcCtrlsAction ctrls;
XkbMessageAction msg;
XkbcRedirectKeyAction redirect;
XkbDeviceBtnAction devbtn;
XkbDeviceValuatorAction devval;
XkbcAnyAction any;
XkbcModAction mods;
XkbcGroupAction group;
XkbcISOAction iso;
XkbcCtrlsAction ctrls;
XkbcDeviceBtnAction devbtn;
XkbcDeviceValuatorAction devval;
XkbcPtrDfltAction dflt;
XkbcSwitchScreenAction screen;
XkbRedirectKeyAction redirect; /* XXX wholly unnecessary? */
XkbPtrAction ptr; /* XXX delete for DeviceValuator */
XkbPtrBtnAction btn; /* XXX delete for DeviceBtn */
XkbMessageAction msg; /* XXX just delete */
unsigned char type;
} XkbcAction;
typedef struct _XkbcServerMapRec {
unsigned short num_acts;
unsigned short size_acts;
XkbcAction * acts;
XkbBehavior * behaviors;
unsigned short * key_acts;
#if defined(__cplusplus) || defined(c_plusplus)
/* explicit is a C++ reserved word */
unsigned char * c_explicit;
#else
unsigned char * explicit;
#endif
unsigned char vmods[XkbNumVirtualMods];
unsigned short * vmodmap;
XkbcAction *acts;
XkbBehavior *behaviors;
unsigned short *key_acts;
unsigned char *explicits;
uint32_t vmods[XkbNumVirtualMods];
uint32_t *vmodmap;
} XkbcServerMapRec, *XkbcServerMapPtr;
/* Common keyboard description structure */

View File

@ -221,7 +221,7 @@ XkbcAllocServerMap(XkbcDescPtr xkb, unsigned which, unsigned nNewActions)
if (!map->vmodmap) {
i = xkb->max_key_code + 1;
map->vmodmap = _XkbTypedCalloc(i, unsigned short);
map->vmodmap = _XkbTypedCalloc(i, uint32_t);
if (!map->vmodmap)
return BadAlloc;
}
@ -770,18 +770,18 @@ XkbcChangeKeycodeRange(XkbcDescPtr xkb, int minKC, int maxKC,
}
if (xkb->server->vmodmap) {
unsigned short *prev_vmodmap = xkb->server->vmodmap;
uint32_t *prev_vmodmap = xkb->server->vmodmap;
xkb->server->vmodmap = _XkbTypedRealloc(xkb->server->vmodmap,
maxKC + 1,
unsigned short);
uint32_t);
if (!xkb->server->vmodmap) {
_XkbFree(prev_vmodmap);
return BadAlloc;
}
bzero(&xkb->server->vmodmap[xkb->max_key_code],
tmp * sizeof(unsigned short));
tmp * sizeof(uint32_t));
if (changes)
changes->map.changed = _ExtendRange(changes->map.changed,
XkbVirtualModMapMask, maxKC,

View File

@ -587,10 +587,10 @@ HandleMovePtr(XkbcDescPtr xkb,
unsigned field, ExprDef * array_ndx, ExprDef * value)
{
ExprResult rtrn;
XkbcPtrAction *act;
XkbPtrAction *act;
Bool absolute;
act = (XkbcPtrAction *) action;
act = (XkbPtrAction *) action;
if ((array_ndx != NULL) && ((field == F_X) || (field == F_Y)))
return ReportActionNotArray(action->type, field);
@ -606,13 +606,13 @@ HandleMovePtr(XkbcDescPtr xkb,
{
if (absolute)
act->flags |= XkbSA_MoveAbsoluteX;
act->x = rtrn.ival;
XkbSetPtrActionX(act, rtrn.ival);
}
else
{
if (absolute)
act->flags |= XkbSA_MoveAbsoluteY;
act->y = rtrn.ival;
XkbSetPtrActionY(act, rtrn.ival);
}
return True;
}
@ -813,7 +813,7 @@ HandleISOLock(XkbcDescPtr xkb,
if (CheckGroupField(action->type, value, &flags, &group))
{
act->flags = flags | XkbSA_ISODfltIsGroup;
XkbSASetGroup(act, group);
act->group = group;
return True;
}
return False;
@ -1036,14 +1036,14 @@ HandleRedirectKey(XkbcDescPtr xkb,
unsigned field, ExprDef * array_ndx, ExprDef * value)
{
ExprResult rtrn;
XkbcRedirectKeyAction *act;
XkbRedirectKeyAction *act;
unsigned t1, t2;
unsigned long tmp;
if (array_ndx != NULL)
return ReportActionNotArray(action->type, field);
act = (XkbcRedirectKeyAction *) action;
act = (XkbRedirectKeyAction *) action;
switch (field)
{
case F_Keycode:
@ -1069,11 +1069,11 @@ HandleRedirectKey(XkbcDescPtr xkb,
act->mods &= ~(t2 & 0xff);
t2 = (t2 >> 8) & 0xffff;
act->vmods_mask |= t2;
XkbSARedirectSetVModsMask(act, XkbSARedirectVModsMask(act) | t2);
if (field == F_Modifiers)
act->vmods |= t2;
XkbSARedirectSetVMods(act, XkbSARedirectVMods(act) | t2);
else
act->vmods &= ~t2;
XkbSARedirectSetVMods(act, XkbSARedirectVMods(act) & ~t2);
return True;
}
return True;
@ -1277,7 +1277,7 @@ ApplyActionFactoryDefaults(XkbcAction * action)
{ /* increment default button */
action->dflt.affect = XkbSA_AffectDfltBtn;
action->dflt.flags = 0;
XkbSASetPtrDfltValue(&action->dflt, 1);
action->dflt.value = 1;
}
else if (action->type == XkbSA_ISOLock)
{

View File

@ -118,7 +118,7 @@ InitCompatInfo(CompatInfo * info, XkbcDescPtr xkb)
info->dflt.interp.flags = 0;
info->dflt.interp.virtual_mod = XkbNoModifier;
info->dflt.interp.act.type = XkbSA_NoAction;
for (i = 0; i < XkbAnyActionDataSize; i++)
for (i = 0; i < XkbcAnyActionDataSize; i++)
{
info->dflt.interp.act.data[i] = 0;
}
@ -146,7 +146,7 @@ ClearCompatInfo(CompatInfo * info, XkbcDescPtr xkb)
info->dflt.interp.flags = 0;
info->dflt.interp.virtual_mod = XkbNoModifier;
info->dflt.interp.act.type = XkbSA_NoAction;
for (i = 0; i < XkbAnyActionDataSize; i++)
for (i = 0; i < XkbcAnyActionDataSize; i++)
{
info->dflt.interp.act.data[i] = 0;
}