xserver: Branch 'server-1.7-branch' - 16 commits

Peter Hutterer whot at kemper.freedesktop.org
Thu Nov 19 21:50:25 PST 2009


 configure.ac                   |    4 ++--
 dix/devices.c                  |    2 +-
 hw/xfree86/common/xf86Events.c |    5 +++--
 hw/xfree86/common/xf86Init.c   |    4 +++-
 hw/xfree86/loader/loadmod.c    |    7 +++++--
 hw/xquartz/X11Application.h    |    1 +
 hw/xquartz/X11Application.m    |   19 +++++++++++++------
 hw/xquartz/X11Controller.h     |    6 +++++-
 hw/xquartz/X11Controller.m     |   16 ++++++++--------
 hw/xquartz/applewm.c           |   20 +++++++++++---------
 hw/xquartz/pbproxy/app-main.m  |    4 ++++
 hw/xquartz/pbproxy/main.m      |   16 ++++++++++++++++
 hw/xquartz/quartzKeyboard.c    |   27 +++++++++++++++++++--------
 hw/xwin/winmouse.c             |    2 +-
 hw/xwin/winprocarg.c           |    4 ++--
 os/access.c                    |    3 ++-
 randr/randrstr.h               |   12 +++++++++---
 17 files changed, 105 insertions(+), 47 deletions(-)

New commits:
commit 19b24f014f4dad1cc73e2454d15c64ae05ac8ef2
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Nov 20 15:29:05 2009 +1000

    xserver 1.7.1.902
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/configure.ac b/configure.ac
index 29e7da8..cfe8e59 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,8 +26,8 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([xorg-server], 1.7.1.901, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2009-11-6"
+AC_INIT([xorg-server], 1.7.1.902, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
+RELEASE_DATE="2009-11-20"
 AC_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
commit bebf7b1a342eaa37849a5b373bd1a507052233a8
Author: Julien Cristau <jcristau at debian.org>
Date:   Sat Nov 14 18:39:00 2009 +0100

    xfree86: set a sane umask before opening the log
    
    Xorg creates its log file following the umask of the user running
    startx, which may result in a world-writable log.  Set umask to 022 to
    prevent this.
    
    Debian bug#555308 <http://bugs.debian.org/555308>
    See also http://thread.gmane.org/gmane.comp.security.oss.general/2299
    
    Signed-off-by: Julien Cristau <jcristau at debian.org>
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit 30be7ceaf228497ac1ff0a1123c1b35e3aa1fc73)

diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
index c9baff3..d3de670 100644
--- a/hw/xfree86/common/xf86Init.c
+++ b/hw/xfree86/common/xf86Init.c
@@ -1142,8 +1142,10 @@ OsVendorInit(void)
   signal(SIGCHLD, SIG_DFL);	/* Need to wait for child processes */
 #endif
 
-  if (!beenHere)
+  if (!beenHere) {
+    umask(022);
     xf86LogInit();
+  }
 
         /* Set stderr to non-blocking. */
 #ifndef O_NONBLOCK
commit e6872c89bcb8a0308cf83089194051e0ef69fba9
Author: Chase Douglas <chasedouglas at gmail.com>
Date:   Mon Nov 9 22:54:39 2009 -0500

    Move FD_CLR above pInfo->read_input
    
    The event fd may be invalidated by the pInfo->read_input call. If it is
    invalidated, the subsequent FD_CLR call will segfault. Thus, the FD_CLR
    call must precede the pInfo->read_input call.
    
    Signed-off-by: Chase Douglas <chasedouglas at gmail.com>
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit b5aa2e0a5fe233dc883084a5026013472e85bca4)

diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c
index 9487fe7..8cd765a 100644
--- a/hw/xfree86/common/xf86Events.c
+++ b/hw/xfree86/common/xf86Events.c
@@ -263,13 +263,14 @@ xf86Wakeup(pointer blockData, int err, pointer pReadmask)
 		    (FD_ISSET(pInfo->fd, &devicesWithInput) != 0)) {
 		    int sigstate = xf86BlockSIGIO();
 
-		    pInfo->read_input(pInfo);
-		    xf86UnblockSIGIO(sigstate);
 		    /*
 		     * Remove the descriptior from the set because more than one
 		     * device may share the same file descriptor.
 		     */
 		    FD_CLR(pInfo->fd, &devicesWithInput);
+
+		    pInfo->read_input(pInfo);
+		    xf86UnblockSIGIO(sigstate);
 		}
 		pInfo = pInfo->next;
 	    }
commit a2e4bcc2a02f86ca3c23ccf1b4abc2f1d3fa3218
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Nov 10 09:50:50 2009 +1000

    dix: increase default number of buttons to 10.
    
    Currently the XTEST device is limited to the same number of buttons the core
    device has. This breaks if a user has a mouse with more than 3 buttons
    connected and is using a core client to fake button 8+ presses.
    
    Rather than expecting all clients to fix themselves, just increase the
    default number of buttons to 10, which is somewhat a compromise. Ideally,
    the XTEST devices should adjust themselves to the highest number of buttons
    available on the slave devices (like the master pointers already do), but
    that's a taks for another day.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit 982f6648fd29d085265bf6035c1bf4d1b2499316)

diff --git a/dix/devices.c b/dix/devices.c
index 7486827..395e19a 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -539,7 +539,7 @@ CoreKeyboardProc(DeviceIntPtr pDev, int what)
 int
 CorePointerProc(DeviceIntPtr pDev, int what)
 {
-#define NBUTTONS 7
+#define NBUTTONS 10
 #define NAXES 2
     BYTE map[NBUTTONS + 1];
     int i = 0;
commit 2b9ad701967d6fd9c1d98e87ce94a806a05125e5
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Sun Nov 1 18:19:14 2009 +0000

    Avoid a null dereference if IFF_BROADCAST is set but there is no broadcast address
    
    It seems that the getifaddrs() function can return interfaces with
    IFF_BROADCAST & IFF_UP set, but no broadcast address (at least
    under Cygwin 1.7, this seems to happen for v6 mapped v4 addresses)
    
    Avoid a null dereference if this ever happens
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    Reviewed-by: Colin Harrison <colin.harrison at virgin.net>
    (cherry picked from commit 28eb61fc04811bb9bbb523e0a252933313bb16ce)

diff --git a/os/access.c b/os/access.c
index 8c5b50a..2a171fa 100644
--- a/os/access.c
+++ b/os/access.c
@@ -811,7 +811,8 @@ DefineSelf (int fd)
 		continue;
 #endif
 	    if ((ifr->ifa_flags & IFF_BROADCAST) &&
-		(ifr->ifa_flags & IFF_UP))
+		(ifr->ifa_flags & IFF_UP) &&
+                ifr->ifa_broadaddr)
 		broad_addr = *ifr->ifa_broadaddr;
 	    else
 		continue;
commit 71f4b404c0c5b4e8f41d779687e026efd580a988
Author: Colin Harrison <colin.harrison at virgin.net>
Date:   Wed Nov 4 15:16:03 2009 +0000

    Xming: Add mouse motion events with flag POINTER_SCREEN in winEnqueueMotion()
    
    Add mouse motion events with flag POINTER_SCREEN in winEnqueueMotion(), as
    they are in screen coordindates and may need to be scaled to the axis range
    appropriately
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    (cherry picked from commit 019a601de6a8ae083852c2d384c814dcc7aeeb72)

diff --git a/hw/xwin/winmouse.c b/hw/xwin/winmouse.c
index b537d32..3d25aeb 100644
--- a/hw/xwin/winmouse.c
+++ b/hw/xwin/winmouse.c
@@ -382,7 +382,7 @@ void winEnqueueMotion(int x, int y)
   valuators[0] = x;
   valuators[1] = y;
   nevents = GetPointerEvents(events, g_pwinPointer, MotionNotify, 0,
-			     POINTER_ABSOLUTE, 0, 2, valuators);
+			     POINTER_ABSOLUTE | POINTER_SCREEN, 0, 2, valuators);
 
   for (i = 0; i < nevents; i++)
     mieqEnqueue(g_pwinPointer, events[i].event);
commit f0325c2f6007f358bcc7c2632476dd6370fa0919
Author: Jon TURNEY <jon.turney at dronecode.org.uk>
Date:   Fri Jun 19 21:12:55 2009 +0100

    Cygwin/X: Remove a couple of extraneous '\n' in logged version info
    
    Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
    (cherry picked from commit 2a38f7c0dbc890e6408eee143d77719f265d583d)

diff --git a/hw/xwin/winprocarg.c b/hw/xwin/winprocarg.c
index f20598d..56af643 100755
--- a/hw/xwin/winprocarg.c
+++ b/hw/xwin/winprocarg.c
@@ -1514,8 +1514,8 @@ winLogVersionInfo (void)
 
   ErrorF ("Welcome to the XWin X Server\n");
   ErrorF ("Vendor: %s\n", VENDOR_STRING);
-  ErrorF ("Release: %d.%d.%d.%d (%d)\n\n", XORG_VERSION_MAJOR, XORG_VERSION_MINOR, XORG_VERSION_PATCH, XORG_VERSION_SNAP, XORG_VERSION_CURRENT);
-  ErrorF ("Contact: %s\n\n", VENDOR_CONTACT);
+  ErrorF ("Release: %d.%d.%d.%d (%d)\n", XORG_VERSION_MAJOR, XORG_VERSION_MINOR, XORG_VERSION_PATCH, XORG_VERSION_SNAP, XORG_VERSION_CURRENT);
+  ErrorF ("Contact: %s\n", VENDOR_CONTACT);
 }
 
 /*
commit 20beb2580f33add2ca7911a6d9410422a1d3079b
Author: Adam Jackson <ajax at redhat.com>
Date:   Mon Nov 9 11:12:22 2009 -0500

    randr: Fill in errorValue when verifying outputs/crtcs/modes
    
    Signed-off-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit c7d1319872e0ae0b7d945e9af8c4027ee5aa2055)

diff --git a/randr/randrstr.h b/randr/randrstr.h
index af14374..975fe33 100644
--- a/randr/randrstr.h
+++ b/randr/randrstr.h
@@ -344,24 +344,30 @@ extern _X_EXPORT RESTYPE RRCrtcType, RRModeType, RROutputType;
     {\
 	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
 	                                 RROutputType, client, a);\
-	if (rc != Success)\
+	if (rc != Success) {\
+	    client->errorValue = id;\
 	    return (rc == BadValue) ? RRErrorBase + BadRROutput : rc;\
+	}\
     }
 
 #define VERIFY_RR_CRTC(id, ptr, a)\
     {\
 	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
 	                                 RRCrtcType, client, a);\
-	if (rc != Success)\
+	if (rc != Success) {\
+	    client->errorValue = id;\
 	    return (rc == BadValue) ? RRErrorBase + BadRRCrtc : rc;\
+	}\
     }
 
 #define VERIFY_RR_MODE(id, ptr, a)\
     {\
 	int rc = dixLookupResourceByType((pointer *)&(ptr), id,\
 	                                 RRModeType, client, a);\
-	if (rc != Success)\
+	if (rc != Success) {\
+	    client->errorValue = id;\
 	    return (rc == BadValue) ? RRErrorBase + BadRRMode : rc;\
+	}\
     }
 
 #define GetRRClient(pClient)    ((RRClientPtr)dixLookupPrivate(&(pClient)->devPrivates, RRClientPrivateKey))
commit 2db157924b582933c4b6897505e6f4170e23b56f
Author: Dave Airlie <airlied at redhat.com>
Date:   Tue Oct 13 10:15:00 2009 +1000

    loader: actually stat something that has some chance of existing. (v2)
    
    FindModuleInSubdir seems to expect a / at the end of the subdir its
    finding for, so we add the / early, the stat will fail if its
    not a subdir, I'm leaving the S_ISDIR in just in case there is another
    reason it could return 0. This does look a bit silly in strace
    but it seems to work fine.
    
    I have a very intermittent issue where drivers loses its / that
    I've been seeing on/off for a while, this may or may not fix it.
    
    Signed-off-by: Dave Airlie <airlied at redhat.com>
    Reviewed-by: Julien Cristau <jcristau at debian.org>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit d85ab6b6483d6ca7d9d22298d05ed1fa3076b042)

diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c
index 0b220f1..5b175a5 100644
--- a/hw/xfree86/loader/loadmod.c
+++ b/hw/xfree86/loader/loadmod.c
@@ -399,8 +399,11 @@ FindModuleInSubdir(const char *dirpath, const char *module)
     while ((direntry = readdir(dir))) {
         if (direntry->d_name[0] == '.')
             continue;
-        if ((stat(direntry->d_name, &stat_buf) == 0) && S_ISDIR(stat_buf.st_mode)) {
-            snprintf(tmpBuf, PATH_MAX, "%s/%s", dirpath, direntry->d_name);
+        snprintf(tmpBuf, PATH_MAX, "%s%s/", dirpath, direntry->d_name);
+	/* the stat with the appended / fails for normal files,
+	   and works for sub dirs fine, looks a bit strange in strace
+	   but does seem to work */
+        if ((stat(tmpBuf, &stat_buf) == 0) && S_ISDIR(stat_buf.st_mode)) {
             if ((ret = FindModuleInSubdir(tmpBuf, module)))
                 break;
             continue;
commit 7e7e7935eeb86b5990664a662471800cfd2e7ce0
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Mon Nov 9 13:09:55 2009 -0800

    XQuartz: Explicitly pass a bellProc to make XBell() work again.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit 9071b0d69748cfa7ecca17b4cb0e431bbb0ef2a4)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index c504762..62b2ebb 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -184,6 +184,12 @@ static void DarwinChangeKeyboardControl(DeviceIntPtr device, KeybdCtrl *ctrl) {
     // keyclick, bell volume / pitch, autorepead, LED's
 }
 
+static void DarwinKeyboardBell(int volume, DeviceIntPtr pDev, pointer arg, int something) {
+    KeybdCtrl *ctrl = arg;
+
+    DDXRingBell(volume, ctrl->bell_pitch, ctrl->bell_duration);
+}
+
 //-----------------------------------------------------------------------------
 // Utility functions to help parse Darwin keymap
 //-----------------------------------------------------------------------------
@@ -297,7 +303,7 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
     /* We need to really have rules... or something... */
     //XkbSetRulesDflts("base", "pc105", "us", NULL, NULL);
 
-    InitKeyboardDeviceStruct(pDev, NULL, NULL, DarwinChangeKeyboardControl);
+    InitKeyboardDeviceStruct(pDev, NULL, DarwinKeyboardBell, DarwinChangeKeyboardControl);
 
     DarwinKeyboardReloadHandler();
 
commit d6495bb272c9be8b3376d65b16bf0342c5975bd0
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Tue Oct 27 17:16:57 2009 -0700

    XQuartz: pbproxy: Wait for the server to finish starting up, so display is valid.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit e87a03fd531ce7974877688680d3bf9b85c2d835)

diff --git a/hw/xquartz/pbproxy/app-main.m b/hw/xquartz/pbproxy/app-main.m
index d4b43c6..f3f683a 100644
--- a/hw/xquartz/pbproxy/app-main.m
+++ b/hw/xquartz/pbproxy/app-main.m
@@ -37,7 +37,11 @@
 static const char *app_prefs_domain = "org.x.X11";
 CFStringRef app_prefs_domain_cfstr;
 
+/* Stubs */
 char *display = NULL;
+BOOL serverInitComplete = YES;
+pthread_mutex_t serverInitCompleteMutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t serverInitCompleteCond = PTHREAD_COND_INITIALIZER;
 
 static void signal_handler (int sig) {
     switch(sig) {
diff --git a/hw/xquartz/pbproxy/main.m b/hw/xquartz/pbproxy/main.m
index 5bc5182..d26b1b1 100644
--- a/hw/xquartz/pbproxy/main.m
+++ b/hw/xquartz/pbproxy/main.m
@@ -47,6 +47,20 @@ BOOL xpbproxy_is_standalone = NO;
 
 x_selection *_selection_object;
 
+extern BOOL serverInitComplete;
+extern pthread_mutex_t serverInitCompleteMutex;
+extern pthread_cond_t serverInitCompleteCond;
+
+static inline void wait_for_server_init(void) {
+    /* If the server hasn't finished initializing, wait for it... */
+    if(!serverInitComplete) {
+        pthread_mutex_lock(&serverInitCompleteMutex);
+        while(!serverInitComplete)
+            pthread_cond_wait(&serverInitCompleteCond, &serverInitCompleteMutex);
+        pthread_mutex_unlock(&serverInitCompleteMutex);
+    }
+}
+
 static int x_io_error_handler (Display *dpy) {
     /* We lost our connection to the server. */
     
@@ -85,6 +99,8 @@ static void *xpbproxy_x_thread(void *args) {
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     size_t i;
 
+    wait_for_server_init();
+
     for(i=0, xpbproxy_dpy=NULL; !xpbproxy_dpy && i<5; i++) {
         xpbproxy_dpy = XOpenDisplay(NULL);
         
commit 909d04000cf3a9a2cc11f7f890f4c14408453e08
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sun Nov 8 20:25:42 2009 -0800

    XQuartz: Buildfix for Leopard and older
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit 15fc56addcc906592af7c0f4c0a5ac906fa5c389)

diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index bb28447..9e16f75 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -55,7 +55,11 @@ typedef unsigned int NSUInteger;
 #endif
 #endif
 
+#if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
 @interface X11Controller : NSObject <NSTableViewDataSource>
+#else
+ at interface X11Controller : NSObject
+#endif
 {
     IBOutlet NSPanel *prefs_panel;
 
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 90f6610..c504762 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -40,6 +40,7 @@
 #define HACK_MISSING 1
 #define HACK_KEYPAD 1
 
+#include <unistd.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <errno.h>
commit afc7663f0dc4e268ba12c8065238b34add8bdcdf
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Nov 4 18:39:16 2009 -0800

    XQuartz: Cleanup X11Controller.m compilation warnings.
    
    Declare X11Controller as implementing NSTableViewDataSource.
    Use selectRowIndexes:byExtendingSelection instead of selectRow:byExtendingSelection
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit 840a68dc5e3b4d285894f86df2a8c41fca5a4bec)

diff --git a/hw/xquartz/X11Controller.h b/hw/xquartz/X11Controller.h
index 88f50a1..bb28447 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -55,7 +55,7 @@ typedef unsigned int NSUInteger;
 #endif
 #endif
 
- at interface X11Controller : NSObject
+ at interface X11Controller : NSObject <NSTableViewDataSource>
 {
     IBOutlet NSPanel *prefs_panel;
 
diff --git a/hw/xquartz/X11Controller.m b/hw/xquartz/X11Controller.m
index 1191547..b28f4d3 100644
--- a/hw/xquartz/X11Controller.m
+++ b/hw/xquartz/X11Controller.m
@@ -426,8 +426,8 @@
   [[columns objectAtIndex:2] setIdentifier:@"2"];
 	
   [apps_table setDataSource:self];
-  [apps_table selectRow:0 byExtendingSelection:NO];
-	
+  [apps_table selectRowIndexes:[NSIndexSet indexSetWithIndex:0] byExtendingSelection:NO];
+
   [[apps_table window] makeKeyAndOrderFront:sender];
   [apps_table reloadData];
   if(oldapps != nil)
@@ -474,7 +474,7 @@
   [item release];
 	
   [apps_table reloadData];
-  [apps_table selectRow:row byExtendingSelection:NO];
+  [apps_table selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
 }
 
 - (IBAction) apps_table_duplicate:sender
@@ -497,7 +497,7 @@
   [item release];
 	
   [apps_table reloadData];
-  [apps_table selectRow:row+1 byExtendingSelection:NO];
+  [apps_table selectRowIndexes:[NSIndexSet indexSetWithIndex:row+1] byExtendingSelection:NO];
 }
 
 - (IBAction) apps_table_delete:sender
@@ -519,10 +519,10 @@
 	
   row = MIN (row, [table_apps count] - 1);
   if (row >= 0)
-    [apps_table selectRow:row byExtendingSelection:NO];
+    [apps_table selectRowIndexes:[NSIndexSet indexSetWithIndex:row] byExtendingSelection:NO];
 }
 
-- (int) numberOfRowsInTableView:(NSTableView *)tableView
+- (NSInteger) numberOfRowsInTableView:(NSTableView *)tableView
 {
   if (table_apps == nil) return 0;
   
@@ -530,7 +530,7 @@
 }
 
 - (id) tableView:(NSTableView *)tableView
-objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
+objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
 {
   NSArray *item;
   int col;
@@ -547,7 +547,7 @@ objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row
 }
 
 - (void) tableView:(NSTableView *)tableView setObjectValue:(id)object
-    forTableColumn:(NSTableColumn *)tableColumn row:(int)row
+    forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
 {
   NSMutableArray *item;
   int col;
commit 6b70e145b7544a36c05e8bef960f377cc52e0ddc
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Nov 4 18:15:08 2009 -0800

    XQuartz: Use dixLookupResourceByType instead of LookupIDByType
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit 0e3ad44c3b05cbe7b1d8f5ce7949fec3c7ae2e7c)

diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c
index d2cca13..d1a6175 100644
--- a/hw/xquartz/applewm.c
+++ b/hw/xquartz/applewm.c
@@ -213,10 +213,11 @@ static int
 WMFreeClient (pointer data, XID id) {
     WMEventPtr   pEvent;
     WMEventPtr   *pHead, pCur, pPrev;
+    int i;
 
     pEvent = (WMEventPtr) data;
-    pHead = (WMEventPtr *) LookupIDByType(eventResource, EventType);
-    if (pHead) {
+    i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, serverClient, DixReadAccess | DixWriteAccess | DixDestroyAccess);
+    if (i == Success && pHead) {
         pPrev = 0;
         for (pCur = *pHead; pCur && pCur != pEvent; pCur=pCur->next)
             pPrev = pCur;
@@ -254,12 +255,12 @@ ProcAppleWMSelectInput (register ClientPtr client)
     REQUEST(xAppleWMSelectInputReq);
     WMEventPtr      pEvent, pNewEvent, *pHead;
     XID             clientResource;
+    int             i;
 
     REQUEST_SIZE_MATCH (xAppleWMSelectInputReq);
-    pHead = (WMEventPtr *)SecurityLookupIDByType(client,
-                        eventResource, EventType, DixWriteAccess);
+    i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, client, DixWriteAccess);
     if (stuff->mask != 0) {
-        if (pHead) {
+        if (i == Success && pHead) {
             /* check for existing entry. */
             for (pEvent = *pHead; pEvent; pEvent = pEvent->next)
             {
@@ -293,7 +294,7 @@ ProcAppleWMSelectInput (register ClientPtr client)
          * the list may be arbitrarily rearranged which cannot be
          * done through the resource database.
          */
-        if (!pHead)
+        if (i != Success || !pHead)
         {
             pHead = (WMEventPtr *) xalloc (sizeof (WMEventPtr));
             if (!pHead ||
@@ -309,7 +310,7 @@ ProcAppleWMSelectInput (register ClientPtr client)
         updateEventMask (pHead);
     } else if (stuff->mask == 0) {
         /* delete the interest */
-        if (pHead) {
+        if (i == Success && pHead) {
             pNewEvent = 0;
             for (pEvent = *pHead; pEvent; pEvent = pEvent->next) {
                 if (pEvent->client == client)
@@ -342,9 +343,10 @@ AppleWMSendEvent (int type, unsigned int mask, int which, int arg) {
     WMEventPtr      *pHead, pEvent;
     ClientPtr       client;
     xAppleWMNotifyEvent se;
+    int             i;
 
-    pHead = (WMEventPtr *) LookupIDByType(eventResource, EventType);
-    if (!pHead)
+    i = dixLookupResourceByType((pointer *)&pHead, eventResource, EventType, serverClient, DixReadAccess);
+    if (i != Success || !pHead)
         return;
     for (pEvent = *pHead; pEvent; pEvent = pEvent->next) {
         client = pEvent->client;
commit f203963678d42644a803bc45e82b08e6bde0b2a7
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Nov 4 16:18:06 2009 -0800

    XQuartz: Don't weed out duplicates in generated keymap
    
    There seems to be an issue in the 1.5+ server where shift-space does not
    produce a space when 'keycode 57 = space' but it does when 'keycode 57 = space
    space'
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit 069fc6ce0a0e7f2c418e11941568ffcc52b6b331)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 1b3c27e..90f6610 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -387,6 +387,7 @@ void DarwinKeyboardReloadHandler(void) {
         keySyms.minKeyCode = MIN_KEYCODE;
         keySyms.maxKeyCode = MAX_KEYCODE;
 
+	// TODO: We should build the entire XkbDescRec and use XkbCopyKeymap
         /* Apply the mappings to darwinKeyboard */
         XkbApplyMappingChange(darwinKeyboard, &keySyms, keySyms.minKeyCode,
                               keySyms.maxKeyCode - keySyms.minKeyCode + 1,
@@ -767,9 +768,12 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
 #endif
         }
 
-        if (k[3] == k[2]) k[3] = NoSymbol;
-        if (k[1] == k[0]) k[1] = NoSymbol;
-        if (k[0] == k[2] && k[1] == k[3]) k[2] = k[3] = NoSymbol;
+        // There seems to be an issue with this in 1.5+, shift-space is not
+        // producing space, it's sending NoSymbol... ?
+        //if (k[3] == k[2]) k[3] = NoSymbol;
+        //if (k[1] == k[0]) k[1] = NoSymbol;
+        //if (k[0] == k[2] && k[1] == k[3]) k[2] = k[3] = NoSymbol;
+        //if (k[3] == k[0] && k[2] == k[1] && k[2] == NoSymbol) k[3] = NoSymbol;
     }
 
     /* Fix up some things that are normally missing.. */
@@ -780,7 +784,7 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
 
             if    (k[0] == NoSymbol && k[1] == NoSymbol
                 && k[2] == NoSymbol && k[3] == NoSymbol)
-	      k[0] = known_keys[i].keysym;
+	      k[0] = k[1] = k[2] = k[3] = known_keys[i].keysym;
         }
     }
 
@@ -793,7 +797,7 @@ Bool QuartzReadSystemKeymap(darwinKeyboardInfo *info) {
             k = info->keyMap + known_numeric_keys[i].keycode * GLYPHS_PER_KEY;
 
             if (k[0] == known_numeric_keys[i].normal)
-                k[0] = known_numeric_keys[i].keypad;
+                k[0] = k[1] = k[2] = k[3] = known_numeric_keys[i].keypad;
         }
     }
 
commit dfb0c502946853a5a4b39a3e9814e8d576749d69
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed Nov 4 13:34:20 2009 -0800

    XQuartz: Controller thread launches clients
    
    This avoids a memory leak due to no active auto-release pool on the server thread.
    
    Signed-off-by: Jeremy Huddleston <jeremyhu at freedesktop.org>
    (cherry picked from commit 6d6e8fb27f00f0c3128cef624b39a60aa754fdc8)

diff --git a/hw/xquartz/X11Application.h b/hw/xquartz/X11Application.h
index 5e828a4..d7e9a5f 100644
--- a/hw/xquartz/X11Application.h
+++ b/hw/xquartz/X11Application.h
@@ -71,6 +71,7 @@ void X11ApplicationSetFrontProcess (void);
 void X11ApplicationSetCanQuit (int state);
 void X11ApplicationServerReady (void);
 void X11ApplicationShowHideMenubar (int state);
+void X11ApplicationLaunchClient (const char *cmd);
 
 void X11ApplicationMain(int argc, char **argv, char **envp);
 
diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 2c95485..f3c8a30 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -411,6 +411,9 @@ static void message_kit_thread (SEL selector, NSObject *arg) {
         SetSystemUIMode(kUIModeAllHidden, quartzFullscreenMenu ? kUIOptionAutoShowMenuBar : 0); // kUIModeAllSuppressed or kUIOptionAutoShowMenuBar can be used to allow "mouse-activation"
 }
 
+- (void) launch_client:(NSString *)cmd {
+    (void)[_controller application:self openFile:cmd];
+}
 
 /* user preferences */
 
@@ -856,6 +859,16 @@ void X11ApplicationShowHideMenubar (int state) {
     [n release];
 }
 
+void X11ApplicationLaunchClient (const char *cmd) {
+    NSString *string;
+    
+    string = [[NSString alloc] initWithUTF8String:cmd];
+	
+    message_kit_thread (@selector (launch_client:), string);
+	
+    [string release];
+}
+
 static void check_xinitrc (void) {
     char *tem, buf[1024];
     NSString *msg;
@@ -961,12 +974,6 @@ 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 3d8e007..88f50a1 100644
--- a/hw/xquartz/X11Controller.h
+++ b/hw/xquartz/X11Controller.h
@@ -120,6 +120,7 @@ typedef unsigned int NSUInteger;
 #endif
 - (void) set_can_quit:(OSX_BOOL)state;
 - (void) server_ready;
+- (OSX_BOOL) application:(NSApplication *)app openFile:(NSString *)filename;
 
 - (IBAction) apps_table_show:(id)sender;
 - (IBAction) apps_table_done:(id)sender;
@@ -144,6 +145,5 @@ 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 5bbb9c9..1b3c27e 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -408,7 +408,7 @@ void DarwinKeyboardReloadHandler(void) {
     if (access(xmodmap, F_OK) == 0) {
         if (access(sysmodmap, F_OK) == 0) {
             snprintf (cmd, sizeof(cmd), "%s %s", xmodmap, sysmodmap);
-            launch_client(cmd);
+            X11ApplicationLaunchClient(cmd);
         }
     }
         
@@ -417,7 +417,7 @@ void DarwinKeyboardReloadHandler(void) {
         snprintf (usermodmap, sizeof(usermodmap), "%s/.Xmodmap", homedir);
         if (access(usermodmap, F_OK) == 0) {
             snprintf (cmd, sizeof(cmd), "%s %s", xmodmap, usermodmap);
-            launch_client(cmd);
+            X11ApplicationLaunchClient(cmd);
         }
     }
 }


More information about the xorg-commit mailing list