Remove the XKB_NUM_VIRTUAL_MODIFIERS limit
[platform/upstream/libxkbcommon.git] / src / text.c
index 3c10794..118820b 100644 (file)
@@ -24,6 +24,7 @@
  *
  ********************************************************/
 
+#include "keymap.h"
 #include "text.h"
 
 bool
@@ -58,20 +59,20 @@ LookupValue(const LookupEntry tab[], unsigned int value)
 }
 
 const LookupEntry ctrlMaskNames[] = {
-    { "RepeatKeys", XkbRepeatKeysMask },
-    { "Repeat", XkbRepeatKeysMask },
-    { "AutoRepeat", XkbRepeatKeysMask },
-    { "SlowKeys", XkbSlowKeysMask },
-    { "BounceKeys", XkbBounceKeysMask },
-    { "StickyKeys", XkbStickyKeysMask },
-    { "MouseKeys", XkbMouseKeysMask },
-    { "MouseKeysAccel", XkbMouseKeysAccelMask },
-    { "AccessXKeys", XkbAccessXKeysMask },
-    { "AccessXTimeout", XkbAccessXTimeoutMask },
-    { "AccessXFeedback", XkbAccessXFeedbackMask },
-    { "AudibleBell", XkbAudibleBellMask },
-    { "IgnoreGroupLock", XkbIgnoreGroupLockMask },
-    { "all", XkbAllBooleanCtrlsMask },
+    { "RepeatKeys", CONTROL_REPEAT },
+    { "Repeat", CONTROL_REPEAT },
+    { "AutoRepeat", CONTROL_REPEAT },
+    { "SlowKeys", CONTROL_SLOW },
+    { "BounceKeys", CONTROL_DEBOUNCE },
+    { "StickyKeys", CONTROL_STICKY },
+    { "MouseKeys", CONTROL_MOUSEKEYS },
+    { "MouseKeysAccel", CONTROL_MOUSEKEYS_ACCEL },
+    { "AccessXKeys", CONTROL_AX },
+    { "AccessXTimeout", CONTROL_AX_TIMEOUT },
+    { "AccessXFeedback", CONTROL_AX_FEEDBACK },
+    { "AudibleBell", CONTROL_BELL },
+    { "IgnoreGroupLock", CONTROL_IGNORE_GROUP_LOCK },
+    { "all", CONTROL_ALL },
     { "none", 0 },
     { "Overlay1", 0 },
     { "Overlay2", 0 },
@@ -79,22 +80,22 @@ const LookupEntry ctrlMaskNames[] = {
 };
 
 const LookupEntry modComponentMaskNames[] = {
-    {"base", XkbIM_UseBase},
-    {"latched", XkbIM_UseLatched},
-    {"locked", XkbIM_UseLocked},
-    {"effective", XkbIM_UseEffective},
-    {"compat", XkbIM_UseCompat},
-    {"any", XkbIM_UseAnyMods},
+    {"base", XKB_STATE_DEPRESSED},
+    {"latched", XKB_STATE_LATCHED},
+    {"locked", XKB_STATE_LOCKED},
+    {"effective", XKB_STATE_EFFECTIVE},
+    {"compat", XKB_STATE_EFFECTIVE},
+    {"any", XKB_STATE_EFFECTIVE},
     {"none", 0},
     {NULL, 0}
 };
 
 const LookupEntry groupComponentMaskNames[] = {
-    {"base", XkbIM_UseBase},
-    {"latched", XkbIM_UseLatched},
-    {"locked", XkbIM_UseLocked},
-    {"effective", XkbIM_UseEffective},
-    {"any", XkbIM_UseAnyGroup},
+    {"base", XKB_STATE_DEPRESSED},
+    {"latched", XKB_STATE_LATCHED},
+    {"locked", XKB_STATE_LOCKED},
+    {"effective", XKB_STATE_EFFECTIVE},
+    {"any", XKB_STATE_EFFECTIVE},
     {"none", 0},
     {NULL, 0}
 };
@@ -156,57 +157,57 @@ const LookupEntry useModMapValueNames[] = {
 };
 
 const LookupEntry actionTypeNames[] = {
-    { "NoAction", XkbSA_NoAction },
-    { "SetMods", XkbSA_SetMods },
-    { "LatchMods", XkbSA_LatchMods },
-    { "LockMods", XkbSA_LockMods },
-    { "SetGroup", XkbSA_SetGroup },
-    { "LatchGroup", XkbSA_LatchGroup },
-    { "LockGroup", XkbSA_LockGroup },
-    { "MovePtr", XkbSA_MovePtr },
-    { "MovePointer", XkbSA_MovePtr },
-    { "PtrBtn", XkbSA_PtrBtn },
-    { "PointerButton", XkbSA_PtrBtn },
-    { "LockPtrBtn", XkbSA_LockPtrBtn },
-    { "LockPtrButton", XkbSA_LockPtrBtn },
-    { "LockPointerButton", XkbSA_LockPtrBtn },
-    { "LockPointerBtn", XkbSA_LockPtrBtn },
-    { "SetPtrDflt", XkbSA_SetPtrDflt },
-    { "SetPointerDefault", XkbSA_SetPtrDflt },
-    { "Terminate", XkbSA_Terminate },
-    { "TerminateServer", XkbSA_Terminate },
-    { "SwitchScreen", XkbSA_SwitchScreen },
-    { "SetControls", XkbSA_SetControls },
-    { "LockControls", XkbSA_LockControls },
-    { "RedirectKey", XkbSA_RedirectKey },
-    { "Redirect", XkbSA_RedirectKey },
-    { "Private", PrivateAction },
+    { "NoAction", ACTION_TYPE_NONE },
+    { "SetMods", ACTION_TYPE_MOD_SET },
+    { "LatchMods", ACTION_TYPE_MOD_LATCH },
+    { "LockMods", ACTION_TYPE_MOD_LOCK },
+    { "SetGroup", ACTION_TYPE_GROUP_SET },
+    { "LatchGroup", ACTION_TYPE_GROUP_LATCH },
+    { "LockGroup", ACTION_TYPE_GROUP_LOCK },
+    { "MovePtr", ACTION_TYPE_PTR_MOVE },
+    { "MovePointer", ACTION_TYPE_PTR_MOVE },
+    { "PtrBtn", ACTION_TYPE_PTR_BUTTON },
+    { "PointerButton", ACTION_TYPE_PTR_BUTTON },
+    { "LockPtrBtn", ACTION_TYPE_PTR_LOCK },
+    { "LockPtrButton", ACTION_TYPE_PTR_LOCK },
+    { "LockPointerButton", ACTION_TYPE_PTR_LOCK },
+    { "LockPointerBtn", ACTION_TYPE_PTR_LOCK },
+    { "SetPtrDflt", ACTION_TYPE_PTR_DEFAULT },
+    { "SetPointerDefault", ACTION_TYPE_PTR_DEFAULT },
+    { "Terminate", ACTION_TYPE_TERMINATE },
+    { "TerminateServer", ACTION_TYPE_TERMINATE },
+    { "SwitchScreen", ACTION_TYPE_SWITCH_VT },
+    { "SetControls", ACTION_TYPE_CTRL_SET },
+    { "LockControls", ACTION_TYPE_CTRL_LOCK },
+    { "RedirectKey", ACTION_TYPE_KEY_REDIRECT },
+    { "Redirect", ACTION_TYPE_KEY_REDIRECT },
+    { "Private", ACTION_TYPE_PRIVATE },
     /* deprecated actions below here - unused */
-    { "ISOLock", XkbSA_NoAction },
-    { "ActionMessage", XkbSA_NoAction },
-    { "MessageAction", XkbSA_NoAction },
-    { "Message", XkbSA_NoAction },
-    { "DeviceBtn", XkbSA_NoAction },
-    { "DevBtn", XkbSA_NoAction },
-    { "DevButton", XkbSA_NoAction },
-    { "DeviceButton", XkbSA_NoAction },
-    { "LockDeviceBtn", XkbSA_NoAction },
-    { "LockDevBtn", XkbSA_NoAction },
-    { "LockDevButton", XkbSA_NoAction },
-    { "LockDeviceButton", XkbSA_NoAction },
-    { "DeviceValuator", XkbSA_NoAction },
-    { "DevVal", XkbSA_NoAction },
-    { "DeviceVal", XkbSA_NoAction },
-    { "DevValuator", XkbSA_NoAction },
+    { "ISOLock", ACTION_TYPE_NONE },
+    { "ActionMessage", ACTION_TYPE_NONE },
+    { "MessageAction", ACTION_TYPE_NONE },
+    { "Message", ACTION_TYPE_NONE },
+    { "DeviceBtn", ACTION_TYPE_NONE },
+    { "DevBtn", ACTION_TYPE_NONE },
+    { "DevButton", ACTION_TYPE_NONE },
+    { "DeviceButton", ACTION_TYPE_NONE },
+    { "LockDeviceBtn", ACTION_TYPE_NONE },
+    { "LockDevBtn", ACTION_TYPE_NONE },
+    { "LockDevButton", ACTION_TYPE_NONE },
+    { "LockDeviceButton", ACTION_TYPE_NONE },
+    { "DeviceValuator", ACTION_TYPE_NONE },
+    { "DevVal", ACTION_TYPE_NONE },
+    { "DeviceVal", ACTION_TYPE_NONE },
+    { "DevValuator", ACTION_TYPE_NONE },
     { NULL, 0 },
 };
 
 const LookupEntry symInterpretMatchMaskNames[] = {
-    { "NoneOf", XkbSI_NoneOf },
-    { "AnyOfOrNone", XkbSI_AnyOfOrNone },
-    { "AnyOf", XkbSI_AnyOf },
-    { "AllOf", XkbSI_AllOf },
-    { "Exactly", XkbSI_Exactly },
+    { "NoneOf", MATCH_NONE },
+    { "AnyOfOrNone", MATCH_ANY_OR_NONE },
+    { "AnyOf", MATCH_ANY },
+    { "AllOf", MATCH_ALL },
+    { "Exactly", MATCH_EXACTLY },
 };
 
 #define BUFFER_SIZE 1024
@@ -230,36 +231,14 @@ GetBuffer(size_t size)
     return rtrn;
 }
 
-/*
- * Get a vmod name's text, where the vmod index is zero based
- * (0..XKB_NUM_VIRTUAL_MODS-1).
- */
+/* Get a vmod name's text, where the vmod index is zero based. */
 static const char *
 VModIndexText(struct xkb_keymap *keymap, xkb_mod_index_t ndx)
 {
-    int len;
-    char *rtrn;
-    const char *tmp = NULL;
-    char buf[20];
-
-    if (ndx >= XKB_NUM_VIRTUAL_MODS)
-         tmp = "illegal";
-    else
-         tmp = xkb_atom_text(keymap->ctx, keymap->vmod_names[ndx]);
-
-    if (!tmp) {
-        snprintf(buf, sizeof(buf) - 1, "%d", ndx);
-        tmp = buf;
-    }
-
-    len = strlen(tmp) + 1;
-    if (len >= BUFFER_SIZE)
-        len = BUFFER_SIZE - 1;
-
-    rtrn = GetBuffer(len);
-    strncpy(rtrn, tmp, len);
-
-    return rtrn;
+    if (ndx >= darray_size(keymap->vmods))
+        return "illegal";
+    return xkb_atom_text(keymap->ctx,
+                         darray_item(keymap->vmods, ndx).name);
 }
 
 /* Get a mod mask's text, where the mask is in rmods+vmods format. */
@@ -267,7 +246,6 @@ const char *
 VModMaskText(struct xkb_keymap *keymap, xkb_mod_mask_t cmask)
 {
     xkb_mod_index_t i;
-    xkb_mod_mask_t bit;
     xkb_mod_mask_t rmask, vmask;
     int len, rem;
     const char *mm = NULL;
@@ -288,9 +266,8 @@ VModMaskText(struct xkb_keymap *keymap, xkb_mod_mask_t cmask)
     rem = BUFFER_SIZE;
 
     if (vmask != 0) {
-        for (i = 0, bit = 1; i < XKB_NUM_VIRTUAL_MODS && rem > 1; i++, bit <<=
-                 1) {
-            if (!(vmask & bit))
+        for (i = 0; i < darray_size(keymap->vmods) && rem > 1; i++) {
+            if (!(vmask & (1 << i)))
                 continue;
 
             len = snprintf(str, rem, "%s%s",
@@ -427,35 +404,28 @@ KeysymText(xkb_keysym_t sym)
 }
 
 const char *
-KeyNameText(const char name[XKB_KEY_NAME_LENGTH])
+KeyNameText(struct xkb_context *ctx, xkb_atom_t name)
 {
-    char *buf;
-    int len;
-
-    buf = GetBuffer(7);
-    buf[0] = '<';
-    strncpy(&buf[1], name, 4);
-    buf[5] = '\0';
-    len = strlen(buf);
-    buf[len++] = '>';
-    buf[len] = '\0';
-
+    const char *sname = xkb_atom_text(ctx, name);
+    size_t len = strlen(sname) + 3;
+    char *buf = GetBuffer(len);
+    snprintf(buf, len, "<%s>", sname);
     return buf;
 }
 
 const char *
-SIMatchText(unsigned type)
+SIMatchText(enum xkb_match_operation type)
 {
     const char *name;
     char *buf;
 
-    type &= XkbSI_OpMask;
+    type &= MATCH_OP_MASK;
 
     name = LookupValue(symInterpretMatchMaskNames, type);
     if (name)
         return name;
 
     buf = GetBuffer(40);
-    snprintf(buf, 40, "0x%x", type & XkbSI_OpMask);
+    snprintf(buf, 40, "0x%x", type);
     return buf;
 }