From a6b346dfadc5f2028362660b1c94853df9ab8c3a Mon Sep 17 00:00:00 2001 From: Sougandh S Date: Mon, 28 Sep 2026 09:47:05 +0530 Subject: [PATCH] Dynamic Maximize/Minimize View label in context menu Update the Terminal view context menu entry dynamically to display "Minimize View" when the view is maximized and "Maximize View" when the view is restored. --- .../terminal/view/ui/internal/Messages.java | 5 +++ .../view/ui/internal/Messages.properties | 5 +++ .../internal/handler/MaximizeViewHandler.java | 45 ++++++++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.java index 6eac222ca93..b130c418dfc 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.java @@ -154,4 +154,9 @@ public static String getString(String key) { public static String RenameTerminalAction_inputdialog_title; public static String RenameTerminalAction_tooltip; public static String RenameTerminalAction_menu; + + public static String MaximizeViewHandler_maximize; + public static String MaximizeViewHandler_maximizeTooltip; + public static String MaximizeViewHandler_minimize; + public static String MaximizeViewHandler_minimizeTooltip; } diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.properties b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.properties index d33fef3009e..8bdd6cf43b5 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.properties +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/Messages.properties @@ -120,3 +120,8 @@ PreferencePage_command_invalid=Selected shell command is not a file or is not re PreferencePage_command_note_label=Note: PreferencePage_command_note_text=Leave the shell command empty to fallback to the SHELL environment variable or if not set, to /bin/sh. PreferencePage_command_arguments_label=Arguments: + +MaximizeViewHandler_maximize=Maximize View +MaximizeViewHandler_maximizeTooltip=Maximize the Terminal view +MaximizeViewHandler_minimize=Minimize View +MaximizeViewHandler_minimizeTooltip=Restore the Terminal view to its normal size diff --git a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/MaximizeViewHandler.java b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/MaximizeViewHandler.java index 3a80a14680e..a77165b87bb 100644 --- a/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/MaximizeViewHandler.java +++ b/terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/MaximizeViewHandler.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2014, 2018 Wind River Systems, Inc. and others. All rights reserved. + * Copyright (c) 2014, 2026 Wind River Systems, Inc. and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License 2.0 which accompanies this distribution, and is * available at https://www.eclipse.org/legal/epl-2.0/ @@ -8,16 +8,26 @@ * * Contributors: * Wind River Systems - initial API and implementation + * IBM Corporation - Update label for window state *******************************************************************************/ package org.eclipse.terminal.view.ui.internal.handler; +import java.util.Map; + import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.terminal.view.ui.internal.Messages; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.commands.IElementUpdater; +import org.eclipse.ui.menus.UIElement; /** * Maximize view handler implementation. */ -public class MaximizeViewHandler extends AbstractTriggerCommandHandler { +public class MaximizeViewHandler extends AbstractTriggerCommandHandler implements IElementUpdater { @Override public Object execute(ExecutionEvent event) throws ExecutionException { @@ -25,4 +35,35 @@ public Object execute(ExecutionEvent event) throws ExecutionException { return null; } + @SuppressWarnings("rawtypes") + @Override + public void updateElement(UIElement element, Map parameters) { + if (isActivePartMaximized()) { + element.setText(Messages.MaximizeViewHandler_minimize); + element.setTooltip(Messages.MaximizeViewHandler_minimizeTooltip); + } else { + element.setText(Messages.MaximizeViewHandler_maximize); + element.setTooltip(Messages.MaximizeViewHandler_maximizeTooltip); + } + } + + /** + * Returns {@code true} when the currently active part in the active workbench + * page is in the {@link IWorkbenchPage#STATE_MAXIMIZED} state. + */ + private static boolean isActivePartMaximized() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if (window == null) { + return false; + } + IWorkbenchPage page = window.getActivePage(); + if (page == null) { + return false; + } + IWorkbenchPartReference partRef = page.getActivePartReference(); + if (partRef == null) { + return false; + } + return page.getPartState(partRef) == IWorkbenchPage.STATE_MAXIMIZED; + } }