X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fmain.c;h=15486e61c83f3dfef06c88816d1f4db2ade4985b;hb=ce6b94be7d334af14fac9f997ab66ff9a9aeecc5;hp=561159d5be08ebf6802a102049846b0f470d138f;hpb=86c8cc19b0b625cdadd4ce892ecbaeb94a0e5fe2;p=geometrycompositor.git diff --git a/source/main.c b/source/main.c index 561159d..15486e6 100644 --- a/source/main.c +++ b/source/main.c @@ -87,6 +87,13 @@ static const float vertices[] = 1.0f, 0.0f }; +int x_error_handler(Display *display, XErrorEvent *event) +{ + printf("Ignoring X error %d on resource %lx\n", event->error_code, event->resourceid); + (void)display; + return 0; +} + int with_error(const char *message) { fprintf(stderr, "%s\n", message); @@ -258,7 +265,11 @@ void add_window(Compositor *compositor, CompositedScreen *screen, Window w) if(w==screen->root || w==screen->overlay) return; - XGetWindowAttributes(compositor->display, w, &win_attr); + if(!XGetWindowAttributes(compositor->display, w, &win_attr)) + { + printf("XGetWindowAttributes failed; probably the window was already destroyed\n"); + return; + } if(win_attr.class==InputOnly) return; @@ -364,6 +375,8 @@ int initialize_screen(Compositor *compositor, unsigned number) XFree(children); + screen->dirty = 1; + return 1; } @@ -379,6 +392,8 @@ int initialize_compositor(Compositor *compositor) if(!compositor->display) return with_error("Could not open X display"); + XSetErrorHandler(&x_error_handler); + if(!XCompositeQueryExtension(compositor->display, &event_base, &error_base)) return with_error("XComposite is required but was not found"); else if(!XCompositeQueryVersion(compositor->display, &major_ver, &minor_ver)) @@ -417,6 +432,8 @@ int initialize_compositor(Compositor *compositor) if(!initialize_screen(compositor, i)) return 0; + compositor->dirty = 1; + return 1; }