@Override
	public ActionContext getActionContext(MouseEvent event) {
		if (program == null) {
			return null;
		}

		if (event == null) {
			return newListingActionContext();
		}

		Object source = event.getSource();
		if (source == null || source == listingPanel.getFieldPanel()) {
			Point point = event.getPoint();
			ProgramLocation programLocation = listingPanel.getProgramLocation(point);
			if (programLocation == null) {
				return null;
			}
			return newListingActionContext();
		}

		FieldHeader headerPanel = listingPanel.getFieldHeader();
		if (headerPanel != null && source instanceof FieldHeaderComp) {
			FieldHeaderLocation fhLoc = headerPanel.getFieldHeaderLocation(event.getPoint());
			return createContext(fhLoc);
		}

		if (otherPanel != null && otherPanel.isAncestorOf((Component) source)) {
			Object obj = getContextForMarginPanels(otherPanel, event);
			if (obj != null) {
				return createContext(obj);
			}
			return new OtherPanelContext(this, program);
		}

		JComponent northPanel = decorationPanel.getNorthPanel();
		if (northPanel != null && northPanel.isAncestorOf((Component) source)) {
			if (northPanel instanceof GTabPanel tabPanel) {
				Program tabValue = (Program) tabPanel.getValueFor(event);
				if (tabValue != null) {
					return new ProgramTabActionContext(this, tabValue, tabPanel);
				}
			}
		}

		return createContext(getContextForMarginPanels(listingPanel, event));
	}
TODO: Remove or rename this to something that accommodates redirecting writes, e.g., to a
debug target process, particularly for assembly, which may involve code unit modification
after a successful write, reported asynchronously :/ .

@return true if this listing represents a read-only view
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/codebrowser/CodeViewerProvider.java