private void showContextMenu(MouseEvent e) {
		if (e.isConsumed()) {
			return;
		}

		if (!e.isPopupTrigger()) {
			return;
		}

		Component component = e.getComponent();
		if (component == null) {
			return; // not sure this can happen
		}

		// get the bounds to see if the clicked point is over the component
		Rectangle bounds = component.getBounds();
		if (component instanceof JComponent) {
			((JComponent) component).computeVisibleRect(bounds);
		}

		Point point = e.getPoint();
		if (!bounds.contains(point)) {
			return;
		}

		//
		// Consume the event so that Java UI listeners do not process it.  This fixes issues with
		// UI classes (e.g., listeners change table selection).   We want to run this code later to
		// allow trailing application mouse listeners to have a chance to update the context.  If
		// the delayed nature causes any timing issues, then we will need a more robust way of 
		// registering mouse listeners to work around this issue.
		//
		e.consume();
		Swing.runLater(() -> {

			MenuSelectionManager msm = MenuSelectionManager.defaultManager();
			MenuElement[] selectedPath = msm.getSelectedPath();
			if (!ArrayUtils.isEmpty(selectedPath)) {
				// This means that a menu is open.  This can happen if a mouse listener further down
				// the listener list has shown a popup.  In that case, do not show the context menu.
				return;
			}

			PopupMenuContext popupContext = new PopupMenuContext(e);
			actionMgr.showPopupMenu(placeholder, popupContext);
		});
	}
Constructs a new DockableComponent for the given info object.
@param placeholder the info object that has the component to be shown.
@param isDocking if true allows components to be dragged and docked.
Ghidra/Framework/Docking/src/main/java/docking/DockableComponent.java