diff --git a/data/dbus/org.flameshot.Flameshot.xml b/data/dbus/org.flameshot.Flameshot.xml index 2a922026..619de8cd 100644 --- a/data/dbus/org.flameshot.Flameshot.xml +++ b/data/dbus/org.flameshot.Flameshot.xml @@ -5,6 +5,7 @@ + diff --git a/src/core/controller.cpp b/src/core/controller.cpp index 63e6a97f..28a4400f 100644 --- a/src/core/controller.cpp +++ b/src/core/controller.cpp @@ -140,6 +140,11 @@ void Controller::setCheckForUpdatesEnabled(const bool enabled) } } +QMap& Controller::requests() +{ + return m_requestMap; +} + void Controller::getLatestAvailableVersion() { // This features is required for MacOS and Windows user and for Linux users diff --git a/src/core/controller.h b/src/core/controller.h index d0c959a4..ca024686 100644 --- a/src/core/controller.h +++ b/src/core/controller.h @@ -42,6 +42,8 @@ public: void setCheckForUpdatesEnabled(const bool enabled); + QMap& requests(); + signals: void captureTaken(uint id, QPixmap p, QRect selection); void captureFailed(uint id); diff --git a/src/core/flameshotdbusadapter.cpp b/src/core/flameshotdbusadapter.cpp index a9509a4d..768c274e 100644 --- a/src/core/flameshotdbusadapter.cpp +++ b/src/core/flameshotdbusadapter.cpp @@ -28,12 +28,15 @@ FlameshotDBusAdapter::FlameshotDBusAdapter(QObject* parent) FlameshotDBusAdapter::~FlameshotDBusAdapter() {} -void FlameshotDBusAdapter::graphicCapture(QString path, int delay, uint id) +void FlameshotDBusAdapter::graphicCapture(QString path, + bool toClipboard, + int delay, + uint id) { CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, delay, path); - // if (toClipboard) { - // req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); - // } + if (toClipboard) { + req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + } req.setStaticID(id); Controller::getInstance()->requestCapture(req); } diff --git a/src/core/flameshotdbusadapter.h b/src/core/flameshotdbusadapter.h index 81fefeca..a136c06e 100644 --- a/src/core/flameshotdbusadapter.h +++ b/src/core/flameshotdbusadapter.h @@ -21,7 +21,10 @@ signals: void captureSaved(uint id, QString savePath); public slots: - Q_NOREPLY void graphicCapture(QString path, int delay, uint id); + Q_NOREPLY void graphicCapture(QString path, + bool toClipboard, + int delay, + uint id); Q_NOREPLY void fullScreen(QString path, bool toClipboard, int delay, diff --git a/src/main.cpp b/src/main.cpp index 32000989..427ddbda 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -247,9 +247,12 @@ int main(int argc, char* argv[]) parser.AddArgument(configArgument); auto helpOption = parser.addHelpOption(); auto versionOption = parser.addVersionOption(); - parser.AddOptions( - { pathOption, delayOption, rawImageOption, selectionOption }, - guiArgument); + parser.AddOptions({ pathOption, + clipboardOption, + delayOption, + rawImageOption, + selectionOption }, + guiArgument); parser.AddOptions({ screenNumberOption, clipboardOption, pathOption, @@ -289,10 +292,14 @@ int main(int argc, char* argv[]) } else if (parser.isSet(guiArgument)) { // GUI QString pathValue = parser.value(pathOption); int delay = parser.value(delayOption).toInt(); + bool toClipboard = parser.isSet(clipboardOption); bool isRaw = parser.isSet(rawImageOption); bool isSelection = parser.isSet(selectionOption); DBusUtils dbusUtils; CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, delay, pathValue); + if (toClipboard) { + req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + } uint id = req.id(); // Send message @@ -301,7 +308,7 @@ int main(int argc, char* argv[]) QStringLiteral("/"), QLatin1String(""), QStringLiteral("graphicCapture")); - m << pathValue << delay << id; + m << pathValue << toClipboard << delay << id; QDBusConnection sessionBus = QDBusConnection::sessionBus(); dbusUtils.checkDBusConnection(sessionBus); sessionBus.call(m); diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index 7c8cdfe5..d36583a8 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -1574,7 +1574,9 @@ void CaptureWidget::copyScreenshot() processPixmapWithTool(&m_context.screenshot, m_activeTool); } - ScreenshotSaver().saveToClipboard(pixmap()); + auto req = Controller::getInstance()->requests().find(m_id); + req->addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + close(); }