diff --git a/src/tools/capturecontext.cpp b/src/tools/capturecontext.cpp index 74bd9e40..e5e4a685 100644 --- a/src/tools/capturecontext.cpp +++ b/src/tools/capturecontext.cpp @@ -2,6 +2,8 @@ // SPDX-FileCopyrightText: 2017-2019 Alejandro Sirgo Rica & Contributors #include "capturecontext.h" +#include "capturerequest.h" +#include "controller.h" QPixmap CaptureContext::selectedScreenshotArea() const { @@ -11,3 +13,12 @@ QPixmap CaptureContext::selectedScreenshotArea() const return screenshot.copy(selection); } } + +CaptureRequest* CaptureContext::request() +{ + return &*Controller::getInstance()->requests().find(requestId); +} + +CaptureRequest* CaptureContext::request() const { + return &*Controller::getInstance()->requests().find(requestId); +} diff --git a/src/tools/capturecontext.h b/src/tools/capturecontext.h index fe23e3cc..6e145e6a 100644 --- a/src/tools/capturecontext.h +++ b/src/tools/capturecontext.h @@ -29,7 +29,9 @@ struct CaptureContext int thickness; // Mode of the capture widget bool fullscreen; - CaptureRequest* request; + uint requestId; QPixmap selectedScreenshotArea() const; + CaptureRequest* request(); + CaptureRequest* request() const; }; diff --git a/src/tools/copy/copytool.cpp b/src/tools/copy/copytool.cpp index cff1555e..c6a466b9 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(CaptureContext& context) { - context.request->addTask(CaptureRequest::COPY_TASK); + context.request()->addTask(CaptureRequest::COPY_TASK); emit requestAction(REQ_CAPTURE_DONE_OK); emit requestAction(REQ_CLOSE_GUI); } diff --git a/src/tools/save/savetool.cpp b/src/tools/save/savetool.cpp index f36adaef..371362e9 100644 --- a/src/tools/save/savetool.cpp +++ b/src/tools/save/savetool.cpp @@ -47,7 +47,7 @@ CaptureTool* SaveTool::copy(QObject* parent) void SaveTool::pressed(CaptureContext& context) { - context.request->addSaveTask(); + context.request()->addSaveTask(); 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 38149f59..8737cf9d 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -63,7 +63,6 @@ CaptureWidget::CaptureWidget(uint id, , m_activeTool(nullptr) , m_toolWidget(nullptr) , m_colorPicker(nullptr) - , m_id(id) , m_lastMouseWheel(0) , m_updateNotificationWidget(nullptr) , m_activeToolIsMoved(false) @@ -91,7 +90,7 @@ CaptureWidget::CaptureWidget(uint id, m_uiColor = m_config.uiColor(); m_contrastUiColor = m_config.contrastUiColor(); setMouseTracking(true); - initContext(fullScreen); + initContext(fullScreen, id); initSelection(); initShortcuts(); // must be called after initSelection #if (defined(Q_OS_WIN) || defined(Q_OS_MACOS)) @@ -240,9 +239,9 @@ CaptureWidget::~CaptureWidget() } #endif if (m_captureDone) { - emit captureTaken(m_id, this->pixmap(), m_context.selection); + emit captureTaken(m_context.requestId, pixmap(), m_context.selection); } else { - emit captureFailed(m_id); + emit captureFailed(m_context.requestId); } } @@ -250,7 +249,7 @@ void CaptureWidget::initButtons() { auto allButtonTypes = CaptureToolButton::getIterableButtonTypes(); auto visibleButtonTypes = m_config.buttons(); - if (m_context.request->tasks() == CaptureRequest::NO_TASK) { + if (m_context.request()->tasks() == CaptureRequest::NO_TASK) { allButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); visibleButtonTypes.removeOne(CaptureTool::TYPE_ACCEPT); } else { @@ -832,14 +831,24 @@ void CaptureWidget::moveEvent(QMoveEvent* e) m_context.widgetOffset = mapToGlobal(QPoint(0, 0)); } -void CaptureWidget::initContext(bool fullscreen) +void CaptureWidget::initContext(bool fullscreen, uint requestId) { m_context.color = m_config.drawColor(); 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); + + // initialize m_context.request + if (requestId != 0) { + m_context.requestId = requestId; + } else { + CaptureRequest req(CaptureRequest::GRAPHICAL_MODE); + uint id = req.id(); + req.setStaticID(id); + Controller::getInstance()->requests().insert(id, req); + m_context.requestId = id; + } } void CaptureWidget::initPanel() diff --git a/src/widgets/capture/capturewidget.h b/src/widgets/capture/capturewidget.h index 07931823..d666be9b 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(bool fullscreen); + void initContext(bool fullscreen, uint requestId); void initPanel(); void initSelection(); void initShortcuts(); @@ -174,7 +174,6 @@ private: SelectionWidget* m_selection; SelectionWidget::SideType m_mouseOverHandle; - uint m_id; QMap m_tools; CaptureToolObjects m_captureToolObjects;