From e7b4440f2a525524fdaf8f132afe2dd824ed7714 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Wed, 30 Dec 2020 19:00:48 +0100 Subject: nxagent: make full screen mode selectable at startup fullscreen= now accepts the new value "2" for a fullscreen covering only one screen. -geometry and geometry= now know additional keywords "allscreens" and "onescreen". Fixes ArcticaProject/nx-libs#923 --- nx-X11/programs/Xserver/hw/nxagent/Args.c | 13 +++++++++++-- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 8 +++++++- nx-X11/programs/Xserver/hw/nxagent/Window.c | 2 +- nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 | 19 ++++++++++++++----- 4 files changed, 33 insertions(+), 9 deletions(-) (limited to 'nx-X11/programs') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c index ee76fc795..d5d13ea56 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Args.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c @@ -571,12 +571,16 @@ int ddxProcessArgument(int argc, char *argv[], int i) { if (++i < argc) { - if (!strcmp(argv[i],"fullscreen")) + if (!strcmp(argv[i],"fullscreen") || !strcmp(argv[i],"allscreens")) { nxagentChangeOption(Fullscreen, True); - nxagentChangeOption(AllScreens, True); } + else if (!strcmp(argv[i],"onescreen")) + { + nxagentChangeOption(Fullscreen, True); + nxagentChangeOption(AllScreens, False); + } else { if (nxagentUserGeometry.flag == 0) @@ -1112,6 +1116,11 @@ static void nxagentParseSingleOption(char *name, char *value) fprintf(stderr, "nxagentParseSingleOption: Ignoring option 'fullscreen' at reconnection.\n"); #endif } + else if (!strcmp(value, "2")) + { + nxagentChangeOption(Fullscreen, True); + nxagentChangeOption(AllScreens, False); + } else if (!strcmp(value, "1")) { nxagentChangeOption(Fullscreen, True); diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index 077457f0e..86f88bb7b 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -337,6 +337,12 @@ void nxagentMinimizeFromFullScreen(ScreenPtr pScreen) */ void nxagentMaximizeToFullScreen(ScreenPtr pScreen) { + if (nxagentOption(AllScreens)) + nxagentSwitchAllScreens(pScreen, True); + else + nxagentSwitchFullscreen(pScreen, True); + return; + /* XUnmapWindow(nxagentDisplay, nxagentIconWindow); */ @@ -363,7 +369,7 @@ FIXME: We'll check for ReparentNotify and LeaveNotify events after XEvent e; #ifdef TEST - fprintf(stderr, "nxagentMaximizeToFullscreen: WARNING! Going to wait for the ReparentNotify event [%d].\n", i); + fprintf(stderr, "%d: WARNING! Going to wait for the ReparentNotify event [%d].\n", __func__, i); #endif if (XCheckTypedWindowEvent(nxagentDisplay, nxagentFullscreenWindow, ReparentNotify, &e)) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Window.c b/nx-X11/programs/Xserver/hw/nxagent/Window.c index fcff4c6d0..a30eac589 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Window.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Window.c @@ -729,7 +729,7 @@ void nxagentSwitchFullscreen(ScreenPtr pScreen, Bool switchOn) } #ifdef TEST - fprintf(stderr, "nxagentSwitchFullscreen: Switching to %s mode.\n", + fprintf(stderr, "%s: Switching to %s mode.\n", __func__, switchOn ? "fullscreen" : "windowed"); #endif diff --git a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 index e6fad9ba5..111224264 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 +++ b/nx-X11/programs/Xserver/hw/nxagent/man/nxagent.1 @@ -281,7 +281,9 @@ not specified, \fBnxagent\fR will choose .I W and .I H -to be 3/4ths the dimensions of the root window of the real server. +to be 3/4ths the dimensions of the root window of the real server. For +further values accepted see the documentation of +\fBgeometry=\fR below. .TP 8 .B \-dpi \fIresolution\fP sets the resolution for all screens, in dots per inch. If this option @@ -626,14 +628,21 @@ line, no-op when resuming (default: \fI0\fR, disabled) .TP 8 .B geometry= desktop geometry when starting or resuming a session, no-op in -rootless mode (default 66% of the underlying X server geometry) +rootless mode (default 66% of the underlying X server geometry). You +can either specify a standard X geometry string +(WxH+X+Y) or \fIallscreens\fR for a window covering +all available screens or \fRonescreen\fR for a window covering only +one screen. For historical reasons \fIfullscreen\fR (as a synonym to +\fIallscreens\fR) is also accepted. +.TP 8 +.B fullscreen= +start or resume a session in fullscreen mode (default: \fI0\fR, off). Specify \fI1\fR for +a fullscreen window covering all available screens or \fI2\fR for a fullscreen window +covering only the first screen. .TP 8 .B resize= set resizing support (default: \fI1\fR, enabled) .TP 8 -.B fullscreen= -start or resume a session in fullscreen mode (default: \fI0\fR, off) -.TP 8 .B keyboard= or kbtype= .BR query | clone | / | rmlvo/#### -- cgit v1.2.3