From 0a8b878e3bc152e079c12801cb0bfe9e89204440 Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Thu, 21 Jun 2012 14:26:39 -0300 Subject: Fix saving the opened urls when closing snowshoe Summary: There are three ways we can close Snowshoe 1) Closing the window from the Window Manager. 2) Using Ctrl-Shift-Q shortcut. 3) Using Ctrl-W to close last tab. The cases (2) and (3) were quitting and leaking the BrowserWindow, so ApplicationStateTracker destructor would not get called, and the tabs opened were not persisted. Fixed this by closing the window instead of quitting directly, so other cases work like case (1). However QWindow::close() is not enough. I've created a bug for it, but meanwhile we workaround by having our own close method. Reviewers: darktears Reviewed By: darktears Differential Revision: http://review.qtlabs.org.br/D5 --- src/desktop/BrowserWindow.cpp | 8 ++++++++ src/desktop/BrowserWindow.h | 2 ++ src/desktop/qml/TabWidget.js | 2 +- src/desktop/qml/main.qml | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/desktop/BrowserWindow.cpp b/src/desktop/BrowserWindow.cpp index b5a22a7..522f44c 100644 --- a/src/desktop/BrowserWindow.cpp +++ b/src/desktop/BrowserWindow.cpp @@ -101,6 +101,14 @@ QString BrowserWindow::decideDownloadPath(const QString& suggestedFilename) return homeDir.filePath(fallbackFilename.arg(i)); } +void BrowserWindow::closeWindow() +{ + // This is a workaround because the Close event is not sent for this window when close() is called. + // See https://bugreports.qt-project.org/browse/QTBUG-26266. + close(); + deleteLater(); +} + void BrowserWindow::moveEvent(QMoveEvent* event) { m_stateTracker.setWindowGeometry(geometry()); diff --git a/src/desktop/BrowserWindow.h b/src/desktop/BrowserWindow.h index 3a68118..6196f2a 100644 --- a/src/desktop/BrowserWindow.h +++ b/src/desktop/BrowserWindow.h @@ -35,6 +35,8 @@ public: // FIXME: Move to appropriate object exposed to handle download. Q_INVOKABLE QString decideDownloadPath(const QString& suggestedPath); + Q_INVOKABLE void closeWindow(); + protected: virtual bool event(QEvent*); virtual void moveEvent(QMoveEvent*); diff --git a/src/desktop/qml/TabWidget.js b/src/desktop/qml/TabWidget.js index 2770dbf..025b882 100644 --- a/src/desktop/qml/TabWidget.js +++ b/src/desktop/qml/TabWidget.js @@ -106,7 +106,7 @@ function closeTab(tab) if (tabArray.length == 1) { tabArray.pop() updateUrlsOpened() - Qt.quit() + BrowserWindow.closeWindow() return } diff --git a/src/desktop/qml/main.qml b/src/desktop/qml/main.qml index 8c5670d..21b98d7 100644 --- a/src/desktop/qml/main.qml +++ b/src/desktop/qml/main.qml @@ -192,7 +192,7 @@ Item { Shortcut { key: "Ctrl+Shift+Q" - onTriggered: Qt.quit() + onTriggered: BrowserWindow.closeWindow() } Shortcut { -- cgit v1.2.1