diff --git a/dlls/winex11.drv/bitblt.c b/dlls/winex11.drv/bitblt.c index e52fbc2fcff..2fc7c9484b1 100644 --- a/dlls/winex11.drv/bitblt.c +++ b/dlls/winex11.drv/bitblt.c @@ -2029,6 +2029,7 @@ struct window_surface *create_surface( Window window, const XVisualInfo *vis, co } surface->gc = XCreateGC( gdi_display, window, 0, NULL ); + XSetSubwindowMode( gdi_display, surface->gc, IncludeInferiors ); surface->byteswap = image_needs_byteswap( surface->image, is_r8g8b8(vis), format->bits_per_pixel ); if (surface->byteswap || format->bits_per_pixel == 4 || format->bits_per_pixel == 8) diff --git a/server/window.c b/server/window.c index a460a7c0455..fbe522adf83 100644 --- a/server/window.c +++ b/server/window.c @@ -1084,6 +1084,9 @@ static struct region *get_surface_region( struct window *win ) set_region_rect( clip, &win->client_rect ); if (win->win_region && !intersect_window_region( clip, win )) goto error; + if ((win->paint_flags & PAINT_HAS_PIXEL_FORMAT) && !subtract_region( region, region, clip )) + goto error; + /* clip children */ if (!is_desktop_window(win)) @@ -2264,7 +2267,7 @@ DECL_HANDLER(set_window_pos) top = get_top_clipping_window( win ); if (is_visible( top ) && (top->paint_flags & PAINT_HAS_SURFACE) && - (top->paint_flags & PAINT_PIXEL_FORMAT_CHILD)) + (top->paint_flags & (PAINT_HAS_PIXEL_FORMAT | PAINT_PIXEL_FORMAT_CHILD))) reply->surface_win = top->handle; }