mirror of https://github.com/GNOME/gimp.git
app: Paste as new layer by default
This changes the default selection pasting behavior to be a new layer, rather than a floating selection. It also removes the "Paste as New Layer" submenu options as they are now redundant.
This commit is contained in:
parent
f6dd7f9b3a
commit
2c4f91f585
|
@ -168,14 +168,14 @@ static const GimpEnumActionEntry edit_paste_actions[] =
|
|||
{ "edit-paste", GIMP_ICON_EDIT_PASTE,
|
||||
NC_("edit-action", "_Paste"), "<primary>V",
|
||||
NC_("edit-action", "Paste the content of the clipboard"),
|
||||
GIMP_PASTE_TYPE_FLOATING, FALSE,
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING, FALSE,
|
||||
GIMP_HELP_EDIT_PASTE },
|
||||
|
||||
{ "edit-paste-in-place", GIMP_ICON_EDIT_PASTE,
|
||||
NC_("edit-action", "Paste In P_lace"), "<primary><alt>V",
|
||||
NC_("edit-action",
|
||||
"Paste the content of the clipboard at its original position"),
|
||||
GIMP_PASTE_TYPE_FLOATING_IN_PLACE, FALSE,
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE, FALSE,
|
||||
GIMP_HELP_EDIT_PASTE_IN_PLACE },
|
||||
|
||||
{ "edit-paste-into", GIMP_ICON_EDIT_PASTE_INTO,
|
||||
|
@ -191,21 +191,7 @@ static const GimpEnumActionEntry edit_paste_actions[] =
|
|||
"Paste the content of the clipboard into the current selection "
|
||||
"at its original position"),
|
||||
GIMP_PASTE_TYPE_FLOATING_INTO_IN_PLACE, FALSE,
|
||||
GIMP_HELP_EDIT_PASTE_INTO_IN_PLACE },
|
||||
|
||||
{ "edit-paste-as-new-layer", GIMP_ICON_EDIT_PASTE_AS_NEW,
|
||||
NC_("edit-action", "New _Layer"), NULL,
|
||||
NC_("edit-action", "Create a new layer from the content of the clipboard"),
|
||||
GIMP_PASTE_TYPE_NEW_LAYER, FALSE,
|
||||
GIMP_HELP_EDIT_PASTE_AS_NEW_LAYER },
|
||||
|
||||
{ "edit-paste-as-new-layer-in-place", GIMP_ICON_EDIT_PASTE_AS_NEW,
|
||||
NC_("edit-action", "New Layer In _Place"), NULL,
|
||||
NC_("edit-action",
|
||||
"Create a new layer from the content of the clipboard "
|
||||
"and place it at its original position"),
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE, FALSE,
|
||||
GIMP_HELP_EDIT_PASTE_AS_NEW_LAYER_IN_PLACE }
|
||||
GIMP_HELP_EDIT_PASTE_INTO_IN_PLACE }
|
||||
};
|
||||
|
||||
static const GimpEnumActionEntry edit_fill_actions[] =
|
||||
|
@ -369,8 +355,6 @@ edit_actions_update (GimpActionGroup *group,
|
|||
SET_SENSITIVE ("edit-paste-in-place", image);
|
||||
SET_SENSITIVE ("edit-paste-into", image);
|
||||
SET_SENSITIVE ("edit-paste-into-in-place", image);
|
||||
SET_SENSITIVE ("edit-paste-as-new-layer", image);
|
||||
SET_SENSITIVE ("edit-paste-as-new-layer-in-place", image);
|
||||
|
||||
SET_SENSITIVE ("edit-named-cut", have_writable && have_no_groups);
|
||||
SET_SENSITIVE ("edit-named-copy", drawables);
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
#include "core/gimpfilloptions.h"
|
||||
#include "core/gimplayer.h"
|
||||
#include "core/gimplayer-new.h"
|
||||
#include "core/gimplayermask.h"
|
||||
#include "core/gimpimage.h"
|
||||
#include "core/gimpimage-undo.h"
|
||||
|
||||
|
@ -340,8 +341,13 @@ edit_paste_cmd_callback (GimpAction *action,
|
|||
GVariant *value,
|
||||
gpointer data)
|
||||
{
|
||||
GimpImage *image;
|
||||
GimpDisplay *display = action_data_get_display (data);
|
||||
GimpPasteType paste_type = (GimpPasteType) g_variant_get_int32 (value);
|
||||
GimpPasteType converted_type;
|
||||
GList *drawables;
|
||||
|
||||
return_if_no_image (image, data);
|
||||
|
||||
if (paste_type == GIMP_PASTE_TYPE_FLOATING)
|
||||
{
|
||||
|
@ -368,6 +374,31 @@ edit_paste_cmd_callback (GimpAction *action,
|
|||
case GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE:
|
||||
edit_paste (display, paste_type, FALSE);
|
||||
break;
|
||||
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE:
|
||||
drawables = gimp_image_get_selected_drawables (image);
|
||||
|
||||
if (drawables &&
|
||||
(g_list_length (drawables) == 1) &&
|
||||
GIMP_IS_LAYER_MASK (drawables->data))
|
||||
{
|
||||
converted_type = (paste_type == GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING) ?
|
||||
GIMP_PASTE_TYPE_FLOATING :
|
||||
GIMP_PASTE_TYPE_FLOATING_IN_PLACE;
|
||||
|
||||
edit_paste (display, converted_type, TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
converted_type = (paste_type == GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING) ?
|
||||
GIMP_PASTE_TYPE_NEW_LAYER :
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE;
|
||||
|
||||
edit_paste (display, converted_type, FALSE);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -948,6 +948,8 @@ gimp_paste_type_get_type (void)
|
|||
{ GIMP_PASTE_TYPE_FLOATING_INTO_IN_PLACE, "GIMP_PASTE_TYPE_FLOATING_INTO_IN_PLACE", "floating-into-in-place" },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER, "GIMP_PASTE_TYPE_NEW_LAYER", "new-layer" },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE, "GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE", "new-layer-in-place" },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING, "GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING", "new-layer-or-floating" },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE, "GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE", "new-layer-or-floating-in-place" },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
|
||||
|
@ -959,6 +961,8 @@ gimp_paste_type_get_type (void)
|
|||
{ GIMP_PASTE_TYPE_FLOATING_INTO_IN_PLACE, "GIMP_PASTE_TYPE_FLOATING_INTO_IN_PLACE", NULL },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER, "GIMP_PASTE_TYPE_NEW_LAYER", NULL },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE, "GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE", NULL },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING, "GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING", NULL },
|
||||
{ GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE, "GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE", NULL },
|
||||
{ 0, NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -435,7 +435,9 @@ typedef enum /*< pdb-skip >*/
|
|||
GIMP_PASTE_TYPE_FLOATING_INTO,
|
||||
GIMP_PASTE_TYPE_FLOATING_INTO_IN_PLACE,
|
||||
GIMP_PASTE_TYPE_NEW_LAYER,
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE,
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING,
|
||||
GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE
|
||||
} GimpPasteType;
|
||||
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#include "gimpimage-undo.h"
|
||||
#include "gimplayer-floating-selection.h"
|
||||
#include "gimplayer-new.h"
|
||||
#include "gimplayermask.h"
|
||||
#include "gimplist.h"
|
||||
#include "gimppickable.h"
|
||||
#include "gimpselection.h"
|
||||
|
@ -266,11 +267,13 @@ gimp_edit_paste_is_in_place (GimpPasteType paste_type)
|
|||
case GIMP_PASTE_TYPE_FLOATING:
|
||||
case GIMP_PASTE_TYPE_FLOATING_INTO:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING:
|
||||
return FALSE;
|
||||
|
||||
case GIMP_PASTE_TYPE_FLOATING_IN_PLACE:
|
||||
case GIMP_PASTE_TYPE_FLOATING_INTO_IN_PLACE:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE:
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -278,7 +281,8 @@ gimp_edit_paste_is_in_place (GimpPasteType paste_type)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
gimp_edit_paste_is_floating (GimpPasteType paste_type)
|
||||
gimp_edit_paste_is_floating (GimpPasteType paste_type,
|
||||
GimpDrawable *drawable)
|
||||
{
|
||||
switch (paste_type)
|
||||
{
|
||||
|
@ -291,6 +295,13 @@ gimp_edit_paste_is_floating (GimpPasteType paste_type)
|
|||
case GIMP_PASTE_TYPE_NEW_LAYER:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE:
|
||||
return FALSE;
|
||||
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE:
|
||||
if (GIMP_IS_LAYER_MASK (drawable))
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
g_return_val_if_reached (FALSE);
|
||||
|
@ -321,7 +332,7 @@ gimp_edit_paste_get_layers (GimpImage *image,
|
|||
/* floating pastes always have the pasted-to drawable's format with
|
||||
* alpha; if drawable == NULL, user is pasting into an empty image
|
||||
*/
|
||||
if (drawable && gimp_edit_paste_is_floating (*paste_type))
|
||||
if (drawable && gimp_edit_paste_is_floating (*paste_type, drawable))
|
||||
floating_format = gimp_drawable_get_format_with_alpha (drawable);
|
||||
else
|
||||
floating_format = gimp_image_get_layer_format (image, TRUE);
|
||||
|
@ -606,6 +617,18 @@ gimp_edit_paste_paste (GimpImage *image,
|
|||
floating_sel_attach (iter->data, drawable);
|
||||
break;
|
||||
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_OR_FLOATING_IN_PLACE:
|
||||
if (GIMP_IS_LAYER_MASK (drawable))
|
||||
{
|
||||
if (! gimp_channel_is_empty (gimp_image_get_mask (image)))
|
||||
gimp_channel_clear (gimp_image_get_mask (image), NULL, TRUE);
|
||||
floating_sel_attach (iter->data, drawable);
|
||||
break;
|
||||
}
|
||||
|
||||
/* fall thru if not a layer mask */
|
||||
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER:
|
||||
case GIMP_PASTE_TYPE_NEW_LAYER_IN_PLACE:
|
||||
{
|
||||
|
@ -872,4 +895,4 @@ gimp_edit_extract (GimpImage *image,
|
|||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
}
|
|
@ -199,8 +199,6 @@
|
|||
<menuitem action="edit-paste-into-in-place" />
|
||||
</placeholder>
|
||||
<menu action="edit-paste-as-menu" name="Paste as">
|
||||
<menuitem action="edit-paste-as-new-layer" />
|
||||
<menuitem action="edit-paste-as-new-layer-in-place" />
|
||||
<menuitem action="edit-paste-as-new-image-short" />
|
||||
</menu>
|
||||
<menu action="edit-buffer-menu" name="Buffer">
|
||||
|
|
Loading…
Reference in New Issue