diff --git a/src/stremio_app/app.rs b/src/stremio_app/app.rs index 024272e..ea27f8c 100644 --- a/src/stremio_app/app.rs +++ b/src/stremio_app/app.rs @@ -41,6 +41,7 @@ pub struct MainWindow { pub force_update: bool, pub release_candidate: bool, pub autoupdater_setup_file: Arc>>, + pub requested_fullscreen: Arc>>, pub saved_window_style: RefCell, #[nwg_resource] pub embed: nwg::EmbedResource, @@ -247,6 +248,7 @@ impl MainWindow { let hide_splash_sender = self.hide_splash_notice.sender(); let focus_sender = self.focus_notice.sender(); let autoupdater_setup_mutex = self.autoupdater_setup_file.clone(); + let requested_fullscreen = self.requested_fullscreen.clone(); thread::spawn(move || loop { if let Some(msg) = web_rx .recv() @@ -258,7 +260,16 @@ impl MainWindow { None if msg.is_handshake() => { web_tx_web.send(RPCResponse::get_handshake()).ok(); } - Some("win-set-visibility") => toggle_fullscreen_sender.notice(), + Some("win-set-visibility") => { + if let Some(fullscreen) = msg + .get_params() + .and_then(|params| params.get("fullscreen")) + .and_then(|value| value.as_bool()) + { + *requested_fullscreen.lock().unwrap() = Some(fullscreen); + toggle_fullscreen_sender.notice(); + } + } Some("quit") => quit_sender.notice(), Some("app-ready") => { hide_splash_sender.notice(); @@ -363,7 +374,13 @@ impl MainWindow { fn on_toggle_fullscreen_notice(&self) { if let Some(hwnd) = self.window.handle.hwnd() { if let Ok(mut saved_style) = self.saved_window_style.try_borrow_mut() { - saved_style.toggle_full_screen(hwnd); + let target = self + .requested_fullscreen + .lock() + .unwrap() + .take() + .unwrap_or(!saved_style.full_screen); + saved_style.set_full_screen(hwnd, target); self.tray.tray_topmost.set_enabled(!saved_style.full_screen); self.tray .tray_topmost diff --git a/src/stremio_app/window_helper.rs b/src/stremio_app/window_helper.rs index 68c5547..0d73621 100644 --- a/src/stremio_app/window_helper.rs +++ b/src/stremio_app/window_helper.rs @@ -71,8 +71,12 @@ impl WindowStyle { self.pos = ((monitor_w - self.size.0) / 2, (monitor_h - self.size.1) / 2); self.show_window_at(hwnd, HWND_NOTOPMOST); } - pub fn toggle_full_screen(&mut self, hwnd: HWND) { - if self.full_screen { + pub fn set_full_screen(&mut self, hwnd: HWND, full_screen: bool) { + if self.full_screen == full_screen { + return; + } + + if !full_screen { let topmost = if self.ex_style as u32 & WS_EX_TOPMOST == WS_EX_TOPMOST { HWND_TOPMOST } else {