diff options
author | Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> | 2012-06-21 14:26:39 -0300 |
---|---|---|
committer | Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org> | 2012-06-21 15:07:07 -0300 |
commit | 0a8b878e3bc152e079c12801cb0bfe9e89204440 (patch) | |
tree | 565efe12d08b702e73df9175181a340f3d643053 | |
parent | 05703859cf7f236f4114036206b82b5c25d5965d (diff) | |
download | snowshoe-0a8b878e3bc152e079c12801cb0bfe9e89204440.tar.gz |
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
-rw-r--r-- | src/desktop/BrowserWindow.cpp | 8 | ||||
-rw-r--r-- | src/desktop/BrowserWindow.h | 2 | ||||
-rw-r--r-- | src/desktop/qml/TabWidget.js | 2 | ||||
-rw-r--r-- | 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 { |