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:
parent
810135c5eb
commit
a7c5eb47a8
|
|
@ -1113,8 +1113,6 @@ impl Context {
|
||||||
changed: false,
|
changed: false,
|
||||||
};
|
};
|
||||||
|
|
||||||
let clicked_elsewhere = res.clicked_elsewhere();
|
|
||||||
|
|
||||||
self.write(|ctx| {
|
self.write(|ctx| {
|
||||||
let viewport = ctx.viewports.entry(ctx.viewport_id()).or_default();
|
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 clicked = Some(id) == viewport.interact_widgets.clicked;
|
||||||
|
let mut any_press = false;
|
||||||
|
|
||||||
for pointer_event in &input.pointer.pointer_events {
|
for pointer_event in &input.pointer.pointer_events {
|
||||||
if let PointerEvent::Released { click, .. } = pointer_event {
|
match pointer_event {
|
||||||
if enabled && sense.click && clicked && click.is_some() {
|
PointerEvent::Moved(_) => {}
|
||||||
res.clicked = true;
|
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.is_pointer_button_down_on = false;
|
||||||
res.dragged = false;
|
res.dragged = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1188,14 +1193,10 @@ impl Context {
|
||||||
res.hovered = false;
|
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);
|
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
|
res
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue