Module: wine Branch: refs/heads/master Commit: fb8ca46e8286a277403c0cc3188dfc44a97a4b9b URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=fb8ca46e8286a277403c0cc3...
Author: Alexandre Julliard julliard@winehq.org Date: Sat Apr 1 14:21:31 2006 +0200
x11drv: Ignore X errors caused by windows being created or deleted.
---
dlls/x11drv/x11drv.h | 1 + dlls/x11drv/x11drv_main.c | 16 ++++++++++++++++ dlls/x11drv/xrender.c | 6 +++--- 3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/dlls/x11drv/x11drv.h b/dlls/x11drv/x11drv.h index 0ba4fce..d259c86 100644 --- a/dlls/x11drv/x11drv.h +++ b/dlls/x11drv/x11drv.h @@ -538,6 +538,7 @@ extern int managed_mode; extern int private_color_map; extern int copy_default_colors; extern int alloc_system_colors; +extern int xrender_error_base;
extern BYTE key_state_table[256]; extern POINT cursor_pos; diff --git a/dlls/x11drv/x11drv_main.c b/dlls/x11drv/x11drv_main.c index 16d0a5c..050ac54 100644 --- a/dlls/x11drv/x11drv_main.c +++ b/dlls/x11drv/x11drv_main.c @@ -37,6 +37,9 @@ #ifdef HAVE_XKB #include <X11/XKBlib.h> #endif +#ifdef HAVE_X11_EXTENSIONS_XRENDER_H +#include <X11/extensions/Xrender.h> +#endif
#include "windef.h" #include "winbase.h" @@ -85,6 +88,7 @@ int client_side_antialias_with_render = int copy_default_colors = 128; int alloc_system_colors = 256; DWORD thread_data_tls_index = TLS_OUT_OF_INDEXES; +int xrender_error_base = 0;
static BOOL desktop_dbl_buf = TRUE;
@@ -161,6 +165,18 @@ static const char * const atom_names[NB_ static inline BOOL ignore_error( Display *display, XErrorEvent *event ) { if (event->request_code == X_SetInputFocus && event->error_code == BadMatch) return TRUE; + + /* ignore a number of errors on gdi display caused by creating/destroying windows */ + if (display == gdi_display) + { + if (event->error_code == BadDrawable || event->error_code == BadGC) return TRUE; +#ifdef HAVE_X11_EXTENSIONS_XRENDER_H + if (xrender_error_base) /* check for XRender errors */ + { + if (event->error_code == xrender_error_base + BadPicture) return TRUE; + } +#endif + } return FALSE; }
diff --git a/dlls/x11drv/xrender.c b/dlls/x11drv/xrender.c index a782ea5..2068e5b 100644 --- a/dlls/x11drv/xrender.c +++ b/dlls/x11drv/xrender.c @@ -167,7 +167,7 @@ static CRITICAL_SECTION xrender_cs = { & */ void X11DRV_XRender_Init(void) { - int error_base, event_base, i; + int event_base, i; XRenderPictFormat pf;
if (client_side_with_render && @@ -200,9 +200,9 @@ LOAD_OPTIONAL_FUNCPTR(XRenderSetPictureT
wine_tsx11_lock(); - if(pXRenderQueryExtension(gdi_display, &event_base, &error_base)) { + if(pXRenderQueryExtension(gdi_display, &event_base, &xrender_error_base)) { X11DRV_XRender_Installed = TRUE; - TRACE("Xrender is up and running error_base = %d\n", error_base); + TRACE("Xrender is up and running error_base = %d\n", xrender_error_base); screen_format = pXRenderFindVisualFormat(gdi_display, visual); if(!screen_format) {