From a96c3302e9cdd501b7c801ed09b115112eab37e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Tue, 5 Oct 2021 01:47:15 +0200 Subject: [PATCH 01/22] Add accept tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haris Gušić --- src/tools/CMakeLists.txt | 1 + src/tools/accept/accepttool.cpp | 68 +++++++++++++++++++++++ src/tools/accept/accepttool.h | 27 +++++++++ src/tools/capturetool.h | 1 + src/tools/toolfactory.cpp | 2 + src/utils/confighandler.cpp | 1 + src/widgets/capture/capturetoolbutton.cpp | 12 ++-- 7 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 src/tools/accept/accepttool.cpp create mode 100644 src/tools/accept/accepttool.h diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt index b99671f0..0524076c 100644 --- a/src/tools/CMakeLists.txt +++ b/src/tools/CMakeLists.txt @@ -37,6 +37,7 @@ target_sources( target_sources(flameshot PRIVATE rectangle/rectangletool.h rectangle/rectangletool.cpp) target_sources(flameshot PRIVATE redo/redotool.h redo/redotool.cpp) target_sources(flameshot PRIVATE save/savetool.h save/savetool.cpp) +target_sources(flameshot PRIVATE accept/accepttool.h accept/accepttool.cpp) target_sources(flameshot PRIVATE invert/inverttool.h invert/inverttool.cpp) target_sources(flameshot PRIVATE selection/selectiontool.h selection/selectiontool.cpp) target_sources(flameshot PRIVATE sizeindicator/sizeindicatortool.h sizeindicator/sizeindicatortool.cpp) diff --git a/src/tools/accept/accepttool.cpp b/src/tools/accept/accepttool.cpp new file mode 100644 index 00000000..d307353a --- /dev/null +++ b/src/tools/accept/accepttool.cpp @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors + +#include "accepttool.h" +#include "src/utils/screenshotsaver.h" +#include +#include +#include +#if defined(Q_OS_MACOS) +#include "src/widgets/capture/capturewidget.h" +#include +#include +#endif + +AcceptTool::AcceptTool(QObject* parent) + : AbstractActionTool(parent) +{} + +bool AcceptTool::closeOnButtonPressed() const +{ + return true; +} + +QIcon AcceptTool::icon(const QColor& background, bool inEditor) const +{ + Q_UNUSED(inEditor) + // TODO add new icon + return qApp->style()->standardIcon(QStyle::SP_DialogApplyButton); +} + +QString AcceptTool::name() const +{ + return tr("Accept"); +} + +CaptureTool::Type AcceptTool::type() const +{ + return CaptureTool::TYPE_ACCEPT; +} + +QString AcceptTool::description() const +{ + // TODO better message + return tr("Accept the capture"); +} + +CaptureTool* AcceptTool::copy(QObject* parent) +{ + return new AcceptTool(parent); +} + +void AcceptTool::pressed(const CaptureContext&) +{ +#if defined(Q_OS_MACOS) + for (QWidget* widget : qApp->topLevelWidgets()) { + QString className(widget->metaObject()->className()); + if (0 == + className.compare(CaptureWidget::staticMetaObject.className())) { + widget->showNormal(); + widget->hide(); + break; + } + } +#endif + emit requestAction(REQ_CLEAR_SELECTION); + emit requestAction(REQ_CAPTURE_DONE_OK); + emit requestAction(REQ_HIDE_GUI); +} diff --git a/src/tools/accept/accepttool.h b/src/tools/accept/accepttool.h new file mode 100644 index 00000000..a8e66059 --- /dev/null +++ b/src/tools/accept/accepttool.h @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors + +#pragma once + +#include "abstractactiontool.h" + +class AcceptTool : public AbstractActionTool +{ + Q_OBJECT +public: + explicit AcceptTool(QObject* parent = nullptr); + + bool closeOnButtonPressed() const override; + + QIcon icon(const QColor& background, bool inEditor) const override; + QString name() const override; + QString description() const override; + + CaptureTool* copy(QObject* parent = nullptr) override; + +protected: + CaptureTool::Type type() const override; + +public slots: + void pressed(const CaptureContext& context) override; +}; diff --git a/src/tools/capturetool.h b/src/tools/capturetool.h index 19871ac8..db6500b3 100644 --- a/src/tools/capturetool.h +++ b/src/tools/capturetool.h @@ -47,6 +47,7 @@ public: TYPE_SIZEINCREASE = 20, TYPE_SIZEDECREASE = 21, TYPE_INVERT = 22, + TYPE_ACCEPT = 23, }; Q_ENUM(Type); diff --git a/src/tools/toolfactory.cpp b/src/tools/toolfactory.cpp index 3f837d84..c442aca2 100644 --- a/src/tools/toolfactory.cpp +++ b/src/tools/toolfactory.cpp @@ -2,6 +2,7 @@ // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "toolfactory.h" +#include "accept/accepttool.h" #include "arrow/arrowtool.h" #include "circle/circletool.h" #include "circlecount/circlecounttool.h" @@ -63,6 +64,7 @@ CaptureTool* ToolFactory::CreateTool(CaptureTool::Type t, QObject* parent) if_TYPE_return_TOOL(TYPE_SIZEINCREASE, SizeIncreaseTool); if_TYPE_return_TOOL(TYPE_SIZEDECREASE, SizeDecreaseTool); if_TYPE_return_TOOL(TYPE_INVERT, InvertTool); + if_TYPE_return_TOOL(TYPE_ACCEPT, AcceptTool); default: return nullptr; } diff --git a/src/utils/confighandler.cpp b/src/utils/confighandler.cpp index e45d2486..0836eb40 100644 --- a/src/utils/confighandler.cpp +++ b/src/utils/confighandler.cpp @@ -126,6 +126,7 @@ static QMap> recognizedShortcuts = { SHORTCUT("TYPE_UNDO" , "Ctrl+Z" ), SHORTCUT("TYPE_COPY" , "Ctrl+C" ), SHORTCUT("TYPE_SAVE" , "Ctrl+S" ), + SHORTCUT("TYPE_ACCEPT" , "Return" ), SHORTCUT("TYPE_EXIT" , "Ctrl+Q" ), SHORTCUT("TYPE_IMAGEUPLOADER" , "Ctrl+U" ), #if !defined(Q_OS_MACOS) diff --git a/src/widgets/capture/capturetoolbutton.cpp b/src/widgets/capture/capturetoolbutton.cpp index a54d8595..8dc4f9ca 100644 --- a/src/widgets/capture/capturetoolbutton.cpp +++ b/src/widgets/capture/capturetoolbutton.cpp @@ -141,15 +141,16 @@ static std::map buttonTypeOrder { CaptureTool::TYPE_MOVESELECTION, 12 }, { CaptureTool::TYPE_UNDO, 13 }, { CaptureTool::TYPE_REDO, 14 }, { CaptureTool::TYPE_COPY, 15 }, { CaptureTool::TYPE_SAVE, 16 }, { CaptureTool::TYPE_IMAGEUPLOADER, 17 }, + { CaptureTool::TYPE_ACCEPT, 18 }, #if !defined(Q_OS_MACOS) - { CaptureTool::TYPE_OPEN_APP, 18 }, { CaptureTool::TYPE_EXIT, 19 }, - { CaptureTool::TYPE_PIN, 20 }, + { CaptureTool::TYPE_OPEN_APP, 19 }, { CaptureTool::TYPE_EXIT, 20 }, + { CaptureTool::TYPE_PIN, 21 }, #else - { CaptureTool::TYPE_EXIT, 18 }, { CaptureTool::TYPE_PIN, 19 }, + { CaptureTool::TYPE_EXIT, 19 }, { CaptureTool::TYPE_PIN, 20 }, #endif - { CaptureTool::TYPE_SIZEINCREASE, 21 }, - { CaptureTool::TYPE_SIZEDECREASE, 22 }, + { CaptureTool::TYPE_SIZEINCREASE, 22 }, + { CaptureTool::TYPE_SIZEDECREASE, 23 }, }; int CaptureToolButton::getPriorityByButton(CaptureTool::Type b) @@ -185,4 +186,5 @@ QList CaptureToolButton::iterableButtonTypes = { CaptureTool::TYPE_CIRCLECOUNT, CaptureTool::TYPE_SIZEINCREASE, CaptureTool::TYPE_SIZEDECREASE, + CaptureTool::TYPE_ACCEPT, }; From 85352ff72f328fed9c45fb783e2da82caf9c2589 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Tue, 5 Oct 2021 17:06:46 +0200 Subject: [PATCH 02/22] Add accept button to CaptureWidget MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haris Gušić --- src/core/capturerequest.cpp | 5 +++++ src/core/capturerequest.h | 1 + src/widgets/capture/capturewidget.cpp | 18 ++++++++++++++++++ src/widgets/capture/capturewidget.h | 1 + 4 files changed, 25 insertions(+) diff --git a/src/core/capturerequest.cpp b/src/core/capturerequest.cpp index f5874b2e..8a2a16f0 100644 --- a/src/core/capturerequest.cpp +++ b/src/core/capturerequest.cpp @@ -62,6 +62,11 @@ QVariant CaptureRequest::data() const return m_data; } +CaptureRequest::ExportTask CaptureRequest::tasks() const +{ + return m_tasks; +} + void CaptureRequest::addTask(CaptureRequest::ExportTask task) { m_tasks |= task; diff --git a/src/core/capturerequest.h b/src/core/capturerequest.h index 418036b1..22c47280 100644 --- a/src/core/capturerequest.h +++ b/src/core/capturerequest.h @@ -37,6 +37,7 @@ public: QString path() const; QVariant data() const; CaptureMode captureMode() const; + ExportTask tasks() const; void addTask(ExportTask task); void exportCapture(const QPixmap& p); diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index 1c5bfa4c..d415211a 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -243,6 +243,10 @@ void CaptureWidget::initButtons() { auto allButtonTypes = CaptureToolButton::getIterableButtonTypes(); auto visibleButtonTypes = m_config.buttons(); + auto& request = *Controller::getInstance()->requests().find(m_id); + if (request.tasks() == CaptureRequest::NO_TASK) { + visibleButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); + } QVector vectorButtons; // Add all buttons but hide those that were disabled in the Interface config @@ -262,6 +266,7 @@ void CaptureWidget::initButtons() case CaptureTool::TYPE_EXIT: case CaptureTool::TYPE_SAVE: case CaptureTool::TYPE_COPY: + case CaptureTool::TYPE_ACCEPT: case CaptureTool::TYPE_UNDO: case CaptureTool::TYPE_IMAGEUPLOADER: case CaptureTool::TYPE_REDO: @@ -1179,6 +1184,13 @@ void CaptureWidget::initShortcuts() this, SLOT(copyScreenshot())); + auto& request = *Controller::getInstance()->requests().find(m_id); + if (request.tasks() != CaptureRequest::NO_TASK) { + new QShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_ACCEPT")), + this, + SLOT(acceptCapture())); + } + new QShortcut( QKeySequence(ConfigHandler().shortcut("TYPE_UNDO")), this, SLOT(undo())); @@ -1457,6 +1469,12 @@ void CaptureWidget::saveScreenshot() close(); } +void CaptureWidget::acceptCapture() +{ + m_captureDone = true; + close(); +} + void CaptureWidget::setCaptureToolObjects( const CaptureToolObjects& captureToolObjects) { diff --git a/src/widgets/capture/capturewidget.h b/src/widgets/capture/capturewidget.h index 4b9691e4..7af263e3 100644 --- a/src/widgets/capture/capturewidget.h +++ b/src/widgets/capture/capturewidget.h @@ -65,6 +65,7 @@ private slots: // TODO replace with tools void copyScreenshot(); void saveScreenshot(); + void acceptCapture(); void undo(); void redo(); void togglePanel(); From 60d2d8c33d30c3a45f3e2f5e961a77e78c434a41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Wed, 6 Oct 2021 14:53:50 +0200 Subject: [PATCH 03/22] Stop special treatment of some buttons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haris Gušić --- src/tools/accept/accepttool.cpp | 3 +- src/tools/capturecontext.h | 1 + src/tools/capturetool.h | 2 - src/tools/copy/copytool.cpp | 2 +- src/tools/imgur/imguruploadertool.cpp | 2 +- src/tools/launcher/applaunchertool.cpp | 1 + src/tools/pin/pintool.cpp | 2 +- src/tools/save/savetool.cpp | 4 +- src/widgets/capture/capturewidget.cpp | 86 ++++---------------------- src/widgets/capture/capturewidget.h | 5 +- 10 files changed, 23 insertions(+), 85 deletions(-) diff --git a/src/tools/accept/accepttool.cpp b/src/tools/accept/accepttool.cpp index d307353a..38160c61 100644 --- a/src/tools/accept/accepttool.cpp +++ b/src/tools/accept/accepttool.cpp @@ -62,7 +62,6 @@ void AcceptTool::pressed(const CaptureContext&) } } #endif - emit requestAction(REQ_CLEAR_SELECTION); emit requestAction(REQ_CAPTURE_DONE_OK); - emit requestAction(REQ_HIDE_GUI); + emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/capturecontext.h b/src/tools/capturecontext.h index c5e27dc0..9799cc23 100644 --- a/src/tools/capturecontext.h +++ b/src/tools/capturecontext.h @@ -3,6 +3,7 @@ #pragma once +#include "capturerequest.h" #include #include #include diff --git a/src/tools/capturetool.h b/src/tools/capturetool.h index db6500b3..a384dff6 100644 --- a/src/tools/capturetool.h +++ b/src/tools/capturetool.h @@ -64,8 +64,6 @@ public: REQ_REDO_MODIFICATION, // Open the color picker under the mouse. REQ_SHOW_COLOR_PICKER, - // Notify to redraw screenshot with tools without object selection. - REQ_CLEAR_SELECTION, // Notify is the screenshot has been saved. REQ_CAPTURE_DONE_OK, // Instance this->widget()'s widget inside the editor under the mouse. diff --git a/src/tools/copy/copytool.cpp b/src/tools/copy/copytool.cpp index 99c9b073..d5e877b4 100644 --- a/src/tools/copy/copytool.cpp +++ b/src/tools/copy/copytool.cpp @@ -41,7 +41,7 @@ CaptureTool* CopyTool::copy(QObject* parent) void CopyTool::pressed(const CaptureContext& context) { - emit requestAction(REQ_CLEAR_SELECTION); emit requestAction(REQ_CAPTURE_DONE_OK); ScreenshotSaver().saveToClipboard(context.selectedScreenshotArea()); + emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/imgur/imguruploadertool.cpp b/src/tools/imgur/imguruploadertool.cpp index b627fde0..97283b62 100644 --- a/src/tools/imgur/imguruploadertool.cpp +++ b/src/tools/imgur/imguruploadertool.cpp @@ -46,8 +46,8 @@ CaptureTool* ImgurUploaderTool::copy(QObject* parent) void ImgurUploaderTool::pressed(const CaptureContext& context) { - emit requestAction(REQ_CLEAR_SELECTION); capture = context.selectedScreenshotArea(); emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_ADD_EXTERNAL_WIDGETS); + emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/launcher/applaunchertool.cpp b/src/tools/launcher/applaunchertool.cpp index 29f3f7b0..dca82550 100644 --- a/src/tools/launcher/applaunchertool.cpp +++ b/src/tools/launcher/applaunchertool.cpp @@ -48,4 +48,5 @@ void AppLauncher::pressed(const CaptureContext& context) capture = context.selectedScreenshotArea(); emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_ADD_EXTERNAL_WIDGETS); + emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/pin/pintool.cpp b/src/tools/pin/pintool.cpp index 0b1a79a0..3e312a2d 100644 --- a/src/tools/pin/pintool.cpp +++ b/src/tools/pin/pintool.cpp @@ -72,10 +72,10 @@ CaptureTool* PinTool::copy(QObject* parent) void PinTool::pressed(const CaptureContext& context) { - emit requestAction(REQ_CLEAR_SELECTION); emit requestAction(REQ_CAPTURE_DONE_OK); m_geometry = context.selection; m_geometry.setTopLeft(m_geometry.topLeft() + context.widgetOffset); m_pixmap = context.selectedScreenshotArea(); emit requestAction(REQ_ADD_EXTERNAL_WIDGETS); + emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/save/savetool.cpp b/src/tools/save/savetool.cpp index 13d29440..4787bc56 100644 --- a/src/tools/save/savetool.cpp +++ b/src/tools/save/savetool.cpp @@ -3,6 +3,7 @@ #include "savetool.h" #include "src/utils/screenshotsaver.h" +#include // TODO rm #include #if defined(Q_OS_MACOS) #include "src/widgets/capture/capturewidget.h" @@ -57,9 +58,9 @@ void SaveTool::pressed(const CaptureContext& context) } } #endif - emit requestAction(REQ_CLEAR_SELECTION); if (context.savePath.isEmpty()) { emit requestAction(REQ_HIDE_GUI); + qApp->processEvents(); bool ok = ScreenshotSaver().saveToFilesystemGUI( context.selectedScreenshotArea()); if (ok) { @@ -72,4 +73,5 @@ void SaveTool::pressed(const CaptureContext& context) emit requestAction(REQ_CAPTURE_DONE_OK); } } + emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index d415211a..71a65aab 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -10,6 +10,7 @@ // #include "capturewidget.h" +#include "copytool.h" #include "src/core/controller.h" #include "src/core/qguiappcurrentscreen.h" #include "src/tools/toolfactory.h" @@ -63,6 +64,7 @@ CaptureWidget::CaptureWidget(uint id, , m_toolWidget(nullptr) , m_colorPicker(nullptr) , m_id(id) + , m_request(&*Controller::getInstance()->requests().find(id)) , m_lastMouseWheel(0) , m_updateNotificationWidget(nullptr) , m_activeToolIsMoved(false) @@ -243,8 +245,8 @@ void CaptureWidget::initButtons() { auto allButtonTypes = CaptureToolButton::getIterableButtonTypes(); auto visibleButtonTypes = m_config.buttons(); - auto& request = *Controller::getInstance()->requests().find(m_id); - if (request.tasks() == CaptureRequest::NO_TASK) { + if (m_request->tasks() == CaptureRequest::NO_TASK) { + allButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); visibleButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); } QVector vectorButtons; @@ -263,10 +265,6 @@ void CaptureWidget::initButtons() makeChild(b); switch (t) { - case CaptureTool::TYPE_EXIT: - case CaptureTool::TYPE_SAVE: - case CaptureTool::TYPE_COPY: - case CaptureTool::TYPE_ACCEPT: case CaptureTool::TYPE_UNDO: case CaptureTool::TYPE_IMAGEUPLOADER: case CaptureTool::TYPE_REDO: @@ -314,6 +312,7 @@ QPixmap CaptureWidget::pixmap() bool CaptureWidget::commitCurrentTool() { if (m_activeTool) { + processPixmapWithTool(&m_context.screenshot, m_activeTool); if (m_activeTool->isValid() && !m_activeTool->editMode() && m_toolWidget) { pushToolToStack(); @@ -566,7 +565,13 @@ void CaptureWidget::mouseDoubleClickEvent(QMouseEvent* event) m_panel->setToolWidget(m_activeTool->configurationWidget()); } } else if (m_selection->geometry().contains(event->pos())) { - copyScreenshot(); + CopyTool copyTool; + connect(©Tool, + &CopyTool::requestAction, + this, + &CaptureWidget::handleToolSignal); + copyTool.pressed(m_context); + qApp->processEvents(QEventLoop::ExcludeUserInputEvents); } } @@ -950,6 +955,7 @@ void CaptureWidget::setState(CaptureToolButton* b) return; } + commitCurrentTool(); if (m_toolWidget && m_activeTool) { if (m_activeTool->isValid()) { pushToolToStack(); @@ -966,11 +972,6 @@ void CaptureWidget::setState(CaptureToolButton* b) m_activeTool = backup; } - // Only close activated from button - if (b->tool()->closeOnButtonPressed()) { - close(); - } - if (b->tool()->isSelectable()) { if (m_activeButton != b) { QWidget* confW = b->tool()->configurationWidget(); @@ -1022,12 +1023,6 @@ void CaptureWidget::handleToolSignal(CaptureTool::Request r) case CaptureTool::REQ_SHOW_COLOR_PICKER: // TODO break; - case CaptureTool::REQ_CLEAR_SELECTION: - if (m_panel->activeLayerIndex() >= 0) { - m_panel->setActiveLayer(-1); - drawToolsData(); - } - break; case CaptureTool::REQ_CAPTURE_DONE_OK: m_captureDone = true; break; @@ -1173,24 +1168,6 @@ void CaptureWidget::setDrawThickness(int t) void CaptureWidget::initShortcuts() { - new QShortcut( - QKeySequence(ConfigHandler().shortcut("TYPE_EXIT")), this, SLOT(close())); - - new QShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_SAVE")), - this, - SLOT(saveScreenshot())); - - new QShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_COPY")), - this, - SLOT(copyScreenshot())); - - auto& request = *Controller::getInstance()->requests().find(m_id); - if (request.tasks() != CaptureRequest::NO_TASK) { - new QShortcut(QKeySequence(ConfigHandler().shortcut("TYPE_ACCEPT")), - this, - SLOT(acceptCapture())); - } - new QShortcut( QKeySequence(ConfigHandler().shortcut("TYPE_UNDO")), this, SLOT(undo())); @@ -1438,43 +1415,6 @@ void CaptureWidget::childLeave() updateToolMousePreview(activeButtonTool()); } -void CaptureWidget::copyScreenshot() -{ - m_captureDone = true; - if (m_activeTool != nullptr) { - processPixmapWithTool(&m_context.screenshot, m_activeTool); - } - - auto req = Controller::getInstance()->requests().find(m_id); - req->addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); - - close(); -} - -void CaptureWidget::saveScreenshot() -{ -#if defined(Q_OS_MACOS) - showNormal(); -#endif - m_captureDone = true; - if (m_activeTool != nullptr) { - processPixmapWithTool(&m_context.screenshot, m_activeTool); - } - hide(); - if (m_context.savePath.isEmpty()) { - ScreenshotSaver(m_id).saveToFilesystemGUI(pixmap()); - } else { - ScreenshotSaver(m_id).saveToFilesystem(pixmap(), m_context.savePath); - } - close(); -} - -void CaptureWidget::acceptCapture() -{ - m_captureDone = true; - close(); -} - void CaptureWidget::setCaptureToolObjects( const CaptureToolObjects& captureToolObjects) { diff --git a/src/widgets/capture/capturewidget.h b/src/widgets/capture/capturewidget.h index 7af263e3..3f40e736 100644 --- a/src/widgets/capture/capturewidget.h +++ b/src/widgets/capture/capturewidget.h @@ -62,10 +62,6 @@ signals: void thicknessChanged(int thickness); private slots: - // TODO replace with tools - void copyScreenshot(); - void saveScreenshot(); - void acceptCapture(); void undo(); void redo(); void togglePanel(); @@ -178,6 +174,7 @@ private: SelectionWidget::SideType m_mouseOverHandle; uint m_id; + CaptureRequest* m_request; CaptureToolObjects m_captureToolObjects; CaptureToolObjects m_captureToolObjectsBackup; From 151f6e35b45a8295420993c1cb8bdc5cf202d25a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Wed, 6 Oct 2021 15:22:07 +0200 Subject: [PATCH 04/22] Refactor CaptureRequest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haris Gušić --- src/core/capturerequest.cpp | 16 ++++++++++++---- src/core/capturerequest.h | 6 +++--- src/core/flameshotdbusadapter.cpp | 21 ++++++++++++++------- src/main.cpp | 15 +++++++-------- 4 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/core/capturerequest.cpp b/src/core/capturerequest.cpp index 8a2a16f0..29393d3d 100644 --- a/src/core/capturerequest.cpp +++ b/src/core/capturerequest.cpp @@ -5,15 +5,14 @@ #include "src/utils/screenshotsaver.h" #include #include +#include CaptureRequest::CaptureRequest(CaptureRequest::CaptureMode mode, const uint delay, - const QString& path, const QVariant& data, CaptureRequest::ExportTask tasks) : m_mode(mode) , m_delay(delay) - , m_path(path) , m_tasks(tasks) , m_data(data) , m_forcedID(false) @@ -69,12 +68,21 @@ CaptureRequest::ExportTask CaptureRequest::tasks() const void CaptureRequest::addTask(CaptureRequest::ExportTask task) { + if (task == SAVE_TASK) { + throw std::logic_error("SAVE_TASK must be added using addSaveTask"); + } m_tasks |= task; } +void CaptureRequest::addSaveTask(const QString& path) +{ + m_tasks |= SAVE_TASK; + m_path = path; +} + void CaptureRequest::exportCapture(const QPixmap& p) { - if ((m_tasks & ExportTask::FILESYSTEM_SAVE_TASK) != ExportTask::NO_TASK) { + if ((m_tasks & ExportTask::SAVE_TASK) != ExportTask::NO_TASK) { if (m_path.isEmpty()) { ScreenshotSaver(m_id).saveToFilesystemGUI(p); } else { @@ -82,7 +90,7 @@ void CaptureRequest::exportCapture(const QPixmap& p) } } - if ((m_tasks & ExportTask::CLIPBOARD_SAVE_TASK) != ExportTask::NO_TASK) { + if ((m_tasks & ExportTask::COPY_TASK) != ExportTask::NO_TASK) { ScreenshotSaver().saveToClipboard(p); } } diff --git a/src/core/capturerequest.h b/src/core/capturerequest.h index 22c47280..c738a2b1 100644 --- a/src/core/capturerequest.h +++ b/src/core/capturerequest.h @@ -20,13 +20,12 @@ public: enum ExportTask { NO_TASK = 0, - CLIPBOARD_SAVE_TASK = 1, - FILESYSTEM_SAVE_TASK = 2, + COPY_TASK = 1, + SAVE_TASK = 2, }; CaptureRequest(CaptureMode mode, const uint delay = 0, - const QString& path = QLatin1String(""), const QVariant& data = QVariant(), ExportTask tasks = NO_TASK); @@ -40,6 +39,7 @@ public: ExportTask tasks() const; void addTask(ExportTask task); + void addSaveTask(const QString& path); void exportCapture(const QPixmap& p); private: diff --git a/src/core/flameshotdbusadapter.cpp b/src/core/flameshotdbusadapter.cpp index 1643b687..8871a1d5 100644 --- a/src/core/flameshotdbusadapter.cpp +++ b/src/core/flameshotdbusadapter.cpp @@ -33,9 +33,12 @@ void FlameshotDBusAdapter::graphicCapture(QString path, int delay, uint id) { - CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, delay, path); + CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, delay); if (toClipboard) { - req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + req.addTask(CaptureRequest::COPY_TASK); + } + if (!path.isEmpty()) { + req.addSaveTask(path); } req.setStaticID(id); Controller::getInstance()->requestCapture(req); @@ -48,9 +51,11 @@ void FlameshotDBusAdapter::fullScreen(QString path, { CaptureRequest req(CaptureRequest::FULLSCREEN_MODE, delay, path); if (toClipboard) { - req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + req.addTask(CaptureRequest::COPY_TASK); + } + if (!path.isEmpty()) { + req.addSaveTask(path); } - req.addTask(CaptureRequest::FILESYSTEM_SAVE_TASK); req.setStaticID(id); Controller::getInstance()->requestCapture(req); } @@ -66,11 +71,13 @@ void FlameshotDBusAdapter::captureScreen(int number, int delay, uint id) { - CaptureRequest req(CaptureRequest::SCREEN_MODE, delay, path, number); + CaptureRequest req(CaptureRequest::SCREEN_MODE, delay, number); if (toClipboard) { - req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + req.addTask(CaptureRequest::COPY_TASK); + } + if (!path.isEmpty()) { + req.addSaveTask(path); } - req.addTask(CaptureRequest::FILESYSTEM_SAVE_TASK); req.setStaticID(id); Controller::getInstance()->requestCapture(req); } diff --git a/src/main.cpp b/src/main.cpp index 56748c44..851809a0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -307,7 +307,7 @@ int main(int argc, char* argv[]) DBusUtils dbusUtils; CaptureRequest req(CaptureRequest::GRAPHICAL_MODE, delay, pathValue); if (toClipboard) { - req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + req.addTask(CaptureRequest::COPY_TASK); } uint id = req.id(); @@ -352,12 +352,12 @@ int main(int argc, char* argv[]) goto finish; } - CaptureRequest req(CaptureRequest::FULLSCREEN_MODE, delay, pathValue); + CaptureRequest req(CaptureRequest::FULLSCREEN_MODE, delay); if (toClipboard) { - req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + req.addTask(CaptureRequest::COPY_TASK); } if (!pathValue.isEmpty()) { - req.addTask(CaptureRequest::FILESYSTEM_SAVE_TASK); + req.addSaveTask(pathValue); } uint id = req.id(); DBusUtils dbusUtils; @@ -410,13 +410,12 @@ int main(int argc, char* argv[]) goto finish; } - CaptureRequest req( - CaptureRequest::SCREEN_MODE, delay, pathValue, number); + CaptureRequest req(CaptureRequest::SCREEN_MODE, delay, number); if (toClipboard) { - req.addTask(CaptureRequest::CLIPBOARD_SAVE_TASK); + req.addTask(CaptureRequest::COPY_TASK); } if (!pathValue.isEmpty()) { - req.addTask(CaptureRequest::FILESYSTEM_SAVE_TASK); + req.addSaveTask(pathValue); } uint id = req.id(); DBusUtils dbusUtils; From d39737fd463edd2914e090a5590556d9e4aa46e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Wed, 6 Oct 2021 18:09:27 +0200 Subject: [PATCH 05/22] Refactor CaptureTool::pressed and derivatives MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haris Gušić --- src/core/capturerequest.h | 2 +- src/tools/accept/accepttool.cpp | 14 +-------- src/tools/accept/accepttool.h | 2 +- src/tools/arrow/arrowtool.cpp | 2 +- src/tools/arrow/arrowtool.h | 2 +- src/tools/capturecontext.h | 1 + src/tools/capturetool.h | 2 +- src/tools/circle/circletool.cpp | 2 +- src/tools/circle/circletool.h | 2 +- src/tools/circlecount/circlecounttool.cpp | 2 +- src/tools/circlecount/circlecounttool.h | 2 +- src/tools/copy/copytool.cpp | 4 +-- src/tools/copy/copytool.h | 2 +- src/tools/exit/exittool.cpp | 2 +- src/tools/exit/exittool.h | 2 +- src/tools/imgur/imguruploadertool.cpp | 2 +- src/tools/imgur/imguruploadertool.h | 2 +- src/tools/invert/inverttool.cpp | 2 +- src/tools/invert/inverttool.h | 2 +- src/tools/launcher/applaunchertool.cpp | 2 +- src/tools/launcher/applaunchertool.h | 2 +- src/tools/line/linetool.cpp | 2 +- src/tools/line/linetool.h | 2 +- src/tools/marker/markertool.cpp | 2 +- src/tools/marker/markertool.h | 2 +- src/tools/move/movetool.cpp | 2 +- src/tools/move/movetool.h | 2 +- src/tools/pencil/penciltool.cpp | 2 +- src/tools/pencil/penciltool.h | 2 +- src/tools/pin/pintool.cpp | 2 +- src/tools/pin/pintool.h | 2 +- src/tools/pixelate/pixelatetool.cpp | 2 +- src/tools/pixelate/pixelatetool.h | 2 +- src/tools/rectangle/rectangletool.cpp | 2 +- src/tools/rectangle/rectangletool.h | 2 +- src/tools/redo/redotool.cpp | 2 +- src/tools/redo/redotool.h | 2 +- src/tools/save/savetool.cpp | 30 ++----------------- src/tools/save/savetool.h | 2 +- src/tools/selection/selectiontool.cpp | 2 +- src/tools/selection/selectiontool.h | 2 +- src/tools/sizedecrease/sizedecreasetool.cpp | 2 +- src/tools/sizedecrease/sizedecreasetool.h | 2 +- src/tools/sizeincrease/sizeincreasetool.cpp | 2 +- src/tools/sizeincrease/sizeincreasetool.h | 2 +- src/tools/sizeindicator/sizeindicatortool.cpp | 2 +- src/tools/sizeindicator/sizeindicatortool.h | 2 +- src/tools/text/texttool.cpp | 2 +- src/tools/text/texttool.h | 2 +- src/tools/undo/undotool.cpp | 2 +- src/tools/undo/undotool.h | 2 +- src/widgets/capture/capturewidget.cpp | 20 +++++++++---- src/widgets/capture/capturewidget.h | 3 +- 53 files changed, 70 insertions(+), 96 deletions(-) diff --git a/src/core/capturerequest.h b/src/core/capturerequest.h index c738a2b1..4ea26a92 100644 --- a/src/core/capturerequest.h +++ b/src/core/capturerequest.h @@ -39,7 +39,7 @@ public: ExportTask tasks() const; void addTask(ExportTask task); - void addSaveTask(const QString& path); + void addSaveTask(const QString& path = QString()); void exportCapture(const QPixmap& p); private: diff --git a/src/tools/accept/accepttool.cpp b/src/tools/accept/accepttool.cpp index 38160c61..0eea93df 100644 --- a/src/tools/accept/accepttool.cpp +++ b/src/tools/accept/accepttool.cpp @@ -8,7 +8,6 @@ #include #if defined(Q_OS_MACOS) #include "src/widgets/capture/capturewidget.h" -#include #include #endif @@ -49,19 +48,8 @@ CaptureTool* AcceptTool::copy(QObject* parent) return new AcceptTool(parent); } -void AcceptTool::pressed(const CaptureContext&) +void AcceptTool::pressed(CaptureContext&) { -#if defined(Q_OS_MACOS) - for (QWidget* widget : qApp->topLevelWidgets()) { - QString className(widget->metaObject()->className()); - if (0 == - className.compare(CaptureWidget::staticMetaObject.className())) { - widget->showNormal(); - widget->hide(); - break; - } - } -#endif emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/accept/accepttool.h b/src/tools/accept/accepttool.h index a8e66059..5bd2812f 100644 --- a/src/tools/accept/accepttool.h +++ b/src/tools/accept/accepttool.h @@ -23,5 +23,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/arrow/arrowtool.cpp b/src/tools/arrow/arrowtool.cpp index fa8a77fe..707a3c81 100644 --- a/src/tools/arrow/arrowtool.cpp +++ b/src/tools/arrow/arrowtool.cpp @@ -153,7 +153,7 @@ void ArrowTool::process(QPainter& painter, const QPixmap& pixmap) painter.fillPath(m_arrowPath, QBrush(color())); } -void ArrowTool::pressed(const CaptureContext& context) +void ArrowTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/arrow/arrowtool.h b/src/tools/arrow/arrowtool.h index 6a2fd20f..03ea8199 100644 --- a/src/tools/arrow/arrowtool.h +++ b/src/tools/arrow/arrowtool.h @@ -26,7 +26,7 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; private: QPainterPath m_arrowPath; diff --git a/src/tools/capturecontext.h b/src/tools/capturecontext.h index 9799cc23..fe23e3cc 100644 --- a/src/tools/capturecontext.h +++ b/src/tools/capturecontext.h @@ -29,6 +29,7 @@ struct CaptureContext int thickness; // Mode of the capture widget bool fullscreen; + CaptureRequest* request; QPixmap selectedScreenshotArea() const; }; diff --git a/src/tools/capturetool.h b/src/tools/capturetool.h index a384dff6..dba239e5 100644 --- a/src/tools/capturetool.h +++ b/src/tools/capturetool.h @@ -190,7 +190,7 @@ public slots: // Called when the tool is activated. virtual void drawStart(const CaptureContext& context) = 0; // Called right after pressign the button which activates the tool. - virtual void pressed(const CaptureContext& context) = 0; + virtual void pressed(CaptureContext& context) = 0; // Called when the color is changed in the editor. virtual void onColorChanged(const QColor& c) = 0; // Called when the thickness of the tool is updated in the editor. diff --git a/src/tools/circle/circletool.cpp b/src/tools/circle/circletool.cpp index e4ac46bf..c0514fed 100644 --- a/src/tools/circle/circletool.cpp +++ b/src/tools/circle/circletool.cpp @@ -44,7 +44,7 @@ void CircleTool::process(QPainter& painter, const QPixmap& pixmap) painter.drawEllipse(QRect(points().first, points().second)); } -void CircleTool::pressed(const CaptureContext& context) +void CircleTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/circle/circletool.h b/src/tools/circle/circletool.h index da75f500..a69afb30 100644 --- a/src/tools/circle/circletool.h +++ b/src/tools/circle/circletool.h @@ -22,5 +22,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/circlecount/circlecounttool.cpp b/src/tools/circlecount/circlecounttool.cpp index 67e58a07..79b4afd2 100644 --- a/src/tools/circlecount/circlecounttool.cpp +++ b/src/tools/circlecount/circlecounttool.cpp @@ -166,7 +166,7 @@ void CircleCountTool::drawStart(const CaptureContext& context) m_valid = true; } -void CircleCountTool::pressed(const CaptureContext& context) +void CircleCountTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/circlecount/circlecounttool.h b/src/tools/circlecount/circlecounttool.h index 49b2527a..d2bf9d58 100644 --- a/src/tools/circlecount/circlecounttool.h +++ b/src/tools/circlecount/circlecounttool.h @@ -31,7 +31,7 @@ protected: public slots: void drawStart(const CaptureContext& context) override; - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; private: QString m_tempString; diff --git a/src/tools/copy/copytool.cpp b/src/tools/copy/copytool.cpp index d5e877b4..66e11313 100644 --- a/src/tools/copy/copytool.cpp +++ b/src/tools/copy/copytool.cpp @@ -39,9 +39,9 @@ CaptureTool* CopyTool::copy(QObject* parent) return new CopyTool(parent); } -void CopyTool::pressed(const CaptureContext& context) +void CopyTool::pressed(CaptureContext& context) { + context.request->addTask(CaptureRequest::COPY_TASK); emit requestAction(REQ_CAPTURE_DONE_OK); - ScreenshotSaver().saveToClipboard(context.selectedScreenshotArea()); emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/copy/copytool.h b/src/tools/copy/copytool.h index 6c19c013..947e12dc 100644 --- a/src/tools/copy/copytool.h +++ b/src/tools/copy/copytool.h @@ -23,5 +23,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/exit/exittool.cpp b/src/tools/exit/exittool.cpp index 0b71f084..66bde1a2 100644 --- a/src/tools/exit/exittool.cpp +++ b/src/tools/exit/exittool.cpp @@ -38,7 +38,7 @@ CaptureTool* ExitTool::copy(QObject* parent) return new ExitTool(parent); } -void ExitTool::pressed(const CaptureContext& context) +void ExitTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_CLOSE_GUI); diff --git a/src/tools/exit/exittool.h b/src/tools/exit/exittool.h index 976ff77a..e52f0476 100644 --- a/src/tools/exit/exittool.h +++ b/src/tools/exit/exittool.h @@ -24,5 +24,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/imgur/imguruploadertool.cpp b/src/tools/imgur/imguruploadertool.cpp index 97283b62..02478685 100644 --- a/src/tools/imgur/imguruploadertool.cpp +++ b/src/tools/imgur/imguruploadertool.cpp @@ -44,7 +44,7 @@ CaptureTool* ImgurUploaderTool::copy(QObject* parent) return new ImgurUploaderTool(parent); } -void ImgurUploaderTool::pressed(const CaptureContext& context) +void ImgurUploaderTool::pressed(CaptureContext& context) { capture = context.selectedScreenshotArea(); emit requestAction(REQ_CAPTURE_DONE_OK); diff --git a/src/tools/imgur/imguruploadertool.h b/src/tools/imgur/imguruploadertool.h index d4fda8e9..0584a54b 100644 --- a/src/tools/imgur/imguruploadertool.h +++ b/src/tools/imgur/imguruploadertool.h @@ -25,7 +25,7 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; private: QPixmap capture; diff --git a/src/tools/invert/inverttool.cpp b/src/tools/invert/inverttool.cpp index 3f52ef4f..6cd7d8a1 100644 --- a/src/tools/invert/inverttool.cpp +++ b/src/tools/invert/inverttool.cpp @@ -82,7 +82,7 @@ void InvertTool::paintMousePreview(QPainter& painter, Q_UNUSED(painter) } -void InvertTool::pressed(const CaptureContext& context) +void InvertTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/invert/inverttool.h b/src/tools/invert/inverttool.h index 4d5dba1a..8c5980c7 100644 --- a/src/tools/invert/inverttool.h +++ b/src/tools/invert/inverttool.h @@ -26,5 +26,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/launcher/applaunchertool.cpp b/src/tools/launcher/applaunchertool.cpp index dca82550..58bd292b 100644 --- a/src/tools/launcher/applaunchertool.cpp +++ b/src/tools/launcher/applaunchertool.cpp @@ -43,7 +43,7 @@ CaptureTool* AppLauncher::copy(QObject* parent) return new AppLauncher(parent); } -void AppLauncher::pressed(const CaptureContext& context) +void AppLauncher::pressed(CaptureContext& context) { capture = context.selectedScreenshotArea(); emit requestAction(REQ_CAPTURE_DONE_OK); diff --git a/src/tools/launcher/applaunchertool.h b/src/tools/launcher/applaunchertool.h index a1c22b9f..9a03fced 100644 --- a/src/tools/launcher/applaunchertool.h +++ b/src/tools/launcher/applaunchertool.h @@ -25,7 +25,7 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; private: QPixmap capture; diff --git a/src/tools/line/linetool.cpp b/src/tools/line/linetool.cpp index 548250cd..ea115abd 100644 --- a/src/tools/line/linetool.cpp +++ b/src/tools/line/linetool.cpp @@ -46,7 +46,7 @@ void LineTool::process(QPainter& painter, const QPixmap& pixmap) painter.drawLine(points().first, points().second); } -void LineTool::pressed(const CaptureContext& context) +void LineTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/line/linetool.h b/src/tools/line/linetool.h index 3a353b21..d08aed15 100644 --- a/src/tools/line/linetool.h +++ b/src/tools/line/linetool.h @@ -22,5 +22,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/marker/markertool.cpp b/src/tools/marker/markertool.cpp index 5f79dfaf..e569add1 100644 --- a/src/tools/marker/markertool.cpp +++ b/src/tools/marker/markertool.cpp @@ -84,7 +84,7 @@ void MarkerTool::drawStart(const CaptureContext& context) onThicknessChanged(context.thickness + PADDING_VALUE); } -void MarkerTool::pressed(const CaptureContext& context) +void MarkerTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/marker/markertool.h b/src/tools/marker/markertool.h index d4ccb221..5934efbb 100644 --- a/src/tools/marker/markertool.h +++ b/src/tools/marker/markertool.h @@ -26,5 +26,5 @@ protected: public slots: void drawStart(const CaptureContext& context) override; - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/move/movetool.cpp b/src/tools/move/movetool.cpp index 37d39069..b08ee8df 100644 --- a/src/tools/move/movetool.cpp +++ b/src/tools/move/movetool.cpp @@ -38,7 +38,7 @@ CaptureTool* MoveTool::copy(QObject* parent) return new MoveTool(parent); } -void MoveTool::pressed(const CaptureContext& context) +void MoveTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/move/movetool.h b/src/tools/move/movetool.h index 8fde1472..27cf0ae4 100644 --- a/src/tools/move/movetool.h +++ b/src/tools/move/movetool.h @@ -22,5 +22,5 @@ public: CaptureTool* copy(QObject* parent = nullptr) override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/pencil/penciltool.cpp b/src/tools/pencil/penciltool.cpp index bdbcfd40..a20d3ac7 100644 --- a/src/tools/pencil/penciltool.cpp +++ b/src/tools/pencil/penciltool.cpp @@ -58,7 +58,7 @@ void PencilTool::drawStart(const CaptureContext& context) m_pathArea.setBottomRight(context.mousePos); } -void PencilTool::pressed(const CaptureContext& context) +void PencilTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/pencil/penciltool.h b/src/tools/pencil/penciltool.h index 4c2f561b..404714d4 100644 --- a/src/tools/pencil/penciltool.h +++ b/src/tools/pencil/penciltool.h @@ -26,5 +26,5 @@ protected: public slots: void drawStart(const CaptureContext& context) override; - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/pin/pintool.cpp b/src/tools/pin/pintool.cpp index 3e312a2d..91934a9c 100644 --- a/src/tools/pin/pintool.cpp +++ b/src/tools/pin/pintool.cpp @@ -70,7 +70,7 @@ CaptureTool* PinTool::copy(QObject* parent) return new PinTool(parent); } -void PinTool::pressed(const CaptureContext& context) +void PinTool::pressed(CaptureContext& context) { emit requestAction(REQ_CAPTURE_DONE_OK); m_geometry = context.selection; diff --git a/src/tools/pin/pintool.h b/src/tools/pin/pintool.h index 886bb751..e9772dfc 100644 --- a/src/tools/pin/pintool.h +++ b/src/tools/pin/pintool.h @@ -25,7 +25,7 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; private: QRect m_geometry; diff --git a/src/tools/pixelate/pixelatetool.cpp b/src/tools/pixelate/pixelatetool.cpp index d1ddef79..5b7452e8 100644 --- a/src/tools/pixelate/pixelatetool.cpp +++ b/src/tools/pixelate/pixelatetool.cpp @@ -105,7 +105,7 @@ void PixelateTool::paintMousePreview(QPainter& painter, Q_UNUSED(painter) } -void PixelateTool::pressed(const CaptureContext& context) +void PixelateTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/pixelate/pixelatetool.h b/src/tools/pixelate/pixelatetool.h index 81a639c2..f4fd3b6d 100644 --- a/src/tools/pixelate/pixelatetool.h +++ b/src/tools/pixelate/pixelatetool.h @@ -26,5 +26,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/rectangle/rectangletool.cpp b/src/tools/rectangle/rectangletool.cpp index 19e9d680..64f712b2 100644 --- a/src/tools/rectangle/rectangletool.cpp +++ b/src/tools/rectangle/rectangletool.cpp @@ -73,7 +73,7 @@ void RectangleTool::drawStart(const CaptureContext& context) onThicknessChanged(context.thickness); } -void RectangleTool::pressed(const CaptureContext& context) +void RectangleTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/rectangle/rectangletool.h b/src/tools/rectangle/rectangletool.h index 7bba80ef..ba5656b4 100644 --- a/src/tools/rectangle/rectangletool.h +++ b/src/tools/rectangle/rectangletool.h @@ -23,5 +23,5 @@ protected: public slots: void drawStart(const CaptureContext& context) override; - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/redo/redotool.cpp b/src/tools/redo/redotool.cpp index 9efa1708..7ba0a836 100644 --- a/src/tools/redo/redotool.cpp +++ b/src/tools/redo/redotool.cpp @@ -38,7 +38,7 @@ CaptureTool* RedoTool::copy(QObject* parent) return new RedoTool(parent); } -void RedoTool::pressed(const CaptureContext& context) +void RedoTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_REDO_MODIFICATION); diff --git a/src/tools/redo/redotool.h b/src/tools/redo/redotool.h index 8642838b..b0879819 100644 --- a/src/tools/redo/redotool.h +++ b/src/tools/redo/redotool.h @@ -23,5 +23,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/save/savetool.cpp b/src/tools/save/savetool.cpp index 4787bc56..58d333d5 100644 --- a/src/tools/save/savetool.cpp +++ b/src/tools/save/savetool.cpp @@ -45,33 +45,9 @@ CaptureTool* SaveTool::copy(QObject* parent) return new SaveTool(parent); } -void SaveTool::pressed(const CaptureContext& context) +void SaveTool::pressed(CaptureContext& context) { -#if defined(Q_OS_MACOS) - for (QWidget* widget : qApp->topLevelWidgets()) { - QString className(widget->metaObject()->className()); - if (0 == - className.compare(CaptureWidget::staticMetaObject.className())) { - widget->showNormal(); - widget->hide(); - break; - } - } -#endif - if (context.savePath.isEmpty()) { - emit requestAction(REQ_HIDE_GUI); - qApp->processEvents(); - bool ok = ScreenshotSaver().saveToFilesystemGUI( - context.selectedScreenshotArea()); - if (ok) { - emit requestAction(REQ_CAPTURE_DONE_OK); - } - } else { - bool ok = ScreenshotSaver().saveToFilesystem( - context.selectedScreenshotArea(), context.savePath); - if (ok) { - emit requestAction(REQ_CAPTURE_DONE_OK); - } - } + context.request->addSaveTask(); + emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/save/savetool.h b/src/tools/save/savetool.h index ce7f89b9..609ad07f 100644 --- a/src/tools/save/savetool.h +++ b/src/tools/save/savetool.h @@ -23,5 +23,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/selection/selectiontool.cpp b/src/tools/selection/selectiontool.cpp index 2827d381..f6e96290 100644 --- a/src/tools/selection/selectiontool.cpp +++ b/src/tools/selection/selectiontool.cpp @@ -50,7 +50,7 @@ void SelectionTool::process(QPainter& painter, const QPixmap& pixmap) painter.drawRect(QRect(points().first, points().second)); } -void SelectionTool::pressed(const CaptureContext& context) +void SelectionTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/selection/selectiontool.h b/src/tools/selection/selectiontool.h index 846a259d..aa521767 100644 --- a/src/tools/selection/selectiontool.h +++ b/src/tools/selection/selectiontool.h @@ -24,5 +24,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/sizedecrease/sizedecreasetool.cpp b/src/tools/sizedecrease/sizedecreasetool.cpp index 8e28de92..fa4439b3 100644 --- a/src/tools/sizedecrease/sizedecreasetool.cpp +++ b/src/tools/sizedecrease/sizedecreasetool.cpp @@ -52,7 +52,7 @@ CaptureTool* SizeDecreaseTool::copy(QObject* parent) return new SizeDecreaseTool(parent); } -void SizeDecreaseTool::pressed(const CaptureContext& context) +void SizeDecreaseTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_DECREASE_TOOL_SIZE); diff --git a/src/tools/sizedecrease/sizedecreasetool.h b/src/tools/sizedecrease/sizedecreasetool.h index ce558489..b28c5ba4 100644 --- a/src/tools/sizedecrease/sizedecreasetool.h +++ b/src/tools/sizedecrease/sizedecreasetool.h @@ -37,5 +37,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/sizeincrease/sizeincreasetool.cpp b/src/tools/sizeincrease/sizeincreasetool.cpp index 3c660396..a5c2e141 100644 --- a/src/tools/sizeincrease/sizeincreasetool.cpp +++ b/src/tools/sizeincrease/sizeincreasetool.cpp @@ -52,7 +52,7 @@ CaptureTool* SizeIncreaseTool::copy(QObject* parent) return new SizeIncreaseTool(parent); } -void SizeIncreaseTool::pressed(const CaptureContext& context) +void SizeIncreaseTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_INCREASE_TOOL_SIZE); diff --git a/src/tools/sizeincrease/sizeincreasetool.h b/src/tools/sizeincrease/sizeincreasetool.h index 8c64bc04..32380007 100644 --- a/src/tools/sizeincrease/sizeincreasetool.h +++ b/src/tools/sizeincrease/sizeincreasetool.h @@ -37,5 +37,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/sizeindicator/sizeindicatortool.cpp b/src/tools/sizeindicator/sizeindicatortool.cpp index d6635c69..59ee5079 100644 --- a/src/tools/sizeindicator/sizeindicatortool.cpp +++ b/src/tools/sizeindicator/sizeindicatortool.cpp @@ -38,7 +38,7 @@ CaptureTool* SizeIndicatorTool::copy(QObject* parent) return new SizeIndicatorTool(parent); } -void SizeIndicatorTool::pressed(const CaptureContext& context) +void SizeIndicatorTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/sizeindicator/sizeindicatortool.h b/src/tools/sizeindicator/sizeindicatortool.h index 3811a031..e50ff305 100644 --- a/src/tools/sizeindicator/sizeindicatortool.h +++ b/src/tools/sizeindicator/sizeindicatortool.h @@ -23,5 +23,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/tools/text/texttool.cpp b/src/tools/text/texttool.cpp index 3e6fa7bb..03aa4905 100644 --- a/src/tools/text/texttool.cpp +++ b/src/tools/text/texttool.cpp @@ -252,7 +252,7 @@ void TextTool::drawStart(const CaptureContext& context) emit requestAction(REQ_ADD_CHILD_WIDGET); } -void TextTool::pressed(const CaptureContext& context) +void TextTool::pressed(CaptureContext& context) { Q_UNUSED(context) } diff --git a/src/tools/text/texttool.h b/src/tools/text/texttool.h index 40f3e63a..2444c437 100644 --- a/src/tools/text/texttool.h +++ b/src/tools/text/texttool.h @@ -50,7 +50,7 @@ public slots: void drawEnd(const QPoint& p) override; void drawMove(const QPoint& p) override; void drawStart(const CaptureContext& context) override; - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; void onColorChanged(const QColor& c) override; void onThicknessChanged(int th) override; virtual int thickness() const override { return m_size; }; diff --git a/src/tools/undo/undotool.cpp b/src/tools/undo/undotool.cpp index 910956e5..7cfb2d2e 100644 --- a/src/tools/undo/undotool.cpp +++ b/src/tools/undo/undotool.cpp @@ -38,7 +38,7 @@ CaptureTool* UndoTool::copy(QObject* parent) return new UndoTool(parent); } -void UndoTool::pressed(const CaptureContext& context) +void UndoTool::pressed(CaptureContext& context) { Q_UNUSED(context) emit requestAction(REQ_UNDO_MODIFICATION); diff --git a/src/tools/undo/undotool.h b/src/tools/undo/undotool.h index 1771615f..0425b2b1 100644 --- a/src/tools/undo/undotool.h +++ b/src/tools/undo/undotool.h @@ -23,5 +23,5 @@ protected: CaptureTool::Type type() const override; public slots: - void pressed(const CaptureContext& context) override; + void pressed(CaptureContext& context) override; }; diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index 71a65aab..6e8ede01 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -64,7 +64,6 @@ CaptureWidget::CaptureWidget(uint id, , m_toolWidget(nullptr) , m_colorPicker(nullptr) , m_id(id) - , m_request(&*Controller::getInstance()->requests().find(id)) , m_lastMouseWheel(0) , m_updateNotificationWidget(nullptr) , m_activeToolIsMoved(false) @@ -92,7 +91,7 @@ CaptureWidget::CaptureWidget(uint id, m_uiColor = m_config.uiColor(); m_contrastUiColor = m_config.contrastUiColor(); setMouseTracking(true); - initContext(savePath, fullScreen); + initContext(fullScreen); initSelection(); initShortcuts(); // must be called after initSelection #if (defined(Q_OS_WIN) || defined(Q_OS_MACOS)) @@ -234,6 +233,17 @@ CaptureWidget::CaptureWidget(uint id, CaptureWidget::~CaptureWidget() { +#if defined(Q_OS_MACOS) + for (QWidget* widget : qApp->topLevelWidgets()) { + QString className(widget->metaObject()->className()); + if (0 == + className.compare(CaptureWidget::staticMetaObject.className())) { + widget->showNormal(); + widget->hide(); + break; + } + } +#endif if (m_captureDone) { emit captureTaken(m_id, this->pixmap(), m_context.selection); } else { @@ -245,7 +255,7 @@ void CaptureWidget::initButtons() { auto allButtonTypes = CaptureToolButton::getIterableButtonTypes(); auto visibleButtonTypes = m_config.buttons(); - if (m_request->tasks() == CaptureRequest::NO_TASK) { + if (m_context.request->tasks() == CaptureRequest::NO_TASK) { allButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); visibleButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); } @@ -792,14 +802,14 @@ void CaptureWidget::moveEvent(QMoveEvent* e) m_context.widgetOffset = mapToGlobal(QPoint(0, 0)); } -void CaptureWidget::initContext(const QString& savePath, bool fullscreen) +void CaptureWidget::initContext(bool fullscreen) { m_context.color = m_config.drawColor(); - m_context.savePath = savePath; m_context.widgetOffset = mapToGlobal(QPoint(0, 0)); m_context.mousePos = mapFromGlobal(QCursor::pos()); m_context.thickness = m_config.drawThickness(); m_context.fullscreen = fullscreen; + m_context.request = &*Controller::getInstance()->requests().find(m_id); } void CaptureWidget::initPanel() diff --git a/src/widgets/capture/capturewidget.h b/src/widgets/capture/capturewidget.h index 3f40e736..7d8190e5 100644 --- a/src/widgets/capture/capturewidget.h +++ b/src/widgets/capture/capturewidget.h @@ -101,7 +101,7 @@ private: void showColorPicker(const QPoint& pos); bool startDrawObjectTool(const QPoint& pos); QPointer activeToolObject(); - void initContext(const QString& savePath, bool fullscreen); + void initContext(bool fullscreen); void initPanel(); void initSelection(); void initShortcuts(); @@ -174,7 +174,6 @@ private: SelectionWidget::SideType m_mouseOverHandle; uint m_id; - CaptureRequest* m_request; CaptureToolObjects m_captureToolObjects; CaptureToolObjects m_captureToolObjectsBackup; From f2c5641046b8c3fc1d98fcec02e3fcf6a59f941f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Fri, 8 Oct 2021 01:08:30 +0200 Subject: [PATCH 06/22] Remove irrelevant buttons MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haris Gušić --- src/widgets/capture/capturewidget.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index 6e8ede01..3a5b62ff 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -258,6 +258,13 @@ void CaptureWidget::initButtons() if (m_context.request->tasks() == CaptureRequest::NO_TASK) { allButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); visibleButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); + } else { + allButtonTypes.removeOne(CaptureTool::TYPE_SAVE); + allButtonTypes.removeOne(CaptureTool::TYPE_COPY); + allButtonTypes.removeOne(CaptureTool::TYPE_IMAGEUPLOADER); + visibleButtonTypes.removeOne(CaptureTool::TYPE_SAVE); + visibleButtonTypes.removeOne(CaptureTool::TYPE_COPY); + visibleButtonTypes.removeOne(CaptureTool::TYPE_IMAGEUPLOADER); } QVector vectorButtons; From 5ee85ed5c0d4c34195a2bbe1b30bcc3c715c99d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Fri, 8 Oct 2021 03:06:57 +0200 Subject: [PATCH 07/22] Add requestCapture DBus call MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Haris Gušić --- data/dbus/org.flameshot.Flameshot.xml | 11 ++++++++++- src/core/capturerequest.cpp | 23 +++++++++++++++++++++++ src/core/capturerequest.h | 6 ++++++ src/core/flameshotdbusadapter.cpp | 7 +++++++ src/core/flameshotdbusadapter.h | 1 + src/main.cpp | 27 +++++++++++++++++++++------ 6 files changed, 68 insertions(+), 7 deletions(-) diff --git a/data/dbus/org.flameshot.Flameshot.xml b/data/dbus/org.flameshot.Flameshot.xml index 619de8cd..bf311e77 100644 --- a/data/dbus/org.flameshot.Flameshot.xml +++ b/data/dbus/org.flameshot.Flameshot.xml @@ -2,7 +2,16 @@ - + + + + - - - - - - - - - - - - - - - - - - - - - -