From 19c55cdfb12eb2010b8eaf36e8f20f103df730c1 Mon Sep 17 00:00:00 2001 From: sougandhs Date: Thu, 22 Jan 2026 16:23:30 +0530 Subject: [PATCH] Add preference page for console icon update This commit adds a preference option in console preference for enable/disable dynamic console update based on active console page Fixes: https://github.com/eclipse-platform/eclipse.platform/issues/2434 Co-authored-by: Andrey Loskutov --- .../ui/preferences/ConsolePreferencePage.java | 6 +++++- .../preferences/DebugPreferencesMessages.java | 4 +++- .../DebugPreferencesMessages.properties | 3 ++- .../eclipse/ui/console/IConsoleConstants.java | 9 ++++++++- .../ConsoleUIPreferenceInitializer.java | 3 ++- .../ui/internal/console/ConsoleView.java | 20 +++++++++++++++++++ 6 files changed, 40 insertions(+), 5 deletions(-) diff --git a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/ConsolePreferencePage.java b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/ConsolePreferencePage.java index b339991b156..2e96cdc0b29 100644 --- a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/ConsolePreferencePage.java +++ b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/ConsolePreferencePage.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2025 IBM Corporation and others. + * Copyright (c) 2000, 2026 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -181,6 +181,10 @@ public void widgetSelected(SelectionEvent e) { DebugPreferencesMessages.ConsolePreferencePage_ConsoleAutoPinEnable, SWT.NONE, getFieldEditorParent()); autoPinEditor.setPreferenceStore(ConsolePlugin.getDefault().getPreferenceStore()); addField(autoPinEditor); + BooleanFieldEditor consoleIconUpdate = new BooleanFieldEditor(IConsoleConstants.UPDATE_CONSOLE_ICON, + DebugPreferencesMessages.ConsolePreferencePage_ConsoleIconUpdate, SWT.NONE, getFieldEditorParent()); + consoleIconUpdate.setPreferenceStore(ConsolePlugin.getDefault().getPreferenceStore()); + addField(consoleIconUpdate); Label comboLabel = new Label(getFieldEditorParent(), SWT.NONE); comboLabel.setText(DebugPreferencesMessages.ConsoleElapsedTimeLabel); fElapsedFormat = new ComboViewer(getFieldEditorParent(), SWT.DROP_DOWN | SWT.BORDER); diff --git a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.java b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.java index cf401c4152e..f64c8fd3c94 100644 --- a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.java +++ b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2025 IBM Corporation and others. + * Copyright (c) 2000, 2026 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -230,4 +230,6 @@ public class DebugPreferencesMessages extends NLS { public static Object ConsoleDisableElapsedTime; + public static String ConsolePreferencePage_ConsoleIconUpdate; + } diff --git a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties index e29da0fd839..aed9730fe4c 100644 --- a/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties +++ b/debug/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/preferences/DebugPreferencesMessages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000, 2025 IBM Corporation and others. +# Copyright (c) 2000, 2026 IBM Corporation and others. # # This program and the accompanying materials # are made available under the terms of the Eclipse Public License 2.0 @@ -36,6 +36,7 @@ ConsoleElapsedTimeLabel=Elapsed Time Format (Choose 'None' to disable) ConsoleDefaultElapsedTimeFormat=%d:%02d:%02d ConsoleElapsedTimeToolTip=Supports formats like: 'H:MM:SS.mmm', 'MMm SSs', 'H:MM:SS' \nYou can also use positional parameters \n%1$ = (H)hours\n%2$ = (M)minutes\n%3$ = (S)seconds\n%4$ = (mmm)milliseconds ConsoleDisableElapsedTime=None +ConsolePreferencePage_ConsoleIconUpdate=Update Console icon based on currently active page DebugPreferencePage_1=General Settings for Running and Debugging. DebugPreferencePage_2=Re&use editor when displaying source code diff --git a/debug/org.eclipse.ui.console/src/org/eclipse/ui/console/IConsoleConstants.java b/debug/org.eclipse.ui.console/src/org/eclipse/ui/console/IConsoleConstants.java index 8f4dc8f24d2..81ac90ed999 100644 --- a/debug/org.eclipse.ui.console/src/org/eclipse/ui/console/IConsoleConstants.java +++ b/debug/org.eclipse.ui.console/src/org/eclipse/ui/console/IConsoleConstants.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2020 IBM Corporation and others. + * Copyright (c) 2000, 2026 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -197,4 +197,11 @@ public interface IConsoleConstants { */ String COMMAND_ID_CLEAR_CONSOLE = "org.eclipse.debug.ui.commands.console.clear"; //$NON-NLS-1$ + /** + * The preference for updating console icon based on active console page + * + * @since 3.16 + */ + String UPDATE_CONSOLE_ICON = ConsolePlugin.getUniqueIdentifier() + ".PREF_DYNAMIC_CONSOLE_ICON"; //$NON-NLS-1$ + } diff --git a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleUIPreferenceInitializer.java b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleUIPreferenceInitializer.java index ee7869fc84f..bb7ce042207 100644 --- a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleUIPreferenceInitializer.java +++ b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleUIPreferenceInitializer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2018, 2020 Andrey Loskutov and others. + * Copyright (c) 2018, 2026 Andrey Loskutov and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -31,6 +31,7 @@ public void initializeDefaultPreferences() { prefs.setDefault(IConsoleConstants.P_CONSOLE_WORD_WRAP, false); prefs.setDefault(IConsoleConstants.AUTO_PIN_ENABLED_PREF_NAME, true); prefs.setDefault(IConsoleConstants.REMEMBER_AUTO_PIN_DECISION_PREF_NAME, false); + prefs.setDefault(IConsoleConstants.UPDATE_CONSOLE_ICON, true); } } diff --git a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java index 0a72b57436e..5850ed01813 100644 --- a/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java +++ b/debug/org.eclipse.ui.console/src/org/eclipse/ui/internal/console/ConsoleView.java @@ -129,6 +129,8 @@ public class ConsoleView extends PageBookView implements IConsoleView, IConsoleL private Image currentIcon, defaultIcon; private LocalResourceManager localResManager; + private boolean updateConsoleIcon; + private boolean isAvailable() { return getPageBook() != null && !getPageBook().isDisposed(); } @@ -141,9 +143,17 @@ public void propertyChange(PropertyChangeEvent event) { updateTitle(); } } + if (IConsoleConstants.UPDATE_CONSOLE_ICON.equals(event.getProperty())) { + updateConsoleIcon = shouldUpdateConsoleIcon(); + updateIcon(); + } } + private boolean shouldUpdateConsoleIcon() { + return ConsolePlugin.getDefault().getPreferenceStore().getBoolean(IConsoleConstants.UPDATE_CONSOLE_ICON); + } + @Override public void partClosed(IWorkbenchPart part) { super.partClosed(part); @@ -277,6 +287,13 @@ protected void updateHelp() { } protected void updateIcon() { + if (!updateConsoleIcon) { + if (currentIcon != defaultIcon) { + currentIcon = defaultIcon; + setTitleImage(currentIcon); + } + return; + } IConsole console = getConsole(); if (console == null) { // Check and restore default console icon if last page is closed @@ -412,6 +429,7 @@ public void dispose() { localResManager.dispose(); localResManager = null; } + ConsolePlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this); } /** @@ -612,8 +630,10 @@ public void createPartControl(Composite parent) { getViewSite().getPage().addPartListener((IPartListener2)this); initPageSwitcher(); localResManager = new LocalResourceManager(JFaceResources.getResources(), parent); + updateConsoleIcon = shouldUpdateConsoleIcon(); defaultIcon = ConsolePluginImages.getImage(IConsoleConstants.IMG_VIEW_CONSOLE); currentIcon = defaultIcon; + ConsolePlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this); } /**