diff options
| author | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-04-20 22:01:48 +0200 |
|---|---|---|
| committer | ManoloFLTK <41016272+ManoloFLTK@users.noreply.github.com> | 2019-04-20 22:01:48 +0200 |
| commit | 3f5580d49c1458a5287024f02730fda56a0f2a53 (patch) | |
| tree | fa338792539d6e10f8b75f06d569b8a4122ef286 | |
| parent | 33862479af54d2dea5db9658c6130f3e44637491 (diff) | |
macOS: better support of Fl_Window::border(int)
| -rw-r--r-- | src/Fl_cocoa.mm | 33 | ||||
| -rw-r--r-- | src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H | 1 |
2 files changed, 26 insertions, 8 deletions
diff --git a/src/Fl_cocoa.mm b/src/Fl_cocoa.mm index a6eb88b4d..fe305a325 100644 --- a/src/Fl_cocoa.mm +++ b/src/Fl_cocoa.mm @@ -3205,15 +3205,14 @@ Fl_X* Fl_Cocoa_Window_Driver::makeWindow() void Fl_Cocoa_Window_Driver::fullscreen_on() { pWindow->_set_fullscreen(); - if (fl_mac_os_version < 101000) { + if (fl_mac_os_version < 100600) { // 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 + [nswin setStyleMask:NSBorderlessWindowMask]; // 10.6 #endif [nswin setLevel:NSStatusWindowLevel]; int X,Y,W,H; @@ -3223,29 +3222,47 @@ void Fl_Cocoa_Window_Driver::fullscreen_on() { Fl::handle(FL_FULLSCREEN, pWindow); } +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 +static NSUInteger calc_win_style(Fl_Window *win) { + NSUInteger winstyle; + if (win->border() && !win->fullscreen_active()) { + winstyle = NSTitledWindowMask | NSClosableWindowMask; + if (win->resizable()) winstyle |= NSResizableWindowMask; + if (!win->modal()) winstyle |= NSMiniaturizableWindowMask; + } else winstyle = NSBorderlessWindowMask; + return winstyle; +} +#endif + void Fl_Cocoa_Window_Driver::fullscreen_off(int X, int Y, int W, int H) { pWindow->_clear_fullscreen(); - if (fl_mac_os_version < 101000) { + if (fl_mac_os_version < 100600) { 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 + [nswin setStyleMask:calc_win_style(pWindow)]; //10.6 #endif } Fl::handle(FL_FULLSCREEN, pWindow); } +void Fl_Cocoa_Window_Driver::use_border() { + if (!shown() || pWindow->parent()) return; + if (fl_mac_os_version < 100600) return Fl_Window_Driver::use_border(); +#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6 + [fl_xid(pWindow) setStyleMask:calc_win_style(pWindow)]; // 10.6 + pWindow->redraw(); +#endif +} + /* * Tell the OS what window sizes we want to allow */ diff --git a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H index 28b55e9b4..1dca7f133 100644 --- a/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H +++ b/src/drivers/Cocoa/Fl_Cocoa_Window_Driver.H @@ -124,6 +124,7 @@ public: virtual void unmap(); virtual void fullscreen_on(); virtual void fullscreen_off(int X, int Y, int W, int H); + virtual void use_border(); virtual void size_range(); virtual void iconize(); virtual void decoration_sizes(int *top, int *left, int *right, int *bottom); |
