From 1c4f3bdb391226372ca45f0393dc7c68a9352d8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Haris=20Gu=C5=A1i=C4=87?= Date: Wed, 4 Aug 2021 18:03:19 +0200 Subject: [PATCH] Enable shortcuts with buttons invisible (#1580) (#1800) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Make `ShortcutsWidget` load all shortcuts `ShortcutsWidget" now loads shortcuts for all capture widgets, regardless of enabled state in 'Interface settings'. Also removed unnecessary indirection which made the API confusing: - Removed `ConfigHandler::setShortcutsDefault` which was only called once on a temporary `ConfigHandler` and hence had no effect - Removed function `ConfigHandler::shortcuts` - `ShortcutsWidget` now calls `ConfigShortcuts::captureShortcutsDefault` directly instead of through `ConfigHandler::shortcuts` Signed-off-by: Haris Gušić * Enable shortcuts for hidden buttons Signed-off-by: Haris Gušić * Fix crash if ButtonHandler has no buttons Signed-off-by: Haris Gušić * obligatory clang-format Signed-off-by: Haris Gušić --- src/config/shortcutswidget.cpp | 4 +++- src/core/controller.cpp | 3 --- src/utils/confighandler.cpp | 26 ++------------------------ src/utils/confighandler.h | 1 - src/widgets/capture/buttonhandler.cpp | 3 +++ src/widgets/capture/capturewidget.cpp | 19 ++++++++++++++----- 6 files changed, 22 insertions(+), 34 deletions(-) diff --git a/src/config/shortcutswidget.cpp b/src/config/shortcutswidget.cpp index 7a3e2331..a857e635 100644 --- a/src/config/shortcutswidget.cpp +++ b/src/config/shortcutswidget.cpp @@ -4,6 +4,7 @@ #include "shortcutswidget.h" #include "setshortcutwidget.h" #include "src/core/qguiappcurrentscreen.h" +#include "src/utils/configshortcuts.h" #include #include #include @@ -36,7 +37,8 @@ ShortcutsWidget::ShortcutsWidget(QWidget* parent) m_layout = new QVBoxLayout(this); m_layout->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); - m_shortcuts = m_config.shortcuts(); + m_shortcuts = ConfigShortcuts().captureShortcutsDefault( + CaptureToolButton::getIterableButtonTypes()); initInfoTable(); show(); } diff --git a/src/core/controller.cpp b/src/core/controller.cpp index 601136a5..63e6a97f 100644 --- a/src/core/controller.cpp +++ b/src/core/controller.cpp @@ -64,9 +64,6 @@ Controller::Controller() m_appLatestVersion = QStringLiteral(APP_VERSION).replace("v", ""); qApp->setQuitOnLastWindowClosed(false); - // set default shortcusts if not set yet - ConfigHandler().setShortcutsDefault(); - // init tray icon #if defined(Q_OS_LINUX) || defined(Q_OS_UNIX) if (!ConfigHandler().disabledTrayIconValue()) { diff --git a/src/utils/confighandler.cpp b/src/utils/confighandler.cpp index 0b777e80..98f8f855 100644 --- a/src/utils/confighandler.cpp +++ b/src/utils/confighandler.cpp @@ -666,33 +666,11 @@ QVector ConfigHandler::fromButtonToInt( QVector ConfigHandler::shortcuts() { ConfigShortcuts configShortcuts; - m_shortcuts = configShortcuts.captureShortcutsDefault(getButtons()); + m_shortcuts = configShortcuts.captureShortcutsDefault( + CaptureToolButton::getIterableButtonTypes()); return m_shortcuts; } -void ConfigHandler::setShortcutsDefault() -{ - ConfigShortcuts configShortcuts; - for (auto shortcutItem : shortcuts()) { - QString shortcutName = shortcutItem.at(0); - QString shortcutDescription = shortcutItem.at(1); - QString shortcutValueDefault = shortcutItem.at(2); - - QString shortcutValue = shortcut(shortcutName); - - QKeySequence ks = QKeySequence(); - if (shortcutValue.isNull()) { - ks = QKeySequence(shortcutValueDefault); - if (!setShortcut(shortcutName, ks.toString())) { - shortcutValue = shortcutValueDefault; - } - } - - m_shortcuts << (QStringList() << shortcutName << shortcutDescription - << shortcutValue); - } -} - bool ConfigHandler::setShortcut(const QString& shortcutName, const QString& shortutValue) { diff --git a/src/utils/confighandler.h b/src/utils/confighandler.h index 908a52eb..5cc3fe8d 100644 --- a/src/utils/confighandler.h +++ b/src/utils/confighandler.h @@ -105,7 +105,6 @@ public: int undoLimit(); QVector shortcuts(); - void setShortcutsDefault(); bool setShortcut(const QString&, const QString&); const QString& shortcut(const QString&); diff --git a/src/widgets/capture/buttonhandler.cpp b/src/widgets/capture/buttonhandler.cpp index 34b91241..c3f030e6 100644 --- a/src/widgets/capture/buttonhandler.cpp +++ b/src/widgets/capture/buttonhandler.cpp @@ -361,6 +361,9 @@ void ButtonHandler::setButtons(const QVector v) bool ButtonHandler::contains(const QPoint& p) const { + if (m_vectorButtons.isEmpty()) { + return false; + } QPoint first(m_vectorButtons.first()->pos()); QPoint last(m_vectorButtons.last()->pos()); bool firstIsTopLeft = (first.x() <= last.x() && first.y() <= last.y()); diff --git a/src/widgets/capture/capturewidget.cpp b/src/widgets/capture/capturewidget.cpp index eca4230a..078b2819 100644 --- a/src/widgets/capture/capturewidget.cpp +++ b/src/widgets/capture/capturewidget.cpp @@ -205,10 +205,13 @@ void CaptureWidget::updateButtons() m_uiColor = m_config.uiMainColorValue(); m_contrastUiColor = m_config.uiContrastColorValue(); - auto buttons = m_config.getButtons(); + auto allButtonTypes = CaptureToolButton::getIterableButtonTypes(); + auto visibleButtonTypes = m_config.getButtons(); QVector vectorButtons; - for (const CaptureToolButton::ButtonType& t : buttons) { + // Add all buttons but hide those that were disabled in the Interface config + // This will allow keyboard shortcuts for those buttons to work + for (const CaptureToolButton::ButtonType& t : allButtonTypes) { CaptureToolButton* b = new CaptureToolButton(t, this); if (t == CaptureToolButton::TYPE_SELECTIONINDICATOR) { m_sizeIndButton = b; @@ -241,14 +244,20 @@ void CaptureWidget::updateButtons() break; } - connect( - b, &CaptureToolButton::pressedButton, this, &CaptureWidget::setState); connect(b->tool(), &CaptureTool::requestAction, this, &CaptureWidget::handleButtonSignal); - vectorButtons << b; + if (visibleButtonTypes.contains(t)) { + connect(b, + &CaptureToolButton::pressedButton, + this, + &CaptureWidget::setState); + vectorButtons << b; + } else { + b->hide(); + } } m_buttonHandler->setButtons(vectorButtons); }