diff options
Diffstat (limited to 'gtk/gtkcssnode.c')
-rw-r--r-- | gtk/gtkcssnode.c | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c index be4b9d1fd4..9df217abe8 100644 --- a/gtk/gtkcssnode.c +++ b/gtk/gtkcssnode.c @@ -106,6 +106,11 @@ enum { NUM_PROPERTIES }; +struct _GtkCssNodeStyleChange { + GtkCssStyle *old_style; + GtkCssStyle *new_style; +}; + static guint cssnode_signals[LAST_SIGNAL] = { 0 }; static GParamSpec *cssnode_properties[NUM_PROPERTIES]; @@ -577,14 +582,11 @@ gtk_css_node_real_node_added (GtkCssNode *parent, } static void -gtk_css_node_real_style_changed (GtkCssNode *cssnode, - GtkCssStyle *old_style, - GtkCssStyle *new_style) +gtk_css_node_real_style_changed (GtkCssNode *cssnode, + GtkCssStyleChange *change) { - g_object_ref (new_style); - g_object_unref (old_style); - - cssnode->style = new_style; + g_object_unref (cssnode->style); + cssnode->style = g_object_ref (gtk_css_style_change_get_new_style (change)); } static void @@ -638,9 +640,9 @@ gtk_css_node_class_init (GtkCssNodeClass *klass) G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET (GtkCssNodeClass, style_changed), NULL, NULL, - _gtk_marshal_VOID__OBJECT_OBJECT, - G_TYPE_NONE, 2, - GTK_TYPE_CSS_STYLE, GTK_TYPE_CSS_STYLE); + _gtk_marshal_VOID__POINTER, + G_TYPE_NONE, 1, + G_TYPE_POINTER); cssnode_properties[PROP_CLASSES] = g_param_spec_boxed ("classes", "Classes", @@ -947,10 +949,17 @@ static gboolean gtk_css_node_set_style (GtkCssNode *cssnode, GtkCssStyle *style) { + GtkCssStyleChange change; + if (cssnode->style == style) return FALSE; - g_signal_emit (cssnode, cssnode_signals[STYLE_CHANGED], 0, cssnode->style, style); + gtk_css_style_change_init (&change, cssnode->style, style); + + g_signal_emit (cssnode, cssnode_signals[STYLE_CHANGED], 0, &change); + + gtk_css_style_change_finish (&change); + return TRUE; } |