From 0818d4ec5ba17314187f612a88814b02ae24b710 Mon Sep 17 00:00:00 2001 From: ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> Date: Mon, 26 Feb 2024 12:15:47 +0100 Subject: Fix: Fl_Window::fullscreen() does not work correctly on Mac (#920) --- src/Fl_cocoa.mm | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index 23efb6e15..896bc4f5a 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -1192,6 +1192,8 @@ static FLTextView *fltextview_instance = nil; - (void)windowDidDeminiaturize:(NSNotification *)notif; - (void)fl_windowMiniaturize:(NSNotification *)notif; - (void)windowDidMiniaturize:(NSNotification *)notif; +- (void)windowWillEnterFullScreen:(NSNotification *)notif; +- (void)windowWillExitFullScreen:(NSNotification *)notif; - (BOOL)windowShouldClose:(id)fl; - (void)anyWindowWillClose:(NSNotification *)notif; - (void)doNothing:(id)unused; @@ -1447,6 +1449,18 @@ static FLWindowDelegate *flwindowdelegate_instance = nil; Fl::handle(FL_HIDE, window); fl_unlock_function(); } +- (void)windowWillEnterFullScreen:(NSNotification *)notif; +{ + FLWindow *nsw = (FLWindow*)[notif object]; + Fl_Window *window = [nsw getFl_Window]; + window->_set_fullscreen(); +} +- (void)windowWillExitFullScreen:(NSNotification *)notif; +{ + FLWindow *nsw = (FLWindow*)[notif object]; + Fl_Window *window = [nsw getFl_Window]; + window->_clear_fullscreen(); +} - (BOOL)windowShouldClose:(id)fl { fl_lock_function(); @@ -3198,7 +3212,12 @@ void Fl_Cocoa_Window_Driver::makeWindow() void Fl_Cocoa_Window_Driver::fullscreen_on() { pWindow->_set_fullscreen(); #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 - if (fl_mac_os_version >= 100600) { + if (fl_mac_os_version >= 100700) { +# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + FLWindow *nswin = fl_xid(pWindow); + [nswin toggleFullScreen:nil]; +# endif + } else if (fl_mac_os_version >= 100600) { FLWindow *nswin = fl_xid(pWindow); [nswin setStyleMask:NSWindowStyleMaskBorderless]; // 10.6 if ([nswin isKeyWindow]) { @@ -3279,7 +3298,12 @@ static void restore_window_title_and_icon(Fl_Window *pWindow, NSImage *icon) { void Fl_Cocoa_Window_Driver::fullscreen_off(int X, int Y, int W, int H) { pWindow->_clear_fullscreen(); #if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 - if (fl_mac_os_version >= 100600) { + if (fl_mac_os_version >= 100700) { +# if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_7 + FLWindow *nswin = fl_xid(pWindow); + [nswin toggleFullScreen:nil]; +# endif + } else if (fl_mac_os_version >= 100600) { FLWindow *nswin = fl_xid(pWindow); NSInteger level = NSNormalWindowLevel; if (pWindow->modal()) level = modal_window_level(); -- cgit v1.2.3