Skip to content

Commit 87f44ec

Browse files
daxpeddakchibisov
authored andcommitted
Web: account for canvas being focused already (#3369)
1 parent da82971 commit 87f44ec

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ Unreleased` header.
1111

1212
# Unreleased
1313

14+
- On Web, account for canvas being focused already before event loop starts.
15+
1416
# 0.29.9
1517

1618
- On X11, fix `NotSupported` error not propagated when creating event loop.

src/platform_impl/web/event_loop/window_target.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ use std::iter;
55
use std::marker::PhantomData;
66
use std::rc::{Rc, Weak};
77

8+
use web_sys::Element;
9+
810
use super::runner::{EventWrapper, Execution};
911
use super::{
1012
super::{monitor::MonitorHandle, KeyEventExtra},
@@ -122,6 +124,25 @@ impl<T> EventLoopWindowTarget<T> {
122124
}
123125
});
124126

127+
// It is possible that at this point the canvas has
128+
// been focused before the callback can be called.
129+
let focused = canvas
130+
.document()
131+
.active_element()
132+
.filter(|element| {
133+
let canvas: &Element = canvas.raw();
134+
element == canvas
135+
})
136+
.is_some();
137+
138+
if focused {
139+
canvas.has_focus.set(true);
140+
self.runner.send_event(Event::WindowEvent {
141+
window_id: RootWindowId(id),
142+
event: WindowEvent::Focused(true),
143+
})
144+
}
145+
125146
let runner = self.runner.clone();
126147
let modifiers = self.modifiers.clone();
127148
canvas.on_keyboard_press(

0 commit comments

Comments
 (0)