|
25 | 25 | #include "searchsidebar.h"
|
26 | 26 | #include "widgets/layouthelper.h"
|
27 | 27 | #include "widgets/toolbarframe.h"
|
| 28 | +#include "widgets/browserzoomwidget.h" |
28 | 29 |
|
29 | 30 | #include <browser/webcontrol.h>
|
30 | 31 | #include <core/application.h>
|
|
37 | 38 | #include <QKeyEvent>
|
38 | 39 | #include <QLabel>
|
39 | 40 | #include <QMenu>
|
| 41 | +#include <QPushButton> |
40 | 42 | #include <QStyle>
|
41 | 43 | #include <QToolButton>
|
42 | 44 | #include <QVBoxLayout>
|
43 | 45 | #include <QWebEngineHistory>
|
| 46 | +#include <QWidgetAction> |
44 | 47 |
|
45 | 48 | using namespace Zeal;
|
46 | 49 | using namespace Zeal::WidgetUi;
|
@@ -131,22 +134,38 @@ BrowserTab::BrowserTab(QWidget *parent)
|
131 | 134 | m_browserActionButton->setArrowType(Qt::NoArrow);
|
132 | 135 | m_browserActionButton->setPopupMode(QToolButton::InstantPopup);
|
133 | 136 |
|
134 |
| - auto browserActionsMenu = new QMenu(m_browserActionButton); |
| 137 | + auto zoomActionWidget = new BrowserZoomWidget(); |
135 | 138 |
|
136 |
| - m_browserZoomInAction = browserActionsMenu->addAction(tr("Zoom In"), [this] () { |
| 139 | + connect(zoomActionWidget->zoomInButton(), &QPushButton::clicked, [this, zoomActionWidget]() { |
137 | 140 | m_webControl->zoomIn();
|
| 141 | + const auto zoomLevel = QString("%1%").arg(m_webControl->zoomLevelPercentage()); |
| 142 | + zoomActionWidget->zoomLevelLabel()->setText(zoomLevel); |
138 | 143 | });
|
139 | 144 |
|
140 |
| - m_browserZoomOutAction = browserActionsMenu->addAction(tr("Zoom Out"), [this] () { |
| 145 | + connect(zoomActionWidget->zoomOutButton(), &QPushButton::clicked, [this, zoomActionWidget]() { |
141 | 146 | m_webControl->zoomOut();
|
| 147 | + const auto zoomLevel = QString("%1%").arg(m_webControl->zoomLevelPercentage()); |
| 148 | + zoomActionWidget->zoomLevelLabel()->setText(zoomLevel); |
142 | 149 | });
|
143 | 150 |
|
144 |
| - m_browserResetZoomAction = browserActionsMenu->addAction(tr("Reset Zoom"), [this] () { |
| 151 | + connect(zoomActionWidget->resetZoomButton(), &QPushButton::clicked, [this, zoomActionWidget]() { |
145 | 152 | m_webControl->resetZoom();
|
| 153 | + const auto zoomLevel = QString("%1%").arg(m_webControl->zoomLevelPercentage()); |
| 154 | + zoomActionWidget->zoomLevelLabel()->setText(zoomLevel); |
| 155 | + }); |
| 156 | + |
| 157 | + auto zoomWidgetAction = new QWidgetAction(this); |
| 158 | + zoomWidgetAction->setDefaultWidget(zoomActionWidget); |
| 159 | + |
| 160 | + auto browserActionsMenu = new QMenu(m_browserActionButton); |
| 161 | + browserActionsMenu->addAction(zoomWidgetAction); |
| 162 | + |
| 163 | + connect(browserActionsMenu, &QMenu::aboutToShow, [this, zoomActionWidget] () { |
| 164 | + const auto zoomLevel = QString("%1%").arg(m_webControl->zoomLevelPercentage()); |
| 165 | + zoomActionWidget->zoomLevelLabel()->setText(zoomLevel); |
146 | 166 | });
|
147 | 167 |
|
148 | 168 | m_browserActionButton->setMenu(browserActionsMenu);
|
149 |
| - browserActionsMenu->installEventFilter(this); |
150 | 169 |
|
151 | 170 | auto toolBarLayout = new QHBoxLayout();
|
152 | 171 | toolBarLayout->setContentsMargins(4, 0, 4, 0);
|
@@ -246,28 +265,3 @@ QIcon BrowserTab::docsetIcon(const QUrl &url) const
|
246 | 265 | Registry::Docset *docset = Core::Application::instance()->docsetRegistry()->docsetForUrl(url);
|
247 | 266 | return docset ? docset->icon() : QIcon(QStringLiteral(":/icons/logo/icon.png"));
|
248 | 267 | }
|
249 |
| - |
250 |
| -bool BrowserTab::eventFilter(QObject *watched, QEvent *event) |
251 |
| -{ |
252 |
| - if (watched == m_browserActionButton->menu()) { |
253 |
| - QAction *triggeredAction = nullptr; |
254 |
| - |
255 |
| - if (event->type() == QEvent::MouseButtonRelease) { |
256 |
| - triggeredAction = m_browserActionButton->menu()->activeAction(); |
257 |
| - } else if (event->type() == QEvent::KeyPress) { |
258 |
| - const auto *keyEvent = static_cast<QKeyEvent *>(event); |
259 |
| - |
260 |
| - if (keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return) { |
261 |
| - triggeredAction = m_browserActionButton->menu()->activeAction(); |
262 |
| - } |
263 |
| - } |
264 |
| - |
265 |
| - if (triggeredAction |
266 |
| - && (triggeredAction == m_browserZoomInAction || triggeredAction == m_browserZoomOutAction)) { |
267 |
| - triggeredAction->trigger(); |
268 |
| - return true; |
269 |
| - } |
270 |
| - } |
271 |
| - |
272 |
| - return false; |
273 |
| -} |
0 commit comments