forked from 1b-agent/opencadstudio-upstream
fix(ctx-menu): anchor right-click menu under cursor, share overlay infra
The right-click context menu was being placed via window-relative coordinates while the cursor position it anchored to was canvas-relative, so the menu drifted away from the cursor by the size of the surrounding ribbon / sidebar / status bar. Move the menu inside `viewport_stack` so its anchor resolves in the same coordinate space the cursor was captured in. Introduce `position_canvas_overlay(anchor, panel)` — wraps `panel` in a column+row of fixed-width spacers and `iced::widget::opaque(panel)` so events on the menu itself don't fall through to the viewport mouse area underneath. The multi-functional grip popup is rewritten to use the same helper. Outside-click dismiss now mirrors the grip popup: `ViewportLeftPress` checks `selection.context_menu.take()` at the top and returns early when it was set, so a press that reaches the viewport mouse area (i.e. outside the opaque panel) closes the menu without running the rest of the left-click handler. The redundant `context_menu = None` later in the handler and the now-unused `Message::ViewportContextMenuClose` are removed. Two related issues fixed in the same pass: * The right-drag threshold for orbit was 3 px squared, small enough that normal hand jitter between a right-button press and release was promoting a click to a drag and suppressing the menu on release. Bumped to 8 px squared. * `Message::ViewportExit` was clearing `context_menu`. With the menu now living above the viewport mouse area, the opaque panel capturing the cursor fires the underlying area's exit handler — which closed the menu the instant it opened. Stop clearing the menu there; outside-click dismiss is enough. Co-Authored-By: Claude Opus 4.7 <[email protected]>
This commit is contained in:
1 parent
0954d6d123
commit
cf925be861
3 files changed
+77
-60
No files matched your search
@@ -627,8 +627,6 @@ pub enum Message {
|
||||
// ── About window ────────────────────────────────────────────────────
|
||||
AboutOpen,
|
||||
AboutCopyInfo,
|
||||
/// Close the viewport right-click context menu without performing any action.
|
||||
ViewportContextMenuClose,
|
||||
/// The user clicked the title-bar ✕ (fires before the window closes).
|
||||
WindowCloseRequested(window::Id),
|
||||
/// A window was fully closed (fires after `window::close()` is called).
|
||||
|
||||
Reference in new issue
Block a user