diff --git a/src/config/uicoloreditor.cpp b/src/config/uicoloreditor.cpp index 03276a20..4ee9b86e 100644 --- a/src/config/uicoloreditor.cpp +++ b/src/config/uicoloreditor.cpp @@ -131,11 +131,11 @@ void UIcolorEditor::initButtons() " mode of the contrast color.")); connect(m_buttonMainColor, - &CaptureToolButton::pressedButton, + &CaptureToolButton::pressedButtonLeftClick, this, &UIcolorEditor::changeLastButton); connect(m_buttonContrast, - &CaptureToolButton::pressedButton, + &CaptureToolButton::pressedButtonLeftClick, this, &UIcolorEditor::changeLastButton); // clicking the labels changes the button too diff --git a/src/widgets/capture/capturetoolbutton.cpp b/src/widgets/capture/capturetoolbutton.cpp index bc6f376f..12946181 100644 --- a/src/widgets/capture/capturetoolbutton.cpp +++ b/src/widgets/capture/capturetoolbutton.cpp @@ -100,7 +100,10 @@ void CaptureToolButton::mousePressEvent(QMouseEvent* e) { activateWindow(); if (e->button() == Qt::LeftButton) { - emit pressedButton(this); + emit pressedButtonLeftClick(this); + emit pressed(); + } else if (e->button() == Qt::RightButton) { + emit pressedButtonRightClick(this); emit pressed(); } } diff --git a/src/widgets/capture/capturetoolbutton.h b/src/widgets/capture/capturetoolbutton.h index 2799ac41..931642ad 100644 --- a/src/widgets/capture/capturetoolbutton.h +++ b/src/widgets/capture/capturetoolbutton.h @@ -38,7 +38,8 @@ protected: CaptureTool* m_tool; signals: - void pressedButton(CaptureToolButton*); + void pressedButtonLeftClick(CaptureToolButton*); + void pressedButtonRightClick(CaptureToolButton*); private: CaptureToolButton(QWidget* parent = nullptr); diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index a1dd9f3e..a9e90534 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -318,15 +318,47 @@ void CaptureWidget::initButtons() if (visibleButtonTypes.contains(t)) { connect(b, - &CaptureToolButton::pressedButton, + &CaptureToolButton::pressedButtonLeftClick, this, - &CaptureWidget::setState); + &CaptureWidget::handleButtonLeftClick); + + if (b->tool()->isSelectable()) { + connect(b, + &CaptureToolButton::pressedButtonRightClick, + this, + &CaptureWidget::handleButtonRightClick); + } + vectorButtons << b; } } m_buttonHandler->setButtons(vectorButtons); } +void CaptureWidget::handleButtonRightClick(CaptureToolButton* b) +{ + if (!b) { + return; + } + + // if button already selected, do not deselect it on right click + if (!m_activeButton || m_activeButton != b) { + setState(b); + } + if (!m_panel->isVisible()) { + m_panel->show(); + } +} + +void CaptureWidget::handleButtonLeftClick(CaptureToolButton* b) +{ + if (!b) { + return; + } + + setState(b); +} + void CaptureWidget::initHelpMessage() { QList> keyMap; diff --git a/src/widgets/capture/capturewidget.h b/src/widgets/capture/capturewidget.h index ce267691..959c8137 100644 --- a/src/widgets/capture/capturewidget.h +++ b/src/widgets/capture/capturewidget.h @@ -73,6 +73,8 @@ private slots: void setState(CaptureToolButton* b); void handleToolSignal(CaptureTool::Request r); + void handleButtonLeftClick(CaptureToolButton* b); + void handleButtonRightClick(CaptureToolButton* b); void setDrawColor(const QColor& c); void onToolSizeChanged(int size); void onToolSizeSettled(int size); diff --git a/src/widgets/panel/utilitypanel.cpp b/src/widgets/panel/utilitypanel.cpp index a0fddce3..acafcf0b 100644 --- a/src/widgets/panel/utilitypanel.cpp +++ b/src/widgets/panel/utilitypanel.cpp @@ -214,3 +214,8 @@ void UtilityPanel::slotButtonDelete(bool clicked) } m_captureTools->setCurrentRow(currentRow); } + +bool UtilityPanel::isVisible() const +{ + return !m_internalPanel->isHidden(); +} \ No newline at end of file diff --git a/src/widgets/panel/utilitypanel.h b/src/widgets/panel/utilitypanel.h index f48b3b05..ee8d4eee 100644 --- a/src/widgets/panel/utilitypanel.h +++ b/src/widgets/panel/utilitypanel.h @@ -32,6 +32,7 @@ public: QList> captureToolObjectsHistory); void setActiveLayer(int index); int activeLayerIndex(); + bool isVisible() const; signals: void layerChanged(int layer);