From 40257474fe1ab910532c963f8aae89277153b425 Mon Sep 17 00:00:00 2001 From: Neil C Smith Date: Tue, 31 Mar 2026 18:25:46 +0100 Subject: [PATCH] Move setting of awtAppClassName from MainWindow to Main Move the setting of awtAppClassName for XToolkit into Main so that it is set before splash and import dialogs are created. This fixes issues with duplicate dock icons caused by incorrect WM_CLASS derived from this field value. --- nb/ide.branding/build.xml | 1 + .../core/startup/Bundle_nb.properties | 1 + .../netbeans/core/startup/Bundle.properties | 3 +++ .../src/org/netbeans/core/startup/Main.java | 23 ++++++++++++++++++- .../core/windows/view/ui/MainWindow.java | 16 ------------- 5 files changed, 27 insertions(+), 17 deletions(-) diff --git a/nb/ide.branding/build.xml b/nb/ide.branding/build.xml index 29cd0a8544b6..6dc67cd50a03 100644 --- a/nb/ide.branding/build.xml +++ b/nb/ide.branding/build.xml @@ -42,6 +42,7 @@ Contributor(s): Vincent Brabant, Maxym Mykhalchuk + getKlass(String cls) { try { @@ -361,6 +364,24 @@ private static Class getKlass(String cls) { } } + // moved from MainWindow::init to handle splash, etc. + private static void configureAWTAppClassName() { + Toolkit toolkit = Toolkit.getDefaultToolkit(); + Class xtoolkit = toolkit.getClass(); + if (xtoolkit.getName().equals("sun.awt.X11.XToolkit")) { //NOI18N + // TODO those add --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED + + //#183739 / JDK-6528430 - provide proper app name on Linux + try { + final Field awtAppClassName = xtoolkit.getDeclaredField("awtAppClassName"); //NOI18N + awtAppClassName.setAccessible(true); + awtAppClassName.set(null, NbBundle.getMessage(Main.class, "AWT_AppClassName", "").strip()); //NOI18N + } catch (Exception x) { + Logger.getLogger(Main.class.getName()).log(Level.FINE, "can't change X11 application name", x); + } + } + } + /** Does import of userdir. Made non-private just for testing purposes. * * @return true if the execution should continue or false if it should diff --git a/platform/core.windows/src/org/netbeans/core/windows/view/ui/MainWindow.java b/platform/core.windows/src/org/netbeans/core/windows/view/ui/MainWindow.java index 8320bfd81f0c..c78d4fb33a9d 100755 --- a/platform/core.windows/src/org/netbeans/core/windows/view/ui/MainWindow.java +++ b/platform/core.windows/src/org/netbeans/core/windows/view/ui/MainWindow.java @@ -23,7 +23,6 @@ import java.awt.*; import java.awt.event.*; import java.io.File; -import java.lang.reflect.Field; import java.util.*; import java.util.List; import java.util.logging.Level; @@ -116,21 +115,6 @@ public static void init() { if (mainMenuBar == null) { mainMenuBar = createMenuBar(); ToolbarPool.getDefault().waitFinished(); - - Toolkit toolkit = Toolkit.getDefaultToolkit(); - Class xtoolkit = toolkit.getClass(); - if (xtoolkit.getName().equals("sun.awt.X11.XToolkit")) { //NOI18N - // TODO those add --add-opens=java.desktop/sun.awt.X11=ALL-UNNAMED - - //#183739 / JDK-6528430 - provide proper app name on Linux - try { - final Field awtAppClassName = xtoolkit.getDeclaredField("awtAppClassName"); //NOI18N - awtAppClassName.setAccessible(true); - awtAppClassName.set(null, NbBundle.getMessage(MainWindow.class, "CTL_MainWindow_Title_No_Project", "").strip()); //NOI18N - } catch (Exception x) { - LOGGER.log(Level.FINE, "can't change X11 application name", x); - } - } } logLookAndFeelUsage();