diff --git a/app/operations/layer-modes/gimpoperationreplace.c b/app/operations/layer-modes/gimpoperationreplace.c index ed1ac19249..dd19e2ebb3 100644 --- a/app/operations/layer-modes/gimpoperationreplace.c +++ b/app/operations/layer-modes/gimpoperationreplace.c @@ -23,6 +23,7 @@ #include #include +#include #include "../operations-types.h" @@ -178,38 +179,46 @@ gimp_operation_replace_parent_process (GeglOperation *op, input = gegl_operation_context_get_object (context, "input"); aux = gegl_operation_context_get_object (context, "aux"); - if (input && aux && - gegl_buffer_share_storage (GEGL_BUFFER (input), GEGL_BUFFER (aux))) + if (input && aux) { - gint input_shift_x; - gint input_shift_y; - gint aux_shift_x; - gint aux_shift_y; + GObject *buffer = aux; - g_object_get (input, - "shift-x", &input_shift_x, - "shift-y", &input_shift_y, - NULL); - g_object_get (aux, - "shift-x", &aux_shift_x, - "shift-y", &aux_shift_y, - NULL); + while (buffer != input && GEGL_IS_BUFFER (buffer)) + buffer = (GObject *) gegl_tile_handler_get_source (buffer); - if (input_shift_x == aux_shift_x && input_shift_y == aux_shift_y) + if (buffer == input) { - const GeglRectangle *input_abyss; - const GeglRectangle *aux_abyss; + gint input_shift_x; + gint input_shift_y; + gint aux_shift_x; + gint aux_shift_y; - input_abyss = gegl_buffer_get_abyss (GEGL_BUFFER (input)); - aux_abyss = gegl_buffer_get_abyss (GEGL_BUFFER (aux)); + g_object_get (input, + "shift-x", &input_shift_x, + "shift-y", &input_shift_y, + NULL); + g_object_get (aux, + "shift-x", &aux_shift_x, + "shift-y", &aux_shift_y, + NULL); - if (gegl_rectangle_equal (input_abyss, aux_abyss) || - (gegl_rectangle_contains (input_abyss, result) && - gegl_rectangle_contains (aux_abyss, result))) + if (input_shift_x == aux_shift_x && input_shift_y == aux_shift_y) { - gegl_operation_context_set_object (context, "output", input); + const GeglRectangle *input_abyss; + const GeglRectangle *aux_abyss; - return TRUE; + input_abyss = gegl_buffer_get_abyss (GEGL_BUFFER (input)); + aux_abyss = gegl_buffer_get_abyss (GEGL_BUFFER (aux)); + + if (gegl_rectangle_equal (input_abyss, aux_abyss) || + (gegl_rectangle_contains (input_abyss, result) && + gegl_rectangle_contains (aux_abyss, result))) + { + gegl_operation_context_set_object (context, + "output", input); + + return TRUE; + } } } } diff --git a/app/sanity.c b/app/sanity.c index 5241b8783a..5a2447c749 100644 --- a/app/sanity.c +++ b/app/sanity.c @@ -518,7 +518,7 @@ sanity_check_gegl (void) #define GEGL_REQUIRED_MAJOR 0 #define GEGL_REQUIRED_MINOR 4 -#define GEGL_REQUIRED_MICRO 23 +#define GEGL_REQUIRED_MICRO 22 gegl_get_version (&gegl_major_version, &gegl_minor_version, diff --git a/configure.ac b/configure.ac index c9b4287238..06082ee3b4 100644 --- a/configure.ac +++ b/configure.ac @@ -52,7 +52,7 @@ m4_define([fontconfig_required_version], [2.12.4]) m4_define([freetype2_required_version], [2.1.7]) m4_define([gdk_pixbuf_required_version], [2.30.8]) m4_define([gegl_major_minor_version], [0.4]) -m4_define([gegl_micro_version], [23]) +m4_define([gegl_micro_version], [22]) m4_define([gegl_required_version], [gegl_major_minor_version.gegl_micro_version]) m4_define([gexiv2_required_version], [0.10.6])