mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-13 23:37:13 -06:00
macOS large title bar: hide NSToolbar of window title bar when window becomes full screen
This commit is contained in:
@@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
|
#import <objc/runtime.h>
|
||||||
#import <jni.h>
|
#import <jni.h>
|
||||||
#import "JNIUtils.h"
|
#import "JNIUtils.h"
|
||||||
#import "JNFRunLoop.h"
|
#import "JNFRunLoop.h"
|
||||||
@@ -98,9 +99,13 @@ JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setWindo
|
|||||||
if( nsWindow == NULL )
|
if( nsWindow == NULL )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if( hasToolbar == (nsWindow.toolbar != NULL) )
|
||||||
|
return;
|
||||||
|
|
||||||
[FlatJNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
|
[FlatJNFRunLoop performOnMainThreadWaiting:NO withBlock:^(){
|
||||||
NSLog( @"\n%@\n\n", [nsWindow.contentView.superview _subtreeDescription] );
|
NSLog( @"\n%@\n\n", [nsWindow.contentView.superview _subtreeDescription] );
|
||||||
|
|
||||||
|
// add/remove toolbar
|
||||||
NSToolbar* toolbar = NULL;
|
NSToolbar* toolbar = NULL;
|
||||||
if( hasToolbar ) {
|
if( hasToolbar ) {
|
||||||
toolbar = [NSToolbar new];
|
toolbar = [NSToolbar new];
|
||||||
@@ -108,9 +113,42 @@ JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_setWindo
|
|||||||
}
|
}
|
||||||
nsWindow.toolbar = toolbar;
|
nsWindow.toolbar = toolbar;
|
||||||
|
|
||||||
// TODO handle fullscreen
|
|
||||||
|
|
||||||
NSLog( @"\n%@\n\n", [nsWindow.contentView.superview _subtreeDescription] );
|
NSLog( @"\n%@\n\n", [nsWindow.contentView.superview _subtreeDescription] );
|
||||||
|
|
||||||
|
// when window becomes full screen, it is necessary to hide the toolbar
|
||||||
|
// because it otherwise is shown non-transparent and hides Swing components
|
||||||
|
static char enterObserverKey;
|
||||||
|
static char exitObserverKey;
|
||||||
|
NSNotificationCenter* center = [NSNotificationCenter defaultCenter];
|
||||||
|
if( hasToolbar ) {
|
||||||
|
NSLog( @"add observers %@", nsWindow );
|
||||||
|
id enterObserver = [center addObserverForName:NSWindowWillEnterFullScreenNotification
|
||||||
|
object:nsWindow queue:nil usingBlock:^(NSNotification *note) {
|
||||||
|
NSLog( @"enter full screen %@", nsWindow );
|
||||||
|
if( nsWindow.toolbar != NULL )
|
||||||
|
nsWindow.toolbar.visible = NO;
|
||||||
|
}];
|
||||||
|
id exitObserver = [center addObserverForName:NSWindowDidExitFullScreenNotification
|
||||||
|
object:nsWindow queue:nil usingBlock:^(NSNotification *note) {
|
||||||
|
NSLog( @"exit full screen %@", nsWindow );
|
||||||
|
if( nsWindow.toolbar != NULL )
|
||||||
|
nsWindow.toolbar.visible = YES;
|
||||||
|
}];
|
||||||
|
objc_setAssociatedObject( nsWindow, &enterObserverKey, enterObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC );
|
||||||
|
objc_setAssociatedObject( nsWindow, &exitObserverKey, exitObserver, OBJC_ASSOCIATION_RETAIN_NONATOMIC );
|
||||||
|
} else {
|
||||||
|
NSLog( @"remove observers %@", nsWindow );
|
||||||
|
id enterObserver = objc_getAssociatedObject( nsWindow, &enterObserverKey );
|
||||||
|
id exitObserver = objc_getAssociatedObject( nsWindow, &exitObserverKey );
|
||||||
|
if( enterObserver != NULL ) {
|
||||||
|
[center removeObserver:enterObserver];
|
||||||
|
objc_setAssociatedObject( nsWindow, &enterObserverKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC );
|
||||||
|
}
|
||||||
|
if( exitObserver != NULL ) {
|
||||||
|
[center removeObserver:exitObserver];
|
||||||
|
objc_setAssociatedObject( nsWindow, &exitObserverKey, nil, OBJC_ASSOCIATION_RETAIN_NONATOMIC );
|
||||||
|
}
|
||||||
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
JNI_COCOA_EXIT()
|
JNI_COCOA_EXIT()
|
||||||
|
|||||||
Reference in New Issue
Block a user