From 0d64e881a31d89d28f2ded9b8e83e93632870a16 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Mon, 23 Jul 2012 23:16:29 -0700 Subject: [PATCH 1/3] XQuartz: Build fix for __GLXscreen::createContext changes Regression-from: 96d74138b1c0273e88933220d99a893858b649cd Signed-off-by: Jeremy Huddleston --- hw/xquartz/GL/indirect.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/hw/xquartz/GL/indirect.c b/hw/xquartz/GL/indirect.c index d9dc2a15b..c4999b5ff 100644 --- a/hw/xquartz/GL/indirect.c +++ b/hw/xquartz/GL/indirect.c @@ -135,12 +135,20 @@ struct __GLXAquaDrawable { static __GLXcontext * __glXAquaScreenCreateContext(__GLXscreen *screen, __GLXconfig *conf, - __GLXcontext *baseShareContext) + __GLXcontext *baseShareContext, + unsigned num_attribs, + const uint32_t *attribs, + int *error) { __GLXAquaContext *context; __GLXAquaContext *shareContext = (__GLXAquaContext *)baseShareContext; CGLError gl_err; + /* Unused (for now?) */ + (void)num_attribs; + (void)attribs; + (void)error; + GLAQUA_DEBUG_MSG("glXAquaScreenCreateContext\n"); context = calloc(1, sizeof(__GLXAquaContext)); From 3b7f313b3d74f9df876152c55d55cbb339bf2d02 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Tue, 24 Jul 2012 00:32:30 -0700 Subject: [PATCH 2/3] XQuartz: Fix runtime regressions introduced by extension loading changes * GLX is now loaded * PseudoramiX loading is back in miinitext. It needs to be loaded before RandR. Regression-from: 27a624bee66d2797eacf90317054207dcf248028 Regression-from: 5f5bbbe543f65c48ecbb5cce80116a86ca3fbe86 Signed-off-by: Jeremy Huddleston --- hw/xquartz/quartz.c | 12 +++++++++--- mi/miinitext.c | 6 ++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c index 3de223bf4..d74fc6446 100644 --- a/hw/xquartz/quartz.c +++ b/hw/xquartz/quartz.c @@ -144,15 +144,21 @@ QuartzSetupScreen(int index, return TRUE; } -static const ExtensionModule quartzExtensions[] = { - { PseudoramiXExtensionInit, "PseudoramiX", &noPseudoramiXExtension, NULL }, +static ExtensionModule quartzExtensions[] = { + /* PseudoramiX needs to be done before RandR, so + * it is in miinitext.c until it can be reordered. + * { PseudoramiXExtensionInit, "PseudoramiX", &noPseudoramiXExtension }, + */ +#ifdef GLXEXT + {GlxExtensionInit, "GLX", &noGlxExtension}, +#endif }; /* * QuartzExtensionInit * Initialises XQuartz-specific extensions. */ -void QuartzExtensionInit(void) +static void QuartzExtensionInit(void) { int i; diff --git a/mi/miinitext.c b/mi/miinitext.c index 86fc31c99..d17544097 100644 --- a/mi/miinitext.c +++ b/mi/miinitext.c @@ -254,6 +254,12 @@ static ExtensionModule staticExtensions[] = { #ifdef PANORAMIX {PanoramiXExtensionInit, PANORAMIX_PROTOCOL_NAME, &noPanoramiXExtension}, #endif +#ifdef INXQUARTZ + /* PseudoramiXExtensionInit must be done before RRExtensionInit, or + * XQuartz will render windows offscreen. + */ + {PseudoramiXExtensionInit, "PseudoramiX", &noPseudoramiXExtension}, +#endif #ifdef XFIXES /* must be before Render to layer DisplayCursor correctly */ {XFixesExtensionInit, "XFIXES", &noXFixesExtension}, From fd228d318428d0d9dea52ca560a9b66660dd2d02 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 25 Jul 2012 11:40:33 -0700 Subject: [PATCH 3/3] XQuartz: Call xp_window_bring_all_to_front if available in libXplugin Signed-off-by: Jeremy Huddleston --- hw/xquartz/xpr/xprEvent.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/hw/xquartz/xpr/xprEvent.c b/hw/xquartz/xpr/xprEvent.c index 106a91931..73bcc930d 100644 --- a/hw/xquartz/xpr/xprEvent.c +++ b/hw/xquartz/xpr/xprEvent.c @@ -52,9 +52,20 @@ #include #include +#ifdef HAVE_LIBDISPATCH +#include +#endif + #include "rootlessWindow.h" #include "xprEvent.h" +/* This is important enough to declare here if building against an old + * libXplugin, so we pick it up whenever libXplugin starts to support it. + */ +#if !defined(XPLUGIN_VERSION) || XPLUGIN_VERSION < 6 +extern xp_error xp_window_bring_all_to_front(void) __attribute__((weak_import)); +#endif + Bool QuartzModeEventHandler(int screenNum, XQuartzEvent *e, DeviceIntPtr dev) { @@ -72,7 +83,28 @@ QuartzModeEventHandler(int screenNum, XQuartzEvent *e, DeviceIntPtr dev) case kXquartzBringAllToFront: DEBUG_LOG("kXquartzBringAllToFront\n"); + /* 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. + */ +#if defined(HAVE_LIBDISPATCH) +#if (defined(XPLUGIN_VERSION_MIN_REQUIRED) && XPLUGIN_VERSION_MIN_REQUIRED >= 6) || \ + (!defined(XPLUGIN_VERSION_MIN_REQUIRED) && defined(XPLUGIN_VERSION) && XPLUGIN_VERSION >= 6) + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + xp_window_bring_all_to_front(); + }); +#else + if (&xp_window_bring_all_to_front) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + xp_window_bring_all_to_front(); + }); + } else { + RootlessOrderAllWindows(e->data[0]); + } +#endif +#else RootlessOrderAllWindows(e->data[0]); +#endif + return TRUE; default: