[gimp/metadata-browser] Bug 554359: text tool should compress undo steps...
- From: Roman Joost <romanofski src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/metadata-browser] Bug 554359: text tool should compress undo steps...
- Date: Wed, 12 Sep 2012 22:47:40 +0000 (UTC)
commit 8d7be6044c082e56c743a38423b7c7cff7e8d0cc
Author: Massimo Valentini <mvalentini src gnome org>
Date: Tue Feb 7 16:57:21 2012 +0100
Bug 554359: text tool should compress undo steps...
when the rectangle is manipulated
app/tools/gimptexttool.c | 56 +++++++++++++++++++++++++++++++++++----------
1 files changed, 43 insertions(+), 13 deletions(-)
---
diff --git a/app/tools/gimptexttool.c b/app/tools/gimptexttool.c
index 4804648..026c0d4 100644
--- a/app/tools/gimptexttool.c
+++ b/app/tools/gimptexttool.c
@@ -40,6 +40,7 @@
#include "core/gimplayer-floating-sel.h"
#include "core/gimpmarshal.h"
#include "core/gimptoolinfo.h"
+#include "core/gimpundostack.h"
#include "text/gimptext.h"
#include "text/gimptext-vectors.h"
@@ -145,7 +146,8 @@ static void gimp_text_tool_text_notify (GimpText *text,
static void gimp_text_tool_text_changed (GimpText *text,
GimpTextTool *text_tool);
-static gboolean gimp_text_tool_apply (GimpTextTool *text_tool);
+static gboolean gimp_text_tool_apply (GimpTextTool *text_tool,
+ gboolean push_undo);
static void gimp_text_tool_create_layer (GimpTextTool *text_tool,
GimpText *text);
@@ -926,8 +928,10 @@ gimp_text_tool_rectangle_change_complete (GimpRectangleTool *rect_tool)
(x2 - x1) != gimp_item_get_width (item) ||
(y2 - y1) != gimp_item_get_height (item))
{
- GimpUnit box_unit = text_tool->proxy->box_unit;
- gdouble xres, yres;
+ GimpUnit box_unit = text_tool->proxy->box_unit;
+ gdouble xres, yres;
+ gboolean push_undo = TRUE;
+ GimpUndo *undo;
gimp_image_get_resolution (text_tool->image, &xres, &yres);
@@ -939,16 +943,36 @@ gimp_text_tool_rectangle_change_complete (GimpRectangleTool *rect_tool)
box_unit, yres),
NULL);
- gimp_image_undo_group_start (text_tool->image, GIMP_UNDO_GROUP_TEXT,
- _("Reshape Text Layer"));
+ undo = gimp_image_undo_can_compress (text_tool->image,
+ GIMP_TYPE_UNDO_STACK,
+ GIMP_UNDO_GROUP_TEXT);
+
+ if (undo &&
+ gimp_undo_get_age (undo) <= TEXT_UNDO_TIMEOUT &&
+ g_object_get_data (G_OBJECT (undo), "reshape-text-layer") == (gpointer) item)
+ push_undo = FALSE;
+
+ if (push_undo)
+ {
+ gimp_image_undo_group_start (text_tool->image, GIMP_UNDO_GROUP_TEXT,
+ _("Reshape Text Layer"));
+
+ undo = gimp_image_undo_can_compress (text_tool->image, GIMP_TYPE_UNDO_STACK,
+ GIMP_UNDO_GROUP_TEXT);
+
+ if (undo)
+ g_object_set_data (G_OBJECT (undo), "reshape-text-layer",
+ (gpointer) item);
+ }
gimp_item_translate (item,
x1 - gimp_item_get_offset_x (item),
y1 - gimp_item_get_offset_y (item),
- TRUE);
- gimp_text_tool_apply (text_tool);
+ push_undo);
+ gimp_text_tool_apply (text_tool, push_undo);
- gimp_image_undo_group_end (text_tool->image);
+ if (push_undo)
+ gimp_image_undo_group_end (text_tool->image);
}
}
@@ -985,7 +1009,7 @@ gimp_text_tool_connect (GimpTextTool *text_tool,
text_tool);
if (text_tool->pending)
- gimp_text_tool_apply (text_tool);
+ gimp_text_tool_apply (text_tool, TRUE);
g_object_unref (text_tool->text);
text_tool->text = NULL;
@@ -1067,6 +1091,12 @@ gimp_text_tool_layer_notify (GimpTextLayer *layer,
}
}
+static gboolean
+gimp_text_tool_apply_idle (gpointer text_tool)
+{
+ return gimp_text_tool_apply (text_tool, TRUE);
+}
+
static void
gimp_text_tool_proxy_notify (GimpText *text,
const GParamSpec *pspec,
@@ -1086,7 +1116,7 @@ gimp_text_tool_proxy_notify (GimpText *text,
text_tool->idle_id =
g_idle_add_full (G_PRIORITY_LOW,
- (GSourceFunc) gimp_text_tool_apply, text_tool,
+ gimp_text_tool_apply_idle, text_tool,
NULL);
}
}
@@ -1161,7 +1191,8 @@ gimp_text_tool_text_changed (GimpText *text,
}
static gboolean
-gimp_text_tool_apply (GimpTextTool *text_tool)
+gimp_text_tool_apply (GimpTextTool *text_tool,
+ gboolean push_undo)
{
const GParamSpec *pspec = NULL;
GimpImage *image;
@@ -1169,7 +1200,6 @@ gimp_text_tool_apply (GimpTextTool *text_tool)
GObject *src;
GObject *dest;
GList *list;
- gboolean push_undo = TRUE;
gboolean undo_group = FALSE;
if (text_tool->idle_id)
@@ -1406,7 +1436,7 @@ gimp_text_tool_create_layer (GimpTextTool *text_tool,
box_unit, yres),
NULL);
- gimp_text_tool_apply (text_tool); /* unblocks drawing */
+ gimp_text_tool_apply (text_tool, TRUE); /* unblocks drawing */
}
else
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]