From 85106af5ce61eef45d2f416908a4ff7b64728124 Mon Sep 17 00:00:00 2001 From: Paul Licameli Date: Wed, 7 Dec 2016 09:31:28 -0500 Subject: [PATCH] Correctly track the full-screen state on OSX 10.7 and later --- include/wx/osx/cocoa/private.h | 3 +++ src/osx/cocoa/nonownedwnd.mm | 32 +++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/include/wx/osx/cocoa/private.h b/include/wx/osx/cocoa/private.h index ed731f7..0743ae9 100644 --- include/wx/osx/cocoa/private.h +++ include/wx/osx/cocoa/private.h @@ -239,6 +239,8 @@ public : virtual bool ShowFullScreen(bool show, long style); + void NotifyFullScreen( bool fullScreen ) { m_isFullScreen = fullScreen; } + virtual void ShowWithoutActivating(); virtual void RequestUserAttention(int flags); @@ -264,6 +266,7 @@ protected : CGWindowLevel m_macWindowLevel; WXWindow m_macWindow; void * m_macFullScreenData ; + bool m_isFullScreen; DECLARE_DYNAMIC_CLASS_NO_COPY(wxNonOwnedWindowCocoaImpl) }; diff --git a/src/osx/cocoa/nonownedwnd.mm b/src/osx/cocoa/nonownedwnd.mm index 9e79c6a..338bcf6 100644 --- src/osx/cocoa/nonownedwnd.mm +++ src/osx/cocoa/nonownedwnd.mm @@ -302,6 +302,10 @@ static NSResponder* s_nextFirstResponder = NULL; - (void)windowDidMove:(NSNotification *)notification; - (BOOL)windowShouldClose:(id)window; - (BOOL)windowShouldZoom:(NSWindow *)window toFrame:(NSRect)newFrame; +// - (void)windowWillEnterFullScreen:(NSNotification *)notification; +- (void)windowDidEnterFullScreen:(NSNotification *)notification; +// - (void)windowWillExitFullScreen:(NSNotification *)notification; +- (void)windowDidExitFullScreen:(NSNotification *)notification; @end @@ -534,6 +538,20 @@ extern int wxOSXGetIdFromSelector(SEL action ); return true; } +- (void)windowDidEnterFullScreen:(NSNotification *)notification +{ + NSWindow* window = (NSWindow*) [notification object]; + wxNonOwnedWindowCocoaImpl* windowimpl = [window WX_implementation]; + windowimpl->NotifyFullScreen(true); +} + +- (void)windowDidExitFullScreen:(NSNotification *)notification +{ + NSWindow* window = (NSWindow*) [notification object]; + wxNonOwnedWindowCocoaImpl* windowimpl = [window WX_implementation]; + windowimpl->NotifyFullScreen(false); +} + @end IMPLEMENT_DYNAMIC_CLASS( wxNonOwnedWindowCocoaImpl , wxNonOwnedWindowImpl ) @@ -543,12 +561,14 @@ wxNonOwnedWindowCocoaImpl::wxNonOwnedWindowCocoaImpl( wxNonOwnedWindow* nonowned { m_macWindow = NULL; m_macFullScreenData = NULL; + m_isFullScreen = false; } wxNonOwnedWindowCocoaImpl::wxNonOwnedWindowCocoaImpl() { m_macWindow = NULL; m_macFullScreenData = NULL; + m_isFullScreen = false; } wxNonOwnedWindowCocoaImpl::~wxNonOwnedWindowCocoaImpl() @@ -924,11 +944,21 @@ typedef struct bool wxNonOwnedWindowCocoaImpl::IsFullScreen() const { - return m_macFullScreenData != NULL ; + if ( [ m_macWindow respondsToSelector:@selector(toggleFullScreen:) ] ) + return m_isFullScreen; + else + return m_macFullScreenData != NULL ; } bool wxNonOwnedWindowCocoaImpl::ShowFullScreen(bool show, long WXUNUSED(style)) { + if ( [ m_macWindow respondsToSelector:@selector(toggleFullScreen:) ] ) + { + if ( show != m_isFullScreen ) + m_isFullScreen = show, [m_macWindow toggleFullScreen: nil]; + return true; + } + if ( show ) { FullScreenData *data = (FullScreenData *)m_macFullScreenData ; -- 2.3.2 (Apple Git-55)