diff --git a/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java b/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java index 24ac7108ce..0c080ca575 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/DockableToolBarManager.java @@ -206,13 +206,19 @@ class DockableToolBarManager { @Override public boolean isEnabledForContext(ActionContext context) { + DockingWindowManager dwm = DockingWindowManager.getActiveInstance(); ComponentProvider provider = context.getComponentProvider(); if (provider == null) { // Some context providers do not specify the provider when creating a contexts - DockingWindowManager dwm = DockingWindowManager.getActiveInstance(); provider = dwm.getActiveComponentProvider(); } - return provider == dockableComponent.getComponentProvider(); + + if (provider != dockableComponent.getComponentProvider()) { + return false; + } + + // don't allow the last component in a window to be closed to prevent an empty window + return !dwm.isLastComponentInWindow(provider); } } diff --git a/Ghidra/Framework/Docking/src/main/java/docking/action/ShowActionChooserDialogAction.java b/Ghidra/Framework/Docking/src/main/java/docking/action/ShowActionChooserDialogAction.java index 766e9946f7..74f5bc0527 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/action/ShowActionChooserDialogAction.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/action/ShowActionChooserDialogAction.java @@ -4,9 +4,9 @@ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -56,6 +56,9 @@ public class ShowActionChooserDialogAction extends DockingAction { private void showActionsDialog(Tool tool, DockingFrame frame, ActionContext context) { ComponentProvider provider = tool.getWindowManager().getActiveComponentProvider(); + if (provider == null) { + return; // this can happen if there is no active provider + } ActionChooserDialog actionsDialog = new ActionChooserDialog(tool, provider, context); tool.showDialog(actionsDialog); }