summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-02-26 12:15:47 +0100
committerManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com>2024-02-26 12:15:47 +0100
commit0818d4ec5ba17314187f612a88814b02ae24b710 (patch)
tree731622b0462a9d54b1f0bb11a98f2ca3ce857813
parent41740caa2e8542c155980486638f3fb0b781862a (diff)
Fix: Fl_Window::fullscreen() does not work correctly on Mac (#920)
-rw-r--r--src/Fl_cocoa.mm28
-rw-r--r--test/fullscreen.cxx3
2 files changed, 29 insertions, 2 deletions
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();
diff --git a/test/fullscreen.cxx b/test/fullscreen.cxx
index 44fc89a7e..780eae32d 100644
--- a/test/fullscreen.cxx
+++ b/test/fullscreen.cxx
@@ -139,6 +139,9 @@ void after_resize(void *data) {
if (win->maximize_active()) win->b3_maxi->set();
else win->b3_maxi->clear();
win->b3_maxi->redraw();
+ if (win->fullscreen_active()) win->b3->set();
+ else win->b3->clear();
+ win->b3->redraw();
}
void fullscreen_window::resize(int x, int y, int w, int h) {