desktop: Change fullscreen fscommand to use event loop events

Previously the fullscreen state was set on the window directly causing a desync with the rest of the player code.
This commit is contained in:
sleepycatcoding 2024-08-23 20:22:04 +03:00 committed by Nathan Adams
parent d17b29c165
commit c047358ab5
4 changed files with 17 additions and 8 deletions

View File

@ -504,6 +504,14 @@ impl App {
self.player.destroy();
}
winit::event::Event::UserEvent(RuffleEvent::EnterFullScreen) => {
if let Some(mut player) = self.player.get() {
if player.is_playing() {
player.set_fullscreen(true);
}
}
}
winit::event::Event::UserEvent(RuffleEvent::ExitFullScreen) => {
if let Some(mut player) = self.player.get() {
if player.is_playing() {

View File

@ -1,13 +1,10 @@
use crate::custom_event::RuffleEvent;
use ruffle_core::external::FsCommandProvider;
use std::sync::Arc;
use winit::event_loop::EventLoopProxy;
use winit::window::{Fullscreen, Window};
pub struct DesktopFSCommandProvider {
pub event_loop: EventLoopProxy<RuffleEvent>,
pub window: Arc<Window>,
}
impl FsCommandProvider for DesktopFSCommandProvider {
@ -18,10 +15,12 @@ impl FsCommandProvider for DesktopFSCommandProvider {
}
"fullscreen" => {
match args {
"true" => self
.window
.set_fullscreen(Some(Fullscreen::Borderless(None))),
"false" => self.window.set_fullscreen(None),
"true" => {
let _ = self.event_loop.send_event(RuffleEvent::EnterFullScreen);
}
"false" => {
let _ = self.event_loop.send_event(RuffleEvent::ExitFullScreen);
}
_ => {}
};
}

View File

@ -19,6 +19,9 @@ pub enum RuffleEvent {
/// The user requested to close the current SWF.
CloseFile,
/// The user requested to enter full screen.
EnterFullScreen,
/// The user requested to exit full screen.
ExitFullScreen,

View File

@ -264,7 +264,6 @@ impl ActivePlayer {
.with_storage(preferences.storage_backend().create_backend(&opt))
.with_fs_commands(Box::new(DesktopFSCommandProvider {
event_loop: event_loop.clone(),
window: window.clone(),
}))
.with_ui(
DesktopUiBackend::new(