diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java
index aea0ddde67f..2f312f68f0d 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/CTabRendering.java
@@ -80,8 +80,8 @@ public class CTabRendering extends CTabFolderRenderer implements ICTabRendering,
* A named preference for setting CTabFolder's to be rendered with dirty
* indicator overlay on close button
*
- * The default value for this preference is: false (do not show
- * dirty indicator)
+ * The default value for this preference is: true (show dirty
+ * indicator)
*
*/
public static final String SHOW_DIRTY_INDICATOR_ON_TABS = "SHOW_DIRTY_INDICATOR_ON_TABS"; //$NON-NLS-1$
@@ -89,7 +89,7 @@ public class CTabRendering extends CTabFolderRenderer implements ICTabRendering,
/**
* Default value for "dirty indicator" preference for tabs
*/
- public static final boolean SHOW_DIRTY_INDICATOR_ON_TABS_DEFAULT = false;
+ public static final boolean SHOW_DIRTY_INDICATOR_ON_TABS_DEFAULT = true;
private static int MIN_VIEW_CHARS = 1;
private static int MAX_VIEW_CHARS = Integer.MAX_VALUE;
diff --git a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MPartTest.java b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MPartTest.java
index 63842104149..7a8aae7f419 100644
--- a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MPartTest.java
+++ b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MPartTest.java
@@ -21,6 +21,8 @@
import static org.junit.jupiter.api.Assertions.assertNull;
import jakarta.inject.Inject;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
@@ -30,6 +32,7 @@
import org.eclipse.e4.ui.tests.rules.WorkbenchContextExtension;
import org.eclipse.e4.ui.workbench.IPresentationEngine;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.e4.ui.workbench.renderers.swt.CTabRendering;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.junit.jupiter.api.Test;
@@ -191,34 +194,45 @@ public void testMPart_getContext() {
@Test
public void testMPartBug369866() {
- final MWindow window = createWindowWithOneView("Part");
-
- application.getChildren().add(window);
- contextRule.createAndRunWorkbench(window);
-
- MPartSashContainer container = (MPartSashContainer) window.getChildren().get(0);
- MPartStack stack = (MPartStack) container.getChildren().get(0);
- MPart part = (MPart) stack.getChildren().get(0);
-
- CTabFolder folder = (CTabFolder) stack.getWidget();
- CTabItem item = folder.getItem(0);
-
- // bug 369866 has a StringIOOBE from toggling the dirty flag with an
- // empty part name
- assertFalse(part.isDirty());
- assertEquals("Part", item.getText());
-
- part.setDirty(true);
- assertEquals("*Part", item.getText());
-
- part.setLabel("");
- assertEquals("*", item.getText());
-
- part.setDirty(false);
- assertEquals("", item.getText());
-
- part.setDirty(true);
- assertEquals("*", item.getText());
+ // This test verifies the textual '*' dirty prefix, which is only used
+ // when the graphical dirty indicator is disabled.
+ IEclipsePreferences prefs = InstanceScope.INSTANCE
+ .getNode(CTabRendering.PREF_QUALIFIER_ECLIPSE_E4_UI_WORKBENCH_RENDERERS_SWT);
+ boolean previous = prefs.getBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS,
+ CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS_DEFAULT);
+ prefs.putBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS, false);
+ try {
+ final MWindow window = createWindowWithOneView("Part");
+
+ application.getChildren().add(window);
+ contextRule.createAndRunWorkbench(window);
+
+ MPartSashContainer container = (MPartSashContainer) window.getChildren().get(0);
+ MPartStack stack = (MPartStack) container.getChildren().get(0);
+ MPart part = (MPart) stack.getChildren().get(0);
+
+ CTabFolder folder = (CTabFolder) stack.getWidget();
+ CTabItem item = folder.getItem(0);
+
+ // bug 369866 has a StringIOOBE from toggling the dirty flag with an
+ // empty part name
+ assertFalse(part.isDirty());
+ assertEquals("Part", item.getText());
+
+ part.setDirty(true);
+ assertEquals("*Part", item.getText());
+
+ part.setLabel("");
+ assertEquals("*", item.getText());
+
+ part.setDirty(false);
+ assertEquals("", item.getText());
+
+ part.setDirty(true);
+ assertEquals("*", item.getText());
+ } finally {
+ prefs.putBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS, previous);
+ }
}
private MWindow createWindowWithOneView(String partName) {
diff --git a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MSaveablePartTest.java b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MSaveablePartTest.java
index 11f590f1679..c2ce078e818 100644
--- a/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MSaveablePartTest.java
+++ b/tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/tests/workbench/MSaveablePartTest.java
@@ -19,6 +19,8 @@
import static org.junit.jupiter.api.Assertions.assertFalse;
import jakarta.inject.Inject;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.model.application.ui.basic.MPartSashContainer;
@@ -26,6 +28,7 @@
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
import org.eclipse.e4.ui.tests.rules.WorkbenchContextExtension;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.e4.ui.workbench.renderers.swt.CTabRendering;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.junit.jupiter.api.Test;
@@ -44,27 +47,38 @@ public class MSaveablePartTest {
@Test
public void testCreateView() {
- final MWindow window = createWindowWithOneView("Part Name");
-
- application.getChildren().add(window);
- contextRule.createAndRunWorkbench(window);
-
- MPartSashContainer container = (MPartSashContainer) window
- .getChildren().get(0);
- MPartStack stack = (MPartStack) container.getChildren().get(0);
- MPart part = (MPart) stack.getChildren().get(0);
-
- CTabFolder folder = (CTabFolder) stack.getWidget();
- CTabItem item = folder.getItem(0);
- assertEquals("Part Name", item.getText());
-
- assertFalse(part.isDirty());
-
- part.setDirty(true);
- assertEquals("*Part Name", item.getText());
-
- part.setDirty(false);
- assertEquals("Part Name", item.getText());
+ // This test verifies the textual '*' dirty prefix, which is only used
+ // when the graphical dirty indicator is disabled.
+ IEclipsePreferences prefs = InstanceScope.INSTANCE
+ .getNode(CTabRendering.PREF_QUALIFIER_ECLIPSE_E4_UI_WORKBENCH_RENDERERS_SWT);
+ boolean previous = prefs.getBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS,
+ CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS_DEFAULT);
+ prefs.putBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS, false);
+ try {
+ final MWindow window = createWindowWithOneView("Part Name");
+
+ application.getChildren().add(window);
+ contextRule.createAndRunWorkbench(window);
+
+ MPartSashContainer container = (MPartSashContainer) window
+ .getChildren().get(0);
+ MPartStack stack = (MPartStack) container.getChildren().get(0);
+ MPart part = (MPart) stack.getChildren().get(0);
+
+ CTabFolder folder = (CTabFolder) stack.getWidget();
+ CTabItem item = folder.getItem(0);
+ assertEquals("Part Name", item.getText());
+
+ assertFalse(part.isDirty());
+
+ part.setDirty(true);
+ assertEquals("*Part Name", item.getText());
+
+ part.setDirty(false);
+ assertEquals("Part Name", item.getText());
+ } finally {
+ prefs.putBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS, previous);
+ }
}
private MWindow createWindowWithOneView(String partName) {
diff --git a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java
index 1cb24d4771c..9b14ca117e4 100644
--- a/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java
+++ b/tests/org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/multieditor/MultiEditorTest.java
@@ -35,6 +35,9 @@
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.preferences.IEclipsePreferences;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.e4.ui.workbench.renderers.swt.CTabRendering;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.ToolBarContributionItem;
import org.eclipse.jface.action.ToolBarManager;
@@ -233,6 +236,14 @@ public void testDirty() throws Throwable {
MockEditorPart editorA = (MockEditorPart) innerEditors[0];
MockEditorPart editorB = (MockEditorPart) innerEditors[0];
+ // This test verifies the textual '*' dirty prefix, which is only used
+ // when the graphical dirty indicator is disabled.
+ IEclipsePreferences prefs = InstanceScope.INSTANCE
+ .getNode(CTabRendering.PREF_QUALIFIER_ECLIPSE_E4_UI_WORKBENCH_RENDERERS_SWT);
+ boolean previous = prefs.getBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS,
+ CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS_DEFAULT);
+ prefs.putBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS, false);
+
char firstChar = item.getText().charAt(0);
assertFalse(firstChar == '*');
@@ -249,6 +260,7 @@ public void testDirty() throws Throwable {
editorB.setDirty(false);
assertEquals(firstChar, item.getText().charAt(0));
} finally {
+ prefs.putBoolean(CTabRendering.SHOW_DIRTY_INDICATOR_ON_TABS, previous);
page.closeAllEditors(false);
}
}