diff options
author | Iain Holmes <iain@src.gnome.org> | 2007-11-16 23:38:06 +0000 |
---|---|---|
committer | Iain Holmes <iain@src.gnome.org> | 2007-11-16 23:38:06 +0000 |
commit | 729a1e18cd2824bce9b7c417369d48fec37f99d0 (patch) | |
tree | e8a02ab4d9c76acdc355a455407496e8125b9185 | |
parent | 9b1091a2fc346e12a5d43998d59dee24eb26449a (diff) | |
download | metacity-729a1e18cd2824bce9b7c417369d48fec37f99d0.tar.gz |
Put error traps around the places to catch them wascley x ewwows
svn path=/branches/iains-blingtastic-bucket-o-bling/; revision=3404
-rw-r--r-- | src/compositor.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/compositor.c b/src/compositor.c index d57e4293..75fe2d6a 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -722,8 +722,11 @@ border_size (MetaCompWindow *cw) MetaDisplay *display = screen->display; XserverRegion border; + meta_error_trap_push (display); border = XFixesCreateRegionFromWindow (display->xdisplay, cw->id, WindowRegionBounding); + meta_error_trap_pop (display, FALSE); + g_return_val_if_fail (border != None, None); XFixesTranslateRegion (display->xdisplay, border, cw->attrs.x + cw->attrs.border_width, @@ -757,6 +760,8 @@ get_window_picture (MetaCompWindow *cw) draw = cw->id; + meta_error_trap_push (display); + #ifdef HAVE_NAME_WINDOW_PIXMAP if (cw->pixmap == None) cw->pixmap = XCompositeNameWindowPixmap (display->xdisplay, cw->id); @@ -768,11 +773,18 @@ get_window_picture (MetaCompWindow *cw) format = get_window_format (cw); if (format) { + Picture pict; + pa.subwindow_mode = IncludeInferiors; - return XRenderCreatePicture (display->xdisplay, draw, + + pict = XRenderCreatePicture (display->xdisplay, draw, format, CPSubwindowMode, &pa); + meta_error_trap_pop (display, FALSE); + + return pict; } + meta_error_trap_pop (display, FALSE); return None; } @@ -1026,6 +1038,7 @@ repair_win (MetaCompWindow *cw) MetaDisplay *display = screen->display; XserverRegion parts; + meta_error_trap_push (display); if (!cw->damaged) { parts = win_extents (cw); @@ -1040,6 +1053,8 @@ repair_win (MetaCompWindow *cw) cw->attrs.y + cw->attrs.border_width); } + meta_error_trap_pop (display, FALSE); + add_damage (display, screen, parts); cw->damaged = TRUE; } @@ -1103,9 +1118,10 @@ free_win (MetaCompWindow *cw, if (destroy) { if (cw->damage != None) { - /* If we've got here, then the window has already been destroyed - so this will cause a BadWindow */ - /* XDamageDestroy (display->xdisplay, cw->damage); */ + meta_error_trap_push (display); + XDamageDestroy (display->xdisplay, cw->damage); + meta_error_trap_pop (display, FALSE); + cw->damage = None; } @@ -1215,6 +1231,7 @@ is_shaped (MetaDisplay *display, return FALSE; } +/* Must be called with an error trap in place */ static void add_win (MetaScreen *screen, Window xwindow) @@ -1421,6 +1438,7 @@ resize_win (MetaCompWindow *cw, info->clip_changed = TRUE; } +/* event processors must all be called with an error trap in place */ static void process_circulate_notify (MetaCompositor *compositor, XCirculateEvent *event) @@ -1630,7 +1648,9 @@ meta_compositor_add_window (MetaCompositor *compositor, #ifdef HAVE_COMPOSITE_EXTENSIONS MetaScreen *screen = meta_screen_for_x_screen (attrs->screen); + meta_error_trap_push (compositor->display); add_win (screen, xwindow); + meta_error_trap_pop (compositor->display, FALSE); #endif } |