[Xquartz-changes] xserver: Branch 'master' - 2 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Tue Nov 3 16:46:46 PST 2009


 dix/events.c                |    8 +++-----
 hw/xquartz/X11Application.m |    6 ++++++
 hw/xquartz/X11Controller.h  |    1 +
 hw/xquartz/quartzKeyboard.c |   23 +++++++++++++++++++++++
 4 files changed, 33 insertions(+), 5 deletions(-)

New commits:
commit 7897b6c2d41bccb72c19418674c3526ecce29515
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Oct 27 18:00:48 2009 -0700

    dix: Properly detect if the other device is frozen
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>

diff --git a/dix/events.c b/dix/events.c
index d070a4c..015c2b1 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -1673,7 +1673,7 @@ AllowSome(ClientPtr client,
     thisGrabbed = grabinfo->grab && SameClient(grabinfo->grab, client);
     thisSynced = FALSE;
     otherGrabbed = FALSE;
-    othersFrozen = TRUE;
+    othersFrozen = FALSE;
     grabTime = grabinfo->grabTime;
     for (dev = inputInfo.devices; dev; dev = dev->next)
     {
@@ -1689,11 +1689,9 @@ AllowSome(ClientPtr client,
 	    otherGrabbed = TRUE;
 	    if (grabinfo->sync.other == devgrabinfo->grab)
 		thisSynced = TRUE;
-	    if (devgrabinfo->sync.state < FROZEN)
-		othersFrozen = FALSE;
+	    if (devgrabinfo->sync.state >= FROZEN)
+		othersFrozen = TRUE;
 	}
-	else if (!devgrabinfo->sync.other || !SameClient(devgrabinfo->sync.other, client))
-	    othersFrozen = FALSE;
     }
     if (!((thisGrabbed && grabinfo->sync.state >= FROZEN) || thisSynced))
 	return;
commit 5e79976c13c5b94b12392b493846ca26be11750b
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Nov 3 16:35:27 2009 -0800

    XQuartz: Run xmodmap after programatically updating the keymap.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    Signed-off-by: Martin Otte <otte at duke.edu>

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index f4fbb1a..2c95485 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -961,6 +961,12 @@ void X11ApplicationMain (int argc, char **argv, char **envp) {
     /* not reached */
 }
 
+void launch_client(const char *cmd) {
+    NSString *string = [[NSString alloc] initWithUTF8String:cmd];
+    [[X11App controller] launch_client:string];
+    [string release];
+}
+
 @implementation X11Application (Private)
 
 #ifdef NX_DEVICELCMDKEYMASK
diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index a86b20f..3d8e007 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -144,5 +144,6 @@ typedef unsigned int NSUInteger;
 #endif /* __OBJC__ */
 
 void X11ControllerMain(int argc, char **argv, char **envp);
+void launch_client(const char *cmd);
 
 #endif /* X11CONTROLLER_H */
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 06b981e..5bbb9c9 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -52,6 +52,8 @@
 #include "quartzKeyboard.h"
 #include "quartzAudio.h"
 
+#include "X11Application.h"
+
 #include "threadSafety.h"
 
 #ifdef NDEBUG
@@ -359,6 +361,10 @@ void DarwinKeyboardReloadHandler(void) {
     CFIndex initialKeyRepeatValue, keyRepeatValue;
     BOOL ok;
     DeviceIntPtr pDev = darwinKeyboard;
+    const char *xmodmap = PROJECTROOT "/bin/xmodmap";
+    const char *sysmodmap = PROJECTROOT "/lib/X11/xinit/.Xmodmap";
+    const char *homedir = getenv("HOME");
+    char usermodmap[PATH_MAX], cmd[PATH_MAX];
 
     DEBUG_LOG("DarwinKeyboardReloadHandler\n");
 
@@ -397,6 +403,23 @@ void DarwinKeyboardReloadHandler(void) {
             }
         }
     } pthread_mutex_unlock(&keyInfo_mutex);
+
+    /* Check for system .Xmodmap */
+    if (access(xmodmap, F_OK) == 0) {
+        if (access(sysmodmap, F_OK) == 0) {
+            snprintf (cmd, sizeof(cmd), "%s %s", xmodmap, sysmodmap);
+            launch_client(cmd);
+        }
+    }
+        
+    /* Check for user's local .Xmodmap */
+    if (homedir != NULL) {
+        snprintf (usermodmap, sizeof(usermodmap), "%s/.Xmodmap", homedir);
+        if (access(usermodmap, F_OK) == 0) {
+            snprintf (cmd, sizeof(cmd), "%s %s", xmodmap, usermodmap);
+            launch_client(cmd);
+        }
+    }
 }
 
 //-----------------------------------------------------------------------------


More information about the Xquartz-changes mailing list