[gtk+/wip/cssnode3: 3/102] cssnode: Turn into a GObject
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/cssnode3: 3/102] cssnode: Turn into a GObject
- Date: Wed, 11 Mar 2015 00:16:39 +0000 (UTC)
commit 0f49f7576e95e7e510c948978132262bebd26018
Author: Benjamin Otte <otte redhat com>
Date: Sat Jan 10 23:49:04 2015 +0100
cssnode: Turn into a GObject
This will allow us to use subclasses.
gtk/gtkcssnode.c | 45 ++++++++++++++++++++++++++-------------------
gtk/gtkcssnodeprivate.h | 28 +++++++++++++++++++++++++---
gtk/gtkstylecontext.c | 4 ++--
3 files changed, 53 insertions(+), 24 deletions(-)
---
diff --git a/gtk/gtkcssnode.c b/gtk/gtkcssnode.c
index 5993b3a..a4b5a63 100644
--- a/gtk/gtkcssnode.c
+++ b/gtk/gtkcssnode.c
@@ -19,22 +19,38 @@
#include "gtkcssnodeprivate.h"
-struct _GtkCssNode
+G_DEFINE_TYPE (GtkCssNode, gtk_css_node, G_TYPE_OBJECT)
+
+static void
+gtk_css_node_finalize (GObject *object)
{
- GtkCssNodeDeclaration *decl;
- GtkCssNode *parent;
- GtkCssStyle *style;
-};
+ GtkCssNode *cssnode = GTK_CSS_NODE (object);
-GtkCssNode *
-gtk_css_node_new (void)
+ if (cssnode->style)
+ g_object_unref (cssnode->style);
+ gtk_css_node_declaration_unref (cssnode->decl);
+
+ G_OBJECT_CLASS (gtk_css_node_parent_class)->finalize (object);
+}
+
+static void
+gtk_css_node_class_init (GtkCssNodeClass *klass)
{
- GtkCssNode *cssnode;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
- cssnode = g_slice_new0 (GtkCssNode);
+ object_class->finalize = gtk_css_node_finalize;
+}
+
+static void
+gtk_css_node_init (GtkCssNode *cssnode)
+{
cssnode->decl = gtk_css_node_declaration_new ();
+}
- return cssnode;
+GtkCssNode *
+gtk_css_node_new (void)
+{
+ return g_object_new (GTK_TYPE_CSS_NODE, NULL);
}
GtkCssNode *
@@ -50,15 +66,6 @@ gtk_css_node_copy (GtkCssNode *cssnode)
}
void
-gtk_css_node_free (GtkCssNode *cssnode)
-{
- if (cssnode->style)
- g_object_unref (cssnode->style);
- gtk_css_node_declaration_unref (cssnode->decl);
- g_slice_free (GtkCssNode, cssnode);
-}
-
-void
gtk_css_node_set_parent (GtkCssNode *cssnode,
GtkCssNode *parent)
{
diff --git a/gtk/gtkcssnodeprivate.h b/gtk/gtkcssnodeprivate.h
index 0999ab5..7d217d9 100644
--- a/gtk/gtkcssnodeprivate.h
+++ b/gtk/gtkcssnodeprivate.h
@@ -23,13 +23,35 @@
G_BEGIN_DECLS
-typedef struct _GtkCssNode GtkCssNode;
+#define GTK_TYPE_CSS_NODE (gtk_css_node_get_type ())
+#define GTK_CSS_NODE(obj) (G_TYPE_CHECK_INSTANCE_CAST (obj, GTK_TYPE_CSS_NODE, GtkCssNode))
+#define GTK_CSS_NODE_CLASS(cls) (G_TYPE_CHECK_CLASS_CAST (cls, GTK_TYPE_CSS_NODE, GtkCssNodeClass))
+#define GTK_IS_CSS_NODE(obj) (G_TYPE_CHECK_INSTANCE_TYPE (obj, GTK_TYPE_CSS_NODE))
+#define GTK_IS_CSS_NODE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE (obj, GTK_TYPE_CSS_NODE))
+#define GTK_CSS_NODE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_CSS_NODE, GtkCssNodeClass))
+
+typedef struct _GtkCssNode GtkCssNode;
+typedef struct _GtkCssNodeClass GtkCssNodeClass;
+
+struct _GtkCssNode
+{
+ GObject object;
+
+ GtkCssNodeDeclaration *decl;
+ GtkCssNode *parent;
+ GtkCssStyle *style;
+};
+
+struct _GtkCssNodeClass
+{
+ GObjectClass object_class;
+};
+
+GType gtk_css_node_get_type (void) G_GNUC_CONST;
GtkCssNode * gtk_css_node_new (void);
GtkCssNode * gtk_css_node_copy (GtkCssNode *cssnode);
-void gtk_css_node_free (GtkCssNode *cssnode);
-
void gtk_css_node_set_parent (GtkCssNode *cssnode,
GtkCssNode *parent);
GtkCssNode * gtk_css_node_get_parent (GtkCssNode *cssnode);
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index e65b55d..36e43bd 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -316,7 +316,7 @@ gtk_style_context_pop_style_node (GtkStyleContext *context)
g_return_if_fail (priv->saved_nodes != NULL);
- gtk_css_node_free (priv->cssnode);
+ g_object_unref (priv->cssnode);
priv->cssnode = priv->saved_nodes->data;
priv->saved_nodes = g_slist_remove (priv->saved_nodes, priv->cssnode);
}
@@ -529,7 +529,7 @@ gtk_style_context_finalize (GObject *object)
while (priv->saved_nodes)
gtk_style_context_pop_style_node (style_context);
- gtk_css_node_free (priv->cssnode);
+ g_object_unref (priv->cssnode);
gtk_style_context_clear_property_cache (style_context);
g_array_free (priv->property_cache, TRUE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]