X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcssshorthandproperty.c;h=c6ca6146890cae4c12db2c4dab906d319805657a;hb=c8403f697edef57f33c66d3d8deb1488db86d949;hp=dbe8216cc09f23d9e12d060bd7a1f45f521dc811;hpb=e603992ac7fb7c96ac878bc36a40c82bcaba6aeb;p=~andy%2Fgtk
diff --git a/gtk/gtkcssshorthandproperty.c b/gtk/gtkcssshorthandproperty.c
index dbe8216cc..c6ca61468 100644
--- a/gtk/gtkcssshorthandproperty.c
+++ b/gtk/gtkcssshorthandproperty.c
@@ -12,8 +12,7 @@
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * License along with this library. If not, see .
*
* Authors: Benjamin Otte
*/
@@ -22,10 +21,11 @@
#include "gtkcssshorthandpropertyprivate.h"
+#include "gtkcssarrayvalueprivate.h"
+#include "gtkcssinheritvalueprivate.h"
+#include "gtkcssinitialvalueprivate.h"
#include "gtkcssstylefuncsprivate.h"
-#include "gtkcsstypesprivate.h"
#include "gtkintl.h"
-#include "gtkprivatetypebuiltins.h"
enum {
PROP_0,
@@ -69,46 +69,31 @@ _gtk_css_shorthand_property_assign (GtkStyleProperty *property,
const GValue *value)
{
GtkCssShorthandProperty *shorthand = GTK_CSS_SHORTHAND_PROPERTY (property);
- GParameter *parameters;
- guint i, n_parameters;
- parameters = shorthand->assign (shorthand, value, &n_parameters);
-
- for (i = 0; i < n_parameters; i++)
- {
- _gtk_style_property_assign (_gtk_style_property_lookup (parameters[i].name),
- props,
- state,
- ¶meters[i].value);
- g_value_unset (¶meters[i].value);
- }
- g_free (parameters);
+ shorthand->assign (shorthand, props, state, value);
}
static void
_gtk_css_shorthand_property_query (GtkStyleProperty *property,
- GtkStyleProperties *props,
- GtkStateFlags state,
- GValue *value)
+ GValue *value,
+ GtkStyleQueryFunc query_func,
+ gpointer query_data)
{
GtkCssShorthandProperty *shorthand = GTK_CSS_SHORTHAND_PROPERTY (property);
- shorthand->query (shorthand, value, props, state);
+ return shorthand->query (shorthand, value, query_func, query_data);
}
-static gboolean
+static GtkCssValue *
gtk_css_shorthand_property_parse_value (GtkStyleProperty *property,
- GValue *value,
- GtkCssParser *parser,
- GFile *base)
+ GtkCssParser *parser)
{
GtkCssShorthandProperty *shorthand = GTK_CSS_SHORTHAND_PROPERTY (property);
- GValueArray *array;
+ GtkCssValue **data;
+ GtkCssValue *result;
guint i;
- array = g_value_array_new (shorthand->subproperties->len);
- for (i = 0; i < shorthand->subproperties->len; i++)
- g_value_array_append (array, NULL);
+ data = g_new0 (GtkCssValue *, shorthand->subproperties->len);
if (_gtk_css_parser_try (parser, "initial", TRUE))
{
@@ -117,9 +102,7 @@ gtk_css_shorthand_property_parse_value (GtkStyleProperty *property,
*/
for (i = 0; i < shorthand->subproperties->len; i++)
{
- GValue *val = g_value_array_get_nth (array, i);
- g_value_init (val, GTK_TYPE_CSS_SPECIAL_VALUE);
- g_value_set_enum (val, GTK_CSS_INITIAL);
+ data[i] = _gtk_css_initial_value_new ();
}
}
else if (_gtk_css_parser_try (parser, "inherit", TRUE))
@@ -132,15 +115,18 @@ gtk_css_shorthand_property_parse_value (GtkStyleProperty *property,
*/
for (i = 0; i < shorthand->subproperties->len; i++)
{
- GValue *val = g_value_array_get_nth (array, i);
- g_value_init (val, GTK_TYPE_CSS_SPECIAL_VALUE);
- g_value_set_enum (val, GTK_CSS_INHERIT);
+ data[i] = _gtk_css_inherit_value_new ();
}
}
- else if (!shorthand->parse (shorthand, array->values, parser, base))
+ else if (!shorthand->parse (shorthand, data, parser))
{
- g_value_array_free (array);
- return FALSE;
+ for (i = 0; i < shorthand->subproperties->len; i++)
+ {
+ if (data[i] != NULL)
+ _gtk_css_value_unref (data[i]);
+ }
+ g_free (data);
+ return NULL;
}
/* All values that aren't set by the parse func are set to their
@@ -148,16 +134,14 @@ gtk_css_shorthand_property_parse_value (GtkStyleProperty *property,
* XXX: Is the default always initial or can it be inherit? */
for (i = 0; i < shorthand->subproperties->len; i++)
{
- GValue *val = g_value_array_get_nth (array, i);
- if (G_IS_VALUE (val))
- continue;
- g_value_init (val, GTK_TYPE_CSS_SPECIAL_VALUE);
- g_value_set_enum (val, GTK_CSS_INITIAL);
+ if (data[i] == NULL)
+ data[i] = _gtk_css_initial_value_new ();
}
- g_value_init (value, G_TYPE_VALUE_ARRAY);
- g_value_set_boxed (value, array);
- return TRUE;
+ result = _gtk_css_array_value_new_from_array (data, shorthand->subproperties->len);
+ g_free (data);
+
+ return result;
}
static void