private boolean actionInProgress(MouseEvent e) {

		if (inProgressAction == null) {
			Msg.trace(this, "No mouse binding action in progress");
			return false;
		}

		// Note: mouse buttons can be simultaneously clicked.  This means that the order of pressed
		// and released events may arrive intermixed.  To handle this correctly, we allow the
		// MouseBinding to check for the matching release event.
		MouseBinding mouseBinding = inProgressAction.mouseBinding();
		boolean isMatching = mouseBinding.isMatchingRelease(e);
		Msg.trace(this,
			new ParameterizedMessage(
				"Is release event for in-progress mouse binding action? {} for {}", isMatching,
				inProgressAction.action()));
		if (isMatching) {
			DockingMouseBindingAction action = inProgressAction.action();
			inProgressAction = null;

			String command = null;
			Object source = e.getSource();
			long when = e.getWhen();
			int modifiers = e.getModifiersEx();

			action.actionPerformed(
				new ActionEvent(source, ActionEvent.ACTION_PERFORMED, command, when, modifiers));
		}

		int eventButton = e.getButton();
		int bindingButton = mouseBinding.getButton();
		if (eventButton != bindingButton) {
			// We may have missed an event or the user pressed multiple mouse buttons in an
			// unexpected sequence.  Clear the in-progress action here so we do not consume all
			// mouse events indefinitely.
			inProgressAction = null;
			return false;
		}

		e.consume();
		return true;
	}
Used to clear the flag that signals we are in the middle of processing a Ghidra action.
Ghidra/Framework/Docking/src/main/java/docking/MouseBindingMouseEventDispatcher.java