[gtk/gtk-3-24] window: Update opaque region if background-color changes



commit 9008f7702dff689ce48f2cfa7ce42db099e4ef0c
Author: Benjamin Otte <otte redhat com>
Date:   Fri Jul 13 14:52:43 2018 +0200

    window: Update opaque region if background-color changes
    
    The opaque region is only set when the background color is opaque. So
    we need to do something about it when the background color changes.
    
    However, in the case where a size allocation is going to happen, we
    already do this update in size_allocate(), so in that case avoid doing
    it twice.

 gtk/gtkwindow.c | 17 +++++++++++++++--
 1 file changed, 15 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 9a4c8989a5..0d19a0a06c 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -7227,7 +7227,7 @@ subtract_corners_from_region (cairo_region_t        *region,
 
 static void
 update_opaque_region (GtkWindow           *window,
-                      GtkBorder           *border,
+                      const GtkBorder     *border,
                       const GtkAllocation *allocation)
 {
   GtkWidget *widget = GTK_WIDGET (window);
@@ -9005,11 +9005,24 @@ static void
 gtk_window_style_updated (GtkWidget *widget)
 {
   GtkCssStyleChange *change = gtk_style_context_get_change (gtk_widget_get_style_context (widget));
+  GtkWindow *window = GTK_WINDOW (widget);
 
   GTK_WIDGET_CLASS (gtk_window_parent_class)->style_updated (widget);
 
+  if (!_gtk_widget_get_alloc_needed (widget) &&
+      (change == NULL || gtk_css_style_change_changes_property (change, GTK_CSS_PROPERTY_BACKGROUND_COLOR)))
+    {
+      GtkAllocation allocation;
+      GtkBorder window_border;
+
+      _gtk_widget_get_allocation (widget, &allocation);
+      get_shadow_width (window, &window_border);
+
+      update_opaque_region (window, &window_border, &allocation);
+    }
+
   if (change == NULL || gtk_css_style_change_changes_property (change, GTK_CSS_PROPERTY_ICON_THEME))
-    update_themed_icon (GTK_WINDOW (widget));
+    update_themed_icon (window);
 }
 
 /**


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