Fix: don't open context menu on drag (#3767)

This fixes a bug where the context menu would open when dragging with
the secondary mouse button.

Now the context menu requires a click to open.

This is important for things like plots, where right-click and
right-drag means different things.
This commit is contained in:
Emil Ernerfeldt 2024-01-04 10:29:52 +01:00 committed by GitHub
parent 34c341444f
commit f25e4171b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 12 additions and 14 deletions

View File

@ -367,20 +367,18 @@ impl MenuRoot {
let response = response.interact(Sense::click()); let response = response.interact(Sense::click());
response.ctx.input(|input| { response.ctx.input(|input| {
let pointer = &input.pointer; let pointer = &input.pointer;
if pointer.any_pressed() { if let Some(pos) = pointer.interact_pos() {
if let Some(pos) = pointer.interact_pos() { let mut in_old_menu = false;
let mut destroy = false; let mut destroy = false;
let mut in_old_menu = false; if let Some(root) = root {
if let Some(root) = root { in_old_menu = root.menu_state.read().area_contains(pos);
in_old_menu = root.menu_state.read().area_contains(pos); destroy = !in_old_menu && pointer.any_pressed() && root.id == response.id;
destroy = root.id == response.id; }
} if !in_old_menu {
if !in_old_menu { if response.hovered() && response.secondary_clicked() {
if response.hovered() && pointer.secondary_down() { return MenuResponse::Create(pos, id);
return MenuResponse::Create(pos, id); } else if (response.hovered() && pointer.primary_down()) || destroy {
} else if (response.hovered() && pointer.primary_down()) || destroy { return MenuResponse::Close;
return MenuResponse::Close;
}
} }
} }
} }