aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/nxagent/Client.c
diff options
context:
space:
mode:
authorUlrich Sibiller <uli42@gmx.de>2020-02-15 23:50:03 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2020-05-07 14:57:21 +0200
commit067031a3b3036670ccc858be732264215a7d14ba (patch)
tree5d17e4181439bd05b415e600887154f979d906aa /nx-X11/programs/Xserver/hw/nxagent/Client.c
parent7835204928959c644ca3b8fdcc20390adc713f1e (diff)
downloadnx-libs-067031a3b3036670ccc858be732264215a7d14ba.tar.gz
nx-libs-067031a3b3036670ccc858be732264215a7d14ba.tar.bz2
nx-libs-067031a3b3036670ccc858be732264215a7d14ba.zip
nxagent: use Xorg's callback mechanism for init/free of client privates
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent/Client.c')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Client.c76
1 files changed, 75 insertions, 1 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Client.c b/nx-X11/programs/Xserver/hw/nxagent/Client.c
index 1e4182599..020f90c91 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Client.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Client.c
@@ -68,6 +68,10 @@
#undef TEST
#undef DEBUG
+void nxagentClientStateCallback(CallbackListPtr *callbacks, void *data, void *args);
+static void initClientPrivates(ClientPtr client);
+static void freeClientPrivates(ClientPtr client);
+
/*
* Returns the last signal delivered to the process.
*/
@@ -106,8 +110,78 @@ int nxagentClientPrivateIndex;
int nxagentShadowCounter = 0;
-void nxagentInitClientPrivates(ClientPtr client)
+/*
+ * called whenever the client state changes. See dixstruct.h for a
+ * list of known states.
+ */
+
+#ifdef DEBUG
+const char * getClientStateString(int state)
+{
+ switch (state)
+ {
+ case ClientStateInitial: { return "Initial"; break; };
+ case ClientStateAuthenticating: { return "Authenticating"; break; };
+ case ClientStateRunning: { return "Running"; break; };
+ case ClientStateRetained: { return "Retained"; break; };
+ case ClientStateGone: { return "Gone"; break; };
+ case ClientStateCheckingSecurity: { return "CheckingSecurity"; break; };
+ case ClientStateCheckedSecurity: { return "CheckedSecurity"; break; };
+ default: { return "UNKNOWN"; break; };
+ }
+}
+#endif
+
+void nxagentClientStateCallback(CallbackListPtr *callbacks, void *data, void *args)
+{
+ ClientPtr client = ((NewClientInfoRec *)args)->client;
+
+ #ifdef DEBUG
+ fprintf(stderr, "%s: client [%d] clientState [%s]\n", __func__, client->index,
+ getClientStateString(client->clientState));
+ #endif
+
+ switch(client->clientState)
+ {
+ case ClientStateInitial:
+ {
+ initClientPrivates(client);
+ break;
+ }
+ case ClientStateGone:
+ {
+ freeClientPrivates(client);
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+}
+
+static void initClientPrivates(ClientPtr client)
{
+ #ifdef DEBUG
+ fprintf(stderr, "%s: called\n", __func__);
+ #endif
+
+ if (nxagentClientPriv(client))
+ {
+ nxagentClientPriv(client) -> clientState = 0;
+#ifdef COUNT_CLIENT_BYTES
+ nxagentClientPriv(client) -> clientBytes = 0;
+#endif
+ nxagentClientPriv(client) -> clientHint = UNKNOWN;
+ }
+}
+
+static void freeClientPrivates(ClientPtr client)
+{
+ #ifdef DEBUG
+ fprintf(stderr, "%s: called\n", __func__);
+ #endif
+
if (nxagentClientPriv(client))
{
nxagentClientPriv(client) -> clientState = 0;