summaryrefslogtreecommitdiff
path: root/gtk/gtkcssnode.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkcssnode.c')
-rw-r--r--gtk/gtkcssnode.c31
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;
}