static gboolean gimp_curves_config_equal (GimpConfig *a, GimpConfig *b) { GimpCurvesConfig *config_a = GIMP_CURVES_CONFIG (a); GimpCurvesConfig *config_b = GIMP_CURVES_CONFIG (b); GimpHistogramChannel channel; for (channel = GIMP_HISTOGRAM_VALUE; channel <= GIMP_HISTOGRAM_ALPHA; channel++) { GimpCurve *curve_a = config_a->curve[channel]; GimpCurve *curve_b = config_b->curve[channel]; if (curve_a && curve_b) { if (! gimp_config_is_equal_to (GIMP_CONFIG (curve_a), GIMP_CONFIG (curve_b))) return FALSE; } else if (curve_a || curve_b) { return FALSE; } } /* don't compare "channel" */ return TRUE; }
static void grid_dialog_response (GtkWidget *widget, gint response_id, GtkWidget *dialog) { GimpImage *image; GimpImage *grid; GimpGrid *grid_backup; image = g_object_get_data (G_OBJECT (dialog), "image"); grid = g_object_get_data (G_OBJECT (dialog), "grid"); grid_backup = g_object_get_data (G_OBJECT (dialog), "grid-backup"); switch (response_id) { case GRID_RESPONSE_RESET: gimp_config_sync (G_OBJECT (image->gimp->config->default_grid), G_OBJECT (grid), 0); break; case GTK_RESPONSE_OK: if (! gimp_config_is_equal_to (GIMP_CONFIG (grid_backup), GIMP_CONFIG (grid))) { gimp_image_undo_push_image_grid (image, _("Grid"), grid_backup); } gtk_widget_destroy (dialog); break; default: gimp_image_set_grid (GIMP_IMAGE (image), grid_backup, FALSE); gtk_widget_destroy (dialog); } }
static gboolean gimp_config_iface_equal (GimpConfig *a, GimpConfig *b) { GObjectClass *klass; GParamSpec **property_specs; guint n_property_specs; guint i; gboolean equal = TRUE; klass = G_OBJECT_GET_CLASS (a); property_specs = g_object_class_list_properties (klass, &n_property_specs); for (i = 0; equal && i < n_property_specs; i++) { GParamSpec *prop_spec; GValue a_value = G_VALUE_INIT; GValue b_value = G_VALUE_INIT; prop_spec = property_specs[i]; if (! (prop_spec->flags & G_PARAM_READABLE)) continue; g_value_init (&a_value, prop_spec->value_type); g_value_init (&b_value, prop_spec->value_type); g_object_get_property (G_OBJECT (a), prop_spec->name, &a_value); g_object_get_property (G_OBJECT (b), prop_spec->name, &b_value); if (g_param_values_cmp (prop_spec, &a_value, &b_value)) { if ((prop_spec->flags & GIMP_CONFIG_PARAM_AGGREGATE) && G_IS_PARAM_SPEC_OBJECT (prop_spec) && g_type_interface_peek (g_type_class_peek (prop_spec->value_type), GIMP_TYPE_CONFIG)) { if (! gimp_config_is_equal_to (g_value_get_object (&a_value), g_value_get_object (&b_value))) { equal = FALSE; } } else { equal = FALSE; } } g_value_unset (&a_value); g_value_unset (&b_value); } g_free (property_specs); return equal; }