[gtk+/wip/cssnode3: 29/91] cssnode: Handle invalidate queueing differently
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/cssnode3: 29/91] cssnode: Handle invalidate queueing differently
- Date: Mon, 9 Mar 2015 14:07:56 +0000 (UTC)
commit c6bde7c507ed1a93c10322c3e132011369255f44
Author: Benjamin Otte <otte redhat com>
Date: Sat Feb 7 18:53:07 2015 +0100
cssnode: Handle invalidate queueing differently
Instead of directly requesting the layout phase, register a tick
callback. This is what the docs suggest for animations and it's what we
need for the next commit.
gtk/gtkcsswidgetnode.c | 20 +++++++++++++++++---
gtk/gtkcsswidgetnodeprivate.h | 1 +
2 files changed, 18 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkcsswidgetnode.c b/gtk/gtkcsswidgetnode.c
index cb46bb2..a684431 100644
--- a/gtk/gtkcsswidgetnode.c
+++ b/gtk/gtkcsswidgetnode.c
@@ -46,9 +46,22 @@ gtk_css_widget_node_queue_validate (GtkCssNode *node)
G_GNUC_BEGIN_IGNORE_DEPRECATIONS
if (GTK_IS_RESIZE_CONTAINER (widget_node->widget))
- {
- _gtk_container_queue_restyle (GTK_CONTAINER (widget_node->widget));
- }
+ widget_node->validate_cb_id = gtk_widget_add_tick_callback (widget_node->widget,
+ (GtkTickCallback)
_gtk_container_queue_restyle,
+ NULL,
+ NULL);
+ G_GNUC_END_IGNORE_DEPRECATIONS
+}
+
+static void
+gtk_css_widget_node_dequeue_validate (GtkCssNode *node)
+{
+ GtkCssWidgetNode *widget_node = GTK_CSS_WIDGET_NODE (node);
+
+ G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+ if (GTK_IS_RESIZE_CONTAINER (widget_node->widget))
+ gtk_widget_remove_tick_callback (widget_node->widget,
+ widget_node->validate_cb_id);
G_GNUC_END_IGNORE_DEPRECATIONS
}
@@ -204,6 +217,7 @@ gtk_css_widget_node_class_init (GtkCssWidgetNodeClass *klass)
node_class->update_style = gtk_css_widget_node_update_style;
node_class->validate = gtk_css_widget_node_validate;
node_class->queue_validate = gtk_css_widget_node_queue_validate;
+ node_class->dequeue_validate = gtk_css_widget_node_dequeue_validate;
node_class->create_widget_path = gtk_css_widget_node_create_widget_path;
node_class->get_widget_path = gtk_css_widget_node_get_widget_path;
node_class->get_style_provider = gtk_css_widget_node_get_style_provider;
diff --git a/gtk/gtkcsswidgetnodeprivate.h b/gtk/gtkcsswidgetnodeprivate.h
index a3a59c8..28e6020 100644
--- a/gtk/gtkcsswidgetnodeprivate.h
+++ b/gtk/gtkcsswidgetnodeprivate.h
@@ -38,6 +38,7 @@ struct _GtkCssWidgetNode
GtkCssNode node;
GtkWidget *widget;
+ guint validate_cb_id;
};
struct _GtkCssWidgetNodeClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]