darwinKeyboard: refactor slightly so that we're not cutting and pasting code from dix, kthx
This commit is contained in:
parent
cab54466a6
commit
a8a090b853
|
@ -1,9 +1,9 @@
|
|||
//=============================================================================
|
||||
//
|
||||
// Keyboard support for the Darwin X Server
|
||||
// Keyboard support for Xquartz
|
||||
//
|
||||
// Copyright (c) 2003, 2008 Apple, Inc.
|
||||
// Copyright (c) 2001-2004 Torrey T. Lyons. All Rights Reserved.
|
||||
// Copyright (c) 2003 Apple Computer, Inc. All Rights Reserved.
|
||||
// Copyright 2004 Kaleb S. KEITHLEY. All Rights Reserved.
|
||||
//
|
||||
// The code to parse the Darwin keymap is derived from dumpkeymap.c
|
||||
|
@ -805,52 +805,6 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
|
|||
}
|
||||
|
||||
|
||||
/* Borrowed from dix/devices.c */
|
||||
static Bool InitModMap(register KeyClassPtr keyc) {
|
||||
int i, j;
|
||||
CARD8 keysPerModifier[8];
|
||||
CARD8 mask;
|
||||
|
||||
// darwinKeyc = keyc;
|
||||
if (keyc->modifierKeyMap != NULL)
|
||||
xfree (keyc->modifierKeyMap);
|
||||
|
||||
keyc->maxKeysPerModifier = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
keysPerModifier[i] = 0;
|
||||
for (i = 8; i < MAP_LENGTH; i++)
|
||||
{
|
||||
for (j = 0, mask = 1; j < 8; j++, mask <<= 1)
|
||||
{
|
||||
if (mask & keyc->modifierMap[i])
|
||||
{
|
||||
if (++keysPerModifier[j] > keyc->maxKeysPerModifier)
|
||||
keyc->maxKeysPerModifier = keysPerModifier[j];
|
||||
}
|
||||
}
|
||||
}
|
||||
keyc->modifierKeyMap = (KeyCode *)xalloc(8*keyc->maxKeysPerModifier);
|
||||
if (!keyc->modifierKeyMap && keyc->maxKeysPerModifier)
|
||||
return (FALSE);
|
||||
bzero((char *)keyc->modifierKeyMap, 8*(int)keyc->maxKeysPerModifier);
|
||||
for (i = 0; i < 8; i++)
|
||||
keysPerModifier[i] = 0;
|
||||
for (i = 8; i < MAP_LENGTH; i++)
|
||||
{
|
||||
for (j = 0, mask = 1; j < 8; j++, mask <<= 1)
|
||||
{
|
||||
if (mask & keyc->modifierMap[i])
|
||||
{
|
||||
keyc->modifierKeyMap[(j*keyc->maxKeysPerModifier) +
|
||||
keysPerModifier[j]] = i;
|
||||
keysPerModifier[j]++;
|
||||
}
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) {
|
||||
KeySymsRec keySyms;
|
||||
if (dev == NULL) dev = darwinKeyboard;
|
||||
|
@ -858,12 +812,16 @@ void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev,
|
|||
DEBUG_LOG("DarwinKeyboardReloadHandler(%p)\n", dev);
|
||||
DarwinLoadKeyboardMapping(&keySyms);
|
||||
|
||||
if (SetKeySymsMap(&dev->key->curKeySyms, &keySyms)) {
|
||||
/* now try to update modifiers. */
|
||||
|
||||
memmove(dev->key->modifierMap, keyInfo.modMap, MAP_LENGTH);
|
||||
InitModMap(dev->key);
|
||||
} else DEBUG_LOG("SetKeySymsMap=0\n");
|
||||
if (dev->key) {
|
||||
if (dev->key->curKeySyms.map) xfree(dev->key->curKeySyms.map);
|
||||
if (dev->key->modifierKeyMap) xfree(dev->key->modifierKeyMap);
|
||||
xfree(dev->key);
|
||||
}
|
||||
|
||||
if (!InitKeyClassDeviceStruct(dev, &keySyms, keyInfo.modMap)) {
|
||||
DEBUG_LOG("InitKeyClassDeviceStruct failed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
SendMappingNotify(MappingKeyboard, MIN_KEYCODE, NUM_KEYCODES, 0);
|
||||
SendMappingNotify(MappingModifier, 0, 0, 0);
|
||||
|
|
Loading…
Reference in New Issue
Block a user