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
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..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
@@ -721,4 +721,25 @@ 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$ + + /** + *+ * 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 a2b10045e035..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 @@ -481,6 +481,11 @@ 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 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 c6ae6cc5e4ad..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 @@ -115,6 +115,8 @@ 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; @@ -140,6 +142,7 @@ protected Control createContents(Composite parent) { layout.horizontalSpacing = 10; comp.setLayout(layout); createThemeIndependentComposits(comp); + createDisabledIconsButtons(comp); createRescaleAtRuntimeCheckButton(comp); return comp; } @@ -184,6 +187,7 @@ protected Control createContents(Composite parent) { createHideIconsForViewTabs(comp); createDependency(showFullTextForViewTabs, hideIconsForViewTabs); + createDisabledIconsButtons(comp); createRescaleAtRuntimeCheckButton(comp); if (currentTheme != null) { @@ -235,6 +239,24 @@ 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); + + 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) { createUseRoundTabs(comp); createColoredLabelsPref(comp); @@ -364,6 +386,10 @@ public boolean performOk() { .getSelection(); prefs.putBoolean(PartRenderingEngine.ENABLED_THEME_KEY, themingEnabled.getSelection()); } + 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) { @@ -467,6 +493,10 @@ protected void performDefaults() { } IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore(); 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 3988f2dba815..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 @@ -435,6 +435,12 @@ 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 +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.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..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 @@ -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,20 @@ 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); + + 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 303c54d87db8..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 @@ -61,6 +61,8 @@ public void initializeDefaultPreferences() { false); 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); 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, 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); } }