XQuartz: Cleanup keymap locking, fix a possible synchro bug
This commit is contained in:
parent
0fbbc0cf76
commit
33e7437a49
|
@ -277,17 +277,13 @@ static void DarwinBuildModifierMaps(darwinKeyboardInfo *info) {
|
|||
* Load the keyboard map from a file or system and convert
|
||||
* it to an equivalent X keyboard map and modifier map.
|
||||
*/
|
||||
static void DarwinLoadKeyboardMapping(KeySymsRec *keySyms) {
|
||||
pthread_mutex_lock(&keyInfo_mutex);
|
||||
|
||||
static void DarwinLoadKeyboardMapping(KeySymsRec *keySyms) {
|
||||
DarwinBuildModifierMaps(&keyInfo);
|
||||
|
||||
keySyms->map = keyInfo.keyMap;
|
||||
keySyms->mapWidth = GLYPHS_PER_KEY;
|
||||
keySyms->minKeyCode = MIN_KEYCODE;
|
||||
keySyms->maxKeyCode = MAX_KEYCODE;
|
||||
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -333,16 +329,16 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
|
|||
// for a kIOHIDParamConnectType connection.
|
||||
assert(darwinParamConnect = NXOpenEventStatus());
|
||||
|
||||
DarwinLoadKeyboardMapping(&keySyms);
|
||||
|
||||
bzero(&names, sizeof(names));
|
||||
|
||||
/* We need to really have rules... or something... */
|
||||
//XkbSetRulesDflts("base", "pc105", "us", NULL, NULL);
|
||||
|
||||
|
||||
pthread_mutex_lock(&keyInfo_mutex);
|
||||
assert(XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms, keyInfo.modMap,
|
||||
QuartzBell, DarwinChangeKeyboardControl));
|
||||
|
||||
DarwinLoadKeyboardMapping(&keySyms);
|
||||
XkbInitKeyboardDeviceStruct(pDev, &names, &keySyms, keyInfo.modMap,
|
||||
QuartzBell, DarwinChangeKeyboardControl);
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
|
||||
/* Get our key repeat settings from GlobalPreferences */
|
||||
|
@ -365,17 +361,17 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
|
|||
}
|
||||
|
||||
SwitchCoreKeyboard(pDev);
|
||||
|
||||
DarwinKeyboardSetDeviceKeyMap(&keySyms);
|
||||
}
|
||||
|
||||
void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev, int nevents) {
|
||||
KeySymsRec keySyms;
|
||||
|
||||
DEBUG_LOG("DarwinKeyboardReloadHandler\n");
|
||||
|
||||
|
||||
pthread_mutex_lock(&keyInfo_mutex);
|
||||
DarwinLoadKeyboardMapping(&keySyms);
|
||||
DarwinKeyboardSetDeviceKeyMap(&keySyms);
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
|
@ -411,21 +407,22 @@ int DarwinModifierNXKeyToNXKeycode(int key, int side) {
|
|||
int DarwinModifierNXKeycodeToNXKey(unsigned char keycode, int *outSide) {
|
||||
int key, side;
|
||||
|
||||
pthread_mutex_lock(&keyInfo_mutex);
|
||||
keycode += MIN_KEYCODE;
|
||||
|
||||
// search modifierKeycodes for this keycode+side
|
||||
pthread_mutex_lock(&keyInfo_mutex);
|
||||
for (key = 0; key < NX_NUMMODIFIERS; key++) {
|
||||
for (side = 0; side <= 1; side++) {
|
||||
if (keyInfo.modifierKeycodes[key][side] == keycode) break;
|
||||
}
|
||||
}
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
|
||||
if (key == NX_NUMMODIFIERS) {
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
return -1;
|
||||
}
|
||||
if (outSide) *outSide = side;
|
||||
|
||||
pthread_mutex_unlock(&keyInfo_mutex);
|
||||
return key;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user