Falkon Develop
Cross-platform Qt-based web browser
navigationbar.cpp
Go to the documentation of this file.
1/* ============================================================
2* Falkon - Qt web browser
3* Copyright (C) 2010-2018 David Rosca <nowrep@gmail.com>
4*
5* This program is free software: you can redistribute it and/or modify
6* it under the terms of the GNU General Public License as published by
7* the Free Software Foundation, either version 3 of the License, or
8* (at your option) any later version.
9*
10* This program is distributed in the hope that it will be useful,
11* but WITHOUT ANY WARRANTY; without even the implied warranty of
12* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13* GNU General Public License for more details.
14*
15* You should have received a copy of the GNU General Public License
16* along with this program. If not, see <http://www.gnu.org/licenses/>.
17* ============================================================ */
18#include "navigationbar.h"
19#include "toolbutton.h"
20#include "browserwindow.h"
21#include "mainapplication.h"
22#include "iconprovider.h"
23#include "websearchbar.h"
24#include "reloadstopbutton.h"
25#include "enhancedmenu.h"
26#include "tabwidget.h"
27#include "tabbedwebview.h"
28#include "webpage.h"
29#include "qzsettings.h"
30#include "qztools.h"
34
35#include <QTimer>
36#include <QSplitter>
37#include <QHBoxLayout>
38#include <QStackedWidget>
39#include <QWebEngineHistory>
40#include <QMouseEvent>
41#include <QStyleOption>
42
43static QString titleForUrl(QString title, const QUrl &url)
44{
45 if (title.isEmpty()) {
46 title = url.toString(QUrl::RemoveFragment);
47 }
48 if (title.isEmpty()) {
49 return NavigationBar::tr("Empty Page");
50 }
51 return QzTools::truncatedText(title, 40);
52}
53
54static QIcon iconForPage(const QUrl &url, const QIcon &sIcon)
55{
56 QIcon icon;
57 icon.addPixmap(IconProvider::iconForUrl(url).pixmap(16));
58 icon.addPixmap(sIcon.pixmap(16), QIcon::Active);
59 return icon;
60}
61
63 : QWidget(window)
64 , m_window(window)
65{
66 setObjectName(QSL("navigationbar"));
67
68 m_layout = new QHBoxLayout(this);
69 auto contentsMargin = style()->pixelMetric(QStyle::PM_ToolBarItemMargin, nullptr, this)
70 + style()->pixelMetric(QStyle::PM_ToolBarFrameWidth, nullptr, this);
71 m_layout->setContentsMargins(contentsMargin, contentsMargin, contentsMargin, contentsMargin);
72 m_layout->setSpacing(style()->pixelMetric(QStyle::PM_ToolBarItemSpacing, nullptr, this));
73 setLayout(m_layout);
74
75 m_buttonBack = new ToolButton(this);
76 m_buttonBack->setObjectName("navigation-button-back");
77 m_buttonBack->setToolTip(tr("Back"));
78 m_buttonBack->setToolButtonStyle(Qt::ToolButtonIconOnly);
79 m_buttonBack->setToolbarButtonLook(true);
80 m_buttonBack->setShowMenuOnRightClick(true);
81 m_buttonBack->setAutoRaise(true);
82 m_buttonBack->setEnabled(false);
83 m_buttonBack->setFocusPolicy(Qt::NoFocus);
84
85 m_buttonForward = new ToolButton(this);
86 m_buttonForward->setObjectName("navigation-button-next");
87 m_buttonForward->setToolTip(tr("Forward"));
88 m_buttonForward->setToolButtonStyle(Qt::ToolButtonIconOnly);
89 m_buttonForward->setToolbarButtonLook(true);
90 m_buttonForward->setShowMenuOnRightClick(true);
91 m_buttonForward->setAutoRaise(true);
92 m_buttonForward->setEnabled(false);
93 m_buttonForward->setFocusPolicy(Qt::NoFocus);
94
95 auto* backNextLayout = new QHBoxLayout();
96 backNextLayout->setContentsMargins(0, 0, 0, 0);
97 backNextLayout->setSpacing(0);
98 backNextLayout->addWidget(m_buttonBack);
99 backNextLayout->addWidget(m_buttonForward);
100 auto *backNextWidget = new QWidget(this);
101 backNextWidget->setLayout(backNextLayout);
102
103 m_reloadStop = new ReloadStopButton(this);
104
105 auto *buttonHome = new ToolButton(this);
106 buttonHome->setObjectName("navigation-button-home");
107 buttonHome->setToolTip(tr("Home"));
108 buttonHome->setToolButtonStyle(Qt::ToolButtonIconOnly);
109 buttonHome->setToolbarButtonLook(true);
110 buttonHome->setAutoRaise(true);
111 buttonHome->setFocusPolicy(Qt::NoFocus);
112
113 auto *buttonAddTab = new ToolButton(this);
114 buttonAddTab->setObjectName("navigation-button-addtab");
115 buttonAddTab->setToolTip(tr("New Tab"));
116 buttonAddTab->setToolButtonStyle(Qt::ToolButtonIconOnly);
117 buttonAddTab->setToolbarButtonLook(true);
118 buttonAddTab->setAutoRaise(true);
119 buttonAddTab->setFocusPolicy(Qt::NoFocus);
120
121 m_menuBack = new Menu(this);
122 m_menuBack->setCloseOnMiddleClick(true);
123 m_buttonBack->setMenu(m_menuBack);
124 connect(m_buttonBack, &ToolButton::aboutToShowMenu, this, &NavigationBar::aboutToShowHistoryBackMenu);
125
126 m_menuForward = new Menu(this);
127 m_menuForward->setCloseOnMiddleClick(true);
128 m_buttonForward->setMenu(m_menuForward);
129 connect(m_buttonForward, &ToolButton::aboutToShowMenu, this, &NavigationBar::aboutToShowHistoryNextMenu);
130
131 auto *buttonTools = new ToolButton(this);
132 buttonTools->setObjectName("navigation-button-tools");
133 buttonTools->setPopupMode(QToolButton::InstantPopup);
134 buttonTools->setToolbarButtonLook(true);
135 buttonTools->setToolTip(tr("Tools"));
136 buttonTools->setAutoRaise(true);
137 buttonTools->setFocusPolicy(Qt::NoFocus);
138 buttonTools->setShowMenuInside(true);
139
140 m_menuTools = new Menu(this);
141 buttonTools->setMenu(m_menuTools);
142 connect(buttonTools, &ToolButton::aboutToShowMenu, this, &NavigationBar::aboutToShowToolsMenu);
143
144 m_supMenu = new ToolButton(this);
145 m_supMenu->setObjectName("navigation-button-supermenu");
146 m_supMenu->setPopupMode(QToolButton::InstantPopup);
147 m_supMenu->setToolbarButtonLook(true);
148 m_supMenu->setToolTip(tr("Main Menu"));
149 m_supMenu->setAutoRaise(true);
150 m_supMenu->setFocusPolicy(Qt::NoFocus);
151 m_supMenu->setMenu(m_window->superMenu());
152 m_supMenu->setShowMenuInside(true);
153
154 m_searchLine = new WebSearchBar(m_window);
155
156 m_navigationSplitter = new QSplitter(this);
157 m_navigationSplitter->addWidget(m_window->tabWidget()->locationBars());
158 m_navigationSplitter->addWidget(m_searchLine);
159
160 m_navigationSplitter->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum);
161 m_navigationSplitter->setCollapsible(0, false);
162
163 m_exitFullscreen = new ToolButton(this);
164 m_exitFullscreen->setObjectName("navigation-button-exitfullscreen");
165 m_exitFullscreen->setToolTip(tr("Exit Fullscreen"));
166 m_exitFullscreen->setToolButtonStyle(Qt::ToolButtonIconOnly);
167 m_exitFullscreen->setToolbarButtonLook(true);
168 m_exitFullscreen->setFocusPolicy(Qt::NoFocus);
169 m_exitFullscreen->setAutoRaise(true);
170 m_exitFullscreen->setVisible(false);
171
172 setContextMenuPolicy(Qt::CustomContextMenu);
173 connect(this, &QWidget::customContextMenuRequested, this, &NavigationBar::contextMenuRequested);
174
175 connect(m_buttonBack, &QAbstractButton::clicked, this, &NavigationBar::goBack);
177 connect(m_buttonBack, &ToolButton::controlClicked, this, &NavigationBar::goBackInNewTab);
178 connect(m_buttonForward, &QAbstractButton::clicked, this, &NavigationBar::goForward);
179 connect(m_buttonForward, &ToolButton::middleMouseClicked, this, &NavigationBar::goForwardInNewTab);
180 connect(m_buttonForward, &ToolButton::controlClicked, this, &NavigationBar::goForwardInNewTab);
181
182 connect(m_reloadStop, &ReloadStopButton::stopClicked, this, &NavigationBar::stop);
183 connect(m_reloadStop, &ReloadStopButton::reloadClicked, this, &NavigationBar::reload);
184 connect(buttonHome, &QAbstractButton::clicked, m_window, &BrowserWindow::goHome);
185 connect(buttonHome, &ToolButton::middleMouseClicked, m_window, &BrowserWindow::goHomeInNewTab);
186 connect(buttonHome, &ToolButton::controlClicked, m_window, &BrowserWindow::goHomeInNewTab);
187 connect(buttonAddTab, &QAbstractButton::clicked, m_window, &BrowserWindow::addTab);
188 connect(buttonAddTab, &ToolButton::middleMouseClicked, m_window->tabWidget(), &TabWidget::addTabFromClipboard);
189 connect(m_exitFullscreen, &QAbstractButton::clicked, m_window, &BrowserWindow::toggleFullScreen);
190
191 addWidget(backNextWidget, QSL("button-backforward"), tr("Back and Forward buttons"));
192 addWidget(m_reloadStop, QSL("button-reloadstop"), tr("Reload button"));
193 addWidget(buttonHome, QSL("button-home"), tr("Home button"));
194 addWidget(buttonAddTab, QSL("button-addtab"), tr("Add tab button"));
195 addWidget(m_navigationSplitter, QSL("locationbar"), tr("Address and Search bar"));
196 addWidget(buttonTools, QSL("button-tools"), tr("Tools button"));
197 addWidget(m_exitFullscreen, QSL("button-exitfullscreen"), tr("Exit Fullscreen button"));
198
199 loadSettings();
200}
201
203{
204 setCurrentView(nullptr);
205}
206
207void NavigationBar::setSplitterSizes(int locationBar, int websearchBar)
208{
209 QList<int> sizes;
210
211 if (locationBar == 0) {
212 int splitterWidth = m_navigationSplitter->width();
213 sizes << (int)((double)splitterWidth * .80) << (int)((double)splitterWidth * .20);
214 }
215 else {
216 sizes << locationBar << websearchBar;
217 }
218
219 m_navigationSplitter->setSizes(sizes);
220}
221
223{
224 for (const WidgetData &data : std::as_const(m_widgets)) {
225 if (data.button) {
226 data.button->setWebView(view);
227 }
228 }
229
230 if (!view) {
231 return;
232 }
233
234 auto connectPageActions = [this](QWebEnginePage *page) {
235 auto updateButton = [](ToolButton *button, QAction *action) {
236 button->setEnabled(action->isEnabled());
237 };
238 auto updateBackButton = std::bind(updateButton, m_buttonBack, page->action(QWebEnginePage::Back));
239 auto updateForwardButton = std::bind(updateButton, m_buttonForward, page->action(QWebEnginePage::Forward));
240
241 updateBackButton();
242 updateForwardButton();
243
244 disconnect(m_backConnection);
245 disconnect(m_forwardConnection);
246 m_backConnection = connect(page->action(QWebEnginePage::Back), &QAction::changed, this, updateBackButton);
247 m_forwardConnection = connect(page->action(QWebEnginePage::Forward), &QAction::changed, this, updateForwardButton);
248 };
249
250 connectPageActions(view->page());
251 connect(view, &TabbedWebView::pageChanged, this, connectPageActions);
252}
253
255{
256 m_reloadStop->showReloadButton();
257}
258
260{
261 m_reloadStop->showStopButton();
262}
263
265{
266 if (m_layout->indexOf(m_exitFullscreen) != -1) {
267 m_exitFullscreen->show();
268 }
269}
270
272{
273 if (m_layout->indexOf(m_exitFullscreen) != -1) {
274 m_exitFullscreen->hide();
275 }
276}
277
279{
280 m_supMenu->setVisible(visible);
281}
282
284{
285 // NOTE: This assumes margins are always the same.
286 return m_layout->contentsMargins().left();
287}
288
290{
291 m_layout->setContentsMargins(margin, margin, margin, margin);
292}
293
295{
296 return m_layout->spacing();
297}
298
300{
301 m_layout->setSpacing(spacing);
302}
303
304void NavigationBar::addWidget(QWidget *widget, const QString &id, const QString &name)
305{
306 if (!widget || id.isEmpty() || name.isEmpty()) {
307 return;
308 }
309
310 WidgetData data;
311 data.id = id;
312 data.name = name;
313 data.widget = widget;
314 m_widgets[id] = data;
315
316 reloadLayout();
317}
318
319void NavigationBar::removeWidget(const QString &id)
320{
321 if (!m_widgets.contains(id)) {
322 return;
323 }
324
325 m_widgets.remove(id);
326 reloadLayout();
327}
328
330{
331 if (!button || !button->isValid()) {
332 return;
333 }
334
335 auto *toolButton = new NavigationBarToolButton(button, this);
336 toolButton->setProperty("button-id", button->id());
337 connect(toolButton, &NavigationBarToolButton::visibilityChangeRequested, this, [=]() {
338 if (m_layout->indexOf(toolButton) != -1) {
339 toolButton->updateVisibility();
340 }
341 });
342
343 WidgetData data;
344 data.id = button->id();
345 data.name = button->name();
346 data.widget = toolButton;
347 data.button = button;
348 m_widgets[data.id] = data;
349
350 data.button->setWebView(m_window->weView());
351
352 reloadLayout();
353}
354
356{
357 if (!button || !m_widgets.contains(button->id())) {
358 return;
359 }
360
361 delete m_widgets.take(button->id()).widget;
362}
363
364void NavigationBar::aboutToShowHistoryBackMenu()
365{
366 if (!m_menuBack || !m_window->weView()) {
367 return;
368 }
369 m_menuBack->clear();
370 QWebEngineHistory* history = m_window->weView()->history();
371
372 int curindex = history->currentItemIndex();
373 int count = 0;
374
375 for (int i = curindex - 1; i >= 0; i--) {
376 QWebEngineHistoryItem item = history->itemAt(i);
377 if (item.isValid()) {
378 QString title = titleForUrl(item.title(), item.url());
379
380 const QIcon icon = iconForPage(item.url(), IconProvider::standardIcon(QStyle::SP_ArrowBack));
381 auto* act = new Action(icon, title);
382 act->setData(i);
383 connect(act, &QAction::triggered, this, &NavigationBar::loadHistoryIndex);
384 connect(act, SIGNAL(ctrlTriggered()), this, SLOT(loadHistoryIndexInNewTab()));
385 m_menuBack->addAction(act);
386 }
387
388 count++;
389 if (count == 20) {
390 break;
391 }
392 }
393
394 m_menuBack->addSeparator();
395 m_menuBack->addAction(QIcon::fromTheme(QSL("edit-clear")), tr("Clear history"), this, &NavigationBar::clearHistory);
396}
397
398void NavigationBar::aboutToShowHistoryNextMenu()
399{
400 if (!m_menuForward || !m_window->weView()) {
401 return;
402 }
403 m_menuForward->clear();
404
405 QWebEngineHistory* history = m_window->weView()->history();
406 int curindex = history->currentItemIndex();
407 int count = 0;
408
409 for (int i = curindex + 1; i < history->count(); i++) {
410 QWebEngineHistoryItem item = history->itemAt(i);
411 if (item.isValid()) {
412 QString title = titleForUrl(item.title(), item.url());
413
414 const QIcon icon = iconForPage(item.url(), IconProvider::standardIcon(QStyle::SP_ArrowForward));
415 auto* act = new Action(icon, title);
416 act->setData(i);
417 connect(act, &QAction::triggered, this, &NavigationBar::loadHistoryIndex);
418 connect(act, SIGNAL(ctrlTriggered()), this, SLOT(loadHistoryIndexInNewTab()));
419 m_menuForward->addAction(act);
420 }
421
422 count++;
423 if (count == 20) {
424 break;
425 }
426 }
427
428 m_menuForward->addSeparator();
429 m_menuForward->addAction(QIcon::fromTheme(QSL("edit-clear")), tr("Clear history"), this, &NavigationBar::clearHistory);
430}
431
432void NavigationBar::aboutToShowToolsMenu()
433{
434 m_menuTools->clear();
435
436 m_window->createToolbarsMenu(m_menuTools->addMenu(tr("Toolbars")));
437 m_window->createSidebarsMenu(m_menuTools->addMenu(tr("Sidebar")));
438 m_menuTools->addSeparator();
439
440 for (const WidgetData &data : std::as_const(m_widgets)) {
441 AbstractButtonInterface *button = data.button;
442 if (button && (!button->isVisible() || !m_layoutIds.contains(data.id))) {
443 QString title = button->title();
444 if (!button->badgeText().isEmpty()) {
445 title.append(QSL(" (%1)").arg(button->badgeText()));
446 }
447 m_menuTools->addAction(button->icon(), title, this, &NavigationBar::toolActionActivated)->setData(data.id);
448 }
449 }
450
451 m_menuTools->addSeparator();
452 m_menuTools->addAction(IconProvider::settingsIcon(), tr("Configure Toolbar"), this, &NavigationBar::openConfigurationDialog);
453}
454
455void NavigationBar::clearHistory()
456{
457 QWebEngineHistory* history = m_window->weView()->page()->history();
458 history->clear();
459}
460
461void NavigationBar::contextMenuRequested(const QPoint &pos)
462{
463 QMenu menu;
464 m_window->createToolbarsMenu(&menu);
465 menu.addSeparator();
466 menu.addAction(IconProvider::settingsIcon(), tr("Configure Toolbar"), this, &NavigationBar::openConfigurationDialog);
467 menu.exec(mapToGlobal(pos));
468}
469
470void NavigationBar::openConfigurationDialog()
471{
472 auto *dialog = new NavigationBarConfigDialog(this);
473 dialog->show();
474}
475
476void NavigationBar::toolActionActivated()
477{
478 auto *act = qobject_cast<QAction*>(sender());
479 if (!act) {
480 return;
481 }
482 const QString id = act->data().toString();
483 if (!m_widgets.contains(id)) {
484 return;
485 }
486 WidgetData data = m_widgets.value(id);
487 if (!data.button) {
488 return;
489 }
490 auto *buttonTools = qobject_cast<ToolButton*>(m_widgets.value(QSL("button-tools")).widget);
491 if (!buttonTools) {
492 return;
493 }
494
496 c->visualParent = buttonTools;
497 c->popupPosition = [=](const QSize &size) {
498 QPoint pos = buttonTools->mapToGlobal(buttonTools->rect().bottomRight());
499 if (QApplication::isRightToLeft()) {
500 pos.setX(pos.x() - buttonTools->rect().width());
501 } else {
502 pos.setX(pos.x() - size.width());
503 }
504 c->popupOpened = true;
505 return pos;
506 };
507 c->popupClosed = [=]() {
508 buttonTools->setDown(false);
509 delete c;
510 };
511 Q_EMIT data.button->clicked(c);
512 if (c->popupOpened) {
513 buttonTools->setDown(true);
514 } else {
515 c->popupClosed();
516 }
517}
518
519void NavigationBar::loadSettings()
520{
521 const QStringList defaultIds = {
522 QSL("button-backforward"),
523 QSL("button-reloadstop"),
524 QSL("button-home"),
525 QSL("locationbar"),
526 QSL("button-downloads"),
527 QSL("adblock-icon"),
528 QSL("button-tools")
529 };
530
531 Settings settings;
532 settings.beginGroup(QSL("NavigationBar"));
533 m_layoutIds = settings.value(QSL("Layout"), defaultIds).toStringList();
534 m_searchLine->setVisible(settings.value(QSL("ShowSearchBar"), true).toBool());
535 settings.endGroup();
536
537 m_layoutIds.removeDuplicates();
538 m_layoutIds.removeAll(QString());
539 if (!m_layoutIds.contains(QSL("locationbar"))) {
540 m_layoutIds.append(QSL("locationbar"));
541 }
542
543 reloadLayout();
544}
545
546void NavigationBar::reloadLayout()
547{
548 if (m_widgets.isEmpty()) {
549 return;
550 }
551
552 setUpdatesEnabled(false);
553
554 // Clear layout
555 while (m_layout->count() != 0) {
556 QLayoutItem *item = m_layout->takeAt(0);
557 if (!item) {
558 continue;
559 }
560 QWidget *widget = item->widget();
561 if (!widget) {
562 continue;
563 }
564 widget->setParent(nullptr);
565 }
566
567 // Hide all widgets
568 for (const WidgetData &data : m_widgets) {
569 data.widget->hide();
570 }
571
572 // Add widgets to layout
573 for (const QString &id : std::as_const(m_layoutIds)) {
574 const WidgetData data = m_widgets.value(id);
575 if (data.widget) {
576 m_layout->addWidget(data.widget);
577 auto *button = qobject_cast<NavigationBarToolButton*>(data.widget);
578 if (button) {
579 button->updateVisibility();
580 } else {
581 data.widget->show();
582 }
583 }
584 }
585
586 m_layout->addWidget(m_supMenu);
587
588 // Make sure search bar is visible
589 if (m_searchLine->isVisible() && m_navigationSplitter->sizes().at(1) == 0) {
590 const int locationBarSize = m_navigationSplitter->sizes().at(0);
591 setSplitterSizes(locationBarSize - 50, 50);
592 }
593
594 if (m_window->isFullScreen()) {
596 } else {
598 }
599
600 setUpdatesEnabled(true);
601}
602
603void NavigationBar::loadHistoryIndex()
604{
605 QWebEngineHistory* history = m_window->weView()->page()->history();
606
607 if (auto* action = qobject_cast<QAction*>(sender())) {
608 loadHistoryItem(history->itemAt(action->data().toInt()));
609 }
610}
611
612void NavigationBar::loadHistoryIndexInNewTab(int index)
613{
614 if (auto* action = qobject_cast<QAction*>(sender())) {
615 index = action->data().toInt();
616 }
617
618 if (index == -1) {
619 return;
620 }
621
622 QWebEngineHistory* history = m_window->weView()->page()->history();
623 loadHistoryItemInNewTab(history->itemAt(index));
624}
625
627{
628 m_window->action(QSL("View/Stop"))->trigger();
629}
630
632{
633 m_window->action(QSL("View/Reload"))->trigger();
634}
635
637{
638 auto view = m_window->weView();
639 view->setFocus();
640 view->back();
641}
642
644{
645 QWebEngineHistory* history = m_window->weView()->page()->history();
646
647 if (!history->canGoBack()) {
648 return;
649 }
650
651 loadHistoryItemInNewTab(history->backItem());
652}
653
655{
656 auto view = m_window->weView();
657 view->setFocus();
658 view->forward();
659}
660
662{
663 QWebEngineHistory* history = m_window->weView()->page()->history();
664
665 if (!history->canGoForward()) {
666 return;
667 }
668
669 loadHistoryItemInNewTab(history->forwardItem());
670}
671
672void NavigationBar::loadHistoryItem(const QWebEngineHistoryItem &item)
673{
674 m_window->weView()->page()->history()->goToItem(item);
675}
676
677void NavigationBar::loadHistoryItemInNewTab(const QWebEngineHistoryItem &item)
678{
679 TabWidget* tabWidget = m_window->tabWidget();
680 int tabIndex = tabWidget->duplicateTab(tabWidget->currentIndex());
681
682 QWebEngineHistory* history = m_window->weView(tabIndex)->page()->history();
683 history->goToItem(item);
684
685 if (qzSettings->newTabPosition == Qz::NT_SelectedTab) {
686 tabWidget->setCurrentIndex(tabIndex);
687 }
688
689}
virtual QString id() const =0
virtual QString name() const =0
QAction * action(const QString &name) const
TabWidget * tabWidget() const
void createSidebarsMenu(QMenu *menu)
void toggleFullScreen()
QMenu * superMenu() const
TabbedWebView * weView() const
void createToolbarsMenu(QMenu *menu)
static QIcon settingsIcon()
static QIcon iconForUrl(const QUrl &url, bool allowNull=false)
static QIcon standardIcon(QStyle::StandardPixmap icon)
void setCloseOnMiddleClick(bool close)
void removeWidget(const QString &id)
void removeToolButton(AbstractButtonInterface *button)
void showReloadButton()
void setLayoutSpacing(int spacing)
void setLayoutMargin(int margin)
void setSplitterSizes(int locationBar, int websearchBar)
void enterFullScreen()
void goForwardInNewTab()
void leaveFullScreen()
void addWidget(QWidget *widget, const QString &id, const QString &name)
void setSuperMenuVisible(bool visible)
friend class NavigationBarConfigDialog
void setCurrentView(TabbedWebView *view)
void addToolButton(AbstractButtonInterface *button)
NavigationBar(BrowserWindow *window)
static QString truncatedText(const QString &text, int size)
Definition: qztools.cpp:458
void beginGroup(const QString &prefix)
Definition: settings.cpp:79
void endGroup()
Definition: settings.cpp:84
QVariant value(const QString &key, const QVariant &defaultValue=QVariant())
Definition: settings.cpp:74
int currentIndex() const
void setCurrentIndex(int index)
Definition: tabwidget.cpp:536
int duplicateTab(int index)
Definition: tabwidget.cpp:725
QStackedWidget * locationBars() const
Definition: tabwidget.cpp:818
void addTabFromClipboard()
Definition: tabwidget.cpp:427
void setMenu(QMenu *menu)
Definition: toolbutton.cpp:99
void controlClicked()
void setShowMenuInside(bool enable)
Definition: toolbutton.cpp:115
void setToolbarButtonLook(bool enable)
Definition: toolbutton.cpp:138
void aboutToShowMenu()
void middleMouseClicked()
void setShowMenuOnRightClick(bool enable)
Definition: toolbutton.cpp:128
WebPage * page() const
Definition: webview.cpp:132
void pageChanged(WebPage *page)
void forward()
Definition: webview.cpp:374
void back()
Definition: webview.cpp:363
@ NT_SelectedTab
Definition: qzcommon.h:97
i
Definition: i18n.py:23
#define QSL(x)
Definition: qzcommon.h:40
#define qzSettings
Definition: qzsettings.h:69