mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-03 17:20:26 +01:00
move WindowExists() code into glxext.c (effectively out of the driver)
This commit is contained in:
parent
0201db5a22
commit
aa0109bf96
3 changed files with 32 additions and 24 deletions
|
|
@ -232,28 +232,6 @@ static void __driRemoveDrawable(void *drawHash, __DRIdrawable *pdraw)
|
|||
}
|
||||
}
|
||||
|
||||
static Bool __driWindowExistsFlag;
|
||||
|
||||
static int __driWindowExistsErrorHandler(Display *dpy, XErrorEvent *xerr)
|
||||
{
|
||||
if (xerr->error_code == BadWindow) {
|
||||
__driWindowExistsFlag = GL_FALSE;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static Bool __driWindowExists(Display *dpy, GLXDrawable draw)
|
||||
{
|
||||
XWindowAttributes xwa;
|
||||
int (*oldXErrorHandler)(Display *, XErrorEvent *);
|
||||
|
||||
__driWindowExistsFlag = GL_TRUE;
|
||||
oldXErrorHandler = XSetErrorHandler(__driWindowExistsErrorHandler);
|
||||
XGetWindowAttributes(dpy, draw, &xwa); /* dummy request */
|
||||
XSetErrorHandler(oldXErrorHandler);
|
||||
return __driWindowExistsFlag;
|
||||
}
|
||||
|
||||
static void __driGarbageCollectDrawables(void *drawHash)
|
||||
{
|
||||
GLXDrawable draw;
|
||||
|
|
@ -265,7 +243,7 @@ static void __driGarbageCollectDrawables(void *drawHash)
|
|||
__DRIdrawablePrivate *pdp = (__DRIdrawablePrivate *)pdraw->private;
|
||||
dpy = pdp->driScreenPriv->display;
|
||||
XSync(dpy, GL_FALSE);
|
||||
if (!__driWindowExists(dpy, draw)) {
|
||||
if (!__glXWindowExists(dpy, draw)) {
|
||||
/* Destroy the local drawable data in the hash table, if the
|
||||
drawable no longer exists in the Xserver */
|
||||
__driRemoveDrawable(drawHash, pdraw);
|
||||
|
|
@ -763,7 +741,7 @@ static void driDestroyDrawable(Display *dpy, void *drawablePrivate)
|
|||
|
||||
if (pdp) {
|
||||
(*psp->DriverAPI.DestroyBuffer)(pdp);
|
||||
if (__driWindowExists(dpy, pdp->draw)) {
|
||||
if (__glXWindowExists(dpy, pdp->draw)) {
|
||||
#if 0
|
||||
(void)XF86DRIDestroyDrawable(dpy, scrn, pdp->draw);
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -313,6 +313,9 @@ extern void __glXRegisterExtensions(void);
|
|||
extern void *__glXRegisterGLXFunction(const char *funcName, void *funcAddr);
|
||||
extern void __glXRegisterGLXExtensionString(const char *extName);
|
||||
|
||||
extern Bool __glXWindowExists(Display *dpy, GLXDrawable draw);
|
||||
|
||||
|
||||
|
||||
/************************************************************************/
|
||||
|
||||
|
|
|
|||
|
|
@ -1113,3 +1113,30 @@ __glXRegisterExtensions(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
static Bool __driWindowExistsFlag;
|
||||
|
||||
static int __driWindowExistsErrorHandler(Display *dpy, XErrorEvent *xerr)
|
||||
{
|
||||
if (xerr->error_code == BadWindow) {
|
||||
__driWindowExistsFlag = GL_FALSE;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Utility function useful to DRI drivers.
|
||||
*/
|
||||
Bool __glXWindowExists(Display *dpy, GLXDrawable draw)
|
||||
{
|
||||
XWindowAttributes xwa;
|
||||
int (*oldXErrorHandler)(Display *, XErrorEvent *);
|
||||
|
||||
XSync(dpy, GL_FALSE);
|
||||
__driWindowExistsFlag = GL_TRUE;
|
||||
oldXErrorHandler = XSetErrorHandler(__driWindowExistsErrorHandler);
|
||||
XGetWindowAttributes(dpy, draw, &xwa); /* dummy request */
|
||||
XSetErrorHandler(oldXErrorHandler);
|
||||
return __driWindowExistsFlag;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue