Commit d1304940 authored by Mike Gabriel's avatar Mike Gabriel

Properly enable/disable Xinerama support in nxagent via cmdline options provider…

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).
parent 059f0318
......@@ -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"))
{
......
......@@ -155,7 +155,7 @@ void nxagentInitOptions()
nxagentOptions.ImageRateLimit = 0;
nxagentOptions.Xinerama = 0;
nxagentOptions.Xinerama = 1;
nxagentOptions.SleepTime = DEFAULT_SLEEP_TIME;
}
......
......@@ -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;
......
......@@ -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))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment