mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-06 14:00:55 +03:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cf364c1264 | ||
|
|
a997820bb6 | ||
|
|
b8fabd59c0 | ||
|
|
97d290795e | ||
|
|
2a237ff5fc | ||
|
|
13a418f74e | ||
|
|
5c56dbfed6 |
24
CHANGELOG.md
24
CHANGELOG.md
@@ -1,6 +1,30 @@
|
|||||||
FlatLaf Change Log
|
FlatLaf Change Log
|
||||||
==================
|
==================
|
||||||
|
|
||||||
|
## 3.2.5
|
||||||
|
|
||||||
|
#### Fixed bugs
|
||||||
|
|
||||||
|
- Popup: Fixed NPE if popup invoker is `null` on Windows 10. (issue #753;
|
||||||
|
regression in 3.2.1 in fix for #626)
|
||||||
|
|
||||||
|
|
||||||
|
## 3.2.4
|
||||||
|
|
||||||
|
#### Fixed bugs
|
||||||
|
|
||||||
|
- Popup: Fixed NPE if popup invoker is `null` on Linux with Wayland and Java 21.
|
||||||
|
(issue #752; regression in 3.2.3)
|
||||||
|
|
||||||
|
|
||||||
|
## 3.2.3
|
||||||
|
|
||||||
|
#### Fixed bugs
|
||||||
|
|
||||||
|
- Popup: Popups that request focus were not shown on Linux with Wayland and Java 21.
|
||||||
|
(issue #752)
|
||||||
|
|
||||||
|
|
||||||
## 3.2.2
|
## 3.2.2
|
||||||
|
|
||||||
#### Fixed bugs
|
#### Fixed bugs
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#Signature file v4.1
|
#Signature file v4.1
|
||||||
#Version 3.2.2
|
#Version 3.2.4
|
||||||
|
|
||||||
CLSS public abstract interface com.formdev.flatlaf.FlatClientProperties
|
CLSS public abstract interface com.formdev.flatlaf.FlatClientProperties
|
||||||
fld public final static java.lang.String BUTTON_TYPE = "JButton.buttonType"
|
fld public final static java.lang.String BUTTON_TYPE = "JButton.buttonType"
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import java.awt.Window;
|
|||||||
import java.awt.event.ComponentEvent;
|
import java.awt.event.ComponentEvent;
|
||||||
import java.awt.event.ComponentListener;
|
import java.awt.event.ComponentListener;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
|
import java.awt.event.WindowFocusListener;
|
||||||
import java.lang.invoke.MethodHandle;
|
import java.lang.invoke.MethodHandle;
|
||||||
import java.lang.invoke.MethodHandles;
|
import java.lang.invoke.MethodHandles;
|
||||||
import java.lang.invoke.MethodType;
|
import java.lang.invoke.MethodType;
|
||||||
@@ -83,6 +84,8 @@ public class FlatPopupFactory
|
|||||||
y = pt.y;
|
y = pt.y;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixLinuxWaylandJava21focusIssue( owner );
|
||||||
|
|
||||||
boolean forceHeavyWeight = isOptionEnabled( owner, contents, FlatClientProperties.POPUP_FORCE_HEAVY_WEIGHT, "Popup.forceHeavyWeight" );
|
boolean forceHeavyWeight = isOptionEnabled( owner, contents, FlatClientProperties.POPUP_FORCE_HEAVY_WEIGHT, "Popup.forceHeavyWeight" );
|
||||||
|
|
||||||
if( !isOptionEnabled( owner, contents, FlatClientProperties.POPUP_DROP_SHADOW_PAINTED, "Popup.dropShadowPainted" ) || SystemInfo.isProjector || SystemInfo.isWebswing )
|
if( !isOptionEnabled( owner, contents, FlatClientProperties.POPUP_DROP_SHADOW_PAINTED, "Popup.dropShadowPainted" ) || SystemInfo.isProjector || SystemInfo.isWebswing )
|
||||||
@@ -394,6 +397,9 @@ public class FlatPopupFactory
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean overlapsHeavyWeightComponent( Component owner, Component contents, int x, int y ) {
|
private static boolean overlapsHeavyWeightComponent( Component owner, Component contents, int x, int y ) {
|
||||||
|
if( owner == null )
|
||||||
|
return false;
|
||||||
|
|
||||||
Window window = SwingUtilities.getWindowAncestor( owner );
|
Window window = SwingUtilities.getWindowAncestor( owner );
|
||||||
if( window == null )
|
if( window == null )
|
||||||
return false;
|
return false;
|
||||||
@@ -420,6 +426,38 @@ public class FlatPopupFactory
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* On Linux with Wayland, since Java 21, Swing adds a window focus listener to popup owner/invoker window,
|
||||||
|
* which hides the popup as soon as the owner/invoker window looses focus.
|
||||||
|
* This works fine for light-weight popups.
|
||||||
|
* It also works for heavy-weight popups if the do not request focus.
|
||||||
|
* Because FlatLaf always uses heavy-weight popups, all popups that request focus
|
||||||
|
* are broken since Java 21.
|
||||||
|
*
|
||||||
|
* This method removes the problematic window focus listener.
|
||||||
|
*
|
||||||
|
* https://bugs.openjdk.org/browse/JDK-8280993
|
||||||
|
* https://github.com/openjdk/jdk/pull/13830
|
||||||
|
*/
|
||||||
|
private static void fixLinuxWaylandJava21focusIssue( Component owner ) {
|
||||||
|
// only necessary on Linux when running in Java 21+
|
||||||
|
if( owner == null || !SystemInfo.isLinux || SystemInfo.javaVersion < SystemInfo.toVersion( 21, 0, 0, 0 ) )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// get window
|
||||||
|
Window window = SwingUtilities.getWindowAncestor( owner );
|
||||||
|
if( window == null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// remove window focus listener, which was added from class sun.awt.UNIXToolkit since Java 21
|
||||||
|
for( WindowFocusListener l : window.getWindowFocusListeners() ) {
|
||||||
|
if( "sun.awt.UNIXToolkit$1".equals( l.getClass().getName() ) ) {
|
||||||
|
window.removeWindowFocusListener( l );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//---- class NonFlashingPopup ---------------------------------------------
|
//---- class NonFlashingPopup ---------------------------------------------
|
||||||
|
|
||||||
private static class NonFlashingPopup
|
private static class NonFlashingPopup
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
#
|
#
|
||||||
|
|
||||||
flatlaf.releaseVersion = 3.2.2
|
flatlaf.releaseVersion = 3.2.5
|
||||||
flatlaf.developmentVersion = 3.3-SNAPSHOT
|
flatlaf.developmentVersion = 3.3-SNAPSHOT
|
||||||
|
|
||||||
org.gradle.parallel = true
|
org.gradle.parallel = true
|
||||||
|
|||||||
Reference in New Issue
Block a user