diff options
author | Axel Spoerl <axel.spoerl@qt.io> | 2022-10-28 15:23:41 +0200 |
---|---|---|
committer | Axel Spoerl <axel.spoerl@qt.io> | 2022-11-11 11:21:32 +0100 |
commit | 52dcd47850138ac257e3ad7e6eeae205bcff4aa6 (patch) | |
tree | 9956dc42b22bfff88db21ece78acb29ed168723f /src/gui/kernel/qwindow.cpp | |
parent | b58876c296a5a87f50d5e554afc277e5bc752a16 (diff) |
emit QWindow::windowStateChanged only when state has changed
Upon programmatic window state changes, windowStateChange was fired
once in QWindow::setWindowStates and once when the visual state had
been changed by the window interface.
This patch adds if guards to ensure that the singal is fired only once.
It adds a corresponding autotest to tst_QWindow.
tst_QWidget::resizePropagation() is adapted to no longer expect double
signal emission.
Fixes: QTBUG-102478
Pick-to: 6.4 6.2
Change-Id: If093c0a883d76d8a676e4fab90db6b0676452267
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/gui/kernel/qwindow.cpp')
-rw-r--r-- | src/gui/kernel/qwindow.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp index d01ff11aa7..13e2051e14 100644 --- a/src/gui/kernel/qwindow.cpp +++ b/src/gui/kernel/qwindow.cpp @@ -1384,8 +1384,13 @@ void QWindow::setWindowStates(Qt::WindowStates state) if (d->platformWindow) d->platformWindow->setWindowState(state); + + auto originalEffectiveState = QWindowPrivate::effectiveState(d->windowState); d->windowState = state; - emit windowStateChanged(QWindowPrivate::effectiveState(d->windowState)); + auto newEffectiveState = QWindowPrivate::effectiveState(d->windowState); + if (newEffectiveState != originalEffectiveState) + emit windowStateChanged(newEffectiveState); + d->updateVisibility(); } |