[graphics/krita] libs/ui/actions: Make Ctrl+C/X/V shortcut work with layers when there is nothing else to copy
Dmitry Kazakov
null at kde.org
Fri Aug 14 12:38:28 BST 2020
Git commit d402db85d8d0ee946369cae1875178cb08d8f2ec by Dmitry Kazakov.
Committed on 14/08/2020 at 11:38.
Pushed by dkazakov into branch 'master'.
Make Ctrl+C/X/V shortcut work with layers when there is nothing else to copy
The new priority list for copying/cutting:
1) Cut/Copy selected vector shapes
2) Cut/Copy the content of pixel selection
3) Cut/Copy the selected layer
If the user wants to Cut/Copy a layer when there is a selection active,
then he/she should use a special Layer->Cut/Copy Layer menu action instead
of the default shortcut.
BUG:411463
CC:kimageshop at kde.org
M +6 -0 libs/ui/actions/KisPasteActionFactories.cpp
M +13 -10 libs/ui/actions/kis_selection_action_factories.cpp
https://invent.kde.org/graphics/krita/commit/d402db85d8d0ee946369cae1875178cb08d8f2ec
diff --git a/libs/ui/actions/KisPasteActionFactories.cpp b/libs/ui/actions/KisPasteActionFactories.cpp
index 71b3725ff3..afe6218be5 100644
--- a/libs/ui/actions/KisPasteActionFactories.cpp
+++ b/libs/ui/actions/KisPasteActionFactories.cpp
@@ -35,6 +35,7 @@
#include "commands/kis_image_layer_add_command.h"
#include "KisTransformToolActivationCommand.h"
#include "kis_processing_applicator.h"
+#include "kis_node_manager.h"
#include <KoDocumentInfo.h>
#include <KoSvgPaste.h>
@@ -203,6 +204,11 @@ void KisPasteActionFactory::run(bool pasteAtCursorPosition, KisViewManager *view
KisImageSP image = view->image();
if (!image) return;
+ if (KisClipboard::instance()->hasLayers()) {
+ view->nodeManager()->pasteLayersFromClipboard();
+ return;
+ }
+
if (tryPasteShapes(pasteAtCursorPosition, view)) {
return;
}
diff --git a/libs/ui/actions/kis_selection_action_factories.cpp b/libs/ui/actions/kis_selection_action_factories.cpp
index df9450db35..fff1f3471f 100644
--- a/libs/ui/actions/kis_selection_action_factories.cpp
+++ b/libs/ui/actions/kis_selection_action_factories.cpp
@@ -63,7 +63,7 @@
#include "kis_image_animation_interface.h"
#include "kis_time_range.h"
#include "kis_keyframe_channel.h"
-
+#include "kis_node_manager.h"
#include <processing/fill_processing_visitor.h>
#include <kis_selection_tool_helper.h>
@@ -269,9 +269,12 @@ void KisCutCopyActionFactory::run(bool willCut, bool makeSharpClip, KisViewManag
KisImageSP image = view->image();
if (!image) return;
- bool haveShapesSelected = view->selectionManager()->haveShapesSelected();
+ const bool haveShapesSelected = view->selectionManager()->haveShapesSelected();
- if (haveShapesSelected) {
+ KisNodeSP node = view->activeNode();
+ KisSelectionSP selection = view->selection();
+
+ if (!makeSharpClip && haveShapesSelected) {
// XXX: "Add saving of XML data for Cut/Copy of shapes"
KisImageBarrierLocker locker(image);
@@ -280,13 +283,7 @@ void KisCutCopyActionFactory::run(bool willCut, bool makeSharpClip, KisViewManag
} else {
view->canvasBase()->toolProxy()->copy();
}
- } else {
- KisNodeSP node = view->activeNode();
- if (!node) return;
-
- KisSelectionSP selection = view->selection();
- if (selection.isNull()) return;
-
+ } else if (node && selection) {
{
KisImageBarrierLocker locker(image);
KisPaintDeviceSP dev = node->paintDevice();
@@ -375,6 +372,12 @@ void KisCutCopyActionFactory::run(bool willCut, bool makeSharpClip, KisViewManag
KisOperationConfiguration config(id());
config.setProperty("will-cut", willCut);
endAction(ap, config.toXML());
+ } else if (!makeSharpClip) {
+ if (willCut) {
+ view->nodeManager()->cutLayersToClipboard();
+ } else {
+ view->nodeManager()->copyLayersToClipboard();
+ }
}
}
More information about the kimageshop
mailing list