summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-04 17:36:21 +0300
committerAlberts Muktupāvels <alberts.muktupavels@gmail.com>2015-04-04 17:36:21 +0300
commitaa7a2578293b2a8f1d92f30382f3b1a1acc62608 (patch)
treee95d1ebf065cbde1d140b31ea481a9fdb0495483
parent23bfc24086f083c5fcab9437831c74939cbaac5c (diff)
downloadmetacity-aa7a2578293b2a8f1d92f30382f3b1a1acc62608.tar.gz
compositor: subtract window_size from shadow not border_size
-rw-r--r--src/compositor/compositor-xrender.c50
1 files 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;
@@ -1079,6 +1080,27 @@ 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);
+ Display *xdisplay = meta_display_get_xdisplay (display);
cairo_region_t *visible_region;
XserverRegion visible = None;
XserverRegion border;
@@ -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;