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); }