summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Byer <bbyer@apple.com>2008-04-01 00:40:46 -0700
committerJeremy Huddleston <jeremyhu@freedesktop.org>2008-04-02 17:48:24 -0700
commitc737d04c758e03e32f692a31ed2a665ccbafa931 (patch)
tree348c6c52651c9a2d2d5718744d60c806dbe06276
parent15b0084f1ab23042190d8beeb3f088b92dee5a10 (diff)
The AppKit thread should not be calling directly into the X server
functions to change state when the keyboard is reloaded; instead, pass it as an event. (cherry picked from commit 7e653f806ff5508aace059312156f319a9ed4479)
-rw-r--r--hw/xquartz/darwin.h7
-rw-r--r--hw/xquartz/darwinEvents.c7
-rw-r--r--hw/xquartz/darwinKeyboard.c12
-rw-r--r--hw/xquartz/darwinKeyboard.h2
-rw-r--r--hw/xquartz/quartzKeyboard.h1
5 files changed, 13 insertions, 16 deletions
diff --git a/hw/xquartz/darwin.h b/hw/xquartz/darwin.h
index 01e6f41f2..df92d8b49 100644
--- a/hw/xquartz/darwin.h
+++ b/hw/xquartz/darwin.h
@@ -91,13 +91,8 @@ extern int darwinMainScreenY;
* Special ddx events understood by the X server
*/
enum {
- kXquartzUpdateModifiers // update all modifier keys
+ kXquartzReloadKeymap // Reload system keymap
= LASTEvent+1, // (from X.h list of event names)
- kXquartzUpdateButtons, // update state of mouse buttons 2 and up
- kXquartzScrollWheel, // scroll wheel event
- /*
- * Quartz-specific events -- not used in IOKit mode
- */
kXquartzActivate, // restore X drawing and cursor
kXquartzDeactivate, // clip X drawing and switch to Aqua cursor
kXquartzSetRootClip, // enable or disable drawing to the X screen
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index b6cd3f2b0..3afbaf890 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -289,6 +289,7 @@ Bool DarwinEQInit(DevicePtr pKbd, DevicePtr pPtr) {
FatalError("Couldn't allocate event buffer\n");
mieqInit();
+ mieqSetHandler(kXquartzReloadKeymap, DarwinKeyboardReloadHandler);
mieqSetHandler(kXquartzActivate, DarwinEventHandler);
mieqSetHandler(kXquartzDeactivate, DarwinEventHandler);
mieqSetHandler(kXquartzSetRootClip, DarwinEventHandler);
@@ -322,7 +323,7 @@ void ProcessInputEvents(void) {
// Empty the signaling pipe
int x = sizeof(xe);
while (x == sizeof(xe)) {
- DEBUG_LOG("draining pipe\n");
+// DEBUG_LOG("draining pipe\n");
x = read(darwinEventReadFD, &xe, sizeof(xe));
}
}
@@ -412,8 +413,8 @@ void DarwinSendKeyboardEvents(int ev_type, int keycode) {
this_seed = QuartzSystemKeymapSeed();
if (this_seed != last_seed) {
- last_seed = this_seed;
- DarwinKeyboardReload(darwinKeyboard);
+ last_seed = this_seed;
+ DarwinSendDDXEvent(kXquartzReloadKeymap, 0);
}
}
diff --git a/hw/xquartz/darwinKeyboard.c b/hw/xquartz/darwinKeyboard.c
index 355d9f066..6f2758e53 100644
--- a/hw/xquartz/darwinKeyboard.c
+++ b/hw/xquartz/darwinKeyboard.c
@@ -850,16 +850,18 @@ static Bool InitModMap(register KeyClassPtr keyc) {
}
-void DarwinKeyboardReload(DeviceIntPtr pDev) {
+void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) {
KeySymsRec keySyms;
-
+ if (dev == NULL) dev = darwinKeyboard;
+
+ DEBUG_LOG("DarwinKeyboardReloadHandler(%p)\n", dev);
DarwinLoadKeyboardMapping(&keySyms);
- if (SetKeySymsMap(&pDev->key->curKeySyms, &keySyms)) {
+ if (SetKeySymsMap(&dev->key->curKeySyms, &keySyms)) {
/* now try to update modifiers. */
- memmove(pDev->key->modifierMap, keyInfo.modMap, MAP_LENGTH);
- InitModMap(pDev->key);
+ memmove(dev->key->modifierMap, keyInfo.modMap, MAP_LENGTH);
+ InitModMap(dev->key);
} else DEBUG_LOG("SetKeySymsMap=0\n");
SendMappingNotify(MappingKeyboard, MIN_KEYCODE, NUM_KEYCODES, 0);
diff --git a/hw/xquartz/darwinKeyboard.h b/hw/xquartz/darwinKeyboard.h
index 5cf64c7d1..762f65919 100644
--- a/hw/xquartz/darwinKeyboard.h
+++ b/hw/xquartz/darwinKeyboard.h
@@ -31,7 +31,7 @@
/* Provided for darwinEvents.c */
extern darwinKeyboardInfo keyInfo;
-void DarwinKeyboardReload(DeviceIntPtr pDev);
+void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents);
void DarwinKeyboardInit(DeviceIntPtr pDev);
int DarwinModifierNXKeycodeToNXKey(unsigned char keycode, int *outSide);
int DarwinModifierNXKeyToNXKeycode(int key, int side);
diff --git a/hw/xquartz/quartzKeyboard.h b/hw/xquartz/quartzKeyboard.h
index 8131b5650..4f495bb46 100644
--- a/hw/xquartz/quartzKeyboard.h
+++ b/hw/xquartz/quartzKeyboard.h
@@ -46,7 +46,6 @@ typedef struct darwinKeyboardInfo_struct {
} darwinKeyboardInfo;
/* These functions need to be implemented by Xquartz, XDarwin, etc. */
-void DarwinKeyboardReload(DeviceIntPtr pDev);
Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info);
unsigned int QuartzSystemKeymapSeed(void);