diff options
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Screen.c | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index a6b312aaa..b87c1e225 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -322,6 +322,12 @@ Bool nxagentIsParentOf(Display *d, XlibWindow possible_parent, XlibWindow candid */ void nxagentMinimizeFromFullScreen(ScreenPtr pScreen) { + if (nxagentOption(Fullscreen) && !nxagentOption(AllScreens)) + { + nxagentSwitchFullscreen(pScreen, False); + return; + } + XUnmapWindow(nxagentDisplay, nxagentFullscreenWindow); XIconifyWindow(nxagentDisplay, nxagentIconWindow, DefaultScreen(nxagentDisplay)); @@ -337,6 +343,12 @@ void nxagentMinimizeFromFullScreen(ScreenPtr pScreen) */ void nxagentMaximizeToFullScreen(ScreenPtr pScreen) { + if (nxagentOption(Fullscreen) && !nxagentOption(AllScreens)) + { + nxagentSwitchFullscreen(pScreen, True); + return; + } + /* XUnmapWindow(nxagentDisplay, nxagentIconWindow); */ @@ -471,8 +483,8 @@ Window nxagentCreateIconWindow(void) if (-1 == asprintf(&winname, "%s Icon", nxagentWindowName)) { /* If memory allocation wasn't possible, or some other error - occurs, these functions will return -1, and the contents of - winname are undefined. */ + occurs, asprintf() will return -1, and the content of + winname is undefined. */ winname = NULL; } #endif @@ -992,8 +1004,25 @@ Bool nxagentOpenScreen(ScreenPtr pScreen, int argc, char *argv[]) nxagentChangeOption(X, 0); nxagentChangeOption(Y, 0); - nxagentChangeOption(Width, w); - nxagentChangeOption(Height, h); + /* + * Fullscreen will use the window manager on the remote X + * server. We need to size the window appropriately because the + * window manager stores the size and restores it when fullscreen + * mode is left. In AllScreens mode the window manager is + * instructed to not draw any window decorations. Here we need the + * full width to cover the whole screen. + */ + + if (nxagentOption(AllScreens)) + { + nxagentChangeOption(Width, w); + nxagentChangeOption(Height, h); + } + else + { + nxagentChangeOption(Width, w * 3 / 4); + nxagentChangeOption(Height, h * 3 / 4); + } /* first time screen initialization or resize during reconnect */ if (!nxagentReconnectTrap || nxagentResizeDesktopAtStartup) |