use the window as an alpha mask, so that shadows on argb windows will have their...
[dana/dcompmgr.git] / render.c
index f4dd62c..267f81a 100644 (file)
--- a/render.c
+++ b/render.c
@@ -416,22 +416,21 @@ render_paint(d_screen_t *sc)
 
             wd = window_find_plugin_data(w, plugin_id);
 
-            if (opaque) {
-                /* shape the shadow to the window */
-                xcb_xfixes_copy_region(sc->dpy->conn, window_get_region(w),
-                                       d->shadow_region);
-                xcb_xfixes_translate_region(sc->dpy->conn, d->shadow_region,
-                                            d->xshadowoff, d->yshadowoff);
-                xcb_xfixes_intersect_region(sc->dpy->conn,
-                                            wd->paint_clip, d->shadow_region,
-                                            d->shadow_region);
-                xcb_xfixes_set_picture_clip_region(sc->dpy->conn,
-                                                   d->overlay_buffer,
-                                                   d->shadow_region,
-                                                   0, 0);
-                paint_shadow(w, d, wd);
-            }
-            else {
+            /* shape the shadow to the window */
+            xcb_xfixes_copy_region(sc->dpy->conn, window_get_region(w),
+                                   d->shadow_region);
+            xcb_xfixes_translate_region(sc->dpy->conn, d->shadow_region,
+                                        d->xshadowoff, d->yshadowoff);
+            xcb_xfixes_intersect_region(sc->dpy->conn,
+                                        wd->paint_clip, d->shadow_region,
+                                        d->shadow_region);
+            xcb_xfixes_set_picture_clip_region(sc->dpy->conn,
+                                               d->overlay_buffer,
+                                               d->shadow_region,
+                                               0, 0);
+            paint_shadow(w, d, wd);
+
+            if (!opaque) {
                 /* use the clip region of the highest opaque window seen so
                    far, as nothing should be able to draw on top of that region
                 */
@@ -526,7 +525,7 @@ paint_shadow(d_window_t *w, data_t *d, window_data_t *wd)
     xcb_render_composite(w->sc->dpy->conn,
                          XCB_RENDER_PICT_OP_OVER,
                          wd->shadow_picture,
-                         XCB_NONE,
+                         wd->picture,
                          d->overlay_buffer,
                          0, 0, 0, 0,
                          x+d->xshadowoff, y+d->yshadowoff,