From d9d269cf307f7bcf3719ca650bacf272be5efcdd Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Thu, 30 Jan 2025 08:34:16 +0100 Subject: [PATCH] Fix: tabs without file objects had null title in tab switcher - example: repo history with parent folder decorator enabled - or diff between two files - regression since ad776db73d --- .../multitabs/impl/DocumentSwitcherTable.java | 13 ++++++++----- .../multitabs/impl/FolderNameTabDecorator.java | 16 ++++++++++++++-- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java index 54fef8067ee8..23417e8da2a5 100644 --- a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java +++ b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/DocumentSwitcherTable.java @@ -68,8 +68,6 @@ class DocumentSwitcherTable extends SwitcherTable { private final ItemBorder ITEM_BORDER = new ItemBorder(); private final Border SEPARATOR_BORDER = BorderFactory.createEmptyBorder( 2, 2, 0, 5 ); - private String itemText; - public DocumentSwitcherTable( Controller controller, SwitcherTableItem[] items, int y ) { super( items, y ); this.controller = controller; @@ -113,9 +111,14 @@ public Component prepareRenderer( TableCellRenderer renderer, int row, int colum } else { if(null != folderNameDecorator && null != item) { TabData tab = item.getTabData(); - if(null != tab) { - itemText = folderNameDecorator.getText(tab) + (item.isActive() ? " ←" : ""); //NOI18N - lbl.setText(itemText); + if (null != tab) { + String decorated = folderNameDecorator.getText(tab); + if (decorated != null) { + if (item.isActive()) { + decorated += " ←"; //NOI18N + } + lbl.setText(decorated); + } } } lbl.setBorder( ITEM_BORDER ); diff --git a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/FolderNameTabDecorator.java b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/FolderNameTabDecorator.java index 43fd4b6b1c74..f6f8fd68faf3 100644 --- a/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/FolderNameTabDecorator.java +++ b/platform/core.multitabs/src/org/netbeans/core/multitabs/impl/FolderNameTabDecorator.java @@ -21,6 +21,7 @@ import java.awt.Color; import java.awt.Graphics; import java.awt.Rectangle; +import java.io.CharConversionException; import java.io.File; import javax.swing.Icon; import javax.swing.UIManager; @@ -32,6 +33,7 @@ import org.openide.loaders.DataObject; import org.openide.util.lookup.ServiceProvider; import org.openide.windows.TopComponent; +import org.openide.xml.XMLUtil; import static java.util.Objects.requireNonNullElse; @@ -123,8 +125,18 @@ private static String merge( String prefix, String baseText ) { res.append( prefix ); res.append( baseText.substring( 6 ) ); } else { - res.append( prefix ); - res.append( baseText ); + if (prefix.startsWith(""); //NOI18N + res.append(prefix); + try { + res.append(XMLUtil.toElementContent(baseText)); + } catch (CharConversionException ex) { + res.append(baseText); + } + } else { + res.append(prefix); + res.append(baseText); + } } return res.toString();