[metacity] compositor: don't use invalid back_pixmap



commit 8beaea6a4c4ec811025530c5ef983baf4a31fc7f
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Wed Feb 18 16:01:26 2015 +0200

    compositor: don't use invalid back_pixmap
    
    XCompositeNameWindowPixmap can generate BadMatch error. If this
    error is generated then returned pixmap is not valid. Just set
    back_pixmap to None in case of error.

 src/compositor/compositor-xrender.c |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)
---
diff --git a/src/compositor/compositor-xrender.c b/src/compositor/compositor-xrender.c
index 213e4f8..054c802 100644
--- a/src/compositor/compositor-xrender.c
+++ b/src/compositor/compositor-xrender.c
@@ -1141,6 +1141,7 @@ get_window_picture (MetaCompWindow *cw)
   XRenderPictureAttributes pa;
   XRenderPictFormat *format;
   Drawable draw;
+  int error_code;
 
   draw = cw->id;
 
@@ -1149,6 +1150,10 @@ get_window_picture (MetaCompWindow *cw)
   if (cw->back_pixmap == None)
     cw->back_pixmap = XCompositeNameWindowPixmap (xdisplay, cw->id);
 
+  error_code = meta_error_trap_pop_with_return (display, FALSE);
+  if (error_code != 0)
+    cw->back_pixmap = None;
+
   if (cw->back_pixmap != None)
     draw = cw->back_pixmap;
 
@@ -1159,13 +1164,13 @@ get_window_picture (MetaCompWindow *cw)
 
       pa.subwindow_mode = IncludeInferiors;
 
+      meta_error_trap_push (display);
       pict = XRenderCreatePicture (xdisplay, draw, format, CPSubwindowMode, &pa);
       meta_error_trap_pop (display, FALSE);
 
       return pict;
     }
 
-  meta_error_trap_pop (display, FALSE);
   return None;
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]