diff --git a/examples/widgets/desktop/systray/main.cpp b/examples/widgets/desktop/systray/main.cpp index 95c527a..df5786f 100644 --- a/examples/widgets/desktop/systray/main.cpp +++ b/examples/widgets/desktop/systray/main.cpp @@ -39,10 +39,12 @@ ****************************************************************************/ #include +#include #ifndef QT_NO_SYSTEMTRAYICON #include +#include #include "window.h" int main(int argc, char *argv[]) @@ -61,6 +63,9 @@ int main(int argc, char *argv[]) Window window; window.show(); + const QString hwndS = ("0x" + QString::number(window.winId(), 16)); + qApp->clipboard()->setText(hwndS); + qDebug() << __FUNCTION__ << "Copied HWND" << hwndS; return app.exec(); } diff --git a/examples/widgets/desktop/systray/systray.pro b/examples/widgets/desktop/systray/systray.pro index 1d4fdc7..0a8c769 100644 --- a/examples/widgets/desktop/systray/systray.pro +++ b/examples/widgets/desktop/systray/systray.pro @@ -4,7 +4,7 @@ SOURCES = main.cpp \ RESOURCES = systray.qrc QT += widgets - +CONFIG+=console # install target.path = $$[QT_INSTALL_EXAMPLES]/widgets/desktop/systray INSTALLS += target diff --git a/examples/widgets/mainwindows/mdi/main.cpp b/examples/widgets/mainwindows/mdi/main.cpp index ab5f9b1..3a323e3 100644 --- a/examples/widgets/mainwindows/mdi/main.cpp +++ b/examples/widgets/mainwindows/mdi/main.cpp @@ -39,6 +39,8 @@ ****************************************************************************/ #include +#include +#include #include "mainwindow.h" @@ -49,5 +51,8 @@ int main(int argc, char *argv[]) QApplication app(argc, argv); MainWindow mainWin; mainWin.show(); + const QString hwndS = ("0x" + QString::number(mainWin.winId(), 16)); + qApp->clipboard()->setText(hwndS); + qDebug() << __FUNCTION__ << "Copied HWND" << hwndS; return app.exec(); } diff --git a/examples/widgets/mainwindows/mdi/mdi.pro b/examples/widgets/mainwindows/mdi/mdi.pro index 2e3c232..6c396b8 100644 --- a/examples/widgets/mainwindows/mdi/mdi.pro +++ b/examples/widgets/mainwindows/mdi/mdi.pro @@ -6,7 +6,7 @@ SOURCES = main.cpp \ mainwindow.cpp \ mdichild.cpp RESOURCES = mdi.qrc - +CONFIG += console # install target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/mdi INSTALLS += target diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index d5d964e..f942649 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -1699,8 +1699,13 @@ void QCoreApplicationPrivate::deref() void QCoreApplicationPrivate::maybeQuit() { - if (quitLockRef.load() == 0 && in_exec && quitLockRefEnabled && shouldQuit()) + qDebug() << __FUNCTION__ << "quitLockRef.load()" << quitLockRef.load() + << "in_exec" << in_exec << "shouldQuit()" << shouldQuit(); + + if (quitLockRef.load() == 0 && in_exec && quitLockRefEnabled && shouldQuit()) { + qDebug() << __FUNCTION__ << "POSTING QUIT"; QCoreApplication::postEvent(QCoreApplication::instance(), new QEvent(QEvent::Quit)); + } } /*! diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 32f2b20..8897b39 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -2651,9 +2651,12 @@ bool QGuiApplicationPrivate::shouldQuitInternal(const QWindowList &processedWind QWindow *w = list.at(i); if (processedWindows.contains(w)) continue; - if (w->isVisible() && !w->transientParent()) + if (w->isVisible() && !w->transientParent()) { + qDebug() << __FUNCTION__ << w << "FALSE"; return false; + } } + qDebug() << __FUNCTION__ << "truE"; return true; } @@ -2863,12 +2866,14 @@ void QGuiApplicationPrivate::commitData() Q_Q(QGuiApplication); is_saving_session = true; emit q->commitDataRequest(*session_manager); + qDebug() << __FUNCTION__ ; if (session_manager->allowsInteraction()) { QWindowList done; QWindowList list = QGuiApplication::topLevelWindows(); bool cancelled = false; for (int i = 0; !cancelled && i < list.size(); ++i) { QWindow* w = list.at(i); + qDebug() << __FUNCTION__ << 'l' << i << w << (w->isVisible() && !done.contains(w)); if (w->isVisible() && !done.contains(w)) { cancelled = !w->close(); if (!cancelled) @@ -2877,6 +2882,7 @@ void QGuiApplicationPrivate::commitData() i = -1; } } + qDebug() << __FUNCTION__ << "cancelled" << cancelled ; if (cancelled) session_manager->cancel(); } diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index b676df3..32ce87e 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -2130,6 +2130,7 @@ void QWindowPrivate::maybeQuitOnLastWindowClosed() // Attempt to close the application only if this has WA_QuitOnClose set and a non-visible parent bool quitOnClose = QGuiApplication::quitOnLastWindowClosed() && !q->parent(); + qDebug()<< __FUNCTION__ << "quitOnClose" << quitOnClose; if (quitOnClose) { QWindowList list = QGuiApplication::topLevelWindows(); @@ -2141,6 +2142,7 @@ void QWindowPrivate::maybeQuitOnLastWindowClosed() lastWindowClosed = false; break; } + qDebug()<< __FUNCTION__ << "lastWindowClosed" << lastWindowClosed; if (lastWindowClosed) { QGuiApplicationPrivate::emitLastWindowClosed(); QCoreApplicationPrivate *applicationPrivate = static_cast(QObjectPrivate::get(QCoreApplication::instance())); diff --git a/src/plugins/platforms/windows/qwindowsclipboard.cpp b/src/plugins/platforms/windows/qwindowsclipboard.cpp index 5370d55..a9df029 100644 --- a/src/plugins/platforms/windows/qwindowsclipboard.cpp +++ b/src/plugins/platforms/windows/qwindowsclipboard.cpp @@ -129,6 +129,12 @@ extern "C" LRESULT QT_WIN_CALLBACK qClipboardViewerWndProc(HWND hwnd, UINT messa if (QWindowsClipboard::instance() && QWindowsClipboard::instance()->clipboardViewerWndProc(hwnd, message, wParam, lParam, &result)) return result; + if (message == WM_ENDSESSION) { + qDebug() << __FUNCTION__ << "WM_ENDSESSION"; + } + if (message == WM_QUERYENDSESSION) { + qDebug() << __FUNCTION__ << "WM_QU_ENDSESSION"; + } return DefWindowProc(hwnd, message, wParam, lParam); } diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp index fdf0fcd..9e0fa70 100644 --- a/src/widgets/kernel/qapplication.cpp +++ b/src/widgets/kernel/qapplication.cpp @@ -2718,9 +2718,12 @@ bool QApplicationPrivate::shouldQuit() for (int i = 0; i < list.size(); ++i) { QWidget *w = list.at(i); processedWindows.push_back(w->windowHandle()); - if (w->isVisible() && !w->parentWidget() && w->testAttribute(Qt::WA_QuitOnClose)) + if (w->isVisible() && !w->parentWidget() && w->testAttribute(Qt::WA_QuitOnClose)) { + qDebug() << __FUNCTION__ << "false" << w; return false; + } } + qDebug() << __FUNCTION__ << "return QGuiApplicationPrivate::shouldQuitInternal"; return QGuiApplicationPrivate::shouldQuitInternal(processedWindows); }