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