[gimp] app: include floating selection removal in the layer merge undo group
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: include floating selection removal in the layer merge undo group
- Date: Mon, 14 Feb 2011 00:44:51 +0000 (UTC)
commit d9dd65529ff52dd04262985c8681de004cdf0b01
Author: Michael Natterer <mitch gimp org>
Date: Mon Feb 14 01:43:55 2011 +0100
app: include floating selection removal in the layer merge undo group
and pull undo group starting/ending out of the
gimp_image_merge_layers() utility function.
app/core/gimpimage-merge.c | 73 ++++++++++++++++++++++++++------------------
1 files changed, 43 insertions(+), 30 deletions(-)
---
diff --git a/app/core/gimpimage-merge.c b/app/core/gimpimage-merge.c
index 027dcea..1a327ab 100644
--- a/app/core/gimpimage-merge.c
+++ b/app/core/gimpimage-merge.c
@@ -54,8 +54,7 @@ static GimpLayer * gimp_image_merge_layers (GimpImage *image,
GimpContainer *container,
GSList *merge_list,
GimpContext *context,
- GimpMergeType merge_type,
- const gchar *undo_desc);
+ GimpMergeType merge_type);
/* public functions */
@@ -71,27 +70,38 @@ gimp_image_merge_visible_layers (GimpImage *image,
GList *list;
GSList *merge_list = NULL;
GSList *invisible_list = NULL;
- GimpLayer *layer = NULL;
g_return_val_if_fail (GIMP_IS_IMAGE (image), NULL);
g_return_val_if_fail (GIMP_IS_CONTEXT (context), NULL);
active_layer = gimp_image_get_active_layer (image);
+ /* if the active layer is the floating selection, get the underlying
+ * drawable, but only if it is a layer
+ */
+ if (active_layer && gimp_layer_is_floating_sel (active_layer))
+ {
+ GimpDrawable *fs_drawable;
+
+ fs_drawable = gimp_layer_get_floating_sel_drawable (active_layer);
+
+ if (GIMP_IS_LAYER (fs_drawable))
+ active_layer = GIMP_LAYER (fs_drawable);
+ }
+
if (active_layer)
container = gimp_item_get_container (GIMP_ITEM (active_layer));
else
container = gimp_image_get_layers (image);
- /* if there's a floating selection, anchor it */
- if (gimp_image_get_floating_selection (image))
- floating_sel_anchor (gimp_image_get_floating_selection (image));
-
for (list = gimp_item_stack_get_item_iter (GIMP_ITEM_STACK (container));
list;
list = g_list_next (list))
{
- layer = list->data;
+ GimpLayer *layer = list->data;
+
+ if (gimp_layer_is_floating_sel (layer))
+ continue;
if (gimp_item_get_visible (GIMP_ITEM (layer)))
{
@@ -105,21 +115,21 @@ gimp_image_merge_visible_layers (GimpImage *image,
if (merge_list)
{
- const gchar *undo_desc = C_("undo-type", "Merge Visible Layers");
+ GimpLayer *layer;
gimp_set_busy (image->gimp);
- if (invisible_list)
- {
- gimp_image_undo_group_start (image,
- GIMP_UNDO_GROUP_IMAGE_LAYERS_MERGE,
- undo_desc);
- }
+ gimp_image_undo_group_start (image,
+ GIMP_UNDO_GROUP_IMAGE_LAYERS_MERGE,
+ C_("undo-type", "Merge Visible Layers"));
+
+ /* if there's a floating selection, anchor it */
+ if (gimp_image_get_floating_selection (image))
+ floating_sel_anchor (gimp_image_get_floating_selection (image));
layer = gimp_image_merge_layers (image,
container,
- merge_list, context, merge_type,
- C_("undo-type", "Merge Visible Layers"));
+ merge_list, context, merge_type);
g_slist_free (merge_list);
if (invisible_list)
@@ -129,11 +139,10 @@ gimp_image_merge_visible_layers (GimpImage *image,
for (list = invisible_list; list; list = g_slist_next (list))
gimp_image_remove_layer (image, list->data, TRUE, NULL);
- gimp_image_undo_group_end (image);
-
g_slist_free (invisible_list);
}
+ gimp_image_undo_group_end (image);
gimp_unset_busy (image->gimp);
@@ -156,6 +165,10 @@ gimp_image_flatten (GimpImage *image,
gimp_set_busy (image->gimp);
+ gimp_image_undo_group_start (image,
+ GIMP_UNDO_GROUP_IMAGE_LAYERS_MERGE,
+ C_("undo-type", "Flatten Image"));
+
/* if there's a floating selection, anchor it */
if (gimp_image_get_floating_selection (image))
floating_sel_anchor (gimp_image_get_floating_selection (image));
@@ -173,11 +186,13 @@ gimp_image_flatten (GimpImage *image,
layer = gimp_image_merge_layers (image,
gimp_image_get_layers (image),
merge_list, context,
- GIMP_FLATTEN_IMAGE, C_("undo-type", "Flatten Image"));
+ GIMP_FLATTEN_IMAGE);
g_slist_free (merge_list);
gimp_image_alpha_changed (image);
+ gimp_image_undo_group_end (image);
+
gimp_unset_busy (image->gimp);
return layer;
@@ -249,12 +264,17 @@ gimp_image_merge_down (GimpImage *image,
gimp_set_busy (image->gimp);
+ gimp_image_undo_group_start (image,
+ GIMP_UNDO_GROUP_IMAGE_LAYERS_MERGE,
+ C_("undo-type", "Merge Down"));
+
layer = gimp_image_merge_layers (image,
gimp_item_get_container (GIMP_ITEM (current_layer)),
- merge_list, context, merge_type,
- C_("undo-type", "Merge Down"));
+ merge_list, context, merge_type);
g_slist_free (merge_list);
+ gimp_image_undo_group_end (image);
+
gimp_unset_busy (image->gimp);
return layer;
@@ -387,8 +407,7 @@ gimp_image_merge_layers (GimpImage *image,
GimpContainer *container,
GSList *merge_list,
GimpContext *context,
- GimpMergeType merge_type,
- const gchar *undo_desc)
+ GimpMergeType merge_type)
{
GList *list;
GSList *reverse_list = NULL;
@@ -486,9 +505,6 @@ gimp_image_merge_layers (GimpImage *image,
/* Start a merge undo group. */
- gimp_image_undo_group_start (image, GIMP_UNDO_GROUP_IMAGE_LAYERS_MERGE,
- undo_desc);
-
name = g_strdup (gimp_object_get_name (layer));
if (merge_type == GIMP_FLATTEN_IMAGE ||
@@ -689,9 +705,6 @@ gimp_image_merge_layers (GimpImage *image,
TRUE);
}
- /* End the merge undo group */
- gimp_image_undo_group_end (image);
-
gimp_drawable_update (GIMP_DRAWABLE (merge_layer),
0, 0,
gimp_item_get_width (GIMP_ITEM (merge_layer)),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]