mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-22 08:02:24 +00:00
A TUI that turns mouse reporting on (vim with `set mouse=a`, lazygit, tmux, …) draws its own right-button menus, and tty7 was delivering one right-click to both consumers: `TerminalElement::register_mouse_handlers` forwarded the press to the application, while the `.context_menu(…)` on the terminal surface was attached unconditionally and popped tty7's own menu over the top of it. Gate the host menu on a single pure predicate, `should_show_context_menu`, and call it from both sides so one click can only ever feed one consumer: while reporting is active the unmodified right-click is the application's alone, and Shift stays the escape hatch that reaches tty7 — the same override Shift already provides for selection and for the wheel. gpui-component's `ContextMenu` element owns the right mouse-down that opens the popup: it wraps the terminal surface, so its listener fires before any handler we can attach, and the builder closure it calls gets no event to inspect. The verdict is therefore latched on our own right mouse-down (safe, because the builder runs from a `window.defer` that lands after the whole mouse dispatch has unwound) and a suppressed menu is expressed as an item-less `PopupMenu`, which that element already skips rendering. Co-authored-by: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com>