From d39528aa69e4ab85df0b06ef8cb36731e626f48a Mon Sep 17 00:00:00 2001 From: daxpedda Date: Sat, 6 Jan 2024 16:14:27 +0100 Subject: [PATCH] Web: account for canvas being focused already (#3369) --- .../web/event_loop/window_target.rs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/platform_impl/web/event_loop/window_target.rs b/src/platform_impl/web/event_loop/window_target.rs index f586643d..6c5b41fe 100644 --- a/src/platform_impl/web/event_loop/window_target.rs +++ b/src/platform_impl/web/event_loop/window_target.rs @@ -5,6 +5,8 @@ use std::iter; use std::marker::PhantomData; use std::rc::{Rc, Weak}; +use web_sys::Element; + use super::runner::{EventWrapper, Execution}; use super::{ super::{monitor::MonitorHandle, KeyEventExtra}, @@ -118,6 +120,25 @@ impl EventLoopWindowTarget { } }); + // It is possible that at this point the canvas has + // been focused before the callback can be called. + let focused = canvas + .document() + .active_element() + .filter(|element| { + let canvas: &Element = canvas.raw(); + element == canvas + }) + .is_some(); + + if focused { + canvas.has_focus.set(true); + self.runner.send_event(Event::WindowEvent { + window_id: RootWindowId(id), + event: WindowEvent::Focused(true), + }) + } + let runner = self.runner.clone(); let modifiers = self.modifiers.clone(); canvas.on_keyboard_press(