From 6800728d091e5122e6d93675db84ee028221d161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Martins?= Date: Mon, 1 Jul 2013 09:46:42 +0100 Subject: [PATCH] Windows: Fix bug where windows stopped painting after a restore. Usually, a window get un-exposed when minimized, and exposed after the first WM_Paint event when restored. With layered windows (translucent+frameless) we never receive a WM_Paint, so lets send the expose event when the window is restired. Task-number: QTBUG-17548 Change-Id: Ib56d8abd91b15f9238d223fe692b19a3d2c930b7 Reviewed-by: Gunnar Sletta --- src/plugins/platforms/windows/qwindowswindow.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp index 08ff7123eb..9b22b68c31 100644 --- a/src/plugins/platforms/windows/qwindowswindow.cpp +++ b/src/plugins/platforms/windows/qwindowswindow.cpp @@ -1390,9 +1390,22 @@ void QWindowsWindow::handleWindowStateChange(Qt::WindowState state) setFlag(FrameDirty); m_windowState = state; QWindowSystemInterface::handleWindowStateChanged(window(), state); - if (state == Qt::WindowMinimized) { + switch (state) { + case Qt::WindowMinimized: handleHidden(); QWindowSystemInterface::flushWindowSystemEvents(); // Tell QQuickWindow to stop rendering now. + break; + case Qt::WindowNoState: + // QTBUG-17548: We send expose events when receiving WM_Paint, but for + // layered windows, we won't receive any WM_Paint. + if (GetWindowLongPtr(m_data.hwnd, GWL_EXSTYLE) & WS_EX_LAYERED) { + fireExpose(QRegion(0, 0, window()->width(), window()->height())); + if (!QWindowsContext::instance()->asyncExpose()) + QWindowSystemInterface::flushWindowSystemEvents(); + } + break; + default: + break; } }