From aa7a2578293b2a8f1d92f30382f3b1a1acc62608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberts=20Muktup=C4=81vels?= Date: Sat, 4 Apr 2015 17:36:21 +0300 Subject: compositor: subtract window_size from shadow not border_size --- src/compositor/compositor-xrender.c | 50 +++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/src/compositor/compositor-xrender.c b/src/compositor/compositor-xrender.c index 1b62cdad..3bff70a3 100644 --- a/src/compositor/compositor-xrender.c +++ b/src/compositor/compositor-xrender.c @@ -171,6 +171,7 @@ typedef struct _MetaCompWindow Picture shadow_pict; XserverRegion border_size; + XserverRegion window_size; XserverRegion extents; Picture shadow; @@ -1075,6 +1076,27 @@ win_extents (MetaCompWindow *cw) static XserverRegion border_size (MetaCompWindow *cw) +{ + MetaScreen *screen = cw->screen; + MetaDisplay *display = meta_screen_get_display (screen); + Display *xdisplay = meta_display_get_xdisplay (display); + XserverRegion border; + + meta_error_trap_push (display); + border = XFixesCreateRegionFromWindow (xdisplay, cw->id, + WindowRegionBounding); + meta_error_trap_pop (display, FALSE); + + g_return_val_if_fail (border != None, None); + XFixesTranslateRegion (xdisplay, border, + cw->attrs.x + cw->attrs.border_width, + cw->attrs.y + cw->attrs.border_width); + + return border; +} + +static XserverRegion +window_size (MetaCompWindow *cw) { MetaScreen *screen = cw->screen; MetaDisplay *display = meta_screen_get_display (screen); @@ -1091,15 +1113,7 @@ border_size (MetaCompWindow *cw) visible = cairo_region_to_xserver_region (xdisplay, visible_region); } - meta_error_trap_push (display); - border = XFixesCreateRegionFromWindow (xdisplay, cw->id, - WindowRegionBounding); - meta_error_trap_pop (display, FALSE); - - g_return_val_if_fail (border != None, None); - XFixesTranslateRegion (xdisplay, border, - cw->attrs.x + cw->attrs.border_width, - cw->attrs.y + cw->attrs.border_width); + border = border_size (cw); if (visible != None) { @@ -1291,6 +1305,12 @@ paint_windows (MetaScreen *screen, cw->border_size = None; } + if (cw->window_size) + { + XFixesDestroyRegion (xdisplay, cw->window_size); + cw->window_size = None; + } + #if 0 if (cw->extents) { @@ -1303,6 +1323,9 @@ paint_windows (MetaScreen *screen, if (cw->border_size == None) cw->border_size = border_size (cw); + if (cw->window_size == None) + cw->window_size = window_size (cw); + if (cw->extents == None) cw->extents = win_extents (cw); @@ -1361,7 +1384,7 @@ paint_windows (MetaScreen *screen, shadow_clip = XFixesCreateRegion (xdisplay, NULL, 0); XFixesSubtractRegion (xdisplay, shadow_clip, cw->border_clip, - cw->border_size); + cw->window_size); XFixesSetPictureClipRegion (xdisplay, root_buffer, 0, 0, shadow_clip); @@ -1648,6 +1671,12 @@ free_win (MetaCompWindow *cw, cw->border_size = None; } + if (cw->window_size) + { + XFixesDestroyRegion (xdisplay, cw->window_size); + cw->window_size = None; + } + if (cw->border_clip) { XFixesDestroyRegion (xdisplay, cw->border_clip); @@ -1911,6 +1940,7 @@ add_win (MetaScreen *screen, cw->alpha_pict = None; cw->shadow_pict = None; cw->border_size = None; + cw->window_size = None; cw->extents = None; cw->shadow = None; cw->shadow_dx = 0; -- cgit v1.2.1