aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2020-05-07 12:38:44 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2020-05-07 12:38:44 +0200
commitf2dc8121d903ddefba96483874dca69aac47fb59 (patch)
tree995c21b3fe7334999b99efa9b52c1c0b7ebce8d6
parent82fc54e577c56ee3952f14c4a5c9f50c16645591 (diff)
parentfde52a9b773f85c59a3f6473f2fef08fde91016a (diff)
downloadnx-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
-rw-r--r--nx-X11/programs/Xserver/dix/dispatch.c5
-rw-r--r--nx-X11/programs/Xserver/dix/window.c2
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.c2
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Init.c94
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Init.h4
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/NXdispatch.c161
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/NXwindow.c123
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Reconnect.c3
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Screen.c144
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Screen.h2
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;