diff --git a/dbus/org.kde.Spectacle.xml b/dbus/org.kde.Spectacle.xml
--- a/dbus/org.kde.Spectacle.xml
+++ b/dbus/org.kde.Spectacle.xml
@@ -90,6 +90,11 @@
Whether to include an image of the mouse pointer.
+
+
+ Whether to copy the image to the clipboard or save to file.
+
+
Takes a screenshot of a rectangular region.
diff --git a/desktop/MigrateShortcuts.cpp b/desktop/MigrateShortcuts.cpp
--- a/desktop/MigrateShortcuts.cpp
+++ b/desktop/MigrateShortcuts.cpp
@@ -95,6 +95,12 @@
action->setObjectName(QStringLiteral("RectangularRegionScreenShot"));
shortCutActions.addAction(action->objectName(), action);
}
+ {
+ QAction *action = new QAction(i18n("Capture Rectangular Region to Clipboard"));
+ action->setObjectName(QStringLiteral("RectangularRegionClipboardScreenShot"));
+ shortCutActions.addAction(action->objectName(), action);
+ }
+
QAction* openAction = shortCutActions.action(QStringLiteral("_launch"));
KGlobalAccel::self()->setDefaultShortcut(openAction, {Qt::Key_Print});
QAction* fullScreenAction = shortCutActions.action(QStringLiteral("FullScreenScreenShot"));
@@ -104,6 +110,8 @@
KGlobalAccel::self()->setDefaultShortcut(activeWindowAction, {Qt::META + Qt::Key_Print});
QAction* regionAction = shortCutActions.action(QStringLiteral("RectangularRegionScreenShot"));
KGlobalAccel::self()->setDefaultShortcut(regionAction, {Qt::META + Qt::SHIFT + Qt::Key_Print});
+ QAction* regionClipboardAction = shortCutActions.action(QStringLiteral("RectangularRegionClipboardScreenShot"));
+ KGlobalAccel::self()->setDefaultShortcut(regionClipboardAction, {Qt::META + Qt::CTRL + Qt::SHIFT + Qt::Key_Print});
// Finally reinstate the old shortcuts
if (found_spectacle) {
KGlobalAccel::self()->setShortcut(openAction, launchKey, KGlobalAccel::NoAutoloading);
diff --git a/desktop/org.kde.spectacle.desktop.cmake b/desktop/org.kde.spectacle.desktop.cmake
--- a/desktop/org.kde.spectacle.desktop.cmake
+++ b/desktop/org.kde.spectacle.desktop.cmake
@@ -143,7 +143,7 @@
Type=Application
Terminal=false
StartupNotify=false
-Actions=FullScreenScreenShot;CurrentMonitorScreenShot;ActiveWindowScreenShot;RectangularRegionScreenShot;
+Actions=FullScreenScreenShot;CurrentMonitorScreenShot;ActiveWindowScreenShot;RectangularRegionScreenShot;RectangularRegionClipboardScreenShot;
X-DBUS-StartupType=Multi
X-DBUS-ServiceName=org.kde.Spectacle
X-KDE-Shortcuts=Print
@@ -317,5 +317,11 @@
Name[x-test]=xxCapture Rectangular Regionxx
Name[zh_CN]=截取矩形区域
Name[zh_TW]=擷取矩形區域
-Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / RectangularRegion true
+Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / RectangularRegion true false
X-KDE-Shortcuts=Meta+Shift+Print
+
+[Desktop Action RectangularRegionClipboardScreenShot]
+Name=Capture Rectangular Region to Clipboard
+Exec=@QtBinariesDir@/qdbus org.kde.Spectacle / RectangularRegion true true
+X-KDE-Shortcuts=Meta+Ctrl+Shift+Print
+
diff --git a/src/ShortcutActions.h b/src/ShortcutActions.h
--- a/src/ShortcutActions.h
+++ b/src/ShortcutActions.h
@@ -34,6 +34,7 @@
QAction* currentScreenAction() const;
QAction* activeWindowAction() const;
QAction* regionAction() const;
+ QAction* regionClipboardAction() const;
private:
ShortcutActions();
diff --git a/src/ShortcutActions.cpp b/src/ShortcutActions.cpp
--- a/src/ShortcutActions.cpp
+++ b/src/ShortcutActions.cpp
@@ -63,6 +63,12 @@
action->setObjectName(QStringLiteral("RectangularRegionScreenShot"));
mActions.addAction(action->objectName(), action);
}
+ {
+ QAction *action = new QAction(i18n("Capture Rectangular Region to Clipboard"));
+ action->setObjectName(QStringLiteral("RectangularRegionClipboardScreenShot"));
+ mActions.addAction(action->objectName(), action);
+ }
+
}
KActionCollection* ShortcutActions::shortcutActions()
@@ -99,3 +105,8 @@
{
return mActions.action(4);
}
+
+QAction* ShortcutActions::regionClipboardAction() const
+{
+ return mActions.action(5);
+}
diff --git a/src/SpectacleCore.h b/src/SpectacleCore.h
--- a/src/SpectacleCore.h
+++ b/src/SpectacleCore.h
@@ -80,6 +80,7 @@
void doStartDragAndDrop();
void doNotify(const QUrl &theSavedAt);
void doCopyPath(const QUrl &savedAt);
+ void updateCopyTopClipboard(bool theCopyToClipboard);
private:
diff --git a/src/SpectacleCore.cpp b/src/SpectacleCore.cpp
--- a/src/SpectacleCore.cpp
+++ b/src/SpectacleCore.cpp
@@ -140,6 +140,8 @@
KGlobalAccel::self()->setGlobalShortcut(ShortcutActions::self()->regionAction(), Qt::META + Qt::SHIFT + Qt::Key_Print);
+ KGlobalAccel::self()->setGlobalShortcut(ShortcutActions::self()->regionClipboardAction(), Qt::META + Qt::CTRL + Qt::SHIFT + Qt::Key_Print);
+
KGlobalAccel::self()->setGlobalShortcut(ShortcutActions::self()->currentScreenAction(), QList());
}
@@ -437,3 +439,8 @@
});
}
}
+
+void SpectacleCore::updateCopyTopClipboard(bool theCopyToClipboard)
+{
+ mCopyToClipboard = theCopyToClipboard;
+}
diff --git a/src/SpectacleDBusAdapter.h b/src/SpectacleDBusAdapter.h
--- a/src/SpectacleDBusAdapter.h
+++ b/src/SpectacleDBusAdapter.h
@@ -48,6 +48,7 @@
" \n"
" \n"
" \n"
+ " \n"
" \n"
" \n"
" \n"
@@ -72,7 +73,7 @@
Q_NOREPLY void CurrentScreen(bool includeMousePointer);
Q_NOREPLY void ActiveWindow(bool includeWindowDecorations, bool includeMousePointer);
Q_NOREPLY void WindowUnderCursor(bool includeWindowDecorations, bool includeMousePointer);
- Q_NOREPLY void RectangularRegion(bool includeMousePointer);
+ Q_NOREPLY void RectangularRegion(bool includeMousePointer, bool theCopyToClipboard);
Q_SIGNALS:
diff --git a/src/SpectacleDBusAdapter.cpp b/src/SpectacleDBusAdapter.cpp
--- a/src/SpectacleDBusAdapter.cpp
+++ b/src/SpectacleDBusAdapter.cpp
@@ -58,7 +58,8 @@
parent()->takeNewScreenshot(Spectacle::CaptureMode::WindowUnderCursor, 0, includeMousePointer, includeWindowDecorations);
}
-Q_NOREPLY void SpectacleDBusAdapter::RectangularRegion(bool includeMousePointer)
+Q_NOREPLY void SpectacleDBusAdapter::RectangularRegion(bool includeMousePointer, bool theCopyToClipboard)
{
+ parent()->updateCopyTopClipboard(theCopyToClipboard);
parent()->takeNewScreenshot(Spectacle::CaptureMode::RectangularRegion, 0, includeMousePointer, false);
}