[gtk/wip/muktupavels/opaque-region-master] window: fix opaque region



commit e81a90c4324caacc2668586d2014db57b936b049
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date:   Sat Nov 30 20:19:26 2019 +0200

    window: fix opaque region
    
    Decoration node for drawing is used only for client side decorated
    windows, but corners from opaque region is subtracted also for
    normal windows.
    
    Rename function to better reflect what it does and do not subtract
    corners if decoration node was not used for drawing.

 gtk/gtkwindow.c | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 24ced0c171..9e056fe774 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -5420,14 +5420,20 @@ corner_rect (cairo_rectangle_int_t *rect,
 }
 
 static void
-subtract_corners_from_region (cairo_region_t        *region,
-                              cairo_rectangle_int_t *extents,
-                              GtkStyleContext       *context,
-                              GtkWindow             *window)
+subtract_decoration_corners_from_region (cairo_region_t        *region,
+                                         cairo_rectangle_int_t *extents,
+                                         GtkStyleContext       *context,
+                                         GtkWindow             *window)
 {
   GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
   cairo_rectangle_int_t rect;
 
+  if (!priv->client_decorated ||
+      !priv->decorated ||
+      priv->fullscreen ||
+      priv->maximized)
+    return;
+
   gtk_style_context_save_to_node (context, priv->decoration_node);
 
   corner_rect (&rect, _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_TOP_LEFT_RADIUS));
@@ -5485,7 +5491,7 @@ update_opaque_region (GtkWindow           *window,
 
       opaque_region = cairo_region_create_rectangle (&rect);
 
-      subtract_corners_from_region (opaque_region, &rect, context, window);
+      subtract_decoration_corners_from_region (opaque_region, &rect, context, window);
     }
   else
     {


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