summaryrefslogtreecommitdiff
path: root/hw/xquartz/quartzKeyboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'hw/xquartz/quartzKeyboard.c')
-rw-r--r--hw/xquartz/quartzKeyboard.c34
1 files changed, 21 insertions, 13 deletions
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 2b8cb13f8..4abf4af7f 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -68,6 +68,9 @@
#include "X11/keysym.h"
#include "keysym2ucs.h"
+extern void
+CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
+
enum {
MOD_COMMAND = 256,
MOD_SHIFT = 512,
@@ -277,17 +280,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);
}
/*
@@ -323,12 +322,17 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
// for a kIOHIDParamConnectType connection.
assert(darwinParamConnect = NXOpenEventStatus());
- DarwinLoadKeyboardMapping(&keySyms);
-
bzero(&names, sizeof(names));
- InitKeyboardDeviceStruct(pDev, NULL, QuartzBell,
- DarwinChangeKeyboardControl);
+ /* We need to really have rules... or something... */
+ //XkbSetRulesDflts("base", "pc105", "us", NULL, NULL);
+
+ InitKeyboardDeviceStruct(pDev, NULL, NULL, DarwinChangeKeyboardControl);
+
+ pthread_mutex_lock(&keyInfo_mutex);
+ DarwinLoadKeyboardMapping(&keySyms);
+ DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
+ pthread_mutex_unlock(&keyInfo_mutex);
/* Get our key repeat settings from GlobalPreferences */
(void)CFPreferencesAppSynchronize(CFSTR(".GlobalPreferences"));
@@ -349,7 +353,7 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
XkbSetRepeatKeys(pDev, -1, AutoRepeatModeOn);
}
- DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
+ CopyKeyClass(pDev, inputInfo.keyboard);
}
void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev, int nevents) {
@@ -361,8 +365,11 @@ void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev,
// xfree(pDev->key);
// }
+
+ pthread_mutex_lock(&keyInfo_mutex);
DarwinLoadKeyboardMapping(&keySyms);
DarwinKeyboardSetDeviceKeyMap(&keySyms, keyInfo.modMap);
+ pthread_mutex_unlock(&keyInfo_mutex);
}
//-----------------------------------------------------------------------------
@@ -398,21 +405,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;
}