diff --git a/examples/borderless.rs b/examples/borderless.rs index 1b7e2e0f5..55f44d592 100644 --- a/examples/borderless.rs +++ b/examples/borderless.rs @@ -9,6 +9,8 @@ fn main() { fn app(cx: Scope) -> Element { let window = dioxus::desktop::use_window(&cx); + // window.set_fullscreen(true); + cx.render(rsx!( link { href:"https://unpkg.com/tailwindcss@^2/dist/tailwind.min.css", rel:"stylesheet" } header { diff --git a/packages/desktop/src/desktop_context.rs b/packages/desktop/src/desktop_context.rs index d33ff5abe..d180e1235 100644 --- a/packages/desktop/src/desktop_context.rs +++ b/packages/desktop/src/desktop_context.rs @@ -1,7 +1,7 @@ use std::rc::Rc; use dioxus_core::ScopeState; -use wry::application::{event_loop::EventLoopProxy, window::Fullscreen}; +use wry::application::event_loop::EventLoopProxy; use crate::UserWindowEvent; @@ -64,10 +64,10 @@ impl DesktopContext { } /// change window to fullscreen - pub fn set_fullscreen(&self, fullscreen: Option) { + pub fn set_fullscreen(&self, fullscreen: bool) { let _ = self .proxy - .send_event(UserWindowEvent::Fullscreen(Box::new(fullscreen))); + .send_event(UserWindowEvent::Fullscreen(fullscreen)); } /// set resizable state diff --git a/packages/desktop/src/lib.rs b/packages/desktop/src/lib.rs index 101ab91b7..143225f6a 100644 --- a/packages/desktop/src/lib.rs +++ b/packages/desktop/src/lib.rs @@ -292,6 +292,11 @@ pub fn launch_with_props( let window = webview.window(); // start to drag the window. // if the drag_window have any err. we don't do anything. + + if window.fullscreen().is_some() { + return; + } + let _ = window.drag_window(); } } @@ -321,10 +326,23 @@ pub fn launch_with_props( window.set_maximized(state); } } - UserWindowEvent::Fullscreen(fullscreen) => { + UserWindowEvent::Fullscreen(state) => { for webview in desktop.webviews.values() { let window = webview.window(); - window.set_fullscreen(*fullscreen.clone()); + + let current_monitor = window.current_monitor(); + + if current_monitor.is_none() { + return; + } + + let fullscreen = if state { + Some(Fullscreen::Borderless(current_monitor)) + } else { + None + }; + + window.set_fullscreen(fullscreen); } } UserWindowEvent::FocusWindow => { @@ -393,7 +411,7 @@ pub enum UserWindowEvent { Maximize(bool), Resizable(bool), AlwaysOnTop(bool), - Fullscreen(Box>), + Fullscreen(bool), CursorVisible(bool), CursorGrab(bool),