mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 02:36:34 +01:00
Use QWebEnginePage::RequestClose action to close tabs
It is no longer to use hacky onbeforeunload javascript handling when closing tabs.
This commit is contained in:
parent
e127000cb7
commit
1a068e8c7d
@ -1413,7 +1413,7 @@ void BrowserWindow::closeTab()
|
||||
{
|
||||
// Don't close pinned tabs with keyboard shortcuts (Ctrl+W, Ctrl+F4)
|
||||
if (weView() && !weView()->webTab()->isPinned()) {
|
||||
m_tabWidget->closeTab();
|
||||
m_tabWidget->requestCloseTab();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -393,7 +393,7 @@ void TabBar::updatePinnedTabCloseButton(int index)
|
||||
|
||||
void TabBar::closeCurrentTab()
|
||||
{
|
||||
m_tabWidget->closeTab(currentIndex());
|
||||
m_tabWidget->requestCloseTab(currentIndex());
|
||||
}
|
||||
|
||||
void TabBar::closeTabFromButton()
|
||||
@ -410,7 +410,7 @@ void TabBar::closeTabFromButton()
|
||||
}
|
||||
|
||||
if (tabToClose != -1) {
|
||||
m_tabWidget->closeTab(tabToClose);
|
||||
m_tabWidget->requestCloseTab(tabToClose);
|
||||
}
|
||||
}
|
||||
|
||||
@ -577,7 +577,7 @@ void TabBar::mouseReleaseEvent(QMouseEvent* event)
|
||||
|
||||
int id = tabAt(event->pos());
|
||||
if (id != -1) {
|
||||
m_tabWidget->closeTab(id);
|
||||
m_tabWidget->requestCloseTab(id);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -51,7 +51,6 @@ signals:
|
||||
void reloadTab(int index);
|
||||
void stopTab(int index);
|
||||
void closeAllButCurrent(int index);
|
||||
void closeTab(int index);
|
||||
void duplicateTab(int index);
|
||||
void detachTab(int index);
|
||||
|
||||
@ -63,7 +62,7 @@ private slots:
|
||||
|
||||
void reloadTab() { emit reloadTab(m_clickedTab); }
|
||||
void stopTab() { emit stopTab(m_clickedTab); }
|
||||
void closeTab() { emit closeTab(m_clickedTab); }
|
||||
void closeTab() { emit tabCloseRequested(m_clickedTab); }
|
||||
void duplicateTab() { emit duplicateTab(m_clickedTab); }
|
||||
void detachTab() { emit detachTab(m_clickedTab); }
|
||||
|
||||
|
@ -124,10 +124,9 @@ TabWidget::TabWidget(BrowserWindow* window, QWidget* parent)
|
||||
connect(this, SIGNAL(currentChanged(int)), m_window, SLOT(refreshHistory()));
|
||||
connect(this, SIGNAL(changed()), mApp, SLOT(changeOcurred()));
|
||||
|
||||
connect(m_tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(closeTab(int)));
|
||||
connect(m_tabBar, SIGNAL(tabCloseRequested(int)), this, SLOT(requestCloseTab(int)));
|
||||
connect(m_tabBar, SIGNAL(reloadTab(int)), this, SLOT(reloadTab(int)));
|
||||
connect(m_tabBar, SIGNAL(stopTab(int)), this, SLOT(stopTab(int)));
|
||||
connect(m_tabBar, SIGNAL(closeTab(int)), this, SLOT(closeTab(int)));
|
||||
connect(m_tabBar, SIGNAL(closeAllButCurrent(int)), this, SLOT(closeAllButCurrent(int)));
|
||||
connect(m_tabBar, SIGNAL(duplicateTab(int)), this, SLOT(duplicateTab(int)));
|
||||
connect(m_tabBar, SIGNAL(detachTab(int)), this, SLOT(detachTab(int)));
|
||||
@ -138,7 +137,7 @@ TabWidget::TabWidget(BrowserWindow* window, QWidget* parent)
|
||||
connect(mApp, SIGNAL(settingsReloaded()), this, SLOT(loadSettings()));
|
||||
|
||||
m_menuTabs = new MenuTabs(this);
|
||||
connect(m_menuTabs, SIGNAL(closeTab(int)), this, SLOT(closeTab(int)));
|
||||
connect(m_menuTabs, SIGNAL(closeTab(int)), this, SLOT(requestCloseTab(int)));
|
||||
|
||||
m_menuClosedTabs = new QMenu(this);
|
||||
|
||||
@ -414,46 +413,21 @@ void TabWidget::addTabFromClipboard()
|
||||
}
|
||||
}
|
||||
|
||||
void TabWidget::closeTab(int index, bool force)
|
||||
void TabWidget::closeTab(int index)
|
||||
{
|
||||
if (index == -1)
|
||||
index = currentIndex();
|
||||
|
||||
WebTab* webTab = weTab(index);
|
||||
WebTab *webTab = weTab(index);
|
||||
if (!webTab || !validIndex(index))
|
||||
return;
|
||||
|
||||
TabbedWebView* webView = webTab->webView();
|
||||
bool isRestorePage = webView->url().toString() == QL1S("qupzilla:restore");
|
||||
|
||||
// Don't close restore page!
|
||||
if (!force && isRestorePage && mApp->restoreManager())
|
||||
return;
|
||||
|
||||
// window.onbeforeunload handling
|
||||
if (!force && !webView->onBeforeUnload())
|
||||
return;
|
||||
TabbedWebView *webView = webTab->webView();
|
||||
|
||||
// Save tab url and history
|
||||
if (!isRestorePage)
|
||||
if (webView->url().toString() != QL1S("qupzilla:restore"))
|
||||
m_closedTabsManager->saveTab(webTab, index);
|
||||
|
||||
// This would close last tab, so we close the window instead
|
||||
if (!force && count() == 1) {
|
||||
// If we are not closing window upon closing last tab, let's just load new-tab-url
|
||||
if (m_dontCloseWithOneTab) {
|
||||
if (webView->url() == m_urlOnNewTab) {
|
||||
// We don't want to accumulate more than one closed tab, if user tries
|
||||
// to close the last tab multiple times
|
||||
m_closedTabsManager->takeLastClosedTab();
|
||||
}
|
||||
webView->load(m_urlOnNewTab);
|
||||
return;
|
||||
}
|
||||
m_window->close();
|
||||
return;
|
||||
}
|
||||
|
||||
m_locationBars->removeWidget(webView->webTab()->locationBar());
|
||||
disconnect(webView, SIGNAL(wantsCloseTab(int)), this, SLOT(closeTab(int)));
|
||||
disconnect(webView, SIGNAL(urlChanged(QUrl)), this, SIGNAL(changed()));
|
||||
@ -474,6 +448,40 @@ void TabWidget::closeTab(int index, bool force)
|
||||
emit changed();
|
||||
}
|
||||
|
||||
void TabWidget::requestCloseTab(int index)
|
||||
{
|
||||
if (index == -1)
|
||||
index = currentIndex();
|
||||
|
||||
WebTab *webTab = weTab(index);
|
||||
if (!webTab || !validIndex(index))
|
||||
return;
|
||||
|
||||
TabbedWebView *webView = webTab->webView();
|
||||
|
||||
// Don't close restore page!
|
||||
if (webView->url().toString() == QL1S("qupzilla:restore") && mApp->restoreManager())
|
||||
return;
|
||||
|
||||
// This would close last tab, so we close the window instead
|
||||
if (count() == 1) {
|
||||
// If we are not closing window upon closing last tab, let's just load new-tab-url
|
||||
if (m_dontCloseWithOneTab) {
|
||||
if (webView->url() == m_urlOnNewTab) {
|
||||
// We don't want to accumulate more than one closed tab, if user tries
|
||||
// to close the last tab multiple times
|
||||
m_closedTabsManager->takeLastClosedTab();
|
||||
}
|
||||
webView->load(m_urlOnNewTab);
|
||||
return;
|
||||
}
|
||||
m_window->close();
|
||||
return;
|
||||
}
|
||||
|
||||
webView->triggerPageAction(QWebEnginePage::RequestClose);
|
||||
}
|
||||
|
||||
void TabWidget::currentTabChanged(int index)
|
||||
{
|
||||
if (!validIndex(index))
|
||||
@ -590,7 +598,7 @@ void TabWidget::closeAllButCurrent(int index)
|
||||
if (akt == widget(tabIndex)) {
|
||||
continue;
|
||||
}
|
||||
closeTab(tabIndex);
|
||||
requestCloseTab(tabIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@ -856,7 +864,7 @@ void TabWidget::closeRecoveryTab()
|
||||
{
|
||||
foreach (WebTab* tab, allTabs(false)) {
|
||||
if (tab->url().toString() == QLatin1String("qupzilla:restore")) {
|
||||
closeTab(tab->tabIndex(), true);
|
||||
closeTab(tab->tabIndex());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -106,7 +106,11 @@ public slots:
|
||||
void addTabFromClipboard();
|
||||
int duplicateTab(int index);
|
||||
|
||||
void closeTab(int index = -1, bool force = false);
|
||||
// Force close tab
|
||||
void closeTab(int index = -1);
|
||||
// Request close tab (may be rejected)
|
||||
void requestCloseTab(int index = -1);
|
||||
|
||||
void reloadTab(int index);
|
||||
void reloadAllTabs();
|
||||
void stopTab(int index);
|
||||
|
@ -228,17 +228,6 @@ void WebView::restoreHistory(const QByteArray &data)
|
||||
m_page->setupWebChannel();
|
||||
}
|
||||
|
||||
bool WebView::onBeforeUnload()
|
||||
{
|
||||
const QString &source = QSL("window.onbeforeunload(new Event('beforeunload'))");
|
||||
const QString &res = page()->execJavaScript(source, 200).toString();
|
||||
|
||||
if (!res.isEmpty())
|
||||
return page()->javaScriptConfirm(url(), res);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
QWidget *WebView::inputWidget() const
|
||||
{
|
||||
return qobject_cast<QWidget*>(m_rwhvqt);
|
||||
|
@ -57,9 +57,6 @@ public:
|
||||
|
||||
void restoreHistory(const QByteArray &data);
|
||||
|
||||
// Executes window.onbeforeunload, returns true if view can be closed
|
||||
bool onBeforeUnload();
|
||||
|
||||
void addNotification(QWidget* notif);
|
||||
bool eventFilter(QObject *obj, QEvent *event);
|
||||
|
||||
|
@ -216,11 +216,20 @@ void MouseGestures::rightGestured()
|
||||
|
||||
void MouseGestures::downRightGestured()
|
||||
{
|
||||
TabbedWebView *view = qobject_cast<TabbedWebView*>(m_view.data());
|
||||
if (!view)
|
||||
return;
|
||||
|
||||
BrowserWindow *window = view->browserWindow();
|
||||
if (!window)
|
||||
return;
|
||||
|
||||
TabWidget *tabWidget = window->tabWidget();
|
||||
if (!m_view) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_view.data()->closeView();
|
||||
tabWidget->requestCloseTab(view->tabIndex());
|
||||
}
|
||||
|
||||
void MouseGestures::downLeftGestured()
|
||||
|
@ -357,7 +357,7 @@ void TabManagerWidget::closeSelectedTabs(const QHash<BrowserWindow*, WebTab*> &t
|
||||
QList<WebTab*> tabs = tabsHash.values(mainWindow);
|
||||
|
||||
foreach (WebTab* webTab, tabs) {
|
||||
mainWindow->tabWidget()->closeTab(webTab->tabIndex());
|
||||
mainWindow->tabWidget()->requestCloseTab(webTab->tabIndex());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user