From 115f303352df90a0ceeea2af167a8592da33cd82 Mon Sep 17 00:00:00 2001 From: Alejandro Exojo Date: Sat, 31 Oct 2015 13:17:02 +0100 Subject: [PATCH] Fix the closeEvent of the systray example on OS X MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The implementation of the close event handler requires handling the two close events that are received on OS X when the user quits through the application menu bar or the Command+Q shortcut. The first is an spontaneous event, and the second a non-spontaneous one with the window already closed. Change-Id: I24e3d3f0de4d631bd2d5616c85ce747f085691e0 Reviewed-by: Topi Reiniƶ --- examples/widgets/desktop/systray/doc/src/systray.qdoc | 6 +++++- examples/widgets/desktop/systray/window.cpp | 5 +++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/examples/widgets/desktop/systray/doc/src/systray.qdoc b/examples/widgets/desktop/systray/doc/src/systray.qdoc index 074012b6a78..fa2dbb27218 100644 --- a/examples/widgets/desktop/systray/doc/src/systray.qdoc +++ b/examples/widgets/desktop/systray/doc/src/systray.qdoc @@ -173,7 +173,11 @@ We have reimplemented the QWidget::closeEvent() event handler to receive widget close events, showing the above message to the - users when they are closing the editor window. + users when they are closing the editor window. On OS X we need to + avoid showing the message and accepting the close event when the + user really intends to quit the application, that is, when the + user has triggered "Quit" in the menu bar or pressed the Command+Q + shortcut. In addition to the functions and slots discussed above, we have also implemented several convenience functions to simplify the diff --git a/examples/widgets/desktop/systray/window.cpp b/examples/widgets/desktop/systray/window.cpp index 931e443de78..d499f498af5 100644 --- a/examples/widgets/desktop/systray/window.cpp +++ b/examples/widgets/desktop/systray/window.cpp @@ -102,6 +102,11 @@ void Window::setVisible(bool visible) //! [2] void Window::closeEvent(QCloseEvent *event) { +#ifdef Q_OS_OSX + if (!event->spontaneous() || !isVisible()) { + return; + } +#endif if (trayIcon->isVisible()) { QMessageBox::information(this, tr("Systray"), tr("The program will keep running in the "