Unverified Commit 6d404964 authored by Mihai Moldovan's avatar Mihai Moldovan

Merge branch 'sunweaver-pr/autodetect-dpi' into 3.6.x

parents a88ca271 29c166db
...@@ -130,6 +130,8 @@ char nxagentDisplayName[NXAGENTDISPLAYNAMELENGTH]; ...@@ -130,6 +130,8 @@ char nxagentDisplayName[NXAGENTDISPLAYNAMELENGTH];
Bool nxagentSynchronize = False; Bool nxagentSynchronize = False;
Bool nxagentRealWindowProp = False; Bool nxagentRealWindowProp = False;
Bool nxagentAutoDPI = False;
char nxagentShadowDisplayName[NXAGENTSHADOWDISPLAYNAMELENGTH] = {0}; char nxagentShadowDisplayName[NXAGENTSHADOWDISPLAYNAMELENGTH] = {0};
char nxagentWindowName[NXAGENTWINDOWNAMELENGTH]; char nxagentWindowName[NXAGENTWINDOWNAMELENGTH];
...@@ -743,6 +745,11 @@ int ddxProcessArgument(int argc, char *argv[], int i) ...@@ -743,6 +745,11 @@ int ddxProcessArgument(int argc, char *argv[], int i)
return 1; return 1;
} }
if (!strcmp(argv[i], "-autodpi")) {
nxagentAutoDPI = True;
return 1;
}
/* /*
* The original -noreset option, disabling * The original -noreset option, disabling
* dispatchExceptionAtReset, is the default. * dispatchExceptionAtReset, is the default.
...@@ -1271,6 +1278,25 @@ static void nxagentParseOptions(char *name, char *value) ...@@ -1271,6 +1278,25 @@ static void nxagentParseOptions(char *name, char *value)
return; return;
} }
else if (!strcmp(name, "autodpi"))
{
if (nxagentReconnectTrap == True)
{
#ifdef DEBUG
fprintf(stderr, "nxagentParseOptions: Ignoring option 'autodpi' at reconnection.\n");
#endif
}
else if (!strcmp(value, "0"))
{
nxagentAutoDPI = False;
}
else
{
nxagentAutoDPI = True;
}
return;
}
else if (strcmp(name, "shadowuid") == 0) else if (strcmp(name, "shadowuid") == 0)
{ {
nxagentShadowUid = atoi(value); nxagentShadowUid = atoi(value);
...@@ -2091,6 +2117,7 @@ void ddxUseMsg(void) ...@@ -2091,6 +2117,7 @@ void ddxUseMsg(void)
ErrorF("-class string default visual class\n"); ErrorF("-class string default visual class\n");
ErrorF("-depth int default depth\n"); ErrorF("-depth int default depth\n");
ErrorF("-geometry WxH+X+Y window size and position\n"); ErrorF("-geometry WxH+X+Y window size and position\n");
ErrorF("-autodpi detect real server's DPI and use that in the session\n");
ErrorF("-bw int window border width\n"); ErrorF("-bw int window border width\n");
ErrorF("-name string window name\n"); ErrorF("-name string window name\n");
ErrorF("-scrns int number of screens to generate\n"); ErrorF("-scrns int number of screens to generate\n");
......
...@@ -338,15 +338,26 @@ static int nxagentRandRInitSizes(ScreenPtr pScreen) ...@@ -338,15 +338,26 @@ static int nxagentRandRInitSizes(ScreenPtr pScreen)
width = w[i]; width = w[i];
height = h[i]; height = h[i];
mmWidth = (width * 254 + monitorResolution * 5) / (monitorResolution * 10); if (monitorResolution < 0)
{
mmWidth = width * DisplayWidthMM(nxagentDisplay, DefaultScreen(nxagentDisplay)) /
DisplayWidth(nxagentDisplay, DefaultScreen(nxagentDisplay));
mmHeight = height * DisplayHeightMM(nxagentDisplay, DefaultScreen(nxagentDisplay)) /
DisplayHeight(nxagentDisplay, DefaultScreen(nxagentDisplay));
}
else
{
mmWidth = (width * 254 + monitorResolution * 5) / (monitorResolution * 10);
mmHeight = (height * 254 + monitorResolution * 5) / (monitorResolution * 10);
}
if (mmWidth < 1) if (mmWidth < 1)
{ {
mmWidth = 1; mmWidth = 1;
} }
mmHeight = (height * 254 + monitorResolution * 5) / (monitorResolution * 10);
if (mmHeight < 1) if (mmHeight < 1)
{ {
mmHeight = 1; mmHeight = 1;
......
...@@ -210,6 +210,9 @@ void nxagentShadowAdaptDepth(unsigned int, unsigned int, unsigned int, char **); ...@@ -210,6 +210,9 @@ void nxagentShadowAdaptDepth(unsigned int, unsigned int, unsigned int, char **);
RegionRec nxagentShadowUpdateRegion; RegionRec nxagentShadowUpdateRegion;
#define NXAGENT_DEFAULT_DPI 75 #define NXAGENT_DEFAULT_DPI 75
#define NXAGENT_AUTO_DPI -1
extern Bool nxagentAutoDPI;
/* /*
* From randr/randr.c. This was originally static * From randr/randr.c. This was originally static
...@@ -1327,10 +1330,14 @@ Bool nxagentOpenScreen(ScreenPtr pScreen, ...@@ -1327,10 +1330,14 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
rootDepth, (long unsigned int)defaultVisual); rootDepth, (long unsigned int)defaultVisual);
#endif #endif
if (monitorResolution < 1) if ((monitorResolution < 1) && (nxagentAutoDPI == False))
{ {
monitorResolution = NXAGENT_DEFAULT_DPI; monitorResolution = NXAGENT_DEFAULT_DPI;
} }
else if ((monitorResolution < 1) && (nxagentAutoDPI == True))
{
monitorResolution = NXAGENT_AUTO_DPI;
}
if (!fbScreenInit(pScreen, pFrameBufferBits, nxagentOption(RootWidth), nxagentOption(RootHeight), if (!fbScreenInit(pScreen, pFrameBufferBits, nxagentOption(RootWidth), nxagentOption(RootHeight),
monitorResolution, monitorResolution, PixmapBytePad(nxagentOption(RootWidth), rootDepth), bitsPerPixel)) monitorResolution, monitorResolution, PixmapBytePad(nxagentOption(RootWidth), rootDepth), bitsPerPixel))
...@@ -1474,6 +1481,17 @@ N/A ...@@ -1474,6 +1481,17 @@ N/A
* return FALSE; * return FALSE;
*/ */
if (monitorResolution < 0)
{
pScreen->mmWidth = nxagentOption(RootWidth) * DisplayWidthMM(nxagentDisplay,
DefaultScreen(nxagentDisplay)) / DisplayWidth(nxagentDisplay,
DefaultScreen(nxagentDisplay));
pScreen->mmHeight = nxagentOption(RootHeight) * DisplayHeightMM(nxagentDisplay,
DefaultScreen(nxagentDisplay)) / DisplayHeight(nxagentDisplay,
DefaultScreen(nxagentDisplay));
}
pScreen->defColormap = (Colormap) FakeClientID(0); pScreen->defColormap = (Colormap) FakeClientID(0);
pScreen->minInstalledCmaps = MINCMAPS; pScreen->minInstalledCmaps = MINCMAPS;
pScreen->maxInstalledCmaps = MAXCMAPS; pScreen->maxInstalledCmaps = MAXCMAPS;
...@@ -2294,22 +2312,40 @@ Bool nxagentResizeScreen(ScreenPtr pScreen, int width, int height, ...@@ -2294,22 +2312,40 @@ Bool nxagentResizeScreen(ScreenPtr pScreen, int width, int height,
if (mmWidth == 0) if (mmWidth == 0)
{ {
mmWidth = (width * 254 + monitorResolution * 5) / (monitorResolution * 10); if (monitorResolution < 0)
{
mmWidth = width * DisplayWidthMM(nxagentDisplay, DefaultScreen(nxagentDisplay)) /
DisplayWidth(nxagentDisplay, DefaultScreen(nxagentDisplay));
}
else
{
mmWidth = (width * 254 + monitorResolution * 5) / (monitorResolution * 10);
}
if (mmWidth < 1) if (mmWidth < 1)
{ {
mmWidth = 1; mmWidth = 1;
} }
} }
if (mmHeight == 0) if (mmHeight == 0)
{ {
mmHeight = (height * 254 + monitorResolution * 5) / (monitorResolution * 10); if (monitorResolution < 0)
{
mmHeight = height * DisplayHeightMM(nxagentDisplay, DefaultScreen(nxagentDisplay)) /
DisplayHeight(nxagentDisplay, DefaultScreen(nxagentDisplay));
}
else
{
mmHeight = (height * 254 + monitorResolution * 5) / (monitorResolution * 10);
}
if (mmHeight < 1) if (mmHeight < 1)
{ {
mmHeight = 1; mmHeight = 1;
} }
} }
pScreen -> mmWidth = mmWidth; pScreen -> mmWidth = mmWidth;
......
...@@ -393,6 +393,9 @@ auto-disconnect timeout in seconds (minimum allowed: 60) ...@@ -393,6 +393,9 @@ auto-disconnect timeout in seconds (minimum allowed: 60)
.B \-norootlessexit .B \-norootlessexit
don't exit if there are no clients in rootless mode don't exit if there are no clients in rootless mode
.TP 8 .TP 8
.B \-autodpi
detect real server's DPI and set it in the agent session; the \fI-dpi <dpi>\fR cmdline option overrides \fI-autodpi\fR
.TP 8
.B \-nomagicpixel .B \-nomagicpixel
disable magic pixel support at session startup, can be re-enabled via nx/nx option on session disable magic pixel support at session startup, can be re-enabled via nx/nx option on session
resumption resumption
...@@ -603,6 +606,11 @@ proxy <-> agent remote sessions) ...@@ -603,6 +606,11 @@ proxy <-> agent remote sessions)
.B magicpixel=<bool> .B magicpixel=<bool>
enable/disable magic pixel support in fullscreen mode (default: 1, enabled) enable/disable magic pixel support in fullscreen mode (default: 1, enabled)
.TP 8 .TP 8
.B autodpi=<bool>
enable/disable deriving session DPI automatically from real server
(default: 0, disabled); only takes effect on session startups, gets
ignored when reconnecting to a suspended session
.TP 8
.B sleep=<int> .B sleep=<int>
delay X server operations when suspended (provided in msec), set to delay X server operations when suspended (provided in msec), set to
\fI0\fR to keep \fBnxagent\fR session fully functional when suspended \fI0\fR to keep \fBnxagent\fR session fully functional when suspended
......
...@@ -8476,7 +8476,8 @@ int ParseEnvironmentOptions(const char *env, int force) ...@@ -8476,7 +8476,8 @@ int ParseEnvironmentOptions(const char *env, int force)
strcasecmp(name, "tile") == 0 || strcasecmp(name, "tile") == 0 ||
strcasecmp(name, "menu") == 0 || strcasecmp(name, "menu") == 0 ||
strcasecmp(name, "magicpixel") == 0 || strcasecmp(name, "magicpixel") == 0 ||
strcasecmp(name, "state") == 0 ) strcasecmp(name, "autodpi") == 0 ||
strcasecmp(name, "state") == 0 )
{ {
nxdbg << "Loop: Ignoring agent option '" << name nxdbg << "Loop: Ignoring agent option '" << name
<< "' with value '" << value << "'.\n" << "' with value '" << value << "'.\n"
......
...@@ -344,6 +344,7 @@ defer=n\n\ ...@@ -344,6 +344,7 @@ defer=n\n\
tile=s\n\ tile=s\n\
menu=n\n\ menu=n\n\
magicpixel=n\n\ magicpixel=n\n\
autodpi=n\n\
sleep=n\n\ sleep=n\n\
tolerancechecks=s\n\ tolerancechecks=s\n\
keyconv=s\n\ keyconv=s\n\
......
...@@ -328,6 +328,7 @@ encryption of the point to point communication. ...@@ -328,6 +328,7 @@ encryption of the point to point communication.
tile=<string> tile=<string>
menu=<int> menu=<int>
magicpixel=<bool> magicpixel=<bool>
autodpi=<bool>
sleep=<int> sleep=<int>
.SH NX ENVIRONMENT VARIABLES .SH NX ENVIRONMENT VARIABLES
......
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