diff --git a/desktop/src/app.rs b/desktop/src/app.rs index d69b578350..38149d4fe4 100644 --- a/desktop/src/app.rs +++ b/desktop/src/app.rs @@ -360,6 +360,11 @@ impl App { window.start_drag(); } } + DesktopFrontendMessage::WindowFocus => { + if let Some(window) = &self.window { + window.focus(); + } + } DesktopFrontendMessage::WindowHide => { if let Some(window) = &self.window { window.hide(); diff --git a/desktop/src/window.rs b/desktop/src/window.rs index a9b48e38fc..dcb5d51488 100644 --- a/desktop/src/window.rs +++ b/desktop/src/window.rs @@ -140,6 +140,11 @@ impl Window { let _ = self.winit_window.drag_window(); } + pub(crate) fn focus(&self) { + self.winit_window.set_minimized(false); + self.winit_window.focus_window(); + } + pub(crate) fn hide(&self) { self.native_handle.hide(); } diff --git a/desktop/wrapper/src/intercept_frontend_message.rs b/desktop/wrapper/src/intercept_frontend_message.rs index da2e8a7ff4..df5967d28b 100644 --- a/desktop/wrapper/src/intercept_frontend_message.rs +++ b/desktop/wrapper/src/intercept_frontend_message.rs @@ -137,6 +137,9 @@ pub(super) fn intercept_frontend_message(dispatcher: &mut DesktopWrapperMessageD FrontendMessage::WindowDrag => { dispatcher.respond(DesktopFrontendMessage::WindowDrag); } + FrontendMessage::WindowFocus => { + dispatcher.respond(DesktopFrontendMessage::WindowFocus); + } FrontendMessage::WindowHide => { dispatcher.respond(DesktopFrontendMessage::WindowHide); } diff --git a/desktop/wrapper/src/messages.rs b/desktop/wrapper/src/messages.rs index 4222dc4d86..a541c16040 100644 --- a/desktop/wrapper/src/messages.rs +++ b/desktop/wrapper/src/messages.rs @@ -71,6 +71,7 @@ pub enum DesktopFrontendMessage { WindowMaximize, WindowFullscreen, WindowDrag, + WindowFocus, WindowHide, WindowHideOthers, WindowShowAll, diff --git a/editor/src/messages/app_window/app_window_message.rs b/editor/src/messages/app_window/app_window_message.rs index 2acf297fae..1a68fdc938 100644 --- a/editor/src/messages/app_window/app_window_message.rs +++ b/editor/src/messages/app_window/app_window_message.rs @@ -11,6 +11,7 @@ pub enum AppWindowMessage { Maximize, Fullscreen, Drag, + Focus, Hide, HideOthers, ShowAll, diff --git a/editor/src/messages/app_window/app_window_message_handler.rs b/editor/src/messages/app_window/app_window_message_handler.rs index 3c4d4ad656..0477bed6e7 100644 --- a/editor/src/messages/app_window/app_window_message_handler.rs +++ b/editor/src/messages/app_window/app_window_message_handler.rs @@ -36,6 +36,10 @@ impl MessageHandler for AppWindowMessageHandler { #[cfg(not(target_family = "wasm"))] responses.add(FrontendMessage::WindowDrag); } + AppWindowMessage::Focus => { + #[cfg(not(target_family = "wasm"))] + responses.add(FrontendMessage::WindowFocus); + } AppWindowMessage::Hide => { #[cfg(not(target_family = "wasm"))] responses.add(FrontendMessage::WindowHide); diff --git a/editor/src/messages/frontend/frontend_message.rs b/editor/src/messages/frontend/frontend_message.rs index fee0c5ece7..0e68146dbe 100644 --- a/editor/src/messages/frontend/frontend_message.rs +++ b/editor/src/messages/frontend/frontend_message.rs @@ -362,6 +362,8 @@ pub enum FrontendMessage { #[cfg(not(target_family = "wasm"))] WindowHide, #[cfg(not(target_family = "wasm"))] + WindowFocus, + #[cfg(not(target_family = "wasm"))] WindowHideOthers, #[cfg(not(target_family = "wasm"))] WindowShowAll, diff --git a/editor/src/messages/portfolio/portfolio_message_handler.rs b/editor/src/messages/portfolio/portfolio_message_handler.rs index 90c8b506f3..269961e453 100644 --- a/editor/src/messages/portfolio/portfolio_message_handler.rs +++ b/editor/src/messages/portfolio/portfolio_message_handler.rs @@ -819,6 +819,8 @@ impl MessageHandler> for Portfolio // Load the document into the portfolio so it opens in the editor self.load_document(document, document_id, responses); + + responses.add(AppWindowMessage::Focus); } PortfolioMessage::OpenImage { name, image } => { // `NewDocumentWithName`'s handler routes empty/None-equivalent names through `resolve_document_name` which assigns the next available "Untitled Document {N}".