1
0
mirror of https://github.com/emilk/egui.git synced 2026-06-26 22:53:14 -04:00

Fix bug in determining wether to remove focus from a widget (#4272)

* Closes https://github.com/emilk/egui/issues/4206
This commit is contained in:
Emil Ernerfeldt
2024-03-30 10:22:58 +01:00
parent 232b8bc298
commit b532e2e2be

View File

@@ -1113,8 +1113,6 @@ impl Context {
changed: false,
};
let clicked_elsewhere = res.clicked_elsewhere();
self.write(|ctx| {
let viewport = ctx.viewports.entry(ctx.viewport_id()).or_default();
@@ -1157,15 +1155,22 @@ impl Context {
}
let clicked = Some(id) == viewport.interact_widgets.clicked;
let mut any_press = false;
for pointer_event in &input.pointer.pointer_events {
if let PointerEvent::Released { click, .. } = pointer_event {
if enabled && sense.click && clicked && click.is_some() {
res.clicked = true;
match pointer_event {
PointerEvent::Moved(_) => {}
PointerEvent::Pressed { .. } => {
any_press = true;
}
PointerEvent::Released { click, .. } => {
if enabled && sense.click && clicked && click.is_some() {
res.clicked = true;
}
res.is_pointer_button_down_on = false;
res.dragged = false;
res.is_pointer_button_down_on = false;
res.dragged = false;
}
}
}
@@ -1188,14 +1193,10 @@ impl Context {
res.hovered = false;
}
if clicked_elsewhere && memory.has_focus(id) {
let pointer_pressed_elsewhere = any_press && !res.hovered;
if pointer_pressed_elsewhere && memory.has_focus(id) {
memory.surrender_focus(id);
}
if res.dragged() && !memory.has_focus(id) {
// e.g.: remove focus from a widget when you drag something else
memory.stop_text_input();
}
});
res