From ebcef42b2c042d1dd81e55922d4d35a0a7c90c8f Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 9 Oct 2023 08:37:32 +0200 Subject: [PATCH] IDEA-324605 Global burger menu is unusable (KDE) - fix NPE GitOrigin-RevId: fdac0aa2940e0aff805bf925f889c0b30284747d --- .../platform/ide/menu/GlobalMenuLinux.java | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/platform/ide/menu/GlobalMenuLinux.java b/platform/platform-impl/src/com/intellij/platform/ide/menu/GlobalMenuLinux.java index 5014e1e56387..d8956033e7f8 100644 --- a/platform/platform-impl/src/com/intellij/platform/ide/menu/GlobalMenuLinux.java +++ b/platform/platform-impl/src/com/intellij/platform/ide/menu/GlobalMenuLinux.java @@ -36,6 +36,7 @@ import com.sun.jna.Native; import com.sun.jna.Pointer; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.imageio.ImageIO; import javax.swing.Timer; @@ -195,13 +196,13 @@ public final class GlobalMenuLinux implements LinuxGlobalMenuEventHandler, Dispo LOG.info("Closed dbus-service 'com.canonical.AppMenu.Registrar'"); isServiceAvailable = false; boolean isMainMenuVisible = UISettings.getInstance().getShowMainMenu(); - for (GlobalMenuLinux menuBar : instances) { - menuBar.windowHandle = null; + for (GlobalMenuLinux menuLinux : instances) { + menuLinux.windowHandle = null; if (isMainMenuVisible) { - ApplicationManager.getApplication().invokeLater(() -> { - JMenuBar jmenubar = menuBar.frame.getRootPane().getJMenuBar(); - if (jmenubar != null) { - jmenubar.setVisible(true); + EventQueue.invokeLater(() -> { + JMenuBar menuBar = getMenuBar(menuLinux.frame); + if (menuBar != null) { + menuBar.setVisible(true); } }); } @@ -214,6 +215,11 @@ public final class GlobalMenuLinux implements LinuxGlobalMenuEventHandler, Dispo } } + private static @Nullable JMenuBar getMenuBar(@NotNull JFrame menuBar) { + JRootPane rootPane = menuBar.getRootPane(); + return rootPane == null ? null : rootPane.getJMenuBar(); + } + private final @NotNull JFrame frame; private final GlobalMenuLib.JRunnable onWindowReleased; private final EventFilter eventFilter = new EventFilter(); @@ -421,9 +427,12 @@ public final class GlobalMenuLinux implements LinuxGlobalMenuEventHandler, Dispo } if (!SHOW_SWING_MENU) { - ApplicationManager.getApplication().invokeLater(() -> { + EventQueue.invokeLater(() -> { if (isEnabled) { - frame.getRootPane().getJMenuBar().setVisible(false); + JMenuBar menuBar = getMenuBar(frame); + if (menuBar != null) { + menuBar.setVisible(false); + } } }); } @@ -457,7 +466,7 @@ public final class GlobalMenuLinux implements LinuxGlobalMenuEventHandler, Dispo } if (UISettings.getInstance().getShowMainMenu()) { - JMenuBar frameMenu = frame.getRootPane().getJMenuBar(); + JMenuBar frameMenu = getMenuBar(frame); if (frameMenu != null) { frameMenu.setVisible(true); }