diff options
| author | Manolo Gouy <Manolo> | 2018-09-12 12:46:09 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2018-09-12 12:46:09 +0000 |
| commit | b0e0e0912cc9e6dab548fe914461cee96772dce1 (patch) | |
| tree | d97fc0539900ea0aaff20a767f5f2fffdc0e2313 /src | |
| parent | b6f65b1c8706098fbbbe8b717f5c94309728aa16 (diff) | |
MacOS ≥ 10.10: Fl_Window::fullscreen() and fullscreen_off() no longer call Fl_Window::hide() + Fl_Window::show()
The new procedure essentially resizes the window, as done on the X11+EWMH and Windows platforms.
This improves in particular the possibility to turn an Fl_Gl_Window fullscreen on and off.
MacOS ≥ 10.10 is required because the procedure isn't stable (random crashes during fast switches) with 10.9.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@13045 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_cocoa.mm | 42 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx | 19 |
2 files changed, 42 insertions, 19 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index d6ca855f2..fc8269975 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -3000,6 +3000,48 @@ Fl_X* Fl_Cocoa_Window_Driver::makeWindow() return x; } +void Fl_Cocoa_Window_Driver::fullscreen_on() { + pWindow->_set_fullscreen(); + if (fl_mac_os_version < 101000) { + // On OS X < 10.6, it is necessary to recreate the window. This is done with hide+show. + // The alternative procedure isn't stable until MacOS 10.10 + pWindow->hide(); + pWindow->show(); + } else { + FLWindow *nswin = fl_xid(pWindow); +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + [nswin setStyleMask:NSBorderlessWindowMask]; //10.6 +#endif + [nswin setLevel:NSStatusWindowLevel]; + int X,Y,W,H; + Fl::screen_xywh(X, Y, W, H, x(), y(), w(), h()); + pWindow->resize(X, Y, W, H); + } + Fl::handle(FL_FULLSCREEN, pWindow); +} + +void Fl_Cocoa_Window_Driver::fullscreen_off(int X, int Y, int W, int H) { + pWindow->_clear_fullscreen(); + if (fl_mac_os_version < 101000) { + pWindow->hide(); + pWindow->resize(X, Y, W, H); + pWindow->show(); + } else { + FLWindow *nswin = fl_xid(pWindow); + NSUInteger winstyle = (pWindow->border() ? + (NSTitledWindowMask | NSClosableWindowMask | NSResizableWindowMask) : NSBorderlessWindowMask); + if (!pWindow->modal()) winstyle |= NSMiniaturizableWindowMask; + NSInteger level = NSNormalWindowLevel; + if (pWindow->modal()) level = modal_window_level(); + else if (pWindow->non_modal()) level = non_modal_window_level(); + [nswin setLevel:level]; + pWindow->resize(X, Y, W, H); +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + [nswin setStyleMask:winstyle]; //10.6 +#endif + } + Fl::handle(FL_FULLSCREEN, pWindow); +} /* * Tell the OS what window sizes we want to allow diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx index 254d22545..1f189300c 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.cxx @@ -252,25 +252,6 @@ void Fl_Cocoa_Window_Driver::hide() { } -void Fl_Cocoa_Window_Driver::fullscreen_on() { - pWindow->_set_fullscreen(); - /* On OS X < 10.6, it is necessary to recreate the window. This is done - with hide+show. */ - pWindow->hide(); - pWindow->show(); - Fl::handle(FL_FULLSCREEN, pWindow); -} - - -void Fl_Cocoa_Window_Driver::fullscreen_off(int X, int Y, int W, int H) { - pWindow->_clear_fullscreen(); - pWindow->hide(); - pWindow->resize(X, Y, W, H); - pWindow->show(); - Fl::handle(FL_FULLSCREEN, pWindow); -} - - void Fl_Cocoa_Window_Driver::decoration_sizes(int *top, int *left, int *right, int *bottom) { *top = 24; *left = 2; |
