From dd2d62c703fd3574ad13126dd845a13fae97f299 Mon Sep 17 00:00:00 2001 From: Tobias Taschner Date: Tue, 20 Feb 2018 17:09:39 +0100 Subject: [PATCH] Suppress size event when IsMaximized is called on OSX IsMaximized internally calls [NSWindow isZoomed] which triggers a windowWillResize call. Resize events will be ignored while calling isZoomed. Closes #17407. See https://github.com/wxWidgets/wxWidgets/pull/740 --- include/wx/osx/nonownedwnd.h | 3 +++ src/osx/cocoa/nonownedwnd.mm | 7 ++++++- src/osx/nonownedwnd_osx.cpp | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/wx/osx/nonownedwnd.h b/include/wx/osx/nonownedwnd.h index 9b0d3bea4e1e..a52eae9922bd 100644 --- a/include/wx/osx/nonownedwnd.h +++ b/include/wx/osx/nonownedwnd.h @@ -116,6 +116,8 @@ class WXDLLIMPEXP_CORE wxNonOwnedWindow : public wxNonOwnedWindowBase void OSXHandleMiniaturize(double WXUNUSED(timestampsec), bool miniaturized); + void OSXSetIgnoreResizing(bool value) { m_ignoreResizing = value; } + void WindowWasPainted(); virtual bool Destroy(); @@ -154,6 +156,7 @@ private : #if wxUSE_GRAPHICS_CONTEXT wxGraphicsPath m_shapePath; #endif // wxUSE_GRAPHICS_CONTEXT + bool m_ignoreResizing; }; // list of all frames and modeless dialogs diff --git a/src/osx/cocoa/nonownedwnd.mm b/src/osx/cocoa/nonownedwnd.mm index 929160169989..a5eed3e9bbab 100644 --- a/src/osx/cocoa/nonownedwnd.mm +++ b/src/osx/cocoa/nonownedwnd.mm @@ -998,7 +998,12 @@ - (void)windowWillEnterFullScreen:(NSNotification *)notification { if (([m_macWindow styleMask] & NSResizableWindowMask) != 0) { - return [m_macWindow isZoomed]; + // isZoomed internally calls windowWillResize which would trigger + // an wxEVT_SIZE. Setting ignore resizing supresses the event + m_wxPeer->OSXSetIgnoreResizing(true); + BOOL result = [m_macWindow isZoomed]; + m_wxPeer->OSXSetIgnoreResizing(false); + return result; } else { diff --git a/src/osx/nonownedwnd_osx.cpp b/src/osx/nonownedwnd_osx.cpp index d14c023855e8..f8b36c26e78d 100644 --- a/src/osx/nonownedwnd_osx.cpp +++ b/src/osx/nonownedwnd_osx.cpp @@ -97,6 +97,7 @@ void wxNonOwnedWindow::Init() { m_nowpeer = NULL; m_isNativeWindowWrapper = false; + m_ignoreResizing = false; } bool wxNonOwnedWindow::Create(wxWindow *parent, @@ -306,6 +307,9 @@ void wxNonOwnedWindow::HandleResized( double WXUNUSED(timestampsec) ) void wxNonOwnedWindow::HandleResizing( double WXUNUSED(timestampsec), wxRect* rect ) { + if ( m_ignoreResizing ) + return; + wxRect r = *rect ; // this is a EVT_SIZING not a EVT_SIZE type !