From: Benjamin Otte Date: Fri, 10 Jul 2015 19:34:41 +0000 (+0200) Subject: cssnode: Only queue_validate() when node is visible X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~24^2~9093 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=190f025f74d41e2cbee82615e7305b62faab044e;p=gtk4.git cssnode: Only queue_validate() when node is visible This avoids running animations in hidden toplevels. --- diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index 7bae9d5ba2..0b88b916dd 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -67,17 +67,20 @@ gtk_css_node_set_invalid (GtkCssNode *node, node->invalid = invalid; - if (node->parent) - { - if (invalid && node->visible) - gtk_css_node_set_invalid (node->parent, TRUE); - } - else + if (node->visible) { - if (invalid) - GTK_CSS_NODE_GET_CLASS (node)->queue_validate (node); + if (node->parent) + { + if (invalid) + gtk_css_node_set_invalid (node->parent, TRUE); + } else - GTK_CSS_NODE_GET_CLASS (node)->dequeue_validate (node); + { + if (invalid) + GTK_CSS_NODE_GET_CLASS (node)->queue_validate (node); + else + GTK_CSS_NODE_GET_CLASS (node)->dequeue_validate (node); + } } } @@ -896,6 +899,22 @@ gtk_css_node_set_visible (GtkCssNode *cssnode, cssnode->visible = visible; g_object_notify_by_pspec (G_OBJECT (cssnode), cssnode_properties[PROP_VISIBLE]); + if (cssnode->invalid) + { + if (cssnode->visible) + { + if (cssnode->parent) + gtk_css_node_set_invalid (cssnode->parent, TRUE); + else + GTK_CSS_NODE_GET_CLASS (cssnode)->queue_validate (cssnode); + } + else + { + if (cssnode->parent == NULL) + GTK_CSS_NODE_GET_CLASS (cssnode)->dequeue_validate (cssnode); + } + } + if (cssnode->next_sibling) gtk_css_node_invalidate (cssnode->next_sibling, GTK_CSS_CHANGE_ANY_SIBLING | GTK_CSS_CHANGE_NTH_CHILD