[gimp] Fix undo when going back from a modified text layer to an editable one



commit f9e68fe0ee83630028d1fc8ca35a1e40becdd0d5
Author: Michael Natterer <mitch gimp org>
Date:   Thu Mar 18 10:32:52 2010 +0100

    Fix undo when going back from a modified text layer to an editable one
    
    My earlier change to using gimp_drawable_push_undo() here was a very
    bad idea. Go back to using gimp_image_undo_push_drawable_mod(), but
    make use of its new tile-copying feature so the problem that made me
    do the earlier change is fixed too. See comments in the changed code.

 app/text/gimptextlayer.c |   15 ++++++++++-----
 app/tools/gimptexttool.c |    9 ++++-----
 2 files changed, 14 insertions(+), 10 deletions(-)
---
diff --git a/app/text/gimptextlayer.c b/app/text/gimptextlayer.c
index aaaa499..433395b 100644
--- a/app/text/gimptextlayer.c
+++ b/app/text/gimptextlayer.c
@@ -460,11 +460,16 @@ gimp_text_layer_set (GimpTextLayer *layer,
   if (layer->modified)
     {
       gimp_image_undo_push_text_layer_modified (image, NULL, layer);
-      gimp_drawable_push_undo (GIMP_DRAWABLE (layer), NULL,
-                               0, 0,
-                               gimp_item_get_width  (GIMP_ITEM (layer)),
-                               gimp_item_get_height (GIMP_ITEM (layer)),
-                               NULL, FALSE);
+
+      /*  pass copy_tiles = TRUE so we not only ref the tiles; after
+       *  being a text layer again, undo doesn't care about the
+       *  layer's pixels any longer because they are generated, so
+       *  changing the text would happily overwrite the layer's
+       *  pixels, changing the pixels on the undo stack too without
+       *  any chance to ever undo again.
+       */
+      gimp_image_undo_push_drawable_mod (image, NULL,
+                                         GIMP_DRAWABLE (layer), TRUE);
     }
 
   gimp_image_undo_push_text_layer (image, undo_desc, layer, NULL);
diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c
index 0069f8c..11e90ca 100644
--- a/app/tools/gimptexttool.c
+++ b/app/tools/gimptexttool.c
@@ -1239,11 +1239,10 @@ gimp_text_tool_apply (GimpTextTool *text_tool)
           gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_TEXT, NULL);
 
           gimp_image_undo_push_text_layer_modified (image, NULL, layer);
-          gimp_drawable_push_undo (GIMP_DRAWABLE (layer), NULL,
-                                   0, 0,
-                                   gimp_item_get_width  (GIMP_ITEM (layer)),
-                                   gimp_item_get_height (GIMP_ITEM (layer)),
-                                   NULL, FALSE);
+
+          /*  see comment in gimp_text_layer_set()  */
+          gimp_image_undo_push_drawable_mod (image, NULL,
+                                             GIMP_DRAWABLE (layer), TRUE);
         }
 
       gimp_image_undo_push_text_layer (image, NULL, layer, pspec);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]