]> Pileus Git - ~andy/gtk/commitdiff
stylecontext: If we force invalidate, invalidate all properties
authorBenjamin Otte <otte@redhat.com>
Tue, 12 Mar 2013 11:44:03 +0000 (12:44 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 12 Mar 2013 11:46:37 +0000 (12:46 +0100)
We only FORCE_INVALIDATE when something weird changes that the CSS
machinery can't detect. But now that our style_updated functions skip
recomputations when some properties don't change we want to make sure
these recomputations are still run. So we just claim all properties
changed.

http://bugzilla.gnome.org/show_bug.cgi?id=695482

gtk/gtkstylecontext.c

index f5d1e86ea5a888f1a11729c50a188ad0b805d756..ad182f2be3967d5ac44995fb347cffe784519cd0 100644 (file)
@@ -3281,8 +3281,19 @@ _gtk_style_context_validate (GtkStyleContext  *context,
       _gtk_bitmask_free (animation_changes);
     }
 
-  if (!_gtk_bitmask_is_empty (changes) || (change & GTK_CSS_CHANGE_FORCE_INVALIDATE))
-    gtk_style_context_do_invalidate (context, changes);
+  if (change & GTK_CSS_CHANGE_FORCE_INVALIDATE)
+    {
+      GtkBitmask *full = _gtk_bitmask_new ();
+      full = _gtk_bitmask_invert_range (full, 
+                                        0,
+                                        _gtk_css_style_property_get_n_properties ());
+      gtk_style_context_do_invalidate (context, full);
+      _gtk_bitmask_free (full);
+    }
+  else if (!_gtk_bitmask_is_empty (changes))
+    {
+      gtk_style_context_do_invalidate (context, changes);
+    }
 
   change = _gtk_css_change_for_child (change);
   for (list = priv->children; list; list = list->next)