diff --git a/src/libs/ui/browsertab.cpp b/src/libs/ui/browsertab.cpp index 9f618151..4d6a4013 100644 --- a/src/libs/ui/browsertab.cpp +++ b/src/libs/ui/browsertab.cpp @@ -34,6 +34,7 @@ #include #include +#include #include #include #include @@ -124,6 +125,28 @@ BrowserTab::BrowserTab(QWidget *parent) label->setText(title); }); + m_browserActionButton = new QToolButton(); + m_browserActionButton->setAutoRaise(true); + m_browserActionButton->setText(QStringLiteral("⋮")); + m_browserActionButton->setArrowType(Qt::NoArrow); + m_browserActionButton->setPopupMode(QToolButton::InstantPopup); + + auto browserActionsMenu = new QMenu(m_browserActionButton); + + m_browserZoomInAction = browserActionsMenu->addAction(tr("Zoom In"), [this] () { + m_webControl->zoomIn(); + }); + + m_browserZoomOutAction = browserActionsMenu->addAction(tr("Zoom Out"), [this] () { + m_webControl->zoomOut(); + }); + + m_browserResetZoomAction = browserActionsMenu->addAction(tr("Reset Zoom"), [this] () { + m_webControl->resetZoom(); + }); + + m_browserActionButton->setMenu(browserActionsMenu); + browserActionsMenu->installEventFilter(this); auto toolBarLayout = new QHBoxLayout(); toolBarLayout->setContentsMargins(4, 0, 4, 0); @@ -132,6 +155,7 @@ BrowserTab::BrowserTab(QWidget *parent) toolBarLayout->addWidget(m_backButton); toolBarLayout->addWidget(m_forwardButton); toolBarLayout->addWidget(label, 1); + toolBarLayout->addWidget(m_browserActionButton); auto toolBarFrame = new ToolBarFrame(); toolBarFrame->setLayout(toolBarLayout); @@ -222,3 +246,28 @@ QIcon BrowserTab::docsetIcon(const QUrl &url) const Registry::Docset *docset = Core::Application::instance()->docsetRegistry()->docsetForUrl(url); return docset ? docset->icon() : QIcon(QStringLiteral(":/icons/logo/icon.png")); } + +bool BrowserTab::eventFilter(QObject *watched, QEvent *event) +{ + if (watched == m_browserActionButton->menu()) { + QAction *triggeredAction = nullptr; + + if (event->type() == QEvent::MouseButtonRelease) { + triggeredAction = m_browserActionButton->menu()->activeAction(); + } else if (event->type() == QEvent::KeyPress) { + const auto *keyEvent = static_cast(event); + + if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) { + triggeredAction = m_browserActionButton->menu()->activeAction(); + } + } + + if (triggeredAction + && (triggeredAction == m_browserZoomInAction || triggeredAction == m_browserZoomOutAction)) { + triggeredAction->trigger(); + return true; + } + } + + return false; +} diff --git a/src/libs/ui/browsertab.h b/src/libs/ui/browsertab.h index 540af041..ec5e3b63 100644 --- a/src/libs/ui/browsertab.h +++ b/src/libs/ui/browsertab.h @@ -66,12 +66,17 @@ public slots: private: QIcon docsetIcon(const QUrl &url) const; + bool eventFilter(QObject *watched, QEvent *event) override; // Widgets. SearchSidebar *m_searchSidebar = nullptr; Browser::WebControl *m_webControl = nullptr; + QAction *m_browserZoomInAction = nullptr; + QAction *m_browserZoomOutAction = nullptr; + QAction *m_browserResetZoomAction = nullptr; QToolButton *m_backButton = nullptr; QToolButton *m_forwardButton = nullptr; + QToolButton *m_browserActionButton = nullptr; }; } // namespace WidgetUi diff --git a/src/libs/ui/mainwindow.cpp b/src/libs/ui/mainwindow.cpp index 440aaf67..00a6ab01 100644 --- a/src/libs/ui/mainwindow.cpp +++ b/src/libs/ui/mainwindow.cpp @@ -139,14 +139,15 @@ MainWindow::MainWindow(Core::Application *app, QWidget *parent) connect(shortcut, &QShortcut::activated, this, [this]() { currentTab()->webControl()->back(); }); shortcut = new QShortcut(QKeySequence::Forward, this); connect(shortcut, &QShortcut::activated, this, [this]() { currentTab()->webControl()->forward(); }); - shortcut = new QShortcut(QKeySequence::ZoomIn, this); - connect(shortcut, &QShortcut::activated, this, [this]() { currentTab()->webControl()->zoomIn(); }); shortcut = new QShortcut(QStringLiteral("Ctrl+="), this); connect(shortcut, &QShortcut::activated, this, [this]() { currentTab()->webControl()->zoomIn(); }); - shortcut = new QShortcut(QKeySequence::ZoomOut, this); - connect(shortcut, &QShortcut::activated, this, [this]() { currentTab()->webControl()->zoomOut(); }); - shortcut = new QShortcut(QStringLiteral("Ctrl+0"), this); - connect(shortcut, &QShortcut::activated, this, [this]() { currentTab()->webControl()->resetZoom(); }); + + ui->actionResetZoom->setShortcut(QKeySequence(QStringLiteral("Ctrl+0"))); + ui->actionZoomIn->setShortcut(QKeySequence::ZoomIn); + ui->actionZoomOut->setShortcut(QKeySequence::ZoomOut); + connect(ui->actionResetZoom, &QAction::triggered, this, [this] { currentTab()->webControl()->resetZoom(); }); + connect(ui->actionZoomIn, &QAction::triggered, this, [this] { currentTab()->webControl()->zoomIn(); }); + connect(ui->actionZoomOut, &QAction::triggered, this, [this] { currentTab()->webControl()->zoomOut(); }); // Tools Menu connect(ui->actionDocsets, &QAction::triggered, this, [this]() { diff --git a/src/libs/ui/mainwindow.ui b/src/libs/ui/mainwindow.ui index ed423fbe..1bd3463c 100644 --- a/src/libs/ui/mainwindow.ui +++ b/src/libs/ui/mainwindow.ui @@ -65,7 +65,7 @@ 0 0 900 - 20 + 23 @@ -91,6 +91,9 @@ &Edit + + + @@ -180,6 +183,21 @@ &Docsets… + + + Zoon &In + + + + + Zoom &Out + + + + + &Reset Zoom + +