dix: lookup function for WindowPtr by XID
This new lookup function retrieves a pointer to WindowRec structure by associated XID. Unlike dixLookupWindow(), this one works globally, instead of just on one specific client, and it doesn't do any XACE calls. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
parent
f6d9a1328a
commit
b2b0f689f3
|
@ -306,4 +306,15 @@ void dixScreenRaiseClose(ScreenPtr pScreen);
|
||||||
*/
|
*/
|
||||||
void dixScreenRaisePixmapDestroy(PixmapPtr pPixmap);
|
void dixScreenRaisePixmapDestroy(PixmapPtr pPixmap);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @brief lookup window by XID
|
||||||
|
*
|
||||||
|
* This globally looks for Window with given XID (all screens, all clients)
|
||||||
|
* and returns a pointer to it. If not found, returns NULL.
|
||||||
|
*
|
||||||
|
* Unlike ::dixLookupWindow() it doesn't scan only one given client, nor does
|
||||||
|
* it do any XACE calls.
|
||||||
|
*/
|
||||||
|
WindowPtr dixLookupWindowByXID(Window window);
|
||||||
|
|
||||||
#endif /* _XSERVER_DIX_PRIV_H */
|
#endif /* _XSERVER_DIX_PRIV_H */
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
/* SPDX-License-Identifier: MIT OR X11
|
||||||
|
*
|
||||||
|
* Copyright © 2024 Enrico Weigelt, metux IT consult <info@metux.net>
|
||||||
|
*
|
||||||
|
* @brief DIX lookup functions
|
||||||
|
*/
|
||||||
|
#include <dix-config.h>
|
||||||
|
|
||||||
|
#include "dix/dix_priv.h"
|
||||||
|
#include "include/windowstr.h"
|
||||||
|
|
||||||
|
struct window_xid_match {
|
||||||
|
WindowPtr pWin;
|
||||||
|
Window id;
|
||||||
|
};
|
||||||
|
|
||||||
|
static int dix_match_window_xid(WindowPtr pWin, void *ptr)
|
||||||
|
{
|
||||||
|
struct window_xid_match *walk = (struct window_xid_match*) ptr;
|
||||||
|
|
||||||
|
if (walk->id == pWin->drawable.id) {
|
||||||
|
walk->pWin = pWin;
|
||||||
|
return WT_STOPWALKING;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return WT_WALKCHILDREN;
|
||||||
|
}
|
||||||
|
|
||||||
|
WindowPtr dixLookupWindowByXID(Window window)
|
||||||
|
{
|
||||||
|
struct window_xid_match walk = {
|
||||||
|
.id = window,
|
||||||
|
};
|
||||||
|
|
||||||
|
for (int i = 0; i < screenInfo.numScreens; i++) {
|
||||||
|
WalkTree(screenInfo.screens[i], dix_match_window_xid, &walk);
|
||||||
|
if (walk.pWin)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return walk.pWin;
|
||||||
|
}
|
|
@ -20,6 +20,7 @@ srcs_dix = [
|
||||||
'glyphcurs.c',
|
'glyphcurs.c',
|
||||||
'grabs.c',
|
'grabs.c',
|
||||||
'inpututils.c',
|
'inpututils.c',
|
||||||
|
'lookup.c',
|
||||||
'pixmap.c',
|
'pixmap.c',
|
||||||
'privates.c',
|
'privates.c',
|
||||||
'property.c',
|
'property.c',
|
||||||
|
|
Loading…
Reference in New Issue