40 m_layout =
new QVBoxLayout(
this);
41 m_layout->setContentsMargins(0, 0, 0, 0);
42 m_layout->setSpacing(0);
47 auto *locationWidget =
new QWidget(
this);
48 auto *llayout =
new QVBoxLayout();
49 llayout->setContentsMargins(3, 3, 3, 5);
50 llayout->addWidget(m_locationBar);
51 locationWidget->setLayout(llayout);
53 m_statusBar =
new QStatusBar(
this);
54 m_statusBar->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
57 m_statusBar->addPermanentWidget(m_progressBar);
58 m_progressBar->hide();
60 m_view->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
63 m_notificationWidget =
new QWidget(
this);
64 m_notificationWidget->setAutoFillBackground(
true);
65 QPalette pal = m_notificationWidget->palette();
66 pal.setColor(QPalette::Window, pal.window().color().darker(110));
67 m_notificationWidget->setPalette(pal);
69 auto *nlayout =
new QVBoxLayout(m_notificationWidget);
70 nlayout->setSizeConstraint(QLayout::SetMinAndMaxSize);
71 nlayout->setContentsMargins(0, 0, 0, 0);
72 nlayout->setSpacing(1);
74 auto *viewSpacer =
new QWidget(
this);
75 pal = viewSpacer->palette();
76 pal.setColor(QPalette::Window, pal.window().color().darker(125));
77 viewSpacer->setPalette(pal);
78 viewSpacer->setFixedHeight(1);
79 viewSpacer->setAutoFillBackground(
true);
81 m_menuBar =
new QMenuBar(
this);
83 auto* menuFile =
new QMenu(tr(
"File"));
85 menuFile->addAction(QIcon::fromTheme(
QSL(
"document-print")), tr(
"&Print..."), m_view, &
WebView::printPage)->setShortcut(QKeySequence(
QSL(
"Ctrl+P")));
86 menuFile->addSeparator();
87 menuFile->addAction(QIcon::fromTheme(
QSL(
"window-close")), tr(
"Close"),
this, &QWidget::close)->setShortcut(QKeySequence(
QSL(
"Ctrl+W")));
88 m_menuBar->addMenu(menuFile);
90 m_menuEdit =
new QMenu(tr(
"Edit"));
91 m_menuEdit->addAction(m_view->pageAction(QWebEnginePage::Undo));
92 m_menuEdit->addAction(m_view->pageAction(QWebEnginePage::Redo));
93 m_menuEdit->addSeparator();
94 m_menuEdit->addAction(m_view->pageAction(QWebEnginePage::Cut));
95 m_menuEdit->addAction(m_view->pageAction(QWebEnginePage::Copy));
96 m_menuEdit->addAction(m_view->pageAction(QWebEnginePage::Paste));
97 m_menuEdit->addSeparator();
98 m_menuEdit->addAction(m_view->pageAction(QWebEnginePage::SelectAll));
99 m_menuEdit->addAction(QIcon::fromTheme(
QSL(
"edit-find")), tr(
"Find"),
this, &PopupWindow::searchOnPage)->setShortcut(QKeySequence(
QSL(
"Ctrl+F")));
100 m_menuBar->addMenu(m_menuEdit);
102 m_menuView =
new QMenu(tr(
"View"));
103 m_actionStop = m_menuView->addAction(QIcon::fromTheme(
QSL(
"process-stop")), tr(
"&Stop"), m_view, &QWebEngineView::stop);
104 m_actionStop->setShortcut(QKeySequence(
QSL(
"Esc")));
105 m_actionReload = m_menuView->addAction(QIcon::fromTheme(
QSL(
"view-refresh")), tr(
"&Reload"), m_view, &QWebEngineView::reload);
106 m_actionReload->setShortcut(QKeySequence(
QSL(
"F5")));
107 m_menuView->addSeparator();
108 m_menuView->addAction(QIcon::fromTheme(
QSL(
"zoom-in")), tr(
"Zoom &In"), m_view, &
WebView::zoomIn)->setShortcut(QKeySequence(
QSL(
"Ctrl++")));
109 m_menuView->addAction(QIcon::fromTheme(
QSL(
"zoom-out")), tr(
"Zoom &Out"), m_view, &
WebView::zoomOut)->setShortcut(QKeySequence(
QSL(
"Ctrl+-")));
110 m_menuView->addAction(QIcon::fromTheme(
QSL(
"zoom-original")), tr(
"Reset"), m_view, &
WebView::zoomReset)->setShortcut(QKeySequence(
QSL(
"Ctrl+0")));
111 m_menuView->addSeparator();
112 m_menuView->addAction(QIcon::fromTheme(
QSL(
"text-html")), tr(
"&Page Source"), m_view, &
WebView::showSource)->setShortcut(QKeySequence(
QSL(
"Ctrl+U")));
113 m_menuBar->addMenu(m_menuView);
116 QList<QAction*> actions = m_menuBar->actions();
117 for (QAction* action : std::as_const(actions)) {
118 if (action->menu()) {
119 actions += action->menu()->actions();
124 auto *l =
new QVBoxLayout();
125 l->setContentsMargins(0, 0, 0, 0);
127 l->addWidget(m_view);
129 auto *viewWidget =
new QWidget(
this);
130 viewWidget->setLayout(l);
132 m_layout->insertWidget(0, m_menuBar);
133 m_layout->addWidget(locationWidget);
134 m_layout->addWidget(viewSpacer);
135 m_layout->addWidget(viewWidget);
136 m_layout->addWidget(m_statusBar);
140 connect(m_view, &WebView::titleChanged,
this, &PopupWindow::titleChanged);
143 connect(m_view, &WebView::loadStarted,
this, &PopupWindow::loadStarted);
144 connect(m_view, &WebView::loadProgress,
this, &PopupWindow::loadProgress);
145 connect(m_view, &WebView::loadFinished,
this, &PopupWindow::loadFinished);
148 auto pageChanged = [
this](
WebPage *page) {
149 connect(page, &WebPage::linkHovered,
this, &PopupWindow::showStatusBarMessage);
152 pageChanged(m_view->
page());
158 QUrl urlToShow = m_view->url();
159 if (urlToShow.isEmpty()) {
160 urlToShow = m_view->
page()->requestedUrl();
163 m_locationBar->
showUrl(urlToShow);
165 if (
mApp->getWindow()) {
166 m_statusBar->setVisible(
mApp->getWindow()->statusBar()->isVisible());
167 m_menuBar->setVisible(
mApp->getWindow()->menuBar()->isVisible());
169 if (m_menuBar->isHidden())
170 m_layout->setContentsMargins(0, 2, 0, 0);
175 m_layout->invalidate();
176 m_layout->activate();
189void PopupWindow::showNotification(QWidget* notif)
191 m_notificationWidget->setParent(
nullptr);
193 m_notificationWidget->setFixedWidth(m_view->width());
194 m_notificationWidget->layout()->addWidget(notif);
195 m_notificationWidget->show();
199void PopupWindow::showStatusBarMessage(
const QString &message)
201 if (message.isEmpty()) {
209void PopupWindow::loadStarted()
212 m_progressBar->show();
217 m_actionStop->setEnabled(
true);
218 m_actionReload->setEnabled(
false);
222void PopupWindow::loadProgress(
int value)
227void PopupWindow::loadFinished()
229 m_progressBar->hide();
234 m_actionStop->setEnabled(
false);
235 m_actionReload->setEnabled(
true);
239void PopupWindow::closeEvent(QCloseEvent* event)
246 m_view->deleteLater();
251void PopupWindow::resizeEvent(QResizeEvent *event)
253 QWidget::resizeEvent(event);
255 m_notificationWidget->setFixedWidth(m_view->width());
258void PopupWindow::searchOnPage()
262 m_search.data()->showMinimalInPopupWindow();
263 m_layout->insertWidget(m_layout->count() - 1, m_search);
266 m_search->focusSearchLine();
269void PopupWindow::titleChanged()
271 setWindowTitle(tr(
"%1 - Falkon").arg(m_view->
title()));
280 if (!newRect.topLeft().isNull() && newRect.size().isNull()) {
281 newRect.setSize(QSize(550, 585));
284 if (newRect.isValid()) {
285 QRect oldRect = rect();
286 move(newRect.topLeft());
288 QSize newSize = newRect.size();
289 int additionalHeight = height() - m_view->height();
290 newSize.setHeight(newSize.height() + additionalHeight);
293 if (newRect.topLeft() == QPoint(0, 0) && oldRect.topLeft() == QPoint(0, 0)) {
void showNotification(QWidget *)
void pageChanged(WebPage *page)
void privacyChanged(bool)
QString title(bool allowEmpty=false) const
int value(const QColor &c)