xquartz: Remove check for libdispatch now that we don't support pre-SnowLeopard
Signed-off-by: Jeremy Huddleston Sequoia <jeremyhu@apple.com>
This commit is contained in:
parent
5ad4910272
commit
f699aac2ea
|
@ -684,10 +684,6 @@ case $host_os in
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CHECK_FUNC(dispatch_async,
|
|
||||||
AC_DEFINE([HAVE_LIBDISPATCH], 1, [Define to 1 if you have the libdispatch (GCD) available]),
|
|
||||||
[])
|
|
||||||
|
|
||||||
if test "x$XQUARTZ" = xyes ; then
|
if test "x$XQUARTZ" = xyes ; then
|
||||||
XQUARTZ=yes
|
XQUARTZ=yes
|
||||||
XVFB=no
|
XVFB=no
|
||||||
|
|
|
@ -64,11 +64,9 @@ xpbproxy_run(void);
|
||||||
#define XSERVER_VERSION "?"
|
#define XSERVER_VERSION "?"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
#include <dispatch/dispatch.h>
|
#include <dispatch/dispatch.h>
|
||||||
|
|
||||||
static dispatch_queue_t eventTranslationQueue;
|
static dispatch_queue_t eventTranslationQueue;
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __has_feature
|
#ifndef __has_feature
|
||||||
#define __has_feature(x) 0
|
#define __has_feature(x) 0
|
||||||
|
@ -486,13 +484,9 @@ message_kit_thread(SEL selector, NSObject *arg)
|
||||||
if (for_appkit) [super sendEvent:e];
|
if (for_appkit) [super sendEvent:e];
|
||||||
|
|
||||||
if (for_x) {
|
if (for_x) {
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
dispatch_async(eventTranslationQueue, ^{
|
dispatch_async(eventTranslationQueue, ^{
|
||||||
[self sendX11NSEvent:e];
|
[self sendX11NSEvent:e];
|
||||||
});
|
});
|
||||||
#else
|
|
||||||
[self sendX11NSEvent:e];
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1225,11 +1219,9 @@ X11ApplicationMain(int argc, char **argv, char **envp)
|
||||||
aquaMenuBarHeight = NSHeight([primaryScreen frame]) - NSMaxY([primaryScreen visibleFrame]);
|
aquaMenuBarHeight = NSHeight([primaryScreen frame]) - NSMaxY([primaryScreen visibleFrame]);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
eventTranslationQueue = dispatch_queue_create(
|
eventTranslationQueue = dispatch_queue_create(
|
||||||
BUNDLE_ID_PREFIX ".X11.NSEventsToX11EventsQueue", NULL);
|
BUNDLE_ID_PREFIX ".X11.NSEventsToX11EventsQueue", NULL);
|
||||||
assert(eventTranslationQueue != NULL);
|
assert(eventTranslationQueue != NULL);
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Set the key layout seed before we start the server */
|
/* Set the key layout seed before we start the server */
|
||||||
last_key_layout = TISCopyCurrentKeyboardLayoutInputSource();
|
last_key_layout = TISCopyCurrentKeyboardLayoutInputSource();
|
||||||
|
|
|
@ -31,7 +31,6 @@
|
||||||
#include <dix-config.h>
|
#include <dix-config.h>
|
||||||
#else
|
#else
|
||||||
#define DEBUG_CONSOLE_REDIRECT 1
|
#define DEBUG_CONSOLE_REDIRECT 1
|
||||||
#define HAVE_LIBDISPATCH 1
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
@ -49,22 +48,10 @@
|
||||||
|
|
||||||
#define BUF_SIZE 512
|
#define BUF_SIZE 512
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
#include <dispatch/dispatch.h>
|
#include <dispatch/dispatch.h>
|
||||||
|
|
||||||
static dispatch_queue_t redirect_serial_q;
|
static dispatch_queue_t redirect_serial_q;
|
||||||
static dispatch_group_t read_source_group;
|
static dispatch_group_t read_source_group;
|
||||||
#else
|
|
||||||
#include <pthread.h>
|
|
||||||
|
|
||||||
static pthread_t redirect_pthread;
|
|
||||||
static pthread_mutex_t redirect_fds_lock = PTHREAD_MUTEX_INITIALIZER;
|
|
||||||
|
|
||||||
static int kq;
|
|
||||||
|
|
||||||
/* Notifications to our reader thread */
|
|
||||||
#define ASL_REDIRECT_TERMINATE ((void *)(uintptr_t)1)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int level;
|
int level;
|
||||||
|
@ -75,9 +62,7 @@ typedef struct {
|
||||||
char *buf;
|
char *buf;
|
||||||
char *w;
|
char *w;
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
dispatch_source_t read_source;
|
dispatch_source_t read_source;
|
||||||
#endif
|
|
||||||
} asl_redirect;
|
} asl_redirect;
|
||||||
|
|
||||||
static asl_redirect *redirect_fds = NULL;
|
static asl_redirect *redirect_fds = NULL;
|
||||||
|
@ -153,7 +138,6 @@ _read_redirect(int fd, int flush)
|
||||||
return total_read;
|
return total_read;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
static void
|
static void
|
||||||
read_from_source(void *_source)
|
read_from_source(void *_source)
|
||||||
{
|
{
|
||||||
|
@ -181,79 +165,6 @@ cancel_source(void *_source)
|
||||||
dispatch_group_leave(read_source_group);
|
dispatch_group_leave(read_source_group);
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !HAVE_LIBDISPATCH */
|
|
||||||
static void *
|
|
||||||
redirect_thread(void *ctx __unused)
|
|
||||||
{
|
|
||||||
struct kevent ev;
|
|
||||||
int n;
|
|
||||||
|
|
||||||
while (1) {
|
|
||||||
n = kevent(kq, NULL, 0, &ev, 1, NULL);
|
|
||||||
|
|
||||||
/* Bail on errors */
|
|
||||||
if (n < 0) {
|
|
||||||
asl_log(NULL, NULL, ASL_LEVEL_ERR, "kevent failure: %s",
|
|
||||||
strerror(errno));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* This should not happen */
|
|
||||||
if (n == 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
switch (ev.filter) {
|
|
||||||
case EVFILT_READ:
|
|
||||||
pthread_mutex_lock(&redirect_fds_lock);
|
|
||||||
{
|
|
||||||
int fd = ev.ident;
|
|
||||||
int close_fd = 0;
|
|
||||||
asl_redirect *aslr = &redirect_fds[fd];
|
|
||||||
|
|
||||||
if (fd < 0 || fd >= n_redirect_fds || aslr->buf == NULL) {
|
|
||||||
asl_log(NULL, NULL, ASL_LEVEL_ERR,
|
|
||||||
"Unexpected file descriptor: %d",
|
|
||||||
fd);
|
|
||||||
goto next;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ev.flags & EV_EOF) {
|
|
||||||
close_fd = 1;
|
|
||||||
if (EOF != _read_redirect(fd, 1)) {
|
|
||||||
asl_log(
|
|
||||||
NULL, NULL, ASL_LEVEL_ERR,
|
|
||||||
"kevent reported EOF on %d, but read doesn't concur.",
|
|
||||||
fd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
close_fd = (EOF == _read_redirect(fd, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (close_fd) {
|
|
||||||
EV_SET(&ev, fd, EVFILT_READ, EV_DELETE, 0, 0, 0);
|
|
||||||
kevent(kq, &ev, 1, NULL, 0, NULL);
|
|
||||||
close(fd);
|
|
||||||
free(aslr->buf);
|
|
||||||
memset(aslr, 0, sizeof(*aslr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
next:
|
|
||||||
pthread_mutex_unlock(&redirect_fds_lock);
|
|
||||||
|
|
||||||
case EVFILT_TIMER:
|
|
||||||
if (ev.udata == ASL_REDIRECT_TERMINATE)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
default:
|
|
||||||
;
|
|
||||||
;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
redirect_atexit(void)
|
redirect_atexit(void)
|
||||||
|
@ -262,7 +173,6 @@ redirect_atexit(void)
|
||||||
if (redirect_fds[STDOUT_FILENO].buf)
|
if (redirect_fds[STDOUT_FILENO].buf)
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -276,42 +186,19 @@ redirect_atexit(void)
|
||||||
dispatch_time(DISPATCH_TIME_NOW, 3LL *
|
dispatch_time(DISPATCH_TIME_NOW, 3LL *
|
||||||
NSEC_PER_SEC));
|
NSEC_PER_SEC));
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
{
|
|
||||||
struct kevent ev;
|
|
||||||
|
|
||||||
/* Tell our reader thread it is time to pack up and go home */
|
|
||||||
EV_SET(&ev, 0, EVFILT_TIMER, EV_ADD | EV_ONESHOT, 0, 0,
|
|
||||||
ASL_REDIRECT_TERMINATE);
|
|
||||||
kevent(kq, &ev, 1, NULL, 0, NULL);
|
|
||||||
|
|
||||||
pthread_join(redirect_pthread, NULL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
static void
|
static void
|
||||||
xq_asl_init(void *ctx __unused)
|
xq_asl_init(void *ctx __unused)
|
||||||
#else
|
|
||||||
static void
|
|
||||||
xq_asl_init(void)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
assert((redirect_fds = calloc(16, sizeof(*redirect_fds))) != NULL);
|
assert((redirect_fds = calloc(16, sizeof(*redirect_fds))) != NULL);
|
||||||
n_redirect_fds = 16;
|
n_redirect_fds = 16;
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
redirect_serial_q = dispatch_queue_create("com.apple.asl-redirect", NULL);
|
redirect_serial_q = dispatch_queue_create("com.apple.asl-redirect", NULL);
|
||||||
assert(redirect_serial_q != NULL);
|
assert(redirect_serial_q != NULL);
|
||||||
|
|
||||||
read_source_group = dispatch_group_create();
|
read_source_group = dispatch_group_create();
|
||||||
assert(read_source_group != NULL);
|
assert(read_source_group != NULL);
|
||||||
#else
|
|
||||||
assert((kq = kqueue()) != -1);
|
|
||||||
assert(pthread_create(&redirect_pthread, NULL, redirect_thread,
|
|
||||||
NULL) == 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
atexit(redirect_atexit);
|
atexit(redirect_atexit);
|
||||||
}
|
}
|
||||||
|
@ -319,26 +206,15 @@ xq_asl_init(void)
|
||||||
int
|
int
|
||||||
xq_asl_log_fd(aslclient asl, aslmsg msg, int level, int fd)
|
xq_asl_log_fd(aslclient asl, aslmsg msg, int level, int fd)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
int err __block = 0;
|
int err __block = 0;
|
||||||
static dispatch_once_t once_control;
|
static dispatch_once_t once_control;
|
||||||
dispatch_once_f(&once_control, NULL, xq_asl_init);
|
dispatch_once_f(&once_control, NULL, xq_asl_init);
|
||||||
#else
|
|
||||||
int err = 0;
|
|
||||||
static pthread_once_t once_control = PTHREAD_ONCE_INIT;
|
|
||||||
assert(pthread_once(&once_control, xq_asl_init) == 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
return EBADF;
|
return EBADF;
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
#define BLOCK_DONE return
|
#define BLOCK_DONE return
|
||||||
dispatch_sync(redirect_serial_q, ^
|
dispatch_sync(redirect_serial_q, ^
|
||||||
#else
|
|
||||||
#define BLOCK_DONE goto done
|
|
||||||
assert(pthread_mutex_lock(&redirect_fds_lock) == 0);
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
/* Reallocate if we need more space */
|
/* Reallocate if we need more space */
|
||||||
if (fd >= n_redirect_fds) {
|
if (fd >= n_redirect_fds) {
|
||||||
|
@ -380,7 +256,6 @@ xq_asl_log_fd(aslclient asl, aslmsg msg, int level, int fd)
|
||||||
O_NONBLOCK);
|
O_NONBLOCK);
|
||||||
|
|
||||||
/* Start listening */
|
/* Start listening */
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
{
|
{
|
||||||
dispatch_source_t read_source =
|
dispatch_source_t read_source =
|
||||||
dispatch_source_create(
|
dispatch_source_create(
|
||||||
|
@ -395,20 +270,8 @@ xq_asl_log_fd(aslclient asl, aslmsg msg, int level, int fd)
|
||||||
dispatch_group_enter(read_source_group);
|
dispatch_group_enter(read_source_group);
|
||||||
dispatch_resume(read_source);
|
dispatch_resume(read_source);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
{
|
|
||||||
struct kevent ev;
|
|
||||||
EV_SET(&ev, fd, EVFILT_READ, EV_ADD, 0, 0, 0);
|
|
||||||
kevent(kq, &ev, 1, NULL, 0, NULL);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
);
|
);
|
||||||
#else
|
|
||||||
done:
|
|
||||||
assert(pthread_mutex_unlock(&redirect_fds_lock) == 0);
|
|
||||||
#endif
|
|
||||||
#undef BLOCK_DONE
|
#undef BLOCK_DONE
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
|
|
|
@ -44,11 +44,7 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
#include <dispatch/dispatch.h>
|
#include <dispatch/dispatch.h>
|
||||||
#else
|
|
||||||
#include <pthread.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
#include <sys/un.h>
|
#include <sys/un.h>
|
||||||
|
@ -115,23 +111,6 @@ static char *pref_app_to_run;
|
||||||
static char *pref_login_shell;
|
static char *pref_login_shell;
|
||||||
static char *pref_startx_script;
|
static char *pref_startx_script;
|
||||||
|
|
||||||
#ifndef HAVE_LIBDISPATCH
|
|
||||||
/*** Pthread Magics ***/
|
|
||||||
static pthread_t
|
|
||||||
create_thread(void *(*func)(void *), void *arg)
|
|
||||||
{
|
|
||||||
pthread_attr_t attr;
|
|
||||||
pthread_t tid;
|
|
||||||
|
|
||||||
pthread_attr_init(&attr);
|
|
||||||
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
|
|
||||||
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
|
|
||||||
pthread_create(&tid, &attr, func, arg);
|
|
||||||
pthread_attr_destroy(&attr);
|
|
||||||
|
|
||||||
return tid;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*** Mach-O IPC Stuffs ***/
|
/*** Mach-O IPC Stuffs ***/
|
||||||
|
|
||||||
|
@ -239,16 +218,9 @@ typedef struct {
|
||||||
/* This thread accepts an incoming connection and hands off the file
|
/* This thread accepts an incoming connection and hands off the file
|
||||||
* descriptor for the new connection to accept_fd_handoff()
|
* descriptor for the new connection to accept_fd_handoff()
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
static void
|
static void
|
||||||
socket_handoff(socket_handoff_t *handoff_data)
|
socket_handoff(socket_handoff_t *handoff_data)
|
||||||
{
|
{
|
||||||
#else
|
|
||||||
static void *
|
|
||||||
socket_handoff_thread(void *arg)
|
|
||||||
{
|
|
||||||
socket_handoff_t *handoff_data = (socket_handoff_t *)arg;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int launchd_fd = -1;
|
int launchd_fd = -1;
|
||||||
int connected_fd;
|
int connected_fd;
|
||||||
|
@ -283,9 +255,6 @@ socket_handoff_thread(void *arg)
|
||||||
launchd_fd);
|
launchd_fd);
|
||||||
DarwinListenOnOpenFD(launchd_fd);
|
DarwinListenOnOpenFD(launchd_fd);
|
||||||
|
|
||||||
#ifndef HAVE_LIBDISPATCH
|
|
||||||
return NULL;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -369,14 +338,10 @@ do_request_fd_handoff_socket(mach_port_t port, string_t filename)
|
||||||
|
|
||||||
strlcpy(filename, handoff_data->filename, STRING_T_SIZE);
|
strlcpy(filename, handoff_data->filename, STRING_T_SIZE);
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
|
||||||
0), ^ {
|
0), ^ {
|
||||||
socket_handoff(handoff_data);
|
socket_handoff(handoff_data);
|
||||||
});
|
});
|
||||||
#else
|
|
||||||
create_thread(socket_handoff_thread, handoff_data);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
ErrorF(
|
ErrorF(
|
||||||
|
|
|
@ -52,9 +52,7 @@
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
#include <dispatch/dispatch.h>
|
#include <dispatch/dispatch.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "rootlessWindow.h"
|
#include "rootlessWindow.h"
|
||||||
#include "xprEvent.h"
|
#include "xprEvent.h"
|
||||||
|
@ -79,7 +77,7 @@ QuartzModeEventHandler(int screenNum, XQuartzEvent *e, DeviceIntPtr dev)
|
||||||
/* There's no need to do xp_window_bring_all_to_front on Leopard,
|
/* There's no need to do xp_window_bring_all_to_front on Leopard,
|
||||||
* and we don't care about the result, so just do it async.
|
* and we don't care about the result, so just do it async.
|
||||||
*/
|
*/
|
||||||
#if defined(HAVE_LIBDISPATCH) && defined(XPLUGIN_VERSION) && XPLUGIN_VERSION >= 6
|
#if defined(XPLUGIN_VERSION) && XPLUGIN_VERSION >= 6
|
||||||
# if defined(XPLUGIN_VERSION_MIN_REQUIRED) && XPLUGIN_VERSION_MIN_REQUIRED < 6
|
# if defined(XPLUGIN_VERSION_MIN_REQUIRED) && XPLUGIN_VERSION_MIN_REQUIRED < 6
|
||||||
if (&xp_window_bring_all_to_front) {
|
if (&xp_window_bring_all_to_front) {
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -43,11 +43,7 @@
|
||||||
#include "windowstr.h"
|
#include "windowstr.h"
|
||||||
#include "quartz.h"
|
#include "quartz.h"
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
#include <dispatch/dispatch.h>
|
#include <dispatch/dispatch.h>
|
||||||
#else
|
|
||||||
#include <pthread.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG_XP_LOCK_WINDOW
|
#ifdef DEBUG_XP_LOCK_WINDOW
|
||||||
#include <execinfo.h>
|
#include <execinfo.h>
|
||||||
|
@ -70,11 +66,7 @@ DEFINE_ATOM_HELPER(xa_native_window_id, "_NATIVE_WINDOW_ID")
|
||||||
static x_hash_table * window_hash;
|
static x_hash_table * window_hash;
|
||||||
|
|
||||||
/* Need to guard window_hash since xprIsX11Window can be called from any thread. */
|
/* Need to guard window_hash since xprIsX11Window can be called from any thread. */
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
static dispatch_queue_t window_hash_serial_q;
|
static dispatch_queue_t window_hash_serial_q;
|
||||||
#else
|
|
||||||
static pthread_rwlock_t window_hash_rwlock;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Prototypes for static functions */
|
/* Prototypes for static functions */
|
||||||
static Bool
|
static Bool
|
||||||
|
@ -209,15 +201,9 @@ xprCreateFrame(RootlessWindowPtr pFrame, ScreenPtr pScreen,
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
dispatch_async(window_hash_serial_q, ^ {
|
dispatch_async(window_hash_serial_q, ^ {
|
||||||
x_hash_table_insert(window_hash, pFrame->wid, pFrame);
|
x_hash_table_insert(window_hash, pFrame->wid, pFrame);
|
||||||
});
|
});
|
||||||
#else
|
|
||||||
pthread_rwlock_wrlock(&window_hash_rwlock);
|
|
||||||
x_hash_table_insert(window_hash, pFrame->wid, pFrame);
|
|
||||||
pthread_rwlock_unlock(&window_hash_rwlock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
xprSetNativeProperty(pFrame);
|
xprSetNativeProperty(pFrame);
|
||||||
|
|
||||||
|
@ -232,15 +218,9 @@ xprDestroyFrame(RootlessFrameID wid)
|
||||||
{
|
{
|
||||||
xp_error err;
|
xp_error err;
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
dispatch_async(window_hash_serial_q, ^ {
|
dispatch_async(window_hash_serial_q, ^ {
|
||||||
x_hash_table_remove(window_hash, wid);
|
x_hash_table_remove(window_hash, wid);
|
||||||
});
|
});
|
||||||
#else
|
|
||||||
pthread_rwlock_wrlock(&window_hash_rwlock);
|
|
||||||
x_hash_table_remove(window_hash, wid);
|
|
||||||
pthread_rwlock_unlock(&window_hash_rwlock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
err = xp_destroy_window(x_cvt_vptr_to_uint(wid));
|
err = xp_destroy_window(x_cvt_vptr_to_uint(wid));
|
||||||
if (err != Success)
|
if (err != Success)
|
||||||
|
@ -293,9 +273,7 @@ xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid)
|
||||||
{
|
{
|
||||||
xp_window_changes wc;
|
xp_window_changes wc;
|
||||||
unsigned int mask = XP_STACKING;
|
unsigned int mask = XP_STACKING;
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
__block
|
__block
|
||||||
#endif
|
|
||||||
RootlessWindowRec * winRec;
|
RootlessWindowRec * winRec;
|
||||||
|
|
||||||
/* Stack frame below nextWid it if it exists, or raise
|
/* Stack frame below nextWid it if it exists, or raise
|
||||||
|
@ -310,15 +288,9 @@ xprRestackFrame(RootlessFrameID wid, RootlessFrameID nextWid)
|
||||||
wc.sibling = x_cvt_vptr_to_uint(nextWid);
|
wc.sibling = x_cvt_vptr_to_uint(nextWid);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
dispatch_sync(window_hash_serial_q, ^ {
|
dispatch_sync(window_hash_serial_q, ^ {
|
||||||
winRec = x_hash_table_lookup(window_hash, wid, NULL);
|
winRec = x_hash_table_lookup(window_hash, wid, NULL);
|
||||||
});
|
});
|
||||||
#else
|
|
||||||
pthread_rwlock_rdlock(&window_hash_rwlock);
|
|
||||||
winRec = x_hash_table_lookup(window_hash, wid, NULL);
|
|
||||||
pthread_rwlock_unlock(&window_hash_rwlock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (winRec) {
|
if (winRec) {
|
||||||
if (XQuartzIsRootless)
|
if (XQuartzIsRootless)
|
||||||
|
@ -519,13 +491,9 @@ xprInit(ScreenPtr pScreen)
|
||||||
rootless_CopyWindow_threshold = xp_scroll_area_threshold;
|
rootless_CopyWindow_threshold = xp_scroll_area_threshold;
|
||||||
|
|
||||||
assert((window_hash = x_hash_table_new(NULL, NULL, NULL, NULL)));
|
assert((window_hash = x_hash_table_new(NULL, NULL, NULL, NULL)));
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
assert((window_hash_serial_q =
|
assert((window_hash_serial_q =
|
||||||
dispatch_queue_create(BUNDLE_ID_PREFIX ".X11.xpr_window_hash",
|
dispatch_queue_create(BUNDLE_ID_PREFIX ".X11.xpr_window_hash",
|
||||||
NULL)));
|
NULL)));
|
||||||
#else
|
|
||||||
assert(0 == pthread_rwlock_init(&window_hash_rwlock, NULL));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -537,19 +505,12 @@ xprInit(ScreenPtr pScreen)
|
||||||
WindowPtr
|
WindowPtr
|
||||||
xprGetXWindow(xp_window_id wid)
|
xprGetXWindow(xp_window_id wid)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_LIBDISPATCH
|
|
||||||
RootlessWindowRec *winRec __block;
|
RootlessWindowRec *winRec __block;
|
||||||
dispatch_sync(window_hash_serial_q, ^ {
|
dispatch_sync(window_hash_serial_q, ^ {
|
||||||
winRec =
|
winRec =
|
||||||
x_hash_table_lookup(window_hash,
|
x_hash_table_lookup(window_hash,
|
||||||
x_cvt_uint_to_vptr(wid), NULL);
|
x_cvt_uint_to_vptr(wid), NULL);
|
||||||
});
|
});
|
||||||
#else
|
|
||||||
RootlessWindowRec *winRec;
|
|
||||||
pthread_rwlock_rdlock(&window_hash_rwlock);
|
|
||||||
winRec = x_hash_table_lookup(window_hash, x_cvt_uint_to_vptr(wid), NULL);
|
|
||||||
pthread_rwlock_unlock(&window_hash_rwlock);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return winRec != NULL ? winRec->win : NULL;
|
return winRec != NULL ? winRec->win : NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -116,9 +116,6 @@
|
||||||
/* Define to 1 if you have the `m' library (-lm). */
|
/* Define to 1 if you have the `m' library (-lm). */
|
||||||
#undef HAVE_LIBM
|
#undef HAVE_LIBM
|
||||||
|
|
||||||
/* Define to 1 if you have the libdispatch (GCD) available */
|
|
||||||
#undef HAVE_LIBDISPATCH
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <linux/agpgart.h> header file. */
|
/* Define to 1 if you have the <linux/agpgart.h> header file. */
|
||||||
#undef HAVE_LINUX_AGPGART_H
|
#undef HAVE_LINUX_AGPGART_H
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user