diff --git a/CHANGELOG.md b/CHANGELOG.md index 62a0c3c5..50c674c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ FlatLaf Change Log ================== +## 2.1-SNAPSHOT + +#### New features and improvements + +- Linux: Support using custom window decorations. Enable with + `JFrame.setDefaultLookAndFeelDecorated(true)` and + `JDialog.setDefaultLookAndFeelDecorated(true)` before creating a window. + (issue #482) + + ## 2.0.2 - Native window decorations (Windows 10/11 only): Fixed rendering artifacts on diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java index 2c00070f..f12a6a41 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java @@ -166,11 +166,12 @@ public abstract class FlatLaf * Returns whether FlatLaf supports custom window decorations. * This depends on the operating system and on the used Java runtime. *
- * This method returns {@code true} on Windows 10 (see exception below), {@code false} otherwise. + * This method returns {@code true} on Windows 10/11 (see exception below) + * and on Linux, {@code false} otherwise. *
- * Returns also {@code false} on Windows 10 if: + * Returns also {@code false} on Windows 10/11 if: *
- * This requires Windows 10, but may be disabled if running in special environments + * This requires Windows 10/11, but may be disabled if running in special environments * (JetBrains Projector, Webswing or WinPE) or if loading native library fails. * If system property {@link FlatSystemProperties#USE_WINDOW_DECORATIONS} is set to * {@code false}, then this method also returns {@code false}. diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java index 1f4b217e..273fb080 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java @@ -210,7 +210,7 @@ public class FlatMenuBarUI // check whether: // - TitlePane.unifiedBackground is true and // - menu bar is the "main" menu bar and - // - window has custom decorations enabled + // - window root pane has custom decoration style JRootPane rootPane; // (not storing value of "TitlePane.unifiedBackground" in class to allow changing at runtime) @@ -218,7 +218,7 @@ public class FlatMenuBarUI (rootPane = SwingUtilities.getRootPane( c )) != null && rootPane.getParent() instanceof Window && rootPane.getJMenuBar() == c && - FlatNativeWindowBorder.hasCustomDecoration( (Window) rootPane.getParent() ); + rootPane.getWindowDecorationStyle() != JRootPane.NONE; } //---- class TakeFocus ---------------------------------------------------- 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 678ed225..63d3cb00 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 @@ -889,8 +889,11 @@ class DemoFrame copyMenuItem.addActionListener( new DefaultEditorKit.CopyAction() ); pasteMenuItem.addActionListener( new DefaultEditorKit.PasteAction() ); - if( FlatLaf.supportsNativeWindowDecorations() ) { - windowDecorationsCheckBoxMenuItem.setSelected( FlatLaf.isUseNativeWindowDecorations() ); + if( FlatLaf.supportsNativeWindowDecorations() || (SystemInfo.isLinux && JFrame.isDefaultLookAndFeelDecorated()) ) { + if( SystemInfo.isLinux ) + unsupported( windowDecorationsCheckBoxMenuItem ); + else + windowDecorationsCheckBoxMenuItem.setSelected( FlatLaf.isUseNativeWindowDecorations() ); menuBarEmbeddedCheckBoxMenuItem.setSelected( UIManager.getBoolean( "TitlePane.menuBarEmbedded" ) ); unifiedTitleBarMenuItem.setSelected( UIManager.getBoolean( "TitlePane.unifiedBackground" ) ); showTitleBarIconMenuItem.setSelected( UIManager.getBoolean( "TitlePane.showIcon" ) ); 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 8073ede9..9a9bad68 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 @@ -17,6 +17,8 @@ package com.formdev.flatlaf.demo; import java.awt.Dimension; +import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.SwingUtilities; import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.extras.FlatInspector; @@ -52,6 +54,13 @@ public class FlatLafDemo System.setProperty( "apple.awt.application.appearance", "system" ); } + // Linux + if( SystemInfo.isLinux ) { + // enable custom window decorations + JFrame.setDefaultLookAndFeelDecorated( true ); + JDialog.setDefaultLookAndFeelDecorated( true ); + } + if( FlatLafDemo.screenshotsMode && !SystemInfo.isJava_9_orLater && System.getProperty( "flatlaf.uiScale" ) == null ) System.setProperty( "flatlaf.uiScale", "2x" );