The main idea is to stop treating this as a Blender/Revit-specific button-order problem and instead make pointer ownership explicit:
- the viewer tracks who owns the current pointer sequence;
- navigation styles declare which button combinations want navigation ownership;
- edited ViewProviders get a small cancellation contract;
- navigation only takes over if the current owner can safely cancel;
- RMB context targeting is kept separate from Sketcher’s active interaction mode.
I’d split this into two commits so the generic ownership change can be reviewed separately from the Sketcher/Assembly behavior.