diff --git a/dix/client.c b/dix/client.c new file mode 100644 index 000000000..2c32318ea --- /dev/null +++ b/dix/client.c @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: MIT OR X11 + * + * Copyright © 2024 Enrico Weigelt, metux IT consult + */ +#include + +#include + +#include "include/callback.h" + +CallbackListPtr ClientDestroyCallback = NULL; diff --git a/dix/client_priv.h b/dix/client_priv.h new file mode 100644 index 000000000..99eb4790f --- /dev/null +++ b/dix/client_priv.h @@ -0,0 +1,16 @@ +/* SPDX-License-Identifier: MIT OR X11 + * + * Copyright © 2024 Enrico Weigelt, metux IT consult + */ +#ifndef _XSERVER_DIX_CLIENT_PRIV_H +#define _XSERVER_DIX_CLIENT_PRIV_H + +#include "include/callback.h" + +/* + * called right before ClientRec is about to be destroyed, + * after resources have been freed. argument is ClientPtr + */ +extern CallbackListPtr ClientDestroyCallback; + +#endif /* _XSERVER_DIX_CLIENT_PRIV_H */ diff --git a/dix/dispatch.c b/dix/dispatch.c index 96ef412cc..0a7fc948c 100644 --- a/dix/dispatch.c +++ b/dix/dispatch.c @@ -103,6 +103,7 @@ Equipment Corporation. #include #include +#include "dix/client_priv.h" #include "dix/colormap_priv.h" #include "dix/cursor_priv.h" #include "dix/dix_priv.h" @@ -3550,6 +3551,7 @@ CloseDownClient(ClientPtr client) TouchListenerGone(client->clientAsMask); GestureListenerGone(client->clientAsMask); FreeClientResources(client); + CallCallbacks(&ClientDestroyCallback, client); /* Disable client ID tracking. This must be done after * ClientStateCallback. */ ReleaseClientIds(client); diff --git a/dix/meson.build b/dix/meson.build index 85f633421..0c3c662b9 100644 --- a/dix/meson.build +++ b/dix/meson.build @@ -1,5 +1,6 @@ srcs_dix = [ 'atom.c', + 'client.c', 'colormap.c', 'color.c', 'cursor.c', diff --git a/os/client_priv.h b/os/client_priv.h index 8bb0acf51..d0642f131 100644 --- a/os/client_priv.h +++ b/os/client_priv.h @@ -3,8 +3,8 @@ * Copyright © 2024 Enrico Weigelt, metux IT consult * Copyright © 2010 Nokia Corporation and/or its subsidiary(-ies). */ -#ifndef _XSERVER_DIX_CLIENT_PRIV_H -#define _XSERVER_DIX_CLIENT_PRIV_H +#ifndef _XSERVER_OS_CLIENT_PRIV_H +#define _XSERVER_OS_CLIENT_PRIV_H #include #include