From 00dc4b9ace3b23cffc09115a9e05c06742dc01f1 Mon Sep 17 00:00:00 2001 From: Janek Bevendorff Date: Wed, 17 May 2017 10:05:45 +0200 Subject: [PATCH] Ignore double close event on macOS, resolves #430 --- src/gui/MainWindow.cpp | 15 +++++++++++---- src/gui/MainWindow.h | 4 +++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3d5fad9199..6a4117377f 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -103,9 +103,9 @@ const QString MainWindow::BaseWindowTitle = "KeePassXC"; MainWindow::MainWindow() : m_ui(new Ui::MainWindow()) , m_trayIcon(nullptr) + , m_appExitCalled(false) + , m_appExiting(false) { - appExitCalled = false; - m_ui->setupUi(this); // Setup the search widget in the toolbar @@ -347,7 +347,7 @@ MainWindow::~MainWindow() void MainWindow::appExit() { - appExitCalled = true; + m_appExitCalled = true; close(); } @@ -663,9 +663,15 @@ void MainWindow::databaseTabChanged(int tabIndex) void MainWindow::closeEvent(QCloseEvent* event) { + // ignore double close events (happens on macOS when closing from the dock) + if (m_appExiting) { + event->accept(); + return; + } + bool minimizeOnClose = isTrayIconEnabled() && config()->get("GUI/MinimizeOnClose").toBool(); - if (minimizeOnClose && !appExitCalled) + if (minimizeOnClose && !m_appExitCalled) { event->ignore(); hideWindow(); @@ -680,6 +686,7 @@ void MainWindow::closeEvent(QCloseEvent* event) bool accept = saveLastDatabases(); if (accept) { + m_appExiting = true; saveWindowInformation(); event->accept(); diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 72082e4ed5..fffc634a99 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -40,6 +40,7 @@ class MainWindow : public QMainWindow public: MainWindow(); ~MainWindow(); + enum StackedWidgetIndex { DatabaseTabScreen = 0, @@ -118,7 +119,8 @@ private slots: Q_DISABLE_COPY(MainWindow) - bool appExitCalled; + bool m_appExitCalled; + bool m_appExiting; }; #define KEEPASSXC_MAIN_WINDOW (qobject_cast(qApp) ? \