dix: add callback for post root window init

Allow extensions to catch in right after a screen's root window has
been finally initialized

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-03-13 09:19:34 +01:00
parent 7b801906c5
commit c4632a40dc
2 changed files with 17 additions and 1 deletions

View File

@ -53,6 +53,19 @@ extern HWEventQueuePtr checkForInput[2];
/* -retro mode */ /* -retro mode */
extern Bool party_like_its_1989; extern Bool party_like_its_1989;
/*
* @brief callback right after one screen's root window has been initialized
*
* For extensions that need additional setup after root window is completely
* initialized (eg. possible to create new windows), but before any client
* can connect. Called once per screen (supplied as arg) - the screen's
* CreateWindow proc already had been called on the root window.
*
* Not for DDXs / drivers: those already informed by screen's CreateWindow
* proc being called on the root window.
*/
extern CallbackListPtr PostInitRootWindowCallback;
static inline _X_NOTSAN Bool static inline _X_NOTSAN Bool
InputCheckPending(void) InputCheckPending(void)
{ {

View File

@ -125,6 +125,7 @@ Equipment Corporation.
extern void Dispatch(void); extern void Dispatch(void);
CallbackListPtr RootWindowFinalizeCallback = NULL; CallbackListPtr RootWindowFinalizeCallback = NULL;
CallbackListPtr PostInitRootWindowCallback = NULL;
int int
dix_main(int argc, char *argv[], char *envp[]) dix_main(int argc, char *argv[], char *envp[])
@ -247,8 +248,10 @@ dix_main(int argc, char *argv[], char *envp[])
PanoramiXConsolidate(); PanoramiXConsolidate();
#endif /* XINERAMA */ #endif /* XINERAMA */
for (i = 0; i < screenInfo.numScreens; i++) for (i = 0; i < screenInfo.numScreens; i++) {
InitRootWindow(screenInfo.screens[i]->root); InitRootWindow(screenInfo.screens[i]->root);
CallCallbacks(&PostInitRootWindowCallback, screenInfo.screens[i]);
}
LogMessageVerb(X_INFO, 1, "Screen(s) initialized\n"); LogMessageVerb(X_INFO, 1, "Screen(s) initialized\n");