From 62b96fbccdf9c7fda58fa072f902e7d49b2468bb Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Fri, 23 May 2025 19:31:42 +0200 Subject: [PATCH] JideSplitButton: fixed updating popup when switching theme (issue #1000) --- CHANGELOG.md | 1 + .../flatlaf/jideoss/ui/FlatJideSplitButtonUI.java | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b863508..f16dfde0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ FlatLaf Change Log ## 3.7-SNAPSHOT - Extras: Support JSVG 2.0.0. Minimum JSVG version is now 1.6.0. (issue #997) +- JideSplitButton: Fixed updating popup when switching theme. (issue #1000) ## 3.6 diff --git a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJideSplitButtonUI.java b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJideSplitButtonUI.java index 080cf1fb..25ca30f4 100644 --- a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJideSplitButtonUI.java +++ b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJideSplitButtonUI.java @@ -25,9 +25,11 @@ import java.awt.geom.Rectangle2D; import javax.swing.ButtonModel; import javax.swing.JComponent; import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.PopupMenuUI; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.UIScale; import com.jidesoft.plaf.LookAndFeelFactory; @@ -54,6 +56,14 @@ public class FlatJideSplitButtonUI // but it does not because FlatLaf already has added the UI class to the UI defaults LookAndFeelFactory.installJideExtension(); + // workaround for bug in JideSplitButton, which overrides JMenu.updateUI(), + // but does not invoke super.updateUI() to update UI of JMenu.popupMenu field + if( c instanceof JideSplitButton ) { + JPopupMenu popupMenu = ((JideSplitButton)c).getPopupMenu(); + if( popupMenu != null ) + popupMenu.setUI( (PopupMenuUI) UIManager.getUI( popupMenu ) ); + } + return new FlatJideSplitButtonUI(); }