cssnode: Add a style-changed signal
The signal gets emitted whenever the style needs to be changed.
This commit is contained in:
@ -34,6 +34,7 @@ G_DEFINE_TYPE (GtkCssNode, gtk_css_node, G_TYPE_OBJECT)
|
|||||||
enum {
|
enum {
|
||||||
NODE_ADDED,
|
NODE_ADDED,
|
||||||
NODE_REMOVED,
|
NODE_REMOVED,
|
||||||
|
STYLE_CHANGED,
|
||||||
LAST_SIGNAL
|
LAST_SIGNAL
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -387,6 +388,17 @@ gtk_css_node_real_node_added (GtkCssNode *parent,
|
|||||||
node->parent = parent;
|
node->parent = parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gtk_css_node_real_style_changed (GtkCssNode *cssnode,
|
||||||
|
GtkCssStyle *old_style,
|
||||||
|
GtkCssStyle *new_style)
|
||||||
|
{
|
||||||
|
g_object_ref (new_style);
|
||||||
|
g_object_unref (old_style);
|
||||||
|
|
||||||
|
cssnode->style = new_style;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_css_node_class_init (GtkCssNodeClass *klass)
|
gtk_css_node_class_init (GtkCssNodeClass *klass)
|
||||||
{
|
{
|
||||||
@ -408,6 +420,7 @@ gtk_css_node_class_init (GtkCssNodeClass *klass)
|
|||||||
|
|
||||||
klass->node_added = gtk_css_node_real_node_added;
|
klass->node_added = gtk_css_node_real_node_added;
|
||||||
klass->node_removed = gtk_css_node_real_node_removed;
|
klass->node_removed = gtk_css_node_real_node_removed;
|
||||||
|
klass->style_changed = gtk_css_node_real_style_changed;
|
||||||
|
|
||||||
cssnode_signals[NODE_ADDED] =
|
cssnode_signals[NODE_ADDED] =
|
||||||
g_signal_new (I_("node-added"),
|
g_signal_new (I_("node-added"),
|
||||||
@ -427,6 +440,15 @@ gtk_css_node_class_init (GtkCssNodeClass *klass)
|
|||||||
_gtk_marshal_VOID__OBJECT_OBJECT,
|
_gtk_marshal_VOID__OBJECT_OBJECT,
|
||||||
G_TYPE_NONE, 2,
|
G_TYPE_NONE, 2,
|
||||||
GTK_TYPE_CSS_NODE, GTK_TYPE_CSS_NODE);
|
GTK_TYPE_CSS_NODE, GTK_TYPE_CSS_NODE);
|
||||||
|
cssnode_signals[STYLE_CHANGED] =
|
||||||
|
g_signal_new (I_("style-changed"),
|
||||||
|
G_TYPE_FROM_CLASS (object_class),
|
||||||
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -640,14 +662,7 @@ gtk_css_node_set_style (GtkCssNode *cssnode,
|
|||||||
if (cssnode->style == style)
|
if (cssnode->style == style)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (style)
|
g_signal_emit (cssnode, cssnode_signals[STYLE_CHANGED], 0, cssnode->style, style);
|
||||||
g_object_ref (style);
|
|
||||||
|
|
||||||
if (cssnode->style)
|
|
||||||
g_object_unref (cssnode->style);
|
|
||||||
|
|
||||||
cssnode->style = style;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -71,6 +71,9 @@ struct _GtkCssNodeClass
|
|||||||
void (* node_removed) (GtkCssNode *cssnode,
|
void (* node_removed) (GtkCssNode *cssnode,
|
||||||
GtkCssNode *child,
|
GtkCssNode *child,
|
||||||
GtkCssNode *previous);
|
GtkCssNode *previous);
|
||||||
|
void (* style_changed) (GtkCssNode *cssnode,
|
||||||
|
GtkCssStyle *old_style,
|
||||||
|
GtkCssStyle *new_style);
|
||||||
|
|
||||||
gboolean (* init_matcher) (GtkCssNode *cssnode,
|
gboolean (* init_matcher) (GtkCssNode *cssnode,
|
||||||
GtkCssMatcher *matcher);
|
GtkCssMatcher *matcher);
|
||||||
|
|||||||
Reference in New Issue
Block a user