[Xquartz-changes] xserver: Branch 'server-1.7-apple' - 9 commits

Jeremy Huddleston jeremyhu at freedesktop.org
Fri Nov 6 11:02:26 PST 2009


Rebased ref, commits from common ancestor:
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);
         }
     }
 }
commit 2d55b842b8cda6a0292269304c9d86ff90dec40f
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Nov 6 14:38:22 2009 +1000

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

diff --git a/configure.ac b/configure.ac
index 9a86f5f..29e7da8 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, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
-RELEASE_DATE="2009-10-23"
+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_CONFIG_SRCDIR([Makefile.am])
 AM_INIT_AUTOMAKE([dist-bzip2 foreign])
 AM_MAINTAINER_MODE
commit 4fe904f2d50d4a7cc68ab6056483b6d8b4178539
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Thu Nov 5 11:42:34 2009 -0800

    Enable XF86PM on all Solaris platforms, not just x86/x64
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit f7b375bd141d0cf1e3add5443a5838dd8f554ef6)

diff --git a/configure.ac b/configure.ac
index e913c66..9a86f5f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1529,6 +1529,7 @@ if test "x$XORG" = xyes; then
 	  solaris*)
 	  	XORG_OS="solaris"
 		XORG_OS_SUBDIR="solaris"
+		XORG_CFLAGS="$XORG_CFLAGS -DXF86PM"
 		# Use the same stubs as BSD for old functions, since we now
 		# use libpciaccess for PCI
 		xorg_bus_bsdpci="yes"
@@ -1561,7 +1562,6 @@ if test "x$XORG" = xyes; then
 			else
 				SOLARIS_INOUT_ARCH="ia32"
 			fi
-			XORG_CFLAGS="$XORG_CFLAGS -DXF86PM"
 			;;
 		  *)
 			AC_MSG_ERROR([Unsupported Solaris platform. Only SPARC & x86 \
commit f0dc842b1487edeb6c058cdb92995e2a4673028c
Author: Alan Coopersmith <alan.coopersmith at sun.com>
Date:   Thu Nov 5 11:42:33 2009 -0800

    Use $(MAKE) instead of "make" to build Solaris inline assembly
    
    Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit f77262513ea17401092479e17ad20fc0eb91ffb5)

diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am
index 159b935..914e11f 100644
--- a/hw/xfree86/Makefile.am
+++ b/hw/xfree86/Makefile.am
@@ -92,7 +92,8 @@ if SOLARIS_ASM_INLINE
 BUILT_SOURCES += os-support/solaris/solaris- at SOLARIS_INOUT_ARCH@.il
 
 os-support/solaris/solaris- at SOLARIS_INOUT_ARCH@.il:
-	cd os-support/solaris ; make solaris- at SOLARIS_INOUT_ARCH@.il
+	cd os-support/solaris ; \
+	 $(MAKE) $(AM_MAKEFLAGS) solaris- at SOLARIS_INOUT_ARCH@.il
 endif
 
 # do not use $(mkdir_p) if you want automake 1.7 to work
commit 05d6672a1b551916e832d24920a97b6eed8fa026
Author: Tiago Vignatti <tiago.vignatti at nokia.com>
Date:   Wed Nov 4 15:35:37 2009 +0200

    EXA: Preserve pPixmap->devPrivate.ptr in exaPixmapIsOffscreen_driver
    
    It crash the server when the drawable is 32 bit and the framebuffer is 16.
    
    This is pretty much a copy-past from commit 8e873185.
    
    Signed-off-by: Tiago Vignatti <tiago.vignatti at nokia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit 964040764387d89ef64324cfbee31872ee6ce41c)

diff --git a/exa/exa_driver.c b/exa/exa_driver.c
index 9703695..a9165a1 100644
--- a/exa/exa_driver.c
+++ b/exa/exa_driver.c
@@ -204,11 +204,13 @@ exaPixmapIsOffscreen_driver(PixmapPtr pPixmap)
 {
     ScreenPtr pScreen = pPixmap->drawable.pScreen;
     ExaScreenPriv(pScreen);
+    pointer saved_ptr;
     Bool ret;
 
+    saved_ptr = pPixmap->devPrivate.ptr;
     pPixmap->devPrivate.ptr = ExaGetPixmapAddress(pPixmap);
     ret = pExaScr->info->PixmapIsOffscreen(pPixmap);
-    pPixmap->devPrivate.ptr = NULL;
+    pPixmap->devPrivate.ptr = saved_ptr;
 
     return ret;
 }
commit 269202982d4a3ab8bb31caa0fd72088d61eba66c
Author: Rami Ylimaki <ext-rami.ylimaki at nokia.com>
Date:   Wed Nov 4 15:59:30 2009 +0200

    dix: Fixes a memory leak when a cursor resource is released.
    
    Just open and close a client that creates cursors in order to
    reproduce. In the problem case bits->refcnt is -1 and therefore
    bits->devPrivates is never released.
    
    Signed-off-by: Rami Ylimaki <ext-rami.ylimaki at nokia.com>
    Signed-off-by: Keith Packard <keithp at keithp.com>
    (cherry picked from commit 0573042cddb6f9942e408687a16c6842e62a8bfa)

diff --git a/dix/cursor.c b/dix/cursor.c
index 086d008..6103b15 100644
--- a/dix/cursor.c
+++ b/dix/cursor.c
@@ -86,6 +86,8 @@ FreeCursorBits(CursorBitsPtr bits)
 #ifdef ARGB_CURSOR
     xfree(bits->argb);
 #endif
+    dixFreePrivates(bits->devPrivates);
+    bits->devPrivates = NULL;
     if (bits->refcnt == 0)
     {
 	GlyphSharePtr *prev, this;
@@ -100,7 +102,6 @@ FreeCursorBits(CursorBitsPtr bits)
 	    CloseFont(this->font, (Font)0);
 	    xfree(this);
 	}
-	dixFreePrivates(bits->devPrivates);
 	xfree(bits);
     }
 }


More information about the Xquartz-changes mailing list