diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java index e36b4fb4..180d90c8 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java @@ -527,6 +527,21 @@ public interface FlatClientProperties */ String WINDOW_STYLE_SMALL = "small"; + /** + * Specifies whether the window should have a large title bar. + * This adds extra space around the close/minimize/zoom buttons. + * Useful if full window content + * is enabled. + *
+ * (requires macOS 10.14+, Java 17+ and client property {@code apple.awt.fullWindowContent} set to {@code true}) + *
+ * Component {@link javax.swing.JRootPane}
+ * Value type {@link java.lang.Boolean}
+ *
+ * @since 3.3
+ */
+ String MACOS_LARGE_WINDOW_TITLE_BAR = "FlatLaf.macOS.largeWindowTitleBar";
+
//---- JScrollBar / JScrollPane -------------------------------------------
diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java
index 3b6ee498..75631081 100644
--- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java
+++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java
@@ -367,6 +367,21 @@ public class FlatRootPaneUI
if( rootPane.isDisplayable() )
throw new IllegalComponentStateException( "The client property 'Window.style' must be set before the window becomes displayable." );
break;
+
+ case FlatClientProperties.MACOS_LARGE_WINDOW_TITLE_BAR:
+ case "ancestor":
+ if( SystemInfo.isMacFullWindowContentSupported &&
+ SystemInfo.isJava_17_orLater &&
+ rootPane.isDisplayable() &&
+ FlatClientProperties.clientPropertyBoolean( rootPane, "apple.awt.fullWindowContent", false ) &&
+ FlatNativeMacLibrary.isLoaded() )
+ {
+ Window window = SwingUtilities.windowForComponent( rootPane );
+ boolean enabled = FlatClientProperties.clientPropertyBoolean( rootPane,
+ FlatClientProperties.MACOS_LARGE_WINDOW_TITLE_BAR, false );
+ FlatNativeMacLibrary.setWindowToolbar( window, enabled );
+ }
+ break;
}
}
diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java
index 191268c1..08adb0e1 100644
--- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java
+++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java
@@ -46,7 +46,6 @@ import com.formdev.flatlaf.icons.FlatAbstractIcon;
import com.formdev.flatlaf.themes.FlatMacDarkLaf;
import com.formdev.flatlaf.themes.FlatMacLightLaf;
import com.formdev.flatlaf.extras.FlatSVGUtils;
-import com.formdev.flatlaf.ui.FlatNativeMacLibrary;
import com.formdev.flatlaf.util.ColorFunctions;
import com.formdev.flatlaf.util.FontUtils;
import com.formdev.flatlaf.util.LoggingFacade;
@@ -90,21 +89,23 @@ class DemoFrame
// do not use HTML text in menu items because this is not supported in macOS screen menu
htmlMenuItem.setText( "some text" );
+ JRootPane rootPane = getRootPane();
if( SystemInfo.isMacFullWindowContentSupported ) {
// expand window content into window title bar and make title bar transparent
- getRootPane().putClientProperty( "apple.awt.fullWindowContent", true );
- getRootPane().putClientProperty( "apple.awt.transparentTitleBar", true );
+ rootPane.putClientProperty( "apple.awt.fullWindowContent", true );
+ rootPane.putClientProperty( "apple.awt.transparentTitleBar", true );
+ rootPane.putClientProperty( FlatClientProperties.MACOS_LARGE_WINDOW_TITLE_BAR, true );
// hide window title
if( SystemInfo.isJava_17_orLater )
- getRootPane().putClientProperty( "apple.awt.windowTitleVisible", false );
+ rootPane.putClientProperty( "apple.awt.windowTitleVisible", false );
else
setTitle( null );
}
// enable full screen mode for this window (for Java 8 - 10; not necessary for Java 11+)
if( !SystemInfo.isJava_11_orLater )
- getRootPane().putClientProperty( "apple.awt.fullscreenable", true );
+ rootPane.putClientProperty( "apple.awt.fullscreenable", true );
}
// integrate into macOS screen menu
@@ -902,10 +903,10 @@ class DemoFrame
// JFormDesigner - End of component initialization //GEN-END:initComponents
backButton.addActionListener( e -> {
- FlatNativeMacLibrary.setWindowToolbar( this, true );
+ rootPane.putClientProperty( FlatClientProperties.MACOS_LARGE_WINDOW_TITLE_BAR, true );
});
forwardButton.addActionListener( e -> {
- FlatNativeMacLibrary.setWindowToolbar( this, false );
+ rootPane.putClientProperty( FlatClientProperties.MACOS_LARGE_WINDOW_TITLE_BAR, null );
});
cutButton.addActionListener( e -> System.out.println( e ) );
diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java
index cfc226b8..4a55f459 100644
--- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java
+++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java
@@ -27,7 +27,6 @@ import com.formdev.flatlaf.fonts.inter.FlatInterFont;
import com.formdev.flatlaf.fonts.jetbrains_mono.FlatJetBrainsMonoFont;
import com.formdev.flatlaf.fonts.roboto.FlatRobotoFont;
import com.formdev.flatlaf.fonts.roboto_mono.FlatRobotoMonoFont;
-import com.formdev.flatlaf.ui.FlatNativeMacLibrary;
import com.formdev.flatlaf.util.SystemInfo;
/**
@@ -118,10 +117,6 @@ public class FlatLafDemo
// show frame
frame.pack();
frame.setLocationRelativeTo( null );
- if( SystemInfo.isMacOS && FlatNativeMacLibrary.isLoaded() ) {
- // TODO use client property
- FlatNativeMacLibrary.setWindowToolbar( frame, true );
- }
frame.setVisible( true );
} );
}