summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2016-03-26 05:12:16 +0100
committerBenjamin Otte <otte@redhat.com>2016-04-08 16:18:31 +0200
commitf36217dda6b8ed83be6571565a7d30f89a4ae985 (patch)
treeb57aeff377b68c6cc01b4540b0a8d1f275d5bbf2
parent0f9526578aa58c8f3480f1671c0f2923562cb844 (diff)
downloadgtk+-f36217dda6b8ed83be6571565a7d30f89a4ae985.tar.gz
cssdeclaration: Propertify
-rw-r--r--gtk/gtkcssdeclaration.c81
-rw-r--r--gtk/gtkcssdeclarationprivate.h2
-rw-r--r--gtk/gtkcsslonghanddeclaration.c1
-rw-r--r--gtk/gtkcssshorthanddeclaration.c4
4 files changed, 83 insertions, 5 deletions
diff --git a/gtk/gtkcssdeclaration.c b/gtk/gtkcssdeclaration.c
index dd83827bd4..1d1d09f4a3 100644
--- a/gtk/gtkcssdeclaration.c
+++ b/gtk/gtkcssdeclaration.c
@@ -24,17 +24,92 @@
#include "gtkcsslonghanddeclarationprivate.h"
#include "gtkcssshorthanddeclarationprivate.h"
#include "gtkstylepropertyprivate.h"
+#include "gtkintl.h"
+#include "gtkprivate.h"
+
+enum {
+ PROP_0,
+ PROP_NAME,
+ PROP_PARENT_STYLE,
+ NUM_PROPERTIES
+};
typedef struct _GtkCssDeclarationPrivate GtkCssDeclarationPrivate;
struct _GtkCssDeclarationPrivate {
- GtkCssStyleDeclaration *style;
+ GtkCssStyleDeclaration *parent_style;
};
+static GParamSpec *declaration_props[NUM_PROPERTIES] = { NULL, };
+
G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GtkCssDeclaration, gtk_css_declaration, G_TYPE_OBJECT)
static void
+gtk_css_declaration_set_property (GObject *gobject,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GtkCssDeclaration *declaration = GTK_CSS_DECLARATION (gobject);
+ GtkCssDeclarationPrivate *priv = gtk_css_declaration_get_instance_private (declaration);
+
+ switch (prop_id)
+ {
+ case PROP_PARENT_STYLE:
+ priv->parent_style = g_value_dup_object (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+gtk_css_declaration_get_property (GObject *gobject,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GtkCssDeclaration *declaration = GTK_CSS_DECLARATION (gobject);
+ GtkCssDeclarationPrivate *priv = gtk_css_declaration_get_instance_private (declaration);
+
+ switch (prop_id)
+ {
+ case PROP_NAME:
+ g_value_set_string (value, gtk_css_declaration_get_name (declaration));
+ break;
+
+ case PROP_PARENT_STYLE:
+ g_value_set_object (value, priv->parent_style);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (gobject, prop_id, pspec);
+ }
+}
+
+static void
gtk_css_declaration_class_init (GtkCssDeclarationClass *klass)
{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = gtk_css_declaration_set_property;
+ object_class->get_property = gtk_css_declaration_get_property;
+
+ declaration_props[PROP_NAME] =
+ g_param_spec_string ("name",
+ P_("name"),
+ P_("Name this declaration defines a value for"),
+ NULL,
+ GTK_PARAM_READABLE | G_PARAM_EXPLICIT_NOTIFY);
+ declaration_props[PROP_PARENT_STYLE] =
+ g_param_spec_object ("parent-style",
+ P_("parent style"),
+ P_("The parent style"),
+ GTK_TYPE_CSS_STYLE_DECLARATION,
+ GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_EXPLICIT_NOTIFY);
+
+ g_object_class_install_properties (object_class, NUM_PROPERTIES, declaration_props);
}
static void
@@ -73,7 +148,7 @@ gtk_css_declaration_new_parse (GtkCssStyleDeclaration *style,
}
GtkCssStyleDeclaration *
-gtk_css_declaration_get_style (GtkCssDeclaration *decl)
+gtk_css_declaration_get_parent_style (GtkCssDeclaration *decl)
{
GtkCssDeclarationPrivate *priv;
@@ -81,7 +156,7 @@ gtk_css_declaration_get_style (GtkCssDeclaration *decl)
priv = gtk_css_declaration_get_instance_private (decl);
- return priv->style;
+ return priv->parent_style;
}
const char *
diff --git a/gtk/gtkcssdeclarationprivate.h b/gtk/gtkcssdeclarationprivate.h
index f41b9b4ee2..b89e7c372a 100644
--- a/gtk/gtkcssdeclarationprivate.h
+++ b/gtk/gtkcssdeclarationprivate.h
@@ -56,7 +56,7 @@ GtkCssDeclaration * gtk_css_declaration_new_parse (GtkCssStyleDecl
GtkCssTokenSource *source);
const char * gtk_css_declaration_get_name (GtkCssDeclaration *decl);
-GtkCssStyleDeclaration *gtk_css_declaration_get_style (GtkCssDeclaration *decl);
+GtkCssStyleDeclaration *gtk_css_declaration_get_parent_style (GtkCssDeclaration *decl);
void gtk_css_declaration_print_value (GtkCssDeclaration *decl,
GString *string);
diff --git a/gtk/gtkcsslonghanddeclaration.c b/gtk/gtkcsslonghanddeclaration.c
index 086b06e981..a5f7e15581 100644
--- a/gtk/gtkcsslonghanddeclaration.c
+++ b/gtk/gtkcsslonghanddeclaration.c
@@ -89,6 +89,7 @@ gtk_css_longhand_declaration_new_parse (GtkCssStyleDeclaration *style,
char *name;
decl = g_object_new (GTK_TYPE_CSS_LONGHAND_DECLARATION,
+ "parent-style", style,
NULL);
priv = gtk_css_longhand_declaration_get_instance_private (decl);
diff --git a/gtk/gtkcssshorthanddeclaration.c b/gtk/gtkcssshorthanddeclaration.c
index 5b9b1a39d5..07ed049997 100644
--- a/gtk/gtkcssshorthanddeclaration.c
+++ b/gtk/gtkcssshorthanddeclaration.c
@@ -105,7 +105,9 @@ gtk_css_shorthand_declaration_new_parse (GtkCssStyleDeclaration *style,
guint i;
char *name;
- decl = g_object_new (GTK_TYPE_CSS_SHORTHAND_DECLARATION, NULL);
+ decl = g_object_new (GTK_TYPE_CSS_SHORTHAND_DECLARATION,
+ "parent-style", style,
+ NULL);
priv = gtk_css_shorthand_declaration_get_instance_private (decl);
gtk_css_token_source_set_consumer (source, G_OBJECT (decl));