34
34
#include < registry/searchquery.h>
35
35
36
36
#include < QApplication>
37
+ #include < QKeyEvent>
37
38
#include < QLabel>
38
39
#include < QMenu>
39
40
#include < QStyle>
@@ -124,6 +125,28 @@ BrowserTab::BrowserTab(QWidget *parent)
124
125
125
126
label->setText (title);
126
127
});
128
+ m_browserActionButton = new QToolButton ();
129
+ m_browserActionButton->setAutoRaise (true );
130
+ m_browserActionButton->setText (QStringLiteral (" ⋮" ));
131
+ m_browserActionButton->setArrowType (Qt::NoArrow);
132
+ m_browserActionButton->setPopupMode (QToolButton::InstantPopup);
133
+
134
+ auto browserActionsMenu = new QMenu (m_browserActionButton);
135
+
136
+ m_browserZoomInAction = browserActionsMenu->addAction (tr (" Zoom In" ), [this ] () {
137
+ m_webControl->zoomIn ();
138
+ });
139
+
140
+ m_browserZoomOutAction = browserActionsMenu->addAction (tr (" Zoom Out" ), [this ] () {
141
+ m_webControl->zoomOut ();
142
+ });
143
+
144
+ m_browserResetZoomAction = browserActionsMenu->addAction (tr (" Reset Zoom" ), [this ] () {
145
+ m_webControl->resetZoom ();
146
+ });
147
+
148
+ m_browserActionButton->setMenu (browserActionsMenu);
149
+ browserActionsMenu->installEventFilter (this );
127
150
128
151
auto toolBarLayout = new QHBoxLayout ();
129
152
toolBarLayout->setContentsMargins (4 , 0 , 4 , 0 );
@@ -132,6 +155,7 @@ BrowserTab::BrowserTab(QWidget *parent)
132
155
toolBarLayout->addWidget (m_backButton);
133
156
toolBarLayout->addWidget (m_forwardButton);
134
157
toolBarLayout->addWidget (label, 1 );
158
+ toolBarLayout->addWidget (m_browserActionButton);
135
159
136
160
auto toolBarFrame = new ToolBarFrame ();
137
161
toolBarFrame->setLayout (toolBarLayout);
@@ -222,3 +246,28 @@ QIcon BrowserTab::docsetIcon(const QUrl &url) const
222
246
Registry::Docset *docset = Core::Application::instance ()->docsetRegistry ()->docsetForUrl (url);
223
247
return docset ? docset->icon () : QIcon (QStringLiteral (" :/icons/logo/icon.png" ));
224
248
}
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