Windows QPA: Don't send geometry change after window creation for maximized/fullscreen.

For these states, geometry change will be sent from the code called
by setWindowState(); the geometry obtained immediately after window
creation is then no longer valid.

Task-number: QTBUG-52231
Change-Id: Ia7cbe95e73c5dd4126bb63d448b83f2cab6a53a1
Reviewed-by: Oliver Wolff <oliver.wolff@theqtcompany.com>
This commit is contained in:
Friedemann Kleint 2016-04-01 14:53:35 +02:00 committed by Jędrzej Nowacki
parent e8e09918c0
commit 08a62af7c5

View File

@ -318,10 +318,14 @@ QPlatformWindow *QWindowsIntegration::createPlatformWindow(QWindow *window) cons
if (requested.flags != obtained.flags) if (requested.flags != obtained.flags)
window->setFlags(obtained.flags); window->setFlags(obtained.flags);
// Trigger geometry/screen change signals of QWindow. // Trigger geometry change (unless it has a special state in which case setWindowState()
// will send the message) and screen change signals of QWindow.
if ((obtained.flags & Qt::Desktop) != Qt::Desktop) { if ((obtained.flags & Qt::Desktop) != Qt::Desktop) {
if (requested.geometry != obtained.geometry) const Qt::WindowState state = window->windowState();
if (state != Qt::WindowMaximized && state != Qt::WindowFullScreen
&& requested.geometry != obtained.geometry) {
QWindowSystemInterface::handleGeometryChange(window, obtained.geometry); QWindowSystemInterface::handleGeometryChange(window, obtained.geometry);
}
QPlatformScreen *screen = result->screenForGeometry(obtained.geometry); QPlatformScreen *screen = result->screenForGeometry(obtained.geometry);
if (screen && result->screen() != screen) if (screen && result->screen() != screen)
QWindowSystemInterface::handleWindowScreenChanged(window, screen->screen()); QWindowSystemInterface::handleWindowScreenChanged(window, screen->screen());