Input: Remove modifierMap from core
We already have modmap (in the exact same format!) in XKB, so just use that all the time, instead of duplicating the information. Signed-off-by: Daniel Stone <daniel@fooishbar.org> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
f062e90a95
commit
32db27a7f8
|
@ -199,8 +199,6 @@ CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master)
|
|||
dk = device->key;
|
||||
mk = master->key;
|
||||
|
||||
memcpy(mk->modifierMap, dk->modifierMap, MAP_LENGTH);
|
||||
|
||||
mk->curKeySyms.minKeyCode = dk->curKeySyms.minKeyCode;
|
||||
mk->curKeySyms.maxKeyCode = dk->curKeySyms.maxKeyCode;
|
||||
SetKeySymsMap(&mk->curKeySyms, &dk->curKeySyms);
|
||||
|
@ -997,7 +995,7 @@ ProcessOtherEvent(xEventPtr xE, DeviceIntPtr device, int count)
|
|||
|
||||
if (xE->u.u.type == DeviceKeyPress) {
|
||||
if (ret == IS_REPEAT) { /* allow ddx to generate multiple downs */
|
||||
modifiers = k->modifierMap[key];
|
||||
modifiers = k->xkbInfo->desc->map->modmap[key];
|
||||
if (!modifiers) {
|
||||
xE->u.u.type = DeviceKeyRelease;
|
||||
ProcessOtherEvent(xE, device, count);
|
||||
|
|
|
@ -819,7 +819,7 @@ GetKeyboardValuatorEvents(EventList *events, DeviceIntPtr pDev, int type,
|
|||
* or we have a modifier, don't generate a repeat event. */
|
||||
if (!pDev->kbdfeed->ctrl.autoRepeat ||
|
||||
!key_autorepeats(pDev, key_code) ||
|
||||
pDev->key->modifierMap[key_code])
|
||||
pDev->key->xkbInfo->desc->map->modmap[key_code])
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
#include "input.h"
|
||||
#include "inputstr.h"
|
||||
#include "xace.h"
|
||||
#include "xkbsrv.h"
|
||||
#include "xkbstr.h"
|
||||
|
||||
/* Check if a modifier map change is okay with the device.
|
||||
* Returns -1 for BadValue, as it collides with MappingBusy; this particular
|
||||
|
@ -79,7 +81,7 @@ check_modmap_change(ClientPtr client, DeviceIntPtr dev, KeyCode *modmap)
|
|||
/* None of the old modifiers may be down while we change the map,
|
||||
* either. */
|
||||
for (i = syms->minKeyCode; i < syms->maxKeyCode; i++) {
|
||||
if (!dev->key->modifierMap[i])
|
||||
if (!dev->key->xkbInfo->desc->map->modmap[i])
|
||||
continue;
|
||||
if (key_is_down(dev, i, KEY_POSTED | KEY_PROCESSED)) {
|
||||
client->errorValue = i;
|
||||
|
@ -130,7 +132,7 @@ check_modmap_change_slave(ClientPtr client, DeviceIntPtr master,
|
|||
static void
|
||||
do_modmap_change(ClientPtr client, DeviceIntPtr dev, CARD8 *modmap)
|
||||
{
|
||||
memcpy(dev->key->modifierMap, modmap, MAP_LENGTH);
|
||||
memcpy(dev->key->xkbInfo->desc->map->modmap, modmap, MAP_LENGTH);
|
||||
SendDeviceMappingNotify(client, MappingModifier, 0, 0, dev);
|
||||
}
|
||||
|
||||
|
@ -209,7 +211,7 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
|
|||
keys_per_mod[i] = 0;
|
||||
for (i = 8; i < MAP_LENGTH; i++) {
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (dev->key->modifierMap[i] & (1 << j)) {
|
||||
if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
|
||||
if (++keys_per_mod[j] > max_keys_per_mod)
|
||||
max_keys_per_mod = keys_per_mod[j];
|
||||
}
|
||||
|
@ -225,7 +227,7 @@ int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
|
|||
|
||||
for (i = 8; i < MAP_LENGTH; i++) {
|
||||
for (j = 0; j < 8; j++) {
|
||||
if (dev->key->modifierMap[i] & (1 << j)) {
|
||||
if (dev->key->xkbInfo->desc->map->modmap[i] & (1 << j)) {
|
||||
modkeymap[(j * max_keys_per_mod) + keys_per_mod[j]] = i;
|
||||
keys_per_mod[j]++;
|
||||
}
|
||||
|
|
|
@ -427,7 +427,6 @@ static int dmxKeyboardOn(DeviceIntPtr pDevice, DMXLocalInitInfo *info)
|
|||
XkbInitKeyboardDeviceStruct(pDevice,
|
||||
&info->names,
|
||||
&info->keySyms,
|
||||
info->modMap,
|
||||
dmxKeyboardBellProc,
|
||||
dmxKeyboardKbdCtrlProc);
|
||||
|
||||
|
@ -461,7 +460,6 @@ static int dmxDeviceOnOff(DeviceIntPtr pDevice, int what)
|
|||
DevicePtr pDev = (DevicePtr) pDevice;
|
||||
InitKeyboardDeviceStruct(pDev,
|
||||
&info.keySyms,
|
||||
info.modMap,
|
||||
dmxBell, dmxKbdCtrl);
|
||||
}
|
||||
if (info.buttonClass) {
|
||||
|
|
|
@ -697,7 +697,7 @@ static void kbdLinuxConvert(DevicePtr pDev,
|
|||
|
||||
/* No auto-repeat? */
|
||||
if ((feed && !feed->ctrl.autoRepeat)
|
||||
|| priv->pKeyboard->key->modifierMap[keyCode]
|
||||
|| priv->pKeyboard->key->xkbInfo->desc->map->modmap[keyCode]
|
||||
|| (feed
|
||||
&& !(feed->ctrl.autoRepeats[keyCode >> 3]
|
||||
& (1 << (keyCode & 7))))) return; /* Ignore */
|
||||
|
|
|
@ -331,7 +331,7 @@ static void kbdUSBConvert(DevicePtr pDev,
|
|||
|
||||
/* No auto-repeat? */
|
||||
if ((feed && !feed->ctrl.autoRepeat)
|
||||
|| priv->pDevice->key->modifierMap[keyCode]
|
||||
|| priv->pDevice->key->xkbInfo->desc->map->modmap[keyCode]
|
||||
|| (feed
|
||||
&& !(feed->ctrl.autoRepeats[keyCode >> 3]
|
||||
& (1 << (keyCode & 7))))) return; /* Ignore */
|
||||
|
|
|
@ -782,7 +782,7 @@ ephyrUpdateModifierState(unsigned int state)
|
|||
int count = keyc->modifierKeyCount[i];
|
||||
|
||||
for (key = 0; key < MAP_LENGTH; key++)
|
||||
if (keyc->modifierMap[key] & mask)
|
||||
if (keyc->xkbInfo->desc->map->modmap[key] & mask)
|
||||
{
|
||||
int bit;
|
||||
BYTE *kptr;
|
||||
|
@ -802,9 +802,9 @@ ephyrUpdateModifierState(unsigned int state)
|
|||
/* Modifier shoud be down, but isn't */
|
||||
if (!(keyc->state & mask) && (state & mask))
|
||||
for (key = 0; key < MAP_LENGTH; key++)
|
||||
if (keyc->modifierMap[key] & mask)
|
||||
if (keyc->xkbInfo->desc->map->modmap[key] & mask)
|
||||
{
|
||||
if (keyc->modifierMap[key] & mask && ephyrKbd &&
|
||||
if (keyc->xkbInfo->desc->map->modmap[key] & mask && ephyrKbd &&
|
||||
((EphyrKbdPrivate *)ephyrKbd->driverPrivate)->enabled)
|
||||
KdEnqueueKeyboardEvent(ephyrKbd, key, FALSE); /* press */
|
||||
break;
|
||||
|
|
|
@ -309,7 +309,6 @@ struct _KdKeyboardInfo {
|
|||
CARD8 keyState[KD_KEY_COUNT/8];
|
||||
int minScanCode;
|
||||
int maxScanCode;
|
||||
CARD8 modmap[MAP_LENGTH];
|
||||
KeySymsRec keySyms;
|
||||
|
||||
int leds;
|
||||
|
|
|
@ -660,85 +660,6 @@ KdKbdCtrl (DeviceIntPtr pDevice, KeybdCtrl *ctrl)
|
|||
|
||||
extern KeybdCtrl defaultKeyboardControl;
|
||||
|
||||
static void
|
||||
KdInitAutoRepeats (KdKeyboardInfo *ki)
|
||||
{
|
||||
int key_code;
|
||||
unsigned char mask;
|
||||
int i;
|
||||
unsigned char *repeats;
|
||||
|
||||
repeats = defaultKeyboardControl.autoRepeats;
|
||||
memset (repeats, '\0', 32);
|
||||
for (key_code = KD_MIN_KEYCODE; key_code <= KD_MAX_KEYCODE; key_code++)
|
||||
{
|
||||
if (!ki->modmap[key_code])
|
||||
{
|
||||
i = key_code >> 3;
|
||||
mask = 1 << (key_code & 7);
|
||||
repeats[i] |= mask;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const KdKeySymModsRec kdKeySymMods[] = {
|
||||
{ XK_Control_L, ControlMask },
|
||||
{ XK_Control_R, ControlMask },
|
||||
{ XK_Shift_L, ShiftMask },
|
||||
{ XK_Shift_R, ShiftMask },
|
||||
{ XK_Caps_Lock, LockMask },
|
||||
{ XK_Shift_Lock, LockMask },
|
||||
{ XK_Alt_L, Mod1Mask },
|
||||
{ XK_Alt_R, Mod1Mask },
|
||||
{ XK_Meta_L, Mod1Mask },
|
||||
{ XK_Meta_R, Mod1Mask },
|
||||
{ XK_Num_Lock, Mod2Mask },
|
||||
{ XK_Super_L, Mod3Mask },
|
||||
{ XK_Super_R, Mod3Mask },
|
||||
{ XK_Hyper_L, Mod3Mask },
|
||||
{ XK_Hyper_R, Mod3Mask },
|
||||
{ XK_Mode_switch, Mod4Mask },
|
||||
/* PDA specific hacks */
|
||||
#ifdef XF86XK_Start
|
||||
{ XF86XK_Start, ControlMask },
|
||||
#endif
|
||||
{ XK_Menu, ShiftMask },
|
||||
{ XK_telephone, Mod1Mask },
|
||||
#ifdef XF86XK_AudioRecord
|
||||
{ XF86XK_AudioRecord, Mod2Mask },
|
||||
#endif
|
||||
#ifdef XF86XK_Calendar
|
||||
{ XF86XK_Calendar, Mod3Mask }
|
||||
#endif
|
||||
};
|
||||
|
||||
#define NUM_SYM_MODS (sizeof(kdKeySymMods) / sizeof(kdKeySymMods[0]))
|
||||
|
||||
static void
|
||||
KdInitModMap (KdKeyboardInfo *ki)
|
||||
{
|
||||
int key_code;
|
||||
int row;
|
||||
int width;
|
||||
KeySym *syms;
|
||||
int i;
|
||||
|
||||
width = ki->keySyms.mapWidth;
|
||||
for (key_code = ki->keySyms.minKeyCode; key_code <= ki->keySyms.maxKeyCode; key_code++)
|
||||
{
|
||||
ki->modmap[key_code] = 0;
|
||||
syms = ki->keySyms.map + (key_code - ki->keySyms.minKeyCode) * width;
|
||||
for (row = 0; row < width; row++, syms++)
|
||||
{
|
||||
for (i = 0; i < NUM_SYM_MODS; i++)
|
||||
{
|
||||
if (*syms == kdKeySymMods[i].modsym)
|
||||
ki->modmap[key_code] |= kdKeySymMods[i].modbit;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
KdKeyboardProc(DeviceIntPtr pDevice, int onoff)
|
||||
{
|
||||
|
@ -792,9 +713,6 @@ KdKeyboardProc(DeviceIntPtr pDevice, int onoff)
|
|||
return !Success;
|
||||
}
|
||||
|
||||
KdInitModMap(ki);
|
||||
KdInitAutoRepeats(ki);
|
||||
|
||||
memset(&rmlvo, 0, sizeof(rmlvo));
|
||||
rmlvo.rules = ki->xkbRules;
|
||||
rmlvo.model = ki->xkbModel;
|
||||
|
|
|
@ -119,7 +119,6 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
|||
int mapWidth;
|
||||
int min_keycode, max_keycode;
|
||||
KeySymsRec keySyms;
|
||||
CARD8 modmap[MAP_LENGTH];
|
||||
int i, j;
|
||||
XKeyboardState values;
|
||||
XkbComponentNamesRec names;
|
||||
|
@ -130,7 +129,6 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
|||
switch (onoff)
|
||||
{
|
||||
case DEVICE_INIT:
|
||||
modifier_keymap = XGetModifierMapping(xnestDisplay);
|
||||
XDisplayKeycodes(xnestDisplay, &min_keycode, &max_keycode);
|
||||
#ifdef _XSERVER64
|
||||
{
|
||||
|
@ -153,18 +151,6 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
|||
&mapWidth);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < MAP_LENGTH; i++)
|
||||
modmap[i] = 0;
|
||||
for (j = 0; j < 8; j++)
|
||||
for(i = 0; i < modifier_keymap->max_keypermod; i++) {
|
||||
CARD8 keycode;
|
||||
if ((keycode =
|
||||
modifier_keymap->
|
||||
modifiermap[j * modifier_keymap->max_keypermod + i]))
|
||||
modmap[keycode] |= 1<<j;
|
||||
}
|
||||
XFreeModifiermap(modifier_keymap);
|
||||
|
||||
keySyms.minKeyCode = min_keycode;
|
||||
keySyms.maxKeyCode = max_keycode;
|
||||
keySyms.mapWidth = mapWidth;
|
||||
|
@ -189,8 +175,8 @@ xnestKeyboardProc(DeviceIntPtr pDev, int onoff)
|
|||
options = XKB_DFLT_OPTIONS;
|
||||
|
||||
XkbSetRulesDflts(rules, model, layout, variants, options);
|
||||
XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms, modmap,
|
||||
xnestBell, xnestChangeKeyboardControl);
|
||||
XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms,
|
||||
xnestBell, xnestChangeKeyboardControl);
|
||||
XkbDDXChangeControls(pDev, xkb->ctrls, xkb->ctrls);
|
||||
XkbFreeKeyboard(xkb, 0, False);
|
||||
xfree(keymap);
|
||||
|
@ -250,7 +236,7 @@ xnestUpdateModifierState(unsigned int state)
|
|||
int count = keyc->modifierKeyCount[i];
|
||||
|
||||
for (key = 0; key < MAP_LENGTH; key++)
|
||||
if (keyc->modifierMap[key] & mask) {
|
||||
if (keyc->xkbInfo->desc->map->modmap[key] & mask) {
|
||||
int bit;
|
||||
BYTE *kptr;
|
||||
|
||||
|
@ -269,7 +255,7 @@ xnestUpdateModifierState(unsigned int state)
|
|||
*/
|
||||
if (!(keyc->state & mask) && (state & mask))
|
||||
for (key = 0; key < MAP_LENGTH; key++)
|
||||
if (keyc->modifierMap[key] & mask) {
|
||||
if (keyc->xkbInfo->desc->map->modmap[key] & mask) {
|
||||
xnestQueueKeyEvent(KeyPress, key);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -342,6 +342,16 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
|
|||
pthread_mutex_lock(&keyInfo_mutex);
|
||||
assert(XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms, keyInfo.modMap,
|
||||
QuartzBell, DarwinChangeKeyboardControl));
|
||||
assert(pDev->key->xkbInfo->desc->map->modmap!=NULL);
|
||||
memcpy(pDev->key->xkbInfo->desc->map->modmap, keyInfo.modMap, sizeof(keyInfo.modMap));
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
|
||||
QuartzXkbUpdate(pDev);
|
||||
#else
|
||||
pthread_mutex_lock(&keyInfo_mutex);
|
||||
assert( InitKeyboardDeviceStruct( (DevicePtr)pDev, &keySyms,
|
||||
QuartzBell,
|
||||
DarwinChangeKeyboardControl ));
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
|
||||
/* Get our key repeat settings from GlobalPreferences */
|
||||
|
|
|
@ -217,7 +217,6 @@ int
|
|||
winKeybdProc (DeviceIntPtr pDeviceInt, int iState)
|
||||
{
|
||||
KeySymsRec keySyms;
|
||||
CARD8 modMap[MAP_LENGTH];
|
||||
DevicePtr pDevice = (DevicePtr) pDeviceInt;
|
||||
XkbComponentNamesRec names;
|
||||
XkbSrvInfoPtr xkbi;
|
||||
|
@ -228,8 +227,6 @@ winKeybdProc (DeviceIntPtr pDeviceInt, int iState)
|
|||
case DEVICE_INIT:
|
||||
winConfigKeyboard (pDeviceInt);
|
||||
|
||||
winGetKeyMappings (&keySyms, modMap);
|
||||
|
||||
/* FIXME: Maybe we should use winGetKbdLeds () here? */
|
||||
defaultKeyboardControl.leds = g_winInfo.keyboard.leds;
|
||||
|
||||
|
@ -237,7 +234,6 @@ winKeybdProc (DeviceIntPtr pDeviceInt, int iState)
|
|||
{
|
||||
InitKeyboardDeviceStruct (pDevice,
|
||||
&keySyms,
|
||||
modMap,
|
||||
winKeybdBell,
|
||||
winKeybdCtrl);
|
||||
}
|
||||
|
@ -263,7 +259,7 @@ winKeybdProc (DeviceIntPtr pDeviceInt, int iState)
|
|||
g_winInfo.xkb.layout, g_winInfo.xkb.variant,
|
||||
g_winInfo.xkb.options);
|
||||
XkbInitKeyboardDeviceStruct (pDeviceInt, &names, &keySyms,
|
||||
modMap, winKeybdBell, winKeybdCtrl);
|
||||
winKeybdBell, winKeybdCtrl);
|
||||
}
|
||||
|
||||
if (!g_winInfo.xkb.disable)
|
||||
|
|
|
@ -138,8 +138,7 @@ typedef struct _KeyClassRec {
|
|||
CARD8 down[DOWN_LENGTH];
|
||||
CARD8 postdown[DOWN_LENGTH];
|
||||
KeySymsRec curKeySyms;
|
||||
int modifierKeyCount[8];
|
||||
CARD8 modifierMap[MAP_LENGTH];
|
||||
int modifierKeyCount[8];
|
||||
struct _XkbSrvInfo *xkbInfo;
|
||||
} KeyClassRec, *KeyClassPtr;
|
||||
|
||||
|
|
|
@ -5836,9 +5836,6 @@ ProcXkbGetKbdByName(ClientPtr client)
|
|||
if (tmpd == dev ||
|
||||
(dev->id == inputInfo.keyboard->id && tmpd->key &&
|
||||
tmpd->coreEvents)) {
|
||||
|
||||
memcpy(tmpd->key->modifierMap, xkb->map->modmap,
|
||||
xkb->max_key_code + 1);
|
||||
if (tmpd != dev)
|
||||
XkbCopyKeymap(dev->key->xkbInfo->desc,
|
||||
tmpd->key->xkbInfo->desc, True);
|
||||
|
|
|
@ -506,9 +506,6 @@ InitKeyboardDeviceStruct(DeviceIntPtr dev, XkbRMLVOSet *rmlvo,
|
|||
|
||||
XkbInitControls(dev, xkbi);
|
||||
|
||||
/* XXX: Doesn't XUCD make this redundant? */
|
||||
memcpy(dev->key->modifierMap, xkb->map->modmap, xkb->max_key_code + 1);
|
||||
|
||||
XkbInitIndicatorMap(xkbi);
|
||||
|
||||
XkbDDXInitDevice(dev);
|
||||
|
|
|
@ -363,17 +363,14 @@ int maxSymsPerKey,maxKeysPerMod, maxGroup1Width;
|
|||
int first,last,firstCommon,lastCommon;
|
||||
XkbDescPtr xkb;
|
||||
KeyClassPtr keyc;
|
||||
CARD8 keysPerMod[XkbNumModifiers];
|
||||
int maxNumberOfGroups;
|
||||
|
||||
if (!keybd || !keybd->key || !keybd->key->xkbInfo)
|
||||
return;
|
||||
xkb= keybd->key->xkbInfo->desc;
|
||||
keyc= keybd->key;
|
||||
maxSymsPerKey= maxKeysPerMod= maxGroup1Width= 0;
|
||||
maxSymsPerKey= maxGroup1Width= 0;
|
||||
maxNumberOfGroups = 0;
|
||||
bzero(keysPerMod,sizeof(keysPerMod));
|
||||
memcpy(keyc->modifierMap,xkb->map->modmap,xkb->max_key_code+1);
|
||||
if ((xkb->min_key_code==keyc->curKeySyms.minKeyCode)&&
|
||||
(xkb->max_key_code==keyc->curKeySyms.maxKeyCode)) {
|
||||
first= firstCommon= xkb->min_key_code;
|
||||
|
@ -590,10 +587,7 @@ unsigned check;
|
|||
XkbDescPtr xkb= kbd->key->xkbInfo->desc;
|
||||
|
||||
XkbSetCauseCoreReq(&cause,X_SetModifierMapping,client);
|
||||
|
||||
num = xkb->max_key_code-xkb->min_key_code+1;
|
||||
memcpy(xkb->map->modmap,kbd->key->modifierMap,xkb->max_key_code+1);
|
||||
|
||||
changes.map.changed|= XkbModifierMapMask;
|
||||
changes.map.first_modmap_key= xkb->min_key_code;
|
||||
changes.map.num_modmap_keys= num;
|
||||
|
|
Loading…
Reference in New Issue
Block a user