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 committed by GitHub
parent 810135c5eb
commit a7c5eb47a8
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 14 additions and 13 deletions

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