From 3f8aa38feb327688ef62836613d160e80f868575 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Thu, 9 Jun 2016 16:24:10 +0200 Subject: noRRXineramaExtension: Make Boolean configurable via new cmdline switch (+|-rrxinerama). --- nx-X11/programs/Xserver/include/globals.h | 1 + nx-X11/programs/Xserver/os/utils.c | 17 +++++++++++++++-- nx-X11/programs/Xserver/randr/rrxinerama.c | 2 ++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/nx-X11/programs/Xserver/include/globals.h b/nx-X11/programs/Xserver/include/globals.h index f37fb68ba..853b63e86 100644 --- a/nx-X11/programs/Xserver/include/globals.h +++ b/nx-X11/programs/Xserver/include/globals.h @@ -87,6 +87,7 @@ extern Bool noMITShmExtension; #ifdef RANDR extern Bool noRRExtension; +extern Bool noRRXineramaExtension; #endif #ifdef RENDER diff --git a/nx-X11/programs/Xserver/os/utils.c b/nx-X11/programs/Xserver/os/utils.c index 13889ed9a..90cf55d1a 100644 --- a/nx-X11/programs/Xserver/os/utils.c +++ b/nx-X11/programs/Xserver/os/utils.c @@ -179,6 +179,7 @@ Bool noMITShmExtension = FALSE; #endif #ifdef RANDR Bool noRRExtension = FALSE; +Bool noRRXineramaExtension = FALSE; #endif #ifdef RENDER Bool noRenderExtension = FALSE; @@ -664,10 +665,14 @@ void UseMsg(void) ErrorF("-x string loads named extension at init time \n"); ErrorF("-maxbigreqsize set maximal bigrequest size \n"); #ifdef PANORAMIX - ErrorF("+xinerama Enable XINERAMA extension\n"); - ErrorF("-xinerama Disable XINERAMA extension\n"); + ErrorF("+xinerama Enable XINERAMA (PanoramiX) extension\n"); + ErrorF("-xinerama Disable XINERAMA (PanoramiX) extension (default)\n"); ErrorF("-disablexineramaextension Disable XINERAMA extension\n"); #endif +#ifdef RANDR + ErrorF("+rrxinerama Enable XINERAMA (via RandR) extension (default)\n"); + ErrorF("-rrxinerama Disable XINERAMA (via RandR) extension\n"); +#endif #ifdef SMART_SCHEDULE ErrorF("-dumbSched Disable smart scheduling, enable old behavior\n"); ErrorF("-schedInterval int Set scheduler interval in msec\n"); @@ -1036,6 +1041,14 @@ ProcessCommandLine(int argc, char *argv[]) else if ( strcmp( argv[i], "-disablexineramaextension") == 0){ PanoramiXExtensionDisabledHack = TRUE; } +#endif +#ifdef RANDR + else if ( strcmp( argv[i], "+rrxinerama") == 0){ + noRRXineramaExtension = FALSE; + } + else if ( strcmp( argv[i], "-rrxinerama") == 0){ + noRRXineramaExtension = TRUE; + } #endif else if ( strcmp( argv[i], "-x") == 0) { diff --git a/nx-X11/programs/Xserver/randr/rrxinerama.c b/nx-X11/programs/Xserver/randr/rrxinerama.c index 2bc17cf21..9ff1e051b 100644 --- a/nx-X11/programs/Xserver/randr/rrxinerama.c +++ b/nx-X11/programs/Xserver/randr/rrxinerama.c @@ -107,6 +107,8 @@ static int ProcRRXineramaIsActive(ClientPtr client); static int ProcRRXineramaQueryScreens(ClientPtr client); static int SProcRRXineramaDispatch(ClientPtr client); +extern Bool noRRXineramaExtension; + /* Proc */ int -- cgit v1.2.3 From 4b4a6a35c47590bd4ab1c16d9bf1398bb51624b2 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Fri, 10 Jun 2016 01:05:58 +0200 Subject: Properly enable/disable Xinerama support in nxagent via cmdline options provider in Xserver/os/utils.c. * Xinerama defaults to enabled, using RRXineramaExtension (i.e. cmdline option: +rrxinerama). * Cmdline option -rrxinerama disables Xinerama support entirely. * Cmdline option +xinerama switches from RRXineramaExtension to PanoramiXExtension. * Cmdline option -xinerama is actually non-functional (i.e. the default). * If the nx/nx option "xinerama" is handed over to nxagent, then Xinerama is only switched on if that given option enables it (value: 1) _and_ if either of the Xinerama extensions (PanoramiX or RRXinerama) has been initialized (via cmdline options above). Fixes ArcticaProject/nx-libs#117. Fixes ArcticaProject/nx-libs#134 (makes flawed PR#134 obsolete). --- nx-X11/programs/Xserver/hw/nxagent/Args.c | 62 ++++++++++++++++++---------- nx-X11/programs/Xserver/hw/nxagent/Options.c | 2 +- nx-X11/programs/Xserver/hw/nxagent/Options.h | 12 +++--- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 5 --- 4 files changed, 48 insertions(+), 33 deletions(-) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c index 2590dd6c3..6e6d61772 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Args.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c @@ -86,6 +86,18 @@ is" without express or implied warranty. #endif +#ifdef PANORAMIX + #define PANORAMIX_DISABLED_COND (noPanoramiXExtension || PanoramiXExtensionDisabledHack) +#else + #define PANORAMIX_DISABLED_COND TRUE +#endif + +#ifdef RANDR + #define RRXINERAMA_DISABLED_COND noRRXineramaExtension +#else + #define RRXINERAMA_DISABLED_COND TRUE +#endif + /* * Define this to force the dispatcher * to always use the dumb scheduler. @@ -103,6 +115,8 @@ extern int _XGetBitsPerPixel(Display *dpy, int depth); extern char dispatchExceptionAtReset; +extern const char *__progname; + char nxagentDisplayName[1024]; Bool nxagentSynchronize = False; @@ -1047,6 +1061,13 @@ int ddxProcessArgument(int argc, char *argv[], int i) return 0; } + /* + * Disable Xinerama (i.e. fake it in Screen.c) if somehow Xinerama support + * has been disabled on the cmdline. + */ + if (PANORAMIX_DISABLED_COND && RRXINERAMA_DISABLED_COND) + nxagentChangeOption(Xinerama, 0); + return 0; } @@ -1205,33 +1226,32 @@ static void nxagentParseOptions(char *name, char *value) } else if (!strcmp(name, "xinerama")) { -#ifdef PANORAMIX - if (!PanoramiXExtensionDisabledHack) +#if !defined(PANORAMIX) && !defined(RANDR) + nxagentChangeOption(Xinerama, 0); + fprintf(stderr, "Warning: No Xinerama support compiled into %s.\n", __progname); + return; +#else + if (PANORAMIX_DISABLED_COND && RRXINERAMA_DISABLED_COND) + nxagentChangeOption(Xinerama, 0); + fprintf(stderr, "Warning: XINERAMA extension has been disabled on %s startup.\n", __progname); + return; + + if (!strcmp(value, "1")) { - if (!strcmp(value, "1")) - { - nxagentChangeOption(Xinerama, 1); - } - else if (!strcmp(value, "0")) - { - nxagentChangeOption(Xinerama, 0); - } - else - { - fprintf(stderr, "Warning: Ignoring bad value '%s' for option 'xinerama'.\n", - validateString(value)); - } + nxagentChangeOption(Xinerama, 1); + return; } - else + else if (!strcmp(value, "0")) { nxagentChangeOption(Xinerama, 0); - fprintf(stderr, "Warning: Xinerama extension has been disabled via -disablexineramaextension cmdline switch.\n"); } -#else - nxagentChangeOption(Xinerama, 0); - fprintf(stderr, "Warning: No Xinerama support compiled into nxagent.\n"); -#endif /* of PANORAMIX */ + else + { + fprintf(stderr, "Warning: Ignoring bad value '%s' for option 'xinerama'.\n", + validateString(value)); + } return; +#endif } else if (!strcmp(name, "resize")) { diff --git a/nx-X11/programs/Xserver/hw/nxagent/Options.c b/nx-X11/programs/Xserver/hw/nxagent/Options.c index 8a3275c64..d0ba8aff5 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Options.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Options.c @@ -155,7 +155,7 @@ void nxagentInitOptions() nxagentOptions.ImageRateLimit = 0; - nxagentOptions.Xinerama = 0; + nxagentOptions.Xinerama = 1; nxagentOptions.SleepTime = DEFAULT_SLEEP_TIME; } diff --git a/nx-X11/programs/Xserver/hw/nxagent/Options.h b/nx-X11/programs/Xserver/hw/nxagent/Options.h index 02b886242..7e9f8d2ea 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Options.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Options.h @@ -390,12 +390,12 @@ typedef struct _AgentOptions int NoRootlessExit; /* - * Store if the user wants Xinerama. There's a variable called - * noPanoramiXExtension in os/utils.c but we cannot rely on that - * because RandR and Panoramix change its value when trying to - * initialize. So we use this variable to save the user preference - * provided by the -/+xinerama parameter before initalizing those - * extensions. + * Store if the user wants Xinerama. There are variables called + * noPanoramiXExtension noRRXineramaExtensison in os/utils.c but + * we cannot rely on them because RandR and PanoramiX change their + * values when trying to initialize. So we use this variable to + * save the user preference provided by the -/+(rr)xinerama parameter(s) + * before initalizing those extensions. */ int Xinerama; diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index 20ec3672a..50d278ed7 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -1114,11 +1114,6 @@ Bool nxagentOpenScreen(int index, ScreenPtr pScreen, nxagentChangeOption(ViewportXSpan, nxagentOption(Width) - nxagentOption(RootWidth)); nxagentChangeOption(ViewportYSpan, nxagentOption(Height) - nxagentOption(RootHeight)); - /* PanoramiXExtension enabled via cmdline, turn on Xinerama in nxagent - */ - if( (!noPanoramiXExtension) && (!PanoramiXExtensionDisabledHack) ) - nxagentOption(Xinerama) = True; - if (nxagentReconnectTrap == 0) { if (nxagentOption(Persistent)) -- cgit v1.2.3