From 46ec003667487d244828babe43884555fbe7322b Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 16 Jan 2020 22:50:18 +0100 Subject: nxagent: re-implement timeout handling Option -timeout used the screensaver facility. This patch changes that to an own timer that is independent. This effectly means we can drop most of the derived screensaving stuff in a follow-up commit. --- nx-X11/programs/Xserver/hw/nxagent/Args.c | 2 - nx-X11/programs/Xserver/hw/nxagent/Init.c | 94 +++++++++++++++++++++++++ nx-X11/programs/Xserver/hw/nxagent/Init.h | 4 ++ nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c | 12 ++-- nx-X11/programs/Xserver/hw/nxagent/Reconnect.c | 3 + nx-X11/programs/Xserver/hw/nxagent/Screen.c | 85 ++-------------------- nx-X11/programs/Xserver/hw/nxagent/Screen.h | 2 - 7 files changed, 114 insertions(+), 88 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c index 0336be822..44856ae19 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Args.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c @@ -2081,8 +2081,6 @@ FIXME: In rootless mode the backing-store support is not functional yet. { fprintf(stderr, "Info: Using auto-disconnect timeout of %d seconds.\n", nxagentOption(Timeout)); - - nxagentAutoDisconnectTimeout = nxagentOption(Timeout) * MILLI_PER_SECOND; } #ifdef WATCH diff --git a/nx-X11/programs/Xserver/hw/nxagent/Init.c b/nx-X11/programs/Xserver/hw/nxagent/Init.c index 0b6b36547..cf156c35f 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Init.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c @@ -40,11 +40,13 @@ is" without express or implied warranty. #include #include #include +#include #include "X.h" #include "Xproto.h" #include "screenint.h" #include "input.h" +#include "inputstr.h" #include "misc.h" #include "scrnintstr.h" #include "windowstr.h" @@ -137,6 +139,8 @@ extern void nxagentSetSelectionCallback(CallbackListPtr *callbacks, void *data, void *args); #endif +OsTimerPtr nxagentTimeoutTimer = NULL; + extern const char *nxagentProgName; void ddxInitGlobals(void) @@ -476,6 +480,96 @@ void ddxBeforeReset(void) { } +CARD32 nxagentTimeoutCallback(OsTimerPtr timer, CARD32 now, void *arg) +{ + CARD32 idle = now - lastDeviceEventTime.milliseconds; + + #ifdef TEST + fprintf(stderr, "%s: called, idle [%d] timeout [%d]\n", __func__, idle, nxagentOption(Timeout) * MILLI_PER_SECOND); + #endif + + /* Set the time to exactly match the remaining time until timeout */ + if (idle < nxagentOption(Timeout) * MILLI_PER_SECOND) + { + return nxagentOption(Timeout) * MILLI_PER_SECOND - idle; + } + + /* + * The lastDeviceEventTime is updated every time a device event is + * received, and it is used by WaitForSomething() to know when the + * SaveScreens() function should be called. This solution doesn't + * take care of a pointer button not being released, so we have to + * handle this case by ourselves. + */ + +/* +FIXME: Do we need to check the key grab if the + autorepeat feature is disabled? +*/ + if (inputInfo.pointer -> button -> buttonsDown > 0) + { + #ifdef TEST + fprintf(stderr, "%s: Prolonging timeout - there is a pointer button down.\n", __func__); + #endif + + /* wait 10s more */ + return 10 * MILLI_PER_SECOND; + } + + if (nxagentSessionState == SESSION_UP ) + { + if (nxagentClients == 0) + { + fprintf(stderr, "Info: Auto-terminating session with no client running.\n"); + raise(SIGTERM); + } + else if (nxagentOption(Persistent) == 0) + { + fprintf(stderr, "Info: Auto-terminating session with persistence not allowed.\n"); + raise(SIGTERM); + } + else + { + fprintf(stderr, "Info: Auto-suspending session with %d clients running.\n", + nxagentClients); + raise(SIGHUP); + } + } + + /* + * we do not need the timer anymore, so do not set a new time. The + * signals above will either terminate or suspend the session. At + * resume we will re-init the timer. + */ + return 0; +} + +void nxagentSetTimeoutTimer(unsigned int millis) +{ + if (nxagentOption(Timeout) > 0) + { + if (millis == 0) + { + millis = nxagentOption(Timeout) * MILLI_PER_SECOND; + } + + #ifdef TEST + fprintf(stderr, "%s: Setting auto-disconnect timeout to [%dms]\n", __func__, millis); + #endif + nxagentTimeoutTimer = TimerSet(nxagentTimeoutTimer, 0, millis, nxagentTimeoutCallback, NULL); + } +} + +void nxagentFreeTimeoutTimer(void) +{ + #ifdef TEST + fprintf(stderr, "%s: freeing timeout timer\n", __func__); + #endif + TimerFree(nxagentTimeoutTimer); + nxagentTimeoutTimer = NULL; +} + + void OsVendorInit(void) { return; diff --git a/nx-X11/programs/Xserver/hw/nxagent/Init.h b/nx-X11/programs/Xserver/hw/nxagent/Init.h index 246f600cf..6fa1bedd7 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Init.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Init.h @@ -52,4 +52,8 @@ extern ServerGrabInfoRec nxagentGrabServerInfo; void nxagentNotifyConnection(int fd, int ready, void *data); +CARD32 nxagentTimeoutCallback(OsTimerPtr timer, CARD32 now, void *arg); +void nxagentSetTimeoutTimer(unsigned int millis); +void nxagentFreeTimeoutTimer(void); + #endif /* __Init_H__ */ diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c b/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c index e804acbd2..329a8cbcb 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c +++ b/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c @@ -125,6 +125,7 @@ Equipment Corporation. #include #include "Handlers.h" #include "Keyboard.h" +#include "Init.h" const int nxagentMaxFontNames = 10000; @@ -139,12 +140,6 @@ void nxagentWaitDisplay(void); void nxagentListRemoteFonts(const char *, int); -/* - * Timeouts based on screen saver time. - */ - -int nxagentAutoDisconnectTimeout = 0; - #include "Xatom.h" /* @@ -312,6 +307,9 @@ Reply Total Cached Bits In Bits Out Bits/Reply Ratio if (!(dispatchException & DE_TERMINATE)) dispatchException = 0; + + /* Init TimeoutTimer if requested */ + nxagentSetTimeoutTimer(0); #endif /* NXAGENT_SERVER */ while (!dispatchException) @@ -547,6 +545,8 @@ Reply Total Cached Bits In Bits Out Bits/Reply Ratio #endif #ifdef NXAGENT_SERVER + nxagentFreeTimeoutTimer(); + /* FIXME: maybe move the code up to the KillAllClients() call to ddxBeforeReset? */ if ((dispatchException & DE_RESET) && (serverGeneration > nxagentMaxAllowedResets)) diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c index cfa0ec804..98db9ca92 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c @@ -54,6 +54,7 @@ #include "Error.h" #include "Keystroke.h" #include "Utils.h" +#include "Init.h" #ifdef XKB #include "XKBsrv.h" @@ -361,6 +362,8 @@ void nxagentDisconnectSession(void) DECODE_SESSION_STATE(nxagentSessionState)); #endif + nxagentFreeTimeoutTimer(); + /* * Force an I/O error on the display * and wait until the NX transport diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index bf614ffdc..da1f0d962 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -37,12 +37,6 @@ is" without express or implied warranty. */ -/* - * Used by the auto-disconnect feature. - */ - -#include - #include "scrnintstr.h" #include "dix.h" #include "dixstruct.h" @@ -517,19 +511,6 @@ void nxagentSetScreenSaverTime(void) (long unsigned int)ScreenSaverTime, (long unsigned int)ScreenSaverInterval); #endif - /* - * More than one timeout could be used here, - * to make use of screen-saver handler not - * only for the timeout feature. In a case - * like this, the lower timeout have to be - * used as ScreenSaverTime. - */ - - if (nxagentAutoDisconnectTimeout > 0) - { - ScreenSaverTime = nxagentAutoDisconnectTimeout; - } - ScreenSaverInterval = ScreenSaverTime; #ifdef TEST @@ -550,15 +531,8 @@ static Bool nxagentSaveScreen(ScreenPtr pScreen, int what) SCREEN_SAVER_CYCLE); #endif - /* - * We need only to reset the timeouts - * in this case. - */ - if (what == SCREEN_SAVER_OFF) { - nxagentAutoDisconnectTimeout = nxagentOption(Timeout) * MILLI_PER_SECOND; - return 1; } @@ -592,56 +566,6 @@ FIXME: Do we need to check the key grab if the return 1; } - /* - * Handling the auto-disconnect feature. - * If there is any client attached and the persisten- - * ce is allowed then leave the session running, else - * terminate it. It should use something less brutal, - * though raising a signal should ensure that the code - * follows the usual execution path. - */ - - if (nxagentOption(Timeout) > 0) - { - #ifdef TEST - fprintf(stderr, "nxagentSaveScreen: Auto-disconnect timeout was [%d].\n", - nxagentAutoDisconnectTimeout); - #endif - - nxagentAutoDisconnectTimeout -= ScreenSaverTime; - - #ifdef TEST - fprintf(stderr, "nxagentSaveScreen: Auto-disconnect timeout is [%d].\n", - nxagentAutoDisconnectTimeout); - #endif - - if (nxagentSessionState == SESSION_UP && - nxagentAutoDisconnectTimeout <= 0) - { - nxagentAutoDisconnectTimeout = nxagentOption(Timeout) * MILLI_PER_SECOND; - - if (nxagentClients == 0) - { - fprintf(stderr, "Info: Terminating session with no client running.\n"); - - raise(SIGTERM); - } - else if (nxagentOption(Persistent) == 0) - { - fprintf(stderr, "Info: Terminating session with persistence not allowed.\n"); - - raise(SIGTERM); - } - else - { - fprintf(stderr, "Info: Suspending session with %d clients running.\n", - nxagentClients); - - raise(SIGHUP); - } - } - } - return 1; } @@ -3490,14 +3414,19 @@ Bool nxagentReconnectScreen(void *p0) XSelectInput(nxagentDisplay, nxagentDefaultWindows[0], mask); /* - * Turn off the screen-saver and reset the - * time to the next auto-disconnection. + * Turn off the screen-saver */ SaveScreens(SCREEN_SAVER_OFF, ScreenSaverActive); + /* + * reset the time to the next auto-disconnection. + */ + lastDeviceEventTime.milliseconds = GetTimeInMillis(); + nxagentSetTimeoutTimer(0); + return True; } diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.h b/nx-X11/programs/Xserver/hw/nxagent/Screen.h index 1b24bfbd6..104da1cea 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.h +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.h @@ -57,8 +57,6 @@ extern XlibAtom nxagentReadyAtom; extern int nxagentClients; -extern int nxagentAutoDisconnectTimeout; - extern ScreenPtr nxagentDefaultScreen; extern Pixmap nxagentPixmapLogo; -- cgit v1.2.3 From ae94215d06b2c66f782900499a6151455aa45e2a Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 16 Jan 2020 22:58:29 +0100 Subject: nxagent: remove now-obsolete own copies of ScreenSaver procs we moved the auto-disconnect feature to an own timer so there's no need for a special treatment in screen saver stuff anymore. --- nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c | 149 ------------------------ nx-X11/programs/Xserver/hw/nxagent/NXwindow.c | 123 ------------------- 2 files changed, 272 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c b/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c index 329a8cbcb..ad9ce771f 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c +++ b/nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c @@ -978,155 +978,6 @@ ProcFreePixmap(register ClientPtr client) } } - -int -ProcSetScreenSaver (register ClientPtr client) -{ - int blankingOption, exposureOption; - REQUEST(xSetScreenSaverReq); - - REQUEST_SIZE_MATCH(xSetScreenSaverReq); - blankingOption = stuff->preferBlank; - if ((blankingOption != DontPreferBlanking) && - (blankingOption != PreferBlanking) && - (blankingOption != DefaultBlanking)) - { - client->errorValue = blankingOption; - return BadValue; - } - exposureOption = stuff->allowExpose; - if ((exposureOption != DontAllowExposures) && - (exposureOption != AllowExposures) && - (exposureOption != DefaultExposures)) - { - client->errorValue = exposureOption; - return BadValue; - } - if (stuff->timeout < -1) - { - client->errorValue = stuff->timeout; - return BadValue; - } - if (stuff->interval < -1) - { - client->errorValue = stuff->interval; - return BadValue; - } - -#ifdef NXAGENT_SERVER - /* - * The NX agent uses the screen saver procedure - * to monitor the user activities and launch its - * handlers (like timeout feature), so we can't - * always allow the clients to change our values. - */ - - #ifdef TEST - fprintf(stderr, "ProcSetScreenSaver: Called with timeout [%d] interval [%d] Blanking [%d] Exposure [%d].\n", - stuff -> timeout, stuff -> interval, blankingOption, exposureOption); - #endif - - if (nxagentOption(Timeout) == 0) - { -#endif - if (blankingOption == DefaultBlanking) - { - ScreenSaverBlanking = defaultScreenSaverBlanking; - } - else - { - ScreenSaverBlanking = blankingOption; - } - - if (exposureOption == DefaultExposures) - { - ScreenSaverAllowExposures = defaultScreenSaverAllowExposures; - } - else - { - ScreenSaverAllowExposures = exposureOption; - } - - if (stuff->timeout >= 0) - { - ScreenSaverTime = stuff->timeout * MILLI_PER_SECOND; - } - else - { - ScreenSaverTime = defaultScreenSaverTime; - } - - if (stuff->interval >= 0) - { - ScreenSaverInterval = stuff->interval * MILLI_PER_SECOND; - } - else - { - ScreenSaverInterval = defaultScreenSaverInterval; - } - - SetScreenSaverTimer(); -#ifdef NXAGENT_SERVER - } - - #ifdef TEST - - else - { - fprintf(stderr, "ProcSetScreenSaver: Keeping auto-disconnect timeout set to [%d] seconds.\n", - nxagentOption(Timeout)); - } - - #endif -#endif - return (client->noClientException); -} - - -int ProcForceScreenSaver(register ClientPtr client) -{ - REQUEST(xForceScreenSaverReq); - - REQUEST_SIZE_MATCH(xForceScreenSaverReq); - - if ((stuff->mode != ScreenSaverReset) && - (stuff->mode != ScreenSaverActive)) - { - client->errorValue = stuff->mode; - return BadValue; - } - -#ifdef NXAGENT_SERVER - /* - * The NX agent uses the screen saver procedure - * to monitor the user activities and launch its - * handlers (like timeout feature), so we can't - * always allow the clients to force the screen - * saver handler execution. - */ - - if (nxagentOption(Timeout) == 0) - { -#endif - SaveScreens(SCREEN_SAVER_FORCER, (int)stuff->mode); -#ifdef NXAGENT_SERVER - } - - #ifdef TEST - - else - { - fprintf(stderr, "ProcForceScreenSaver: Ignoring the client request with mode [%d].\n", - stuff -> mode); - } - - #endif -#endif - - return client->noClientException; -} - - /********************** * CloseDownClient * diff --git a/nx-X11/programs/Xserver/hw/nxagent/NXwindow.c b/nx-X11/programs/Xserver/hw/nxagent/NXwindow.c index a29dff384..43d00a21d 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/NXwindow.c +++ b/nx-X11/programs/Xserver/hw/nxagent/NXwindow.c @@ -783,126 +783,3 @@ MapWindow(register WindowPtr pWin, ClientPtr client) return(Success); } - -void -SaveScreens(int on, int mode) -{ - int i; - int what; - int type; - - if (on == SCREEN_SAVER_FORCER) - { - if (mode == ScreenSaverReset) - what = SCREEN_SAVER_OFF; - else - what = SCREEN_SAVER_ON; - type = what; - } - else - { - what = on; - type = what; - if (what == screenIsSaved) - type = SCREEN_SAVER_CYCLE; - } - for (i = 0; i < screenInfo.numScreens; i++) - { - if (on == SCREEN_SAVER_FORCER) - (* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i], on); - if (savedScreenInfo[i].ExternalScreenSaver) - { -#ifdef NXAGENT_SERVER - if (nxagentOption(Timeout) != 0) - { - #ifdef TEST - fprintf(stderr, "SaveScreens: An external screen-saver handler is installed. " - "Ignoring it to let the auto-disconnect feature work.\n"); - #endif - } - else -#endif - { - if ((*savedScreenInfo[i].ExternalScreenSaver) - (screenInfo.screens[i], type, on == SCREEN_SAVER_FORCER)) - continue; - } - } - if (type == screenIsSaved) - continue; - switch (type) { - case SCREEN_SAVER_OFF: - if (savedScreenInfo[i].blanked == SCREEN_IS_BLANKED) - { - (* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i], - what); - } - else if (HasSaverWindow (i)) - { - savedScreenInfo[i].pWindow = NullWindow; - FreeResource(savedScreenInfo[i].wid, RT_NONE); - } - break; - case SCREEN_SAVER_CYCLE: - if (savedScreenInfo[i].blanked == SCREEN_IS_TILED) - { - WindowPtr pWin = savedScreenInfo[i].pWindow; - /* make it look like screen saver is off, so that - * NotClippedByChildren will compute a clip list - * for the root window, so miPaintWindow works - */ - screenIsSaved = SCREEN_SAVER_OFF; -#ifndef NOLOGOHACK - if (logoScreenSaver) - (*pWin->drawable.pScreen->ClearToBackground)(pWin, 0, 0, 0, 0, FALSE); -#endif - (*pWin->drawable.pScreen->MoveWindow)(pWin, - (short)(-(rand() % RANDOM_WIDTH)), - (short)(-(rand() % RANDOM_WIDTH)), - pWin->nextSib, VTMove); -#ifndef NOLOGOHACK - if (logoScreenSaver) - DrawLogo(pWin); -#endif - screenIsSaved = SCREEN_SAVER_ON; - } - /* - * Call the DDX saver in case it wants to do something - * at cycle time - */ - else if (savedScreenInfo[i].blanked == SCREEN_IS_BLANKED) - { - (* screenInfo.screens[i]->SaveScreen) (screenInfo.screens[i], - type); - } - break; - case SCREEN_SAVER_ON: - if (ScreenSaverBlanking != DontPreferBlanking) - { - if ((* screenInfo.screens[i]->SaveScreen) - (screenInfo.screens[i], what)) - { - savedScreenInfo[i].blanked = SCREEN_IS_BLANKED; - continue; - } - if ((ScreenSaverAllowExposures != DontAllowExposures) && - TileScreenSaver(i, SCREEN_IS_BLACK)) - { - savedScreenInfo[i].blanked = SCREEN_IS_BLACK; - continue; - } - } - if ((ScreenSaverAllowExposures != DontAllowExposures) && - TileScreenSaver(i, SCREEN_IS_TILED)) - { - savedScreenInfo[i].blanked = SCREEN_IS_TILED; - } - else - savedScreenInfo[i].blanked = SCREEN_ISNT_SAVED; - break; - } - } - screenIsSaved = what; - if (mode == ScreenSaverReset) - SetScreenSaverTimer(); -} -- cgit v1.2.3 From 567e700b14ee6188e2c0b6e54e6ffc15dd97fce4 Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 16 Jan 2020 23:41:50 +0100 Subject: Screen.c: document nxagentSaveScreen --- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 59 ++++++++++++++++++----------- 1 file changed, 37 insertions(+), 22 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index da1f0d962..52f7d016c 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -519,30 +519,47 @@ void nxagentSetScreenSaverTime(void) #endif } +/* + * This is the called when the "hardware" should take care of the + * blanking. + * + * "what" can be one if these: + * SCREEN_SAVER_ON Turns on the screen saver; disables video + * SCREEN_SAVER_OFF Turns off the screen saver; enables video + * SCREEN_SAVER_FORCER Updates time of last screen saver mode change + * SCREEN_SAVER_CYCLE Cycle to new pattern + * + * Returns True if the 'what' action was successful and False otherwise. + * + * Returning False the SaveScreens() function (which calls this one) + * tries to build a screen-saver creating a new window. In some cases + * we do not want this so we return True. If we want the dix to take + * care fo blanking we return False. + */ static Bool nxagentSaveScreen(ScreenPtr pScreen, int what) { #ifdef TEST - fprintf(stderr, "nxagentSaveScreen: Called for screen at [%p] with parameter [%d].\n", - (void *) pScreen, what); - - fprintf(stderr, "nxagentSaveScreen: SCREEN_SAVER_ON is [%d] SCREEN_SAVER_OFF is [%d] " - "SCREEN_SAVER_FORCER is [%d] SCREEN_SAVER_CYCLE is [%d].\n", - SCREEN_SAVER_ON, SCREEN_SAVER_OFF, SCREEN_SAVER_FORCER, - SCREEN_SAVER_CYCLE); + fprintf(stderr, "%s: Called for screen at [%p] with parameter [%s]. ScreenSaverTime [%d]\n", __func__, + (void *) pScreen, + what == SCREEN_SAVER_ON ? "SCREEN_SAVER_ON" : + what == SCREEN_SAVER_OFF ? "SCREEN_SAVER_OFF" : + what == SCREEN_SAVER_FORCER ? "SCREEN_SAVER_FORCER" : + what == SCREEN_SAVER_CYCLE ? "SCREEN_SAVER_CYCLE" : + "UNKNOWN", + ScreenSaverTime); #endif if (what == SCREEN_SAVER_OFF) { - return 1; + return True; } /* - * The lastDeviceEventTime is updated every time - * a device event is received, and it is used by - * WaitForSomething() to know when the SaveScreens() - * function should be called. This solution doesn't - * take care of a pointer button not released, so - * we have to handle this case by ourselves. + * The lastDeviceEventTime is updated every time a device event is + * received, and it is used by WaitForSomething() to know when the + * SaveScreens() function should be called. This solution doesn't + * take care of a pointer button not released, so we have to handle + * this case by ourselves. */ /* @@ -552,21 +569,19 @@ FIXME: Do we need to check the key grab if the if (inputInfo.pointer -> button -> buttonsDown > 0) { #ifdef TEST - fprintf(stderr, "nxagentSaveScreen: Ignoring timeout, there is a pointer button down.\n"); + fprintf(stderr, "%s: Ignoring timeout, there is a pointer button down.\n", __func__); #endif /* - * Returning 0 the SaveScreens() function - * (which calls this one) tries to build - * a screen-saver creating a new window. - * We don't want this, so we return 1 in - * any case. + * Returning False the SaveScreens() function (which calls this one) + * tries to build a screen-saver creating a new window. We don't + * want this, so we return True here. */ - return 1; + return True; } - return 1; + return True; } Bool nxagentCreateScreenResources(ScreenPtr pScreen) -- cgit v1.2.3 From fde52a9b773f85c59a3f6473f2fef08fde91016a Mon Sep 17 00:00:00 2001 From: Ulrich Sibiller Date: Thu, 16 Jan 2020 23:42:31 +0100 Subject: Screen.c: activate fallback to dix blanking We have no hardware that could blank the screen for us. So let nxagentSaveScreen return False in some situations to let dix do the default action. --- nx-X11/programs/Xserver/hw/nxagent/Screen.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'nx-X11/programs/Xserver/hw') diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c index 52f7d016c..3745c0aec 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c @@ -551,7 +551,7 @@ static Bool nxagentSaveScreen(ScreenPtr pScreen, int what) if (what == SCREEN_SAVER_OFF) { - return True; + return False; } /* @@ -581,7 +581,7 @@ FIXME: Do we need to check the key grab if the return True; } - return True; + return False; } Bool nxagentCreateScreenResources(ScreenPtr pScreen) -- cgit v1.2.3