From 125691573ce4b28a2c65a234c612f91ce573f838 Mon Sep 17 00:00:00 2001 From: Kristian Høgsberg Date: Wed, 20 Oct 2010 15:57:45 -0400 Subject: Restore compatible action structs This unbreaks the X server code to serialize an xkb_desc, but loses the 32 bit vmod fields. Needs some work... --- include/X11/extensions/XKBcommon.h | 103 +++++++++++++++---------------------- src/xkbcomp/action.c | 16 +++--- src/xkbcomp/compat.c | 8 +-- 3 files changed, 54 insertions(+), 73 deletions(-) diff --git a/include/X11/extensions/XKBcommon.h b/include/X11/extensions/XKBcommon.h index 6bf7d8a..9a42834 100644 --- a/include/X11/extensions/XKBcommon.h +++ b/include/X11/extensions/XKBcommon.h @@ -85,118 +85,99 @@ struct xkb_rule_names { }; struct xkb_any_action { - unsigned char type; - unsigned char pad[18]; + uint8_t type; + uint8_t data[7]; }; struct xkb_mod_action { - unsigned char type; + uint8_t type; uint8_t flags; + uint8_t mask; uint8_t real_mods; - uint32_t mask; - uint32_t vmods; + uint16_t vmods; }; struct xkb_group_action { - unsigned char type; - unsigned char flags; + uint8_t type; + uint8_t flags; int16_t group; }; struct xkb_iso_action { - unsigned char type; + uint8_t type; uint8_t flags; - int16_t group; - uint32_t mask; - uint32_t vmods; + uint8_t mask; uint8_t real_mods; - - uint8_t affect; + uint8_t group; + uint8_t affect; + uint16_t vmods; }; struct xkb_controls_action { - unsigned char type; + uint8_t type; uint8_t flags; uint32_t ctrls; }; struct xkb_device_button_action { - unsigned char type; + uint8_t type; uint8_t flags; - uint16_t device; - uint16_t button; uint8_t count; + uint8_t button; + uint8_t device; }; struct xkb_device_valuator_action { - unsigned char type; + uint8_t type; + uint8_t device; 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 v1_index; + uint8_t v1_value; uint8_t v2_what; + uint8_t v2_index; + uint8_t v2_value; }; struct xkb_pointer_default_action { - unsigned char type; + uint8_t type; uint8_t flags; uint8_t affect; uint8_t value; }; struct xkb_switch_screen_action { - unsigned char type; + uint8_t type; uint8_t flags; uint8_t screen; }; struct xkb_redirect_key_action { - unsigned char type; - unsigned char new_key; - unsigned char mods_mask; - unsigned char mods; - unsigned char vmods_mask0; - unsigned char vmods_mask1; - unsigned char vmods0; - unsigned char vmods1; -}; -#define XkbSARedirectVMods(a) ((((unsigned int)(a)->vmods1)<<8)|\ - ((unsigned int)(a)->vmods0)) -#define XkbSARedirectSetVMods(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ - ((a)->vmods_mask0=((m)&0xff))) -#define XkbSARedirectVModsMask(a) ((((unsigned int)(a)->vmods_mask1)<<8)|\ - ((unsigned int)(a)->vmods_mask0)) -#define XkbSARedirectSetVModsMask(a,m) (((a)->vmods_mask1=(((m)>>8)&0xff)),\ - ((a)->vmods_mask0=((m)&0xff))) - + uint8_t type; + uint8_t new_key; + uint8_t mods_mask; + uint8_t mods; + uint16_t vmods_mask; + uint16_t vmods; +}; struct xkb_pointer_action { - unsigned char type; - unsigned char flags; - unsigned char high_XXX; - unsigned char low_XXX; - unsigned char high_YYY; - unsigned char low_YYY; + uint8_t type; + uint8_t flags; + uint16_t x; + uint16_t y; }; -#define XkbIntTo2Chars(i,h,l) (((h)=((i>>8)&0xff)),((l)=((i)&0xff))) -#define XkbPtrActionX(a) (Xkb2CharsToInt((a)->high_XXX,(a)->low_XXX)) -#define XkbPtrActionY(a) (Xkb2CharsToInt((a)->high_YYY,(a)->low_YYY)) -#define XkbSetPtrActionX(a,x) (XkbIntTo2Chars(x,(a)->high_XXX,(a)->low_XXX)) -#define XkbSetPtrActionY(a,y) (XkbIntTo2Chars(y,(a)->high_YYY,(a)->low_YYY)) struct xkb_message_action { - unsigned char type; - unsigned char flags; - unsigned char message[6]; + uint8_t type; + uint8_t flags; + uint8_t message[6]; }; struct xkb_pointer_button_action { - unsigned char type; - unsigned char flags; - unsigned char count; - unsigned char button; + uint8_t type; + uint8_t flags; + uint8_t count; + uint8_t button; }; union xkb_action { diff --git a/src/xkbcomp/action.c b/src/xkbcomp/action.c index fa6a80c..d0b5860 100644 --- a/src/xkbcomp/action.c +++ b/src/xkbcomp/action.c @@ -606,13 +606,13 @@ HandleMovePtr(struct xkb_desc * xkb, { if (absolute) act->flags |= XkbSA_MoveAbsoluteX; - XkbSetPtrActionX(act, rtrn.ival); + act->x = rtrn.ival; } else { if (absolute) act->flags |= XkbSA_MoveAbsoluteY; - XkbSetPtrActionY(act, rtrn.ival); + act->y = rtrn.ival; } return True; } @@ -1069,11 +1069,11 @@ HandleRedirectKey(struct xkb_desc * xkb, act->mods &= ~(t2 & 0xff); t2 = (t2 >> 8) & 0xffff; - XkbSARedirectSetVModsMask(act, XkbSARedirectVModsMask(act) | t2); + act->vmods_mask |= t2; if (field == F_Modifiers) - XkbSARedirectSetVMods(act, XkbSARedirectVMods(act) | t2); + act->vmods |= t2; else - XkbSARedirectSetVMods(act, XkbSARedirectVMods(act) & ~t2); + act->vmods &= ~t2; return True; } return True; @@ -1200,7 +1200,7 @@ HandlePrivate(struct xkb_desc * xkb, ACTION("Extra %d bytes ignored\n", len - 6); return False; } - strncpy((char *) action->pad, rtrn.str, sizeof action->pad); + strncpy((char *) action->data, rtrn.str, sizeof action->data); } free(rtrn.str); return True; @@ -1215,7 +1215,7 @@ HandlePrivate(struct xkb_desc * xkb, return False; } ndx = rtrn.uval; - if (ndx >= sizeof action->pad) + if (ndx >= sizeof action->data) { ERROR("The data for a private action is 18 bytes long\n"); ACTION("Attempt to use data[%d] ignored\n", ndx); @@ -1229,7 +1229,7 @@ HandlePrivate(struct xkb_desc * xkb, ACTION("Illegal datum %d ignored\n", rtrn.ival); return False; } - action->pad[ndx] = rtrn.uval; + action->data[ndx] = rtrn.uval; return True; } } diff --git a/src/xkbcomp/compat.c b/src/xkbcomp/compat.c index de2c25b..af231ff 100644 --- a/src/xkbcomp/compat.c +++ b/src/xkbcomp/compat.c @@ -119,9 +119,9 @@ InitCompatInfo(CompatInfo * info, struct xkb_desc * xkb) info->dflt.interp.flags = 0; info->dflt.interp.virtual_mod = XkbNoModifier; info->dflt.interp.act.type = XkbSA_NoAction; - for (i = 0; i < sizeof info->dflt.interp.act.pad; i++) + for (i = 0; i < sizeof info->dflt.interp.act.data; i++) { - info->dflt.interp.act.pad[i] = 0; + info->dflt.interp.act.data[i] = 0; } ClearIndicatorMapInfo(&info->ledDflt); info->ledDflt.defs.fileID = info->fileID; @@ -147,9 +147,9 @@ ClearCompatInfo(CompatInfo * info, struct xkb_desc * xkb) info->dflt.interp.flags = 0; info->dflt.interp.virtual_mod = XkbNoModifier; info->dflt.interp.act.type = XkbSA_NoAction; - for (i = 0; i < sizeof info->dflt.interp.act.pad; i++) + for (i = 0; i < sizeof info->dflt.interp.act.data; i++) { - info->dflt.interp.act.pad[i] = 0; + info->dflt.interp.act.data[i] = 0; } ClearIndicatorMapInfo(&info->ledDflt); info->nInterps = 0; -- cgit v1.2.3