Index: app/core/gimpimage-crop.c
===================================================================
--- app/core/gimpimage-crop.c	(revision 26233)
+++ app/core/gimpimage-crop.c	(working copy)
@@ -129,7 +129,7 @@ gimp_image_crop (GimpImage   *image,
                                      _("Resize Image"));
 
       /*  Push the image size to the stack  */
-      gimp_image_undo_push_image_size (image, NULL);
+      gimp_image_undo_push_image_size (image, NULL, x1, y1);
 
       /*  Set the new width and height  */
       g_object_set (image,
@@ -268,6 +268,9 @@ gimp_image_crop (GimpImage   *image,
                          gimp_image_get_height (image));
 
       gimp_viewable_size_changed (GIMP_VIEWABLE (image));
+
+      gimp_image_origo_changed (image, -x1, -y1);
+
       g_object_thaw_notify (G_OBJECT (image));
     }
 
Index: app/core/gimpimage-resize.c
===================================================================
--- app/core/gimpimage-resize.c	(revision 26233)
+++ app/core/gimpimage-resize.c	(working copy)
@@ -97,7 +97,7 @@ gimp_image_resize_with_layers (GimpImage
   old_height = gimp_image_get_height (image);
 
   /*  Push the image size to the stack  */
-  gimp_image_undo_push_image_size (image, NULL);
+  gimp_image_undo_push_image_size (image, NULL, -offset_x, -offset_y);
 
   /*  Set the new width and height  */
   g_object_set (image,
@@ -221,6 +221,8 @@ gimp_image_resize_with_layers (GimpImage
   gimp_image_undo_group_end (image);
 
   gimp_viewable_size_changed (GIMP_VIEWABLE (image));
+  gimp_image_origo_changed (image, offset_x, offset_y);
+
   g_object_thaw_notify (G_OBJECT (image));
 
   gimp_unset_busy (image->gimp);
Index: app/core/gimpimage-rotate.c
===================================================================
--- app/core/gimpimage-rotate.c	(revision 26233)
+++ app/core/gimpimage-rotate.c	(working copy)
@@ -61,6 +61,8 @@ gimp_image_rotate (GimpImage        *ima
   gdouble   progress_current = 1.0;
   gint      new_image_width;
   gint      new_image_height;
+  gint      offset_x;
+  gint      offset_y;
   gboolean  size_changed;
 
   g_return_if_fail (GIMP_IS_IMAGE (image));
@@ -88,12 +90,16 @@ gimp_image_rotate (GimpImage        *ima
     case GIMP_ROTATE_270:
       new_image_width  = gimp_image_get_height (image);
       new_image_height = gimp_image_get_width  (image);
+      offset_x         = (new_image_width  - gimp_image_get_width  (image)) / 2;
+      offset_y         = (new_image_height - gimp_image_get_height (image)) / 2;
       size_changed     = TRUE;
       break;
 
     case GIMP_ROTATE_180:
       new_image_width  = gimp_image_get_width  (image);
       new_image_height = gimp_image_get_height (image);
+      offset_x         = 0;
+      offset_y         = 0;
       size_changed     = FALSE;
      break;
 
@@ -132,10 +138,7 @@ gimp_image_rotate (GimpImage        *ima
       item->offset_x = 0;
       item->offset_y = 0;
 
-      gimp_item_translate (item,
-                           (new_image_width  - gimp_image_get_width  (image)) / 2,
-                           (new_image_height - gimp_image_get_height (image)) / 2,
-                           FALSE);
+      gimp_item_translate (item, offset_x, offset_y, FALSE);
 
       if (progress)
         gimp_progress_set_value (progress, progress_current++ / progress_max);
@@ -186,7 +189,7 @@ gimp_image_rotate (GimpImage        *ima
       gdouble xres;
       gdouble yres;
 
-      gimp_image_undo_push_image_size (image, NULL);
+      gimp_image_undo_push_image_size (image, NULL, -offset_x, -offset_y);
 
       g_object_set (image,
                     "width",  new_image_width,
@@ -202,7 +205,10 @@ gimp_image_rotate (GimpImage        *ima
   gimp_image_undo_group_end (image);
 
   if (size_changed)
-    gimp_viewable_size_changed (GIMP_VIEWABLE (image));
+    {
+      gimp_viewable_size_changed (GIMP_VIEWABLE (image));
+      gimp_image_origo_changed (image, offset_x, offset_y);
+    }
 
   g_object_thaw_notify (G_OBJECT (image));
 
Index: app/core/gimpimage-scale.c
===================================================================
--- app/core/gimpimage-scale.c	(revision 26233)
+++ app/core/gimpimage-scale.c	(working copy)
@@ -56,6 +56,8 @@ gimp_image_scale (GimpImage             
   GList        *remove           = NULL;
   gint          old_width;
   gint          old_height;
+  gint          offset_x;
+  gint          offset_y;
   gdouble       img_scale_w      = 1.0;
   gdouble       img_scale_h      = 1.0;
   gint          progress_steps;
@@ -79,14 +81,17 @@ gimp_image_scale (GimpImage             
   gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_SCALE,
                                _("Scale Image"));
 
-  /*  Push the image size to the stack  */
-  gimp_image_undo_push_image_size (image, NULL);
-
   old_width   = gimp_image_get_width  (image);
   old_height  = gimp_image_get_height (image);
   img_scale_w = (gdouble) new_width  / (gdouble) old_width;
   img_scale_h = (gdouble) new_height / (gdouble) old_height;
 
+  offset_x = (new_width  - old_width)  / 2;
+  offset_y = (new_height - old_height) / 2;
+
+  /*  Push the image size to the stack  */
+  gimp_image_undo_push_image_size (image, NULL, -offset_x, -offset_y);
+
   /*  Set the new width and height  */
   g_object_set (image,
                 "width",  new_width,
@@ -206,6 +211,7 @@ gimp_image_scale (GimpImage             
   g_object_unref (sub_progress);
 
   gimp_viewable_size_changed (GIMP_VIEWABLE (image));
+  gimp_image_origo_changed (image, offset_x, offset_y);
   g_object_thaw_notify (G_OBJECT (image));
 
   gimp_unset_busy (image->gimp);
Index: app/core/gimpimage-undo-push.c
===================================================================
--- app/core/gimpimage-undo-push.c	(revision 26233)
+++ app/core/gimpimage-undo-push.c	(working copy)
@@ -80,13 +80,17 @@ gimp_image_undo_push_image_type (GimpIma
 
 GimpUndo *
 gimp_image_undo_push_image_size (GimpImage   *image,
-                                 const gchar *undo_desc)
+                                 const gchar *undo_desc,
+                                 gdouble      previous_origo_x,
+                                 gdouble      previous_origo_y)
 {
   g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
 
   return gimp_image_undo_push (image, GIMP_TYPE_IMAGE_UNDO,
                                GIMP_UNDO_IMAGE_SIZE, undo_desc,
                                GIMP_DIRTY_IMAGE | GIMP_DIRTY_IMAGE_SIZE,
+                               "previous-origo-x", previous_origo_x,
+                               "previous-origo-y", previous_origo_y,
                                NULL);
 }
 
Index: app/core/gimpimage-undo-push.h
===================================================================
--- app/core/gimpimage-undo-push.h	(revision 26233)
+++ app/core/gimpimage-undo-push.h	(working copy)
@@ -25,7 +25,9 @@
 GimpUndo * gimp_image_undo_push_image_type          (GimpImage     *image,
                                                      const gchar   *undo_desc);
 GimpUndo * gimp_image_undo_push_image_size          (GimpImage     *image,
-                                                     const gchar   *undo_desc);
+                                                     const gchar   *undo_desc,
+                                                     gdouble        prevoius_origo_x,
+                                                     gdouble        prevoius_origo_y);
 GimpUndo * gimp_image_undo_push_image_resolution    (GimpImage     *image,
                                                      const gchar   *undo_desc);
 GimpUndo * gimp_image_undo_push_image_grid          (GimpImage     *image,
Index: app/core/gimpimage-undo.c
===================================================================
--- app/core/gimpimage-undo.c	(revision 26233)
+++ app/core/gimpimage-undo.c	(working copy)
@@ -381,7 +381,12 @@ gimp_image_undo_pop_stack (GimpImage    
         gimp_image_mode_changed (image);
 
       if (accum.size_changed)
-        gimp_viewable_size_changed (GIMP_VIEWABLE (image));
+        {
+          gimp_viewable_size_changed (GIMP_VIEWABLE (image));
+          gimp_image_origo_changed (image,
+                                    accum.previous_origo_x,
+                                    accum.previous_origo_y);
+        }
 
       if (accum.resolution_changed)
         gimp_image_resolution_changed (image);
Index: app/core/gimpimage.c
===================================================================
--- app/core/gimpimage.c	(revision 26233)
+++ app/core/gimpimage.c	(working copy)
@@ -99,6 +99,7 @@ enum
   UPDATE_SAMPLE_POINT,
   SAMPLE_POINT_ADDED,
   SAMPLE_POINT_REMOVED,
+  ORIGO_CHANGED,
   PARASITE_ATTACHED,
   PARASITE_DETACHED,
   COLORMAP_CHANGED,
@@ -425,6 +426,17 @@ gimp_image_class_init (GimpImageClass *k
                   G_TYPE_NONE, 1,
                   G_TYPE_POINTER);
 
+  gimp_image_signals[ORIGO_CHANGED] =
+    g_signal_new ("origo-changed",
+                  G_TYPE_FROM_CLASS (klass),
+                  G_SIGNAL_RUN_FIRST,
+                  G_STRUCT_OFFSET (GimpImageClass, origo_changed),
+                  NULL, NULL,
+                  gimp_marshal_VOID__DOUBLE_DOUBLE,
+                  G_TYPE_NONE, 2,
+                  G_TYPE_DOUBLE,
+                  G_TYPE_DOUBLE);
+
   gimp_image_signals[PARASITE_ATTACHED] =
     g_signal_new ("parasite-attached",
                   G_TYPE_FROM_CLASS (klass),
@@ -513,6 +525,7 @@ gimp_image_class_init (GimpImageClass *k
   klass->update_sample_point          = NULL;
   klass->sample_point_added           = NULL;
   klass->sample_point_removed         = NULL;
+  klass->origo_changed                = NULL;
   klass->parasite_attached            = NULL;
   klass->parasite_detached            = NULL;
   klass->colormap_changed             = gimp_image_real_colormap_changed;
@@ -1793,6 +1806,29 @@ gimp_image_sample_point_removed (GimpIma
                  sample_point);
 }
 
+/**
+ * gimp_image_origo_changed:
+ * @image:
+ * @previous_origo_x:
+ * @previous_origo_y:
+ *
+ * Emits the origo-changed signal that is typically used to adjust the
+ * position of the image in the display shell on various operations,
+ * e.g. crop.
+ *
+ **/
+void
+gimp_image_origo_changed (GimpImage *image,
+                          gdouble    previous_origo_x,
+                          gdouble    previous_origo_y)
+{
+  g_return_if_fail (GIMP_IS_IMAGE (image));
+
+  g_signal_emit (image, gimp_image_signals[ORIGO_CHANGED], 0,
+                 previous_origo_x,
+                 previous_origo_y);
+}
+
 void
 gimp_image_colormap_changed (GimpImage *image,
                              gint       color_index)
Index: app/core/gimpimage.h
===================================================================
--- app/core/gimpimage.h	(revision 26233)
+++ app/core/gimpimage.h	(working copy)
@@ -216,6 +216,9 @@ struct _GimpImageClass
                                          GimpSamplePoint      *sample_point);
   void (* sample_point_removed)         (GimpImage            *image,
                                          GimpSamplePoint      *sample_point);
+  void (* origo_changed)                (GimpImage            *image,
+                                         gdouble               previous_origo_x,
+                                         gdouble               previous_origo_y);
   void (* parasite_attached)            (GimpImage            *image,
                                          const gchar          *name);
   void (* parasite_detached)            (GimpImage            *image,
@@ -319,6 +322,9 @@ void            gimp_image_sample_point_
                                                   GimpSamplePoint    *sample_point);
 void            gimp_image_sample_point_removed  (GimpImage          *image,
                                                   GimpSamplePoint    *sample_point);
+void            gimp_image_origo_changed         (GimpImage          *image,
+                                                  gdouble             previous_origo_x,
+                                                  gdouble             previous_origo_y);
 void            gimp_image_colormap_changed      (GimpImage          *image,
                                                   gint                col);
 void            gimp_image_selection_control     (GimpImage          *image,
Index: app/core/gimpimageundo.c
===================================================================
--- app/core/gimpimageundo.c	(revision 26233)
+++ app/core/gimpimageundo.c	(working copy)
@@ -41,6 +41,8 @@
 enum
 {
   PROP_0,
+  PROP_PREVIOUS_ORIGO_X,
+  PROP_PREVIOUS_ORIGO_Y,
   PROP_GRID,
   PROP_PARASITE_NAME
 };
@@ -89,6 +91,22 @@ gimp_image_undo_class_init (GimpImageUnd
   undo_class->pop                = gimp_image_undo_pop;
   undo_class->free               = gimp_image_undo_free;
 
+  g_object_class_install_property (object_class, PROP_PREVIOUS_ORIGO_X,
+                                   g_param_spec_double ("previous-origo-x", NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT_ONLY));
+
+  g_object_class_install_property (object_class, PROP_PREVIOUS_ORIGO_Y,
+                                   g_param_spec_double ("previous-origo-y", NULL, NULL,
+                                                        -G_MAXDOUBLE,
+                                                        G_MAXDOUBLE,
+                                                        0.0,
+                                                        GIMP_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT_ONLY));
+
   g_object_class_install_property (object_class, PROP_GRID,
                                    g_param_spec_object ("grid", NULL, NULL,
                                                         GIMP_TYPE_GRID,
@@ -176,6 +194,12 @@ gimp_image_undo_set_property (GObject   
 
   switch (property_id)
     {
+    case PROP_PREVIOUS_ORIGO_X:
+      image_undo->previous_origo_x = g_value_get_double (value);
+      break;
+    case PROP_PREVIOUS_ORIGO_Y:
+      image_undo->previous_origo_y = g_value_get_double (value);
+      break;
     case PROP_GRID:
       {
         GimpGrid *grid = g_value_get_object (value);
@@ -204,6 +228,12 @@ gimp_image_undo_get_property (GObject   
 
   switch (property_id)
     {
+    case PROP_PREVIOUS_ORIGO_X:
+      g_value_set_double (value, image_undo->previous_origo_x);
+      break;
+    case PROP_PREVIOUS_ORIGO_Y:
+      g_value_set_double (value, image_undo->previous_origo_y);
+      break;
     case PROP_GRID:
       g_value_set_object (value, image_undo->grid);
        break;
@@ -265,14 +295,21 @@ gimp_image_undo_pop (GimpUndo           
 
     case GIMP_UNDO_IMAGE_SIZE:
       {
-        gint width;
-        gint height;
-
-        width  = image_undo->width;
-        height = image_undo->height;
-
-        image_undo->width  = gimp_image_get_width  (image);
-        image_undo->height = gimp_image_get_height (image);
+        gint    width;
+        gint    height;
+        gdouble previous_origo_x;
+        gdouble previous_origo_y;
+
+        width            = image_undo->width;
+        height           = image_undo->height;
+        previous_origo_x = image_undo->previous_origo_x;
+        previous_origo_y = image_undo->previous_origo_y;
+
+        /* Transform to a redo */
+        image_undo->width            = gimp_image_get_width  (image);
+        image_undo->height           = gimp_image_get_height (image);
+        image_undo->previous_origo_x = -previous_origo_x;
+        image_undo->previous_origo_y = -previous_origo_y;
 
         g_object_set (image,
                       "width",  width,
@@ -284,7 +321,11 @@ gimp_image_undo_pop (GimpUndo           
 
         if (gimp_image_get_width  (image) != image_undo->width ||
             gimp_image_get_height (image) != image_undo->height)
-          accum->size_changed = TRUE;
+          {
+            accum->size_changed     = TRUE;
+            accum->previous_origo_x = previous_origo_x;
+            accum->previous_origo_y = previous_origo_y;
+          }
       }
       break;
 
Index: app/core/gimpimageundo.h
===================================================================
--- app/core/gimpimageundo.h	(revision 26233)
+++ app/core/gimpimageundo.h	(working copy)
@@ -40,6 +40,8 @@ struct _GimpImageUndo
   GimpImageBaseType  base_type;
   gint               width;
   gint               height;
+  gdouble            previous_origo_x;
+  gdouble            previous_origo_y;
   gdouble            xresolution;
   gdouble            yresolution;
   GimpUnit           resolution_unit;
Index: app/core/gimpundo.h
===================================================================
--- app/core/gimpundo.h	(revision 26233)
+++ app/core/gimpundo.h	(working copy)
@@ -27,6 +27,8 @@ struct _GimpUndoAccumulator
 {
   gboolean mode_changed;
   gboolean size_changed;
+  gdouble  previous_origo_x;
+  gdouble  previous_origo_y;
   gboolean resolution_changed;
   gboolean unit_changed;
   gboolean quick_mask_changed;
Index: app/display/gimpdisplayshell-handlers.c
===================================================================
--- app/display/gimpdisplayshell-handlers.c	(revision 26233)
+++ app/display/gimpdisplayshell-handlers.c	(working copy)
@@ -43,6 +43,7 @@
 #include "gimpdisplayshell-handlers.h"
 #include "gimpdisplayshell-icon.h"
 #include "gimpdisplayshell-scale.h"
+#include "gimpdisplayshell-scroll.h"
 #include "gimpdisplayshell-selection.h"
 #include "gimpdisplayshell-title.h"
 
@@ -76,6 +77,10 @@ static void   gimp_display_shell_update_
 static void   gimp_display_shell_update_sample_point_handler(GimpImage        *image,
                                                              GimpSamplePoint  *sample_point,
                                                              GimpDisplayShell *shell);
+static void   gimp_display_shell_origo_changed_handler      (GimpImage        *image,
+                                                             gdouble           previous_origo_x,
+                                                             gdouble           previous_origo_y,
+                                                             GimpDisplayShell *shell);
 static void   gimp_display_shell_invalidate_preview_handler (GimpImage        *image,
                                                              GimpDisplayShell *shell);
 static void   gimp_display_shell_profile_changed_handler    (GimpColorManaged *image,
@@ -163,6 +168,9 @@ gimp_display_shell_connect (GimpDisplayS
   g_signal_connect (image, "update-sample-point",
                     G_CALLBACK (gimp_display_shell_update_sample_point_handler),
                     shell);
+  g_signal_connect (image, "origo-changed",
+                    G_CALLBACK (gimp_display_shell_origo_changed_handler),
+                    shell);
   g_signal_connect (image, "invalidate-preview",
                     G_CALLBACK (gimp_display_shell_invalidate_preview_handler),
                     shell);
@@ -332,6 +340,9 @@ gimp_display_shell_disconnect (GimpDispl
                                         gimp_display_shell_update_sample_point_handler,
                                         shell);
   g_signal_handlers_disconnect_by_func (image,
+                                        gimp_display_shell_origo_changed_handler,
+                                        shell);
+  g_signal_handlers_disconnect_by_func (image,
                                         gimp_display_shell_quick_mask_changed_handler,
                                         shell);
   g_signal_handlers_disconnect_by_func (image,
@@ -479,6 +490,17 @@ gimp_display_shell_update_sample_point_h
 }
 
 static void
+gimp_display_shell_origo_changed_handler (GimpImage        *image,
+                                          gdouble           previous_origo_x,
+                                          gdouble           previous_origo_y,
+                                          GimpDisplayShell *shell)
+{
+  gimp_display_shell_adjust_for_changed_origo (shell,
+                                               previous_origo_x,
+                                               previous_origo_y);
+}
+
+static void
 gimp_display_shell_invalidate_preview_handler (GimpImage        *image,
                                                GimpDisplayShell *shell)
 {
Index: app/display/gimpdisplayshell-scale.c
===================================================================
--- app/display/gimpdisplayshell-scale.c	(revision 26233)
+++ app/display/gimpdisplayshell-scale.c	(working copy)
@@ -541,6 +541,36 @@ gimp_display_shell_center_image (GimpDis
                                       shell->display->config->resize_windows_on_zoom);
 }
 
+static void
+gimp_display_shell_size_allocate_center_image_callback (GimpDisplayShell *shell,
+                                                        GtkAllocation    *allocation,
+                                                        GtkWidget        *canvas)
+{
+  gimp_display_shell_center_image (shell, TRUE, TRUE);
+
+  g_signal_handlers_disconnect_by_func (canvas,
+                                        gimp_display_shell_size_allocate_center_image_callback,
+                                        shell);
+}
+
+/**
+ * gimp_display_shell_center_image_on_next_size_allocate:
+ * @shell:
+ *
+ * Centers the image in the display as soon as the canvas has got its
+ * new size
+ *
+ **/
+void
+gimp_display_shell_center_image_on_next_size_allocate (GimpDisplayShell *shell)
+{
+  g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
+
+  g_signal_connect_swapped (shell->canvas, "size-allocate",
+                            G_CALLBACK (gimp_display_shell_size_allocate_center_image_callback),
+                            shell);
+}
+
 /**
  * gimp_display_shell_scale_by_values:
  * @shell:         the #GimpDisplayShell
Index: app/display/gimpdisplayshell-scale.h
===================================================================
--- app/display/gimpdisplayshell-scale.h	(revision 26233)
+++ app/display/gimpdisplayshell-scale.h	(working copy)
@@ -41,6 +41,8 @@ void   gimp_display_shell_scale_fill    
 void   gimp_display_shell_center_image          (GimpDisplayShell *shell,
                                                  gboolean          horizontally,
                                                  gboolean          vertically);
+void   gimp_display_shell_center_image_on_next_size_allocate
+                                                (GimpDisplayShell *shell);
 void   gimp_display_shell_scale_by_values       (GimpDisplayShell *shell,
                                                  gdouble           scale,
                                                  gint              offset_x,
Index: app/display/gimpdisplayshell-scroll.c
===================================================================
--- app/display/gimpdisplayshell-scroll.c	(revision 26233)
+++ app/display/gimpdisplayshell-scroll.c	(working copy)
@@ -26,6 +26,8 @@
 
 #include "display-types.h"
 
+#include "config/gimpdisplayconfig.h"
+
 #include "base/tile-manager.h"
 
 #include "core/gimpimage.h"
@@ -203,6 +205,46 @@ gimp_display_shell_scroll_clamp_offsets 
 }
 
 /**
+ * gimp_display_shell_adjust_for_changed_origo:
+ * @shell:
+ * @previous_origo_x:
+ * @previous_origo_y:
+ *
+ * On e.g. a image crop or an image scale, we want to reposition the
+ * image nicely in the display shell.
+ *
+ **/
+void
+gimp_display_shell_adjust_for_changed_origo (GimpDisplayShell *shell,
+                                             gdouble           previous_origo_x,
+                                             gdouble           previous_origo_y)
+{
+  g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
+
+  if (shell->display->config->resize_windows_on_resize)
+    {
+      /* If the window is reszed it's pretty straightforward, just
+       * center the image in it
+       */
+      gimp_display_shell_center_image_on_next_size_allocate (shell);
+    }
+  else
+    {
+      gint scaled_previous_origo_x = SCALEX (shell, previous_origo_x);
+      gint scaled_previous_origo_y = SCALEY (shell, previous_origo_y);
+
+      /* Note that we can't use gimp_display_shell_scroll_private() here
+       * because that would expose the image twice, causing unwanted
+       * flicker.
+       */
+      gimp_display_shell_scale_by_values (shell, gimp_zoom_model_get_factor (shell->zoom),
+                                          shell->offset_x + scaled_previous_origo_x,
+                                          shell->offset_y + scaled_previous_origo_y,
+                                          shell->display->config->resize_windows_on_zoom);
+    }
+}
+
+/**
  * gimp_display_shell_get_scaled_viewport:
  * @shell:
  * @x:
Index: app/display/gimpdisplayshell-scroll.h
===================================================================
--- app/display/gimpdisplayshell-scroll.h	(revision 26233)
+++ app/display/gimpdisplayshell-scroll.h	(working copy)
@@ -26,6 +26,10 @@ void       gimp_display_shell_center_aro
 
 void       gimp_display_shell_scroll_clamp_offsets             (GimpDisplayShell       *shell);
 
+void       gimp_display_shell_adjust_for_changed_origo         (GimpDisplayShell       *shell,
+                                                                gdouble                 previous_origo_x,
+                                                                gdouble                 previous_origo_y);
+
 void       gimp_display_shell_get_scaled_viewport              (const GimpDisplayShell *shell,
                                                                 gint                   *x,
                                                                 gint                   *y,
