From bb044204a069c6ab6240a784c045fa6266983a07 Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Wed, 1 Oct 2003 12:54:58 +0000 Subject: [PATCH] make it handle aggregate object properties by calling itself recursively. 2003-10-01 Sven Neumann * app/config/gimpconfig-utils.c (gimp_config_diff): make it handle aggregate object properties by calling itself recursively. --- ChangeLog | 5 +++++ app/config/gimpconfig-utils.c | 31 +++++++++++++++++++++++++++++-- libgimpconfig/gimpconfig-utils.c | 31 +++++++++++++++++++++++++++++-- 3 files changed, 63 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6a47d488f5..2c511aac4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2003-10-01 Sven Neumann + + * app/config/gimpconfig-utils.c (gimp_config_diff): make it handle + aggregate object properties by calling itself recursively. + 2003-10-01 Sven Neumann * app/text/gimptextlayout.c: pango_font_description_set_size() diff --git a/app/config/gimpconfig-utils.c b/app/config/gimpconfig-utils.c index b47127f6dd..c7e4aff6d3 100644 --- a/app/config/gimpconfig-utils.c +++ b/app/config/gimpconfig-utils.c @@ -76,8 +76,35 @@ gimp_config_diff (GObject *a, g_object_get_property (a, param_specs[i]->name, &a_value); g_object_get_property (b, param_specs[i]->name, &b_value); - if (g_param_values_cmp (param_specs[i], &a_value, &b_value)) - list = g_list_prepend (list, param_specs[i]); + if (G_IS_PARAM_SPEC_OBJECT (param_specs[i]) && + (param_specs[i]->flags & GIMP_PARAM_AGGREGATE)) + { + GObject *a_object = g_value_get_object (&a_value); + GObject *b_object = g_value_get_object (&b_value); + + if (a_object && b_object && + G_TYPE_FROM_INSTANCE (a_object) == + G_TYPE_FROM_INSTANCE (b_object)) + { + GList *diff = gimp_config_diff (a_object, b_object, flags); + + if (diff) + { + g_list_free (diff); + list = g_list_prepend (list, param_specs[i]); + } + } + else + { + list = g_list_prepend (list, param_specs[i]); + } + } + else + { + + if (g_param_values_cmp (param_specs[i], &a_value, &b_value)) + list = g_list_prepend (list, param_specs[i]); + } g_value_unset (&a_value); g_value_unset (&b_value); diff --git a/libgimpconfig/gimpconfig-utils.c b/libgimpconfig/gimpconfig-utils.c index b47127f6dd..c7e4aff6d3 100644 --- a/libgimpconfig/gimpconfig-utils.c +++ b/libgimpconfig/gimpconfig-utils.c @@ -76,8 +76,35 @@ gimp_config_diff (GObject *a, g_object_get_property (a, param_specs[i]->name, &a_value); g_object_get_property (b, param_specs[i]->name, &b_value); - if (g_param_values_cmp (param_specs[i], &a_value, &b_value)) - list = g_list_prepend (list, param_specs[i]); + if (G_IS_PARAM_SPEC_OBJECT (param_specs[i]) && + (param_specs[i]->flags & GIMP_PARAM_AGGREGATE)) + { + GObject *a_object = g_value_get_object (&a_value); + GObject *b_object = g_value_get_object (&b_value); + + if (a_object && b_object && + G_TYPE_FROM_INSTANCE (a_object) == + G_TYPE_FROM_INSTANCE (b_object)) + { + GList *diff = gimp_config_diff (a_object, b_object, flags); + + if (diff) + { + g_list_free (diff); + list = g_list_prepend (list, param_specs[i]); + } + } + else + { + list = g_list_prepend (list, param_specs[i]); + } + } + else + { + + if (g_param_values_cmp (param_specs[i], &a_value, &b_value)) + list = g_list_prepend (list, param_specs[i]); + } g_value_unset (&a_value); g_value_unset (&b_value);