public void setCaret(FieldLocation newCursorLoc, EventTrigger trigger) {
		if (cursorField == null || !isSameField(cursorLoc, newCursorLoc)) {
			AccessibleTextSequence oldSequence = getAccessibleTextSequence(cursorField);
			cursorLoc = newCursorLoc;
			cursorField = getAccessibleField(newCursorLoc);
			AccessibleTextSequence newSequence = getAccessibleTextSequence(cursorField);
			String oldDescription = description;
			description = generateDescription();

			if (trigger == EventTrigger.GUI_ACTION) {
				context.firePropertyChange(ACCESSIBLE_TEXT_PROPERTY, oldSequence, newSequence);
				context.firePropertyChange(ACCESSIBLE_DESCRIPTION_PROPERTY, oldDescription,
					description);
			}
			if (currentSelection != null && currentSelection.contains(cursorLoc)) {
				updateCurrentFieldSelectedState(trigger);
			}
			caretPos = -1;
		}
		if (cursorField == null) {
			caretPos = 0;
			return;
		}
		int newCaretPos = cursorField.getTextOffset(newCursorLoc.getRow(), newCursorLoc.getCol());
		cursorField.setCaretPos(newCaretPos);
		if (newCaretPos != caretPos && trigger == EventTrigger.GUI_ACTION) {
			context.firePropertyChange(ACCESSIBLE_CARET_PROPERTY, caretPos, newCaretPos);
		}
		caretPos = newCaretPos;
		cursorLoc = newCursorLoc;
	}
Tells this delegate that the cursor moved. It updates its internal state and fires
events to the accessibility system.
@param newCursorLoc the new FieldLoation of the cursor
@param trigger the event trigger
Ghidra/Framework/Docking/src/main/java/docking/widgets/fieldpanel/AccessibleFieldPanelDelegate.java