Skip to content

Commit 62c8995

Browse files
committed
Fix focus tracking
1 parent 5154a9d commit 62c8995

File tree

3 files changed

+11
-3
lines changed

3 files changed

+11
-3
lines changed

crates/eframe/src/web/app_runner.rs

+4
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,10 @@ impl AppRunner {
187187
///
188188
/// The result can be painted later with a call to [`Self::run_and_paint`] or [`Self::paint`].
189189
pub fn logic(&mut self) {
190+
// We sometimes miss blur/focus events due to the text agent, so let's just poll each frame:
191+
self.input
192+
.set_focus(super::has_focus(self.canvas()) || self.text_agent.has_focus());
193+
190194
let canvas_size = super::canvas_size_in_points(self.canvas(), self.egui_ctx());
191195
let mut raw_input = self.input.new_frame(canvas_size);
192196

crates/eframe/src/web/backend.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,12 @@ impl WebInput {
3636
raw_input
3737
}
3838

39-
/// On alt-tab and similar.
40-
pub fn on_web_page_focus_change(&mut self, focused: bool) {
39+
/// On alt-tab, or user clicking another HTML element.
40+
pub fn set_focus(&mut self, focused: bool) {
41+
if self.raw.focused == focused {
42+
return;
43+
}
44+
4145
// log::debug!("on_web_page_focus_change: {focused}");
4246
self.raw.modifiers = egui::Modifiers::default(); // Avoid sticky modifier keys on alt-tab:
4347
self.raw.focused = focused;

crates/eframe/src/web/events.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ fn install_blur_focus(runner_ref: &WebRunner, target: &EventTarget) -> Result<()
105105
runner.save();
106106
}
107107

108-
runner.input.on_web_page_focus_change(has_focus);
108+
runner.input.set_focus(has_focus);
109109
runner.egui_ctx().request_repaint();
110110
};
111111

0 commit comments

Comments
 (0)