diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-09-30 17:22:31 +0200 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2021-10-14 17:19:38 +0000 |
commit | 74e634d82ced894f235526c7c2b6ac476c93e2bc (patch) | |
tree | d4a824ec11525aaca8fa1f74a40369be1fc0f68a /src/plugins/platforms/cocoa/qcocoawindow.h | |
parent | e95e9c28f07e22ea76a7a5521c090a785133dbfd (diff) |
macOS: Correctly record normalGeometry in Cocoa plugin
Cocoa sends QWidget the state-change notification after the window has
been resized already, at which point we cannot store the normal geometry
anymore.
Handle zoom and full screen callbacks prior to the state changing
to store the geometry in QCocoaWindow. We do not need to handle
minimized state, as the window will still reflect the original
geometry.
Return the stored value from an override of
QPlatformWindow::normalGeometry so that QWidget gets the correct values
even though the new state is already active.
Fix the tst_QWidget::normalGeometry test to make it pass on all
platforms by waiting for the window to actually have transitioned to
the new state before comparing geometries. Both macOS and Windows fully
pass; on Xcb, deminimizing a window using setWindowState does not work,
which is why the test was partially skipped (confirmed by visual
testing). Move those problematic, complex test cases to the end so
that most cases are covered on Xcb as well.
Done-with: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Pick-to: 6.2
Change-Id: I518a5db9169b80e8fa25fe4fa2b50bd1ea0e6db3
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Diffstat (limited to 'src/plugins/platforms/cocoa/qcocoawindow.h')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoawindow.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h index 0c82d5b653..e3152f153c 100644 --- a/src/plugins/platforms/cocoa/qcocoawindow.h +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -113,6 +113,7 @@ public: void setGeometry(const QRect &rect) override; QRect geometry() const override; + QRect normalGeometry() const override; void setCocoaGeometry(const QRect &rect); void setVisible(bool visible) override; @@ -171,6 +172,8 @@ public: Q_NOTIFICATION_HANDLER(NSWindowDidChangeOcclusionStateNotification) void windowDidChangeOcclusionState(); Q_NOTIFICATION_HANDLER(NSWindowDidChangeScreenNotification) void windowDidChangeScreen(); + void windowWillZoom(); + bool windowShouldClose(); bool windowIsPopupType(Qt::WindowType type = Qt::Widget) const; @@ -205,6 +208,8 @@ public: QPoint bottomLeftClippedByNSWindowOffset() const override; + void updateNormalGeometry(); + enum RecreationReason { RecreationNotNeeded = 0, ParentChanged = 0x1, @@ -262,6 +267,7 @@ public: // for QNSView bool m_frameStrutEventsEnabled; QRect m_exposedRect; + QRect m_normalGeometry; int m_registerTouchCount; bool m_resizableTransientParent; |