diff options
author | Benjamin Otte <otte@redhat.com> | 2016-03-26 05:12:16 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2016-04-08 16:18:31 +0200 |
commit | f36217dda6b8ed83be6571565a7d30f89a4ae985 (patch) | |
tree | b57aeff377b68c6cc01b4540b0a8d1f275d5bbf2 | |
parent | 0f9526578aa58c8f3480f1671c0f2923562cb844 (diff) | |
download | gtk+-f36217dda6b8ed83be6571565a7d30f89a4ae985.tar.gz |
cssdeclaration: Propertify
-rw-r--r-- | gtk/gtkcssdeclaration.c | 81 | ||||
-rw-r--r-- | gtk/gtkcssdeclarationprivate.h | 2 | ||||
-rw-r--r-- | gtk/gtkcsslonghanddeclaration.c | 1 | ||||
-rw-r--r-- | gtk/gtkcssshorthanddeclaration.c | 4 |
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)); |