diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2020-05-07 12:38:44 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2020-05-07 12:38:44 +0200 |
commit | f2dc8121d903ddefba96483874dca69aac47fb59 (patch) | |
tree | 995c21b3fe7334999b99efa9b52c1c0b7ebce8d6 /nx-X11/programs | |
parent | 82fc54e577c56ee3952f14c4a5c9f50c16645591 (diff) | |
parent | fde52a9b773f85c59a3f6473f2fef08fde91016a (diff) | |
download | nx-libs-f2dc8121d903ddefba96483874dca69aac47fb59.tar.gz nx-libs-f2dc8121d903ddefba96483874dca69aac47fb59.tar.bz2 nx-libs-f2dc8121d903ddefba96483874dca69aac47fb59.zip |
Merge branch 'uli42-pr/refactor_timeout' into 3.6.x
Attributes GH PR #899: https://github.com/ArcticaProject/nx-libs/pull/899
Diffstat (limited to 'nx-X11/programs')
-rw-r--r-- | nx-X11/programs/Xserver/dix/dispatch.c | 5 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/dix/window.c | 2 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Args.c | 2 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Init.c | 94 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Init.h | 4 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c | 161 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/NXwindow.c | 123 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Reconnect.c | 3 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Screen.c | 144 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Screen.h | 2 |
10 files changed, 151 insertions, 389 deletions
diff --git a/nx-X11/programs/Xserver/dix/dispatch.c b/nx-X11/programs/Xserver/dix/dispatch.c index 6c18c5b59..6d0d61a15 100644 --- a/nx-X11/programs/Xserver/dix/dispatch.c +++ b/nx-X11/programs/Xserver/dix/dispatch.c @@ -3167,8 +3167,6 @@ ProcQueryBestSize (register ClientPtr client) return (client->noClientException); } - -#ifndef NXAGENT_SERVER int ProcSetScreenSaver (register ClientPtr client) { @@ -3224,7 +3222,6 @@ ProcSetScreenSaver (register ClientPtr client) SetScreenSaverTimer(); return (client->noClientException); } -#endif /* NXAGENT_SERVER */ int ProcGetScreenSaver(register ClientPtr client) @@ -3425,7 +3422,6 @@ ProcChangeCloseDownMode(register ClientPtr client) } } -#ifndef NXAGENT_SERVER int ProcForceScreenSaver(register ClientPtr client) { REQUEST(xForceScreenSaverReq); @@ -3441,7 +3437,6 @@ int ProcForceScreenSaver(register ClientPtr client) SaveScreens(SCREEN_SAVER_FORCER, (int)stuff->mode); return client->noClientException; } -#endif /* NXAGENT_SERVER */ int ProcNoOperation(register ClientPtr client) { diff --git a/nx-X11/programs/Xserver/dix/window.c b/nx-X11/programs/Xserver/dix/window.c index d294e139d..9358a96c4 100644 --- a/nx-X11/programs/Xserver/dix/window.c +++ b/nx-X11/programs/Xserver/dix/window.c @@ -3334,7 +3334,6 @@ static void DrawLogo( ); #endif -#ifndef NXAGENT_SERVER void SaveScreens(int on, int mode) { @@ -3445,7 +3444,6 @@ SaveScreens(int on, int mode) if (mode == ScreenSaverReset) SetScreenSaverTimer(); } -#endif /* NXAGENT_SERVER */ static Bool TileScreenSaver(int i, int kind) 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 <sys/types.h> #include <unistd.h> #include <stdarg.h> +#include <signal.h> #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..ad9ce771f 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 <nx/Shadow.h> #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)) @@ -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(); -} 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..3745c0aec 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 <signal.h> - #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 @@ -538,37 +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 - /* - * We need only to reset the timeouts - * in this case. - */ - if (what == SCREEN_SAVER_OFF) { - nxagentAutoDisconnectTimeout = nxagentOption(Timeout) * MILLI_PER_SECOND; - - return 1; + return False; } /* - * 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. */ /* @@ -578,71 +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; } - /* - * 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; + return False; } Bool nxagentCreateScreenResources(ScreenPtr pScreen) @@ -3490,14 +3429,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; |