diff --git a/dix/client.c b/dix/client.c new file mode 100644 index 0000000000..2c32318ea5 --- /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 0000000000..99eb4790f6 --- /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 e5797583ae..c84353d848 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" @@ -3643,6 +3644,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 6281ed9566..55f092892d 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 8bb0acf514..d0642f131f 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