From 04547fbfb82736daf4d72f567778ba23186901a8 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Wed, 22 Oct 2025 18:15:56 +0200 Subject: [PATCH 1/4] Allow to ignore explicitly defined disabled icons The algorithm for generating disabled icons on-the-fly has recently been enhanced. Most explicit disabled icons that have been embedded into bundles conform to what now can be generated on-the-fly. In addition, the algorithm is interchangeable, allowing custom stylings of disabled icons. However, when there are still bundles, such as extensions out of own control, that still explicitly define disabled icons, exchanging the algorithm for disabled icons will lead to inconsistent appearance as only the on-the-fly generated icons will adhere to that. This change allows to ignore explicitly defined disabled icons, such that even if some bundles defined disabled icons, they will be ignored and on-the-fly generated disabled icons according to the selected algorithm will be used instead. An according preference that can be configured via the appearance tab is added. --- .../swt/AbstractContributionItem.java | 4 +++ .../org.eclipse.jface/META-INF/MANIFEST.MF | 2 +- .../jface/action/ActionContributionItem.java | 32 ++++++++++++++++++- .../META-INF/MANIFEST.MF | 2 +- .../ui/IWorkbenchPreferenceConstants.java | 11 +++++++ .../ui/internal/WorkbenchMessages.java | 3 ++ .../internal/dialogs/ViewsPreferencePage.java | 18 +++++++++++ .../eclipse/ui/internal/messages.properties | 3 ++ .../ui/menus/CommandContributionItem.java | 5 ++- .../src/org/eclipse/ui/internal/UIPlugin.java | 11 +++++++ .../ui/internal/UIPreferenceInitializer.java | 1 + .../tests/action/ToolBarManagerTest.java | 6 ++++ 12 files changed, 94 insertions(+), 4 deletions(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/AbstractContributionItem.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/AbstractContributionItem.java index 020601182d76..3b9f6d2c581a 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/AbstractContributionItem.java +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/AbstractContributionItem.java @@ -38,6 +38,7 @@ import org.eclipse.e4.ui.workbench.modeling.EModelService; import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities; import org.eclipse.emf.common.util.URI; +import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IMenuCreator; @@ -211,6 +212,9 @@ protected void updateIcons() { } private String getDisabledIconURI(MItem toolItem) { + if (ActionContributionItem.getIgnoreDisabledIcons()) { + return ""; //$NON-NLS-1$ + } Object obj = toolItem.getTransientData().get(IPresentationEngine.DISABLED_ICON_IMAGE_KEY); return obj instanceof String s ? s : ""; //$NON-NLS-1$ } diff --git a/bundles/org.eclipse.jface/META-INF/MANIFEST.MF b/bundles/org.eclipse.jface/META-INF/MANIFEST.MF index 0a2620fd7113..a627f5c17061 100644 --- a/bundles/org.eclipse.jface/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.jface/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.jface;singleton:=true -Bundle-Version: 3.39.0.qualifier +Bundle-Version: 3.40.0.qualifier Bundle-Vendor: %providerName Bundle-Localization: plugin Export-Package: org.eclipse.jface, diff --git a/bundles/org.eclipse.jface/src/org/eclipse/jface/action/ActionContributionItem.java b/bundles/org.eclipse.jface/src/org/eclipse/jface/action/ActionContributionItem.java index 7cc82c7d5db7..25b3792f3299 100644 --- a/bundles/org.eclipse.jface/src/org/eclipse/jface/action/ActionContributionItem.java +++ b/bundles/org.eclipse.jface/src/org/eclipse/jface/action/ActionContributionItem.java @@ -96,6 +96,33 @@ public static void setUseColorIconsInToolbars(boolean useColorIcons) { USE_COLOR_ICONS = useColorIcons; } + private static boolean IGNORE_DISABLED_ICONS = false; + + /** + * Returns whether explicitly defined disabled icons should be ignored, such + * that all disabled icons are generated on-the-fly. + * + * @return true if disabled icons set to tool items should be + * ignored, false otherwise + * @since 3.40 + */ + public static boolean getIgnoreDisabledIcons() { + return IGNORE_DISABLED_ICONS; + } + + /** + * Sets whether explicitly defined disabled icons should be ignored, such that + * all disabled icons are generated on-the-fly. + * + * @param ignoreDisabledIcons true if disabled icons set to tool + * items should be ignored, false + * otherwise + * @since 3.40 + */ + public static void setIgnoreDisabledIcons(boolean ignoreDisabledIcons) { + IGNORE_DISABLED_ICONS = ignoreDisabledIcons; + } + /** * The presentation mode. */ @@ -988,7 +1015,10 @@ private boolean updateImages(boolean forceImage) { if (widget instanceof ToolItem) { ImageDescriptor image = action.getImageDescriptor(); ImageDescriptor hoverImage = action.getHoverImageDescriptor(); - ImageDescriptor disabledImage = action.getDisabledImageDescriptor(); + ImageDescriptor disabledImage = null; + if (!getIgnoreDisabledIcons()) { + disabledImage = action.getDisabledImageDescriptor(); + } // Make sure there is a valid image in case images are forced. if (image == null && forceImage) { image = ImageDescriptor.getMissingImageDescriptor(); diff --git a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF index e8c6526fa84f..e0fb61561867 100644 --- a/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.ui.workbench/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.eclipse.ui.workbench; singleton:=true -Bundle-Version: 3.138.100.qualifier +Bundle-Version: 3.139.0.qualifier Bundle-Activator: org.eclipse.ui.internal.WorkbenchPlugin Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java index 79a643440fab..ad9c22d87dca 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java @@ -721,4 +721,15 @@ public interface IWorkbenchPreferenceConstants { * @since 3.134 */ String RESCALING_AT_RUNTIME = "monitorSpecificScaling"; //$NON-NLS-1$ + + /** + *

+ * Whether explicitly defined disabled icons shall be ignored in favor of using + * on-the-fly generated disabled icons. + *

+ * + * @since 3.139 + */ + String IGNORE_DISABLED_ICONS = "ignoreDisabledIcons"; //$NON-NLS-1$ + } diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java index a2b10045e035..9c0a98d643d0 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java @@ -481,6 +481,9 @@ public class WorkbenchMessages extends NLS { public static String ViewsPreference_viewTabs_icons_and_titles_label; public static String ViewsPreference_showFullTextForViewTabs; public static String ViewsPreference_hideIconsForViewTabs; + public static String ViewsPreference_disabledIcons_description; + public static String ViewsPreference_ignoreDisabledIcons; + public static String ViewsPreference_ignoreDisabledIcons_tooltip; public static String ToggleFullScreenMode_ActivationPopup_Description; public static String ToggleFullScreenMode_ActivationPopup_Description_NoKeybinding; public static String ToggleFullScreenMode_ActivationPopup_DoNotShowAgain; diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java index c6ae6cc5e4ad..72875308351d 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java @@ -115,6 +115,7 @@ public class ViewsPreferencePage extends PreferencePage implements IWorkbenchPre private Button themingEnabled; private Button rescaleAtRuntime; + private Button ignoreDisabledIcons; private Button hideIconsForViewTabs; private Button showFullTextForViewTabs; @@ -140,6 +141,7 @@ protected Control createContents(Composite parent) { layout.horizontalSpacing = 10; comp.setLayout(layout); createThemeIndependentComposits(comp); + createDisabledIconsButtons(comp); createRescaleAtRuntimeCheckButton(comp); return comp; } @@ -184,6 +186,7 @@ protected Control createContents(Composite parent) { createHideIconsForViewTabs(comp); createDependency(showFullTextForViewTabs, hideIconsForViewTabs); + createDisabledIconsButtons(comp); createRescaleAtRuntimeCheckButton(comp); if (currentTheme != null) { @@ -235,6 +238,17 @@ private void createRescaleAtRuntimeCheckButton(Composite parent) { } } + private void createDisabledIconsButtons(Composite parent) { + createLabel(parent, ""); //$NON-NLS-1$ + createLabel(parent, WorkbenchMessages.ViewsPreference_disabledIcons_description); + + boolean initialStateIgnoreDisabledIcons = PrefUtil.getAPIPreferenceStore() + .getBoolean(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS); + ignoreDisabledIcons = createCheckButton(parent, WorkbenchMessages.ViewsPreference_ignoreDisabledIcons, + initialStateIgnoreDisabledIcons); + ignoreDisabledIcons.setToolTipText(WorkbenchMessages.ViewsPreference_ignoreDisabledIcons_tooltip); + } + private void createThemeIndependentComposits(Composite comp) { createUseRoundTabs(comp); createColoredLabelsPref(comp); @@ -364,6 +378,8 @@ public boolean performOk() { .getSelection(); prefs.putBoolean(PartRenderingEngine.ENABLED_THEME_KEY, themingEnabled.getSelection()); } + PrefUtil.getAPIPreferenceStore().setValue(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS, + ignoreDisabledIcons.getSelection()); boolean isRescaleAtRuntimeChanged = false; if (rescaleAtRuntime != null) { @@ -467,6 +483,8 @@ protected void performDefaults() { } IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore(); useColoredLabels.setSelection(apiStore.getDefaultBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS)); + ignoreDisabledIcons + .setSelection(apiStore.getDefaultBoolean(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS)); useRoundTabs.setSelection( defaultPrefs.getBoolean(CTabRendering.USE_ROUND_TABS, CTabRendering.USE_ROUND_TABS_DEFAULT)); diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties index 3988f2dba815..17f39f4416b4 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties @@ -435,6 +435,9 @@ ViewsPreference_enableMRU = Show &most recently used tabs ViewsPreference_showFullTextForViewTabs = Always show full titles ViewsPreference_hideIconsForViewTabs = Hide icons ViewsPreference_viewTabs_icons_and_titles_label = Tab icons and titles in view areas: +ViewsPreference_disabledIcons_description = Icons for disabled actions: +ViewsPreference_ignoreDisabledIcons = Ignore pre-generated disabled icons +ViewsPreference_ignoreDisabledIcons_tooltip = When enabled ignores pre-generated disabled icons in favor of generating consistently styled disabled icons on the fly ToggleFullScreenMode_ActivationPopup_Description=You have gone full screen. Use the Toggle Full Screen command ({0}) to deactivate. ToggleFullScreenMode_ActivationPopup_Description_NoKeybinding=You have gone full screen. Use the Toggle Full Screen command to deactivate. ToggleFullScreenMode_ActivationPopup_DoNotShowAgain=Do not show again diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/menus/CommandContributionItem.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/menus/CommandContributionItem.java index 5fdbaa986e8c..dc2ea80c631f 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/menus/CommandContributionItem.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/menus/CommandContributionItem.java @@ -28,6 +28,7 @@ import org.eclipse.core.commands.common.NotDefinedException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.IContributionManager; import org.eclipse.jface.action.IMenuListener2; @@ -892,7 +893,9 @@ private void updateIcons() { localResourceManager = m; } else if (widget instanceof ToolItem item) { LocalResourceManager m = new LocalResourceManager(JFaceResources.getResources()); - item.setDisabledImage(disabledIcon == null ? null : m.create(disabledIcon)); + if (!ActionContributionItem.getIgnoreDisabledIcons()) { + item.setDisabledImage(disabledIcon == null ? null : m.create(disabledIcon)); + } item.setHotImage(hoverIcon == null ? null : m.create(hoverIcon)); item.setImage(icon == null ? null : m.create(icon)); disposeOldImages(); diff --git a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java index 5c0962634a16..31f4974e6653 100644 --- a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java +++ b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java @@ -14,8 +14,10 @@ package org.eclipse.ui.internal; import org.eclipse.core.runtime.Assert; +import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageRegistry; +import org.eclipse.ui.IWorkbenchPreferenceConstants; import org.eclipse.ui.internal.util.PrefUtil; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; @@ -98,5 +100,14 @@ public void savePreferences() { UIPlugin.this.savePluginPreferences(); } }); + initializeIconConfigurations(); } + + private void initializeIconConfigurations() { + // configure disabled icons appearance + boolean ignoreDisabledIcons = PrefUtil.getAPIPreferenceStore() + .getBoolean(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS); + ActionContributionItem.setIgnoreDisabledIcons(ignoreDisabledIcons); + } + } diff --git a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java index 303c54d87db8..24e0e0778703 100644 --- a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java +++ b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java @@ -61,6 +61,7 @@ public void initializeDefaultPreferences() { false); node.putBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS, true); + node.putBoolean(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS, true); node.putBoolean( IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR, false); diff --git a/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/action/ToolBarManagerTest.java b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/action/ToolBarManagerTest.java index 889b98522b4f..aa33c15bf959 100644 --- a/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/action/ToolBarManagerTest.java +++ b/tests/org.eclipse.jface.tests/src/org/eclipse/jface/tests/action/ToolBarManagerTest.java @@ -141,8 +141,10 @@ protected Control createControl(Composite parent) { @Test public void testDefaultImageIsGray() { boolean oldState = ActionContributionItem.getUseColorIconsInToolbars(); + boolean oldStateIgnoreDisabled = ActionContributionItem.getIgnoreDisabledIcons(); try { ActionContributionItem.setUseColorIconsInToolbars(false); + ActionContributionItem.setIgnoreDisabledIcons(false); ToolBarManager manager = new ToolBarManager(); Action action = new Action("Button with Hover") { }; @@ -165,14 +167,17 @@ public void testDefaultImageIsGray() { assertImageEqualsDescriptor(ImageDescriptor.createWithFlags(descriptor, SWT.IMAGE_GRAY), item.getImage()); } finally { ActionContributionItem.setUseColorIconsInToolbars(oldState); + ActionContributionItem.setIgnoreDisabledIcons(oldStateIgnoreDisabled); } } @Test public void testActionImagesAreSet() { boolean oldState = ActionContributionItem.getUseColorIconsInToolbars(); + boolean oldStateIgnoreDisabled = ActionContributionItem.getIgnoreDisabledIcons(); try { ActionContributionItem.setUseColorIconsInToolbars(true); + ActionContributionItem.setIgnoreDisabledIcons(false); ToolBarManager manager = new ToolBarManager(); Action action = new Action("Button with Hover") { }; @@ -195,6 +200,7 @@ public void testActionImagesAreSet() { assertImageEqualsDescriptor(disabledDescriptor, item.getDisabledImage()); } finally { ActionContributionItem.setUseColorIconsInToolbars(oldState); + ActionContributionItem.setIgnoreDisabledIcons(oldStateIgnoreDisabled); } } From 36ade42c6fbd0dee6c6c953487e2f218de56d6c2 Mon Sep 17 00:00:00 2001 From: Heiko Klare Date: Wed, 22 Oct 2025 18:45:11 +0200 Subject: [PATCH 2/4] Add preference for using desaturated disabled icons This adds a preference which enables the use of desaturated disabled icons, which replaces the existing algorithm to create grayscaled version with an algorithm that generates a desaturated version. --- .../eclipse/ui/IWorkbenchPreferenceConstants.java | 10 ++++++++++ .../org/eclipse/ui/internal/WorkbenchMessages.java | 2 ++ .../ui/internal/dialogs/ViewsPreferencePage.java | 12 ++++++++++++ .../org/eclipse/ui/internal/messages.properties | 3 +++ .../src/org/eclipse/ui/internal/UIPlugin.java | 6 ++++++ .../eclipse/ui/internal/UIPreferenceInitializer.java | 1 + 6 files changed, 34 insertions(+) diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java index ad9c22d87dca..b7acdefa880c 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/IWorkbenchPreferenceConstants.java @@ -732,4 +732,14 @@ public interface IWorkbenchPreferenceConstants { */ String IGNORE_DISABLED_ICONS = "ignoreDisabledIcons"; //$NON-NLS-1$ + /** + *

+ * Whether to use a different algorithm for generating disabled icons that + * desaturates the icons rather than making them completely grayscaled. + *

+ * + * @since 3.139 + */ + String USE_DESATURATED_DISABLED_ICONS = "desaturatedDisabledIcons"; //$NON-NLS-1$ + } diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java index 9c0a98d643d0..58b89702a468 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/WorkbenchMessages.java @@ -484,6 +484,8 @@ public class WorkbenchMessages extends NLS { public static String ViewsPreference_disabledIcons_description; public static String ViewsPreference_ignoreDisabledIcons; public static String ViewsPreference_ignoreDisabledIcons_tooltip; + public static String ViewsPreference_useDesaturatedDisabledIcons; + public static String ViewsPreference_useDesaturatedDisabledIcons_tooltip; public static String ToggleFullScreenMode_ActivationPopup_Description; public static String ToggleFullScreenMode_ActivationPopup_Description_NoKeybinding; public static String ToggleFullScreenMode_ActivationPopup_DoNotShowAgain; diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java index 72875308351d..1ad96a0569bd 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/dialogs/ViewsPreferencePage.java @@ -116,6 +116,7 @@ public class ViewsPreferencePage extends PreferencePage implements IWorkbenchPre private Button themingEnabled; private Button rescaleAtRuntime; private Button ignoreDisabledIcons; + private Button useDesaturatedDisabledIcons; private Button hideIconsForViewTabs; private Button showFullTextForViewTabs; @@ -247,6 +248,13 @@ private void createDisabledIconsButtons(Composite parent) { ignoreDisabledIcons = createCheckButton(parent, WorkbenchMessages.ViewsPreference_ignoreDisabledIcons, initialStateIgnoreDisabledIcons); ignoreDisabledIcons.setToolTipText(WorkbenchMessages.ViewsPreference_ignoreDisabledIcons_tooltip); + + boolean initialStateDesaturatedDisabledIcons = PrefUtil.getAPIPreferenceStore() + .getBoolean(IWorkbenchPreferenceConstants.USE_DESATURATED_DISABLED_ICONS); + useDesaturatedDisabledIcons = createCheckButton(parent, + WorkbenchMessages.ViewsPreference_useDesaturatedDisabledIcons, initialStateDesaturatedDisabledIcons); + useDesaturatedDisabledIcons + .setToolTipText(WorkbenchMessages.ViewsPreference_useDesaturatedDisabledIcons_tooltip); } private void createThemeIndependentComposits(Composite comp) { @@ -380,6 +388,8 @@ public boolean performOk() { } PrefUtil.getAPIPreferenceStore().setValue(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS, ignoreDisabledIcons.getSelection()); + PrefUtil.getAPIPreferenceStore().setValue(IWorkbenchPreferenceConstants.USE_DESATURATED_DISABLED_ICONS, + useDesaturatedDisabledIcons.getSelection()); boolean isRescaleAtRuntimeChanged = false; if (rescaleAtRuntime != null) { @@ -485,6 +495,8 @@ protected void performDefaults() { useColoredLabels.setSelection(apiStore.getDefaultBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS)); ignoreDisabledIcons .setSelection(apiStore.getDefaultBoolean(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS)); + useDesaturatedDisabledIcons + .setSelection(apiStore.getDefaultBoolean(IWorkbenchPreferenceConstants.USE_DESATURATED_DISABLED_ICONS)); useRoundTabs.setSelection( defaultPrefs.getBoolean(CTabRendering.USE_ROUND_TABS, CTabRendering.USE_ROUND_TABS_DEFAULT)); diff --git a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties index 17f39f4416b4..b95f35375017 100644 --- a/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties +++ b/bundles/org.eclipse.ui.workbench/eclipseui/org/eclipse/ui/internal/messages.properties @@ -438,6 +438,9 @@ ViewsPreference_viewTabs_icons_and_titles_label = Tab icons and titles in view a ViewsPreference_disabledIcons_description = Icons for disabled actions: ViewsPreference_ignoreDisabledIcons = Ignore pre-generated disabled icons ViewsPreference_ignoreDisabledIcons_tooltip = When enabled ignores pre-generated disabled icons in favor of generating consistently styled disabled icons on the fly +ViewsPreference_useDesaturatedDisabledIcons = Use desaturated instead of grayscaled disabled icons +ViewsPreference_useDesaturatedDisabledIcons_tooltip = Changes the styling of disabled icons to use a desaturated icon version instead of a grayscaled one + ToggleFullScreenMode_ActivationPopup_Description=You have gone full screen. Use the Toggle Full Screen command ({0}) to deactivate. ToggleFullScreenMode_ActivationPopup_Description_NoKeybinding=You have gone full screen. Use the Toggle Full Screen command to deactivate. ToggleFullScreenMode_ActivationPopup_DoNotShowAgain=Do not show again diff --git a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java index 31f4974e6653..8f18fd652f4d 100644 --- a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java +++ b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPlugin.java @@ -108,6 +108,12 @@ private void initializeIconConfigurations() { boolean ignoreDisabledIcons = PrefUtil.getAPIPreferenceStore() .getBoolean(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS); ActionContributionItem.setIgnoreDisabledIcons(ignoreDisabledIcons); + + boolean useDesaturatedDisabledIcons = PrefUtil.getAPIPreferenceStore() + .getBoolean(IWorkbenchPreferenceConstants.USE_DESATURATED_DISABLED_ICONS); + if (useDesaturatedDisabledIcons) { + System.setProperty("org.eclipse.swt.image.disablement", "desaturated"); //$NON-NLS-1$ //$NON-NLS-2$ + } } } diff --git a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java index 24e0e0778703..38d6cd5866ec 100644 --- a/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java +++ b/bundles/org.eclipse.ui/src/org/eclipse/ui/internal/UIPreferenceInitializer.java @@ -62,6 +62,7 @@ public void initializeDefaultPreferences() { node.putBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS, true); node.putBoolean(IWorkbenchPreferenceConstants.IGNORE_DISABLED_ICONS, true); + node.putBoolean(IWorkbenchPreferenceConstants.USE_DESATURATED_DISABLED_ICONS, true); node.putBoolean( IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR, false); From 897d56ad8850a0de3bd49501105bb47087f1f528 Mon Sep 17 00:00:00 2001 From: Eclipse Platform Bot Date: Wed, 4 Mar 2026 16:39:20 +0000 Subject: [PATCH 3/4] Version bump(s) for 4.40 stream --- .../META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF index 2011078a5813..8e598bd74496 100644 --- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/META-INF/MANIFEST.MF @@ -1,7 +1,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-SymbolicName: org.eclipse.e4.ui.workbench.renderers.swt;singleton:=true -Bundle-Version: 0.17.0.qualifier +Bundle-Version: 0.17.100.qualifier Bundle-Name: %pluginName Bundle-Vendor: %providerName Bundle-Localization: plugin From 1c6569317e48ce984bfc57a50b6e2f800a6b4521 Mon Sep 17 00:00:00 2001 From: Eclipse Platform Bot Date: Wed, 4 Mar 2026 19:53:43 +0000 Subject: [PATCH 4/4] Version bump(s) for 4.40 stream --- tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF index 22e2c1d34bb1..9fff0e155924 100644 --- a/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.jface.tests/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %Bundle-Name Bundle-SymbolicName: org.eclipse.jface.tests -Bundle-Version: 1.5.0.qualifier +Bundle-Version: 1.5.100.qualifier Automatic-Module-Name: org.eclipse.jface.tests Bundle-RequiredExecutionEnvironment: JavaSE-21 Require-Bundle: org.eclipse.jface,