From 456147de99e1135b145447a9c8ebb397d3ecd1e1 Mon Sep 17 00:00:00 2001 From: Lucas Fernandes Nogueira Date: Sun, 13 Feb 2022 11:48:06 -0300 Subject: [PATCH] fix(linux): fullscreen on current monitor (#320) --- .changes/fix-fullscreen-linux.md | 5 +++++ examples/fullscreen.rs | 3 ++- src/platform_impl/linux/event_loop.rs | 12 ++++++++---- 3 files changed, 15 insertions(+), 5 deletions(-) create mode 100644 .changes/fix-fullscreen-linux.md diff --git a/.changes/fix-fullscreen-linux.md b/.changes/fix-fullscreen-linux.md new file mode 100644 index 000000000..b6a92d549 --- /dev/null +++ b/.changes/fix-fullscreen-linux.md @@ -0,0 +1,5 @@ +--- +"tao": patch +--- + +Fixes the `set_fullscreen` implementation on Linux when the `Fullscreen::Borderless` value is set to `None`. diff --git a/examples/fullscreen.rs b/examples/fullscreen.rs index ec02c0930..e98242c85 100644 --- a/examples/fullscreen.rs +++ b/examples/fullscreen.rs @@ -16,7 +16,7 @@ fn main() { env_logger::init(); let event_loop = EventLoop::new(); - print!("Please choose the fullscreen mode: (1) exclusive, (2) borderless: "); + print!("Please choose the fullscreen mode: (1) exclusive, (2) borderless, (3) borderless on current monitor: "); stdout().flush().unwrap(); let mut num = String::new(); @@ -26,6 +26,7 @@ fn main() { let fullscreen = Some(match num { 1 => Fullscreen::Exclusive(prompt_for_video_mode(&prompt_for_monitor(&event_loop))), 2 => Fullscreen::Borderless(Some(prompt_for_monitor(&event_loop))), + 3 => Fullscreen::Borderless(None), _ => panic!("Please enter a valid number"), }); diff --git a/src/platform_impl/linux/event_loop.rs b/src/platform_impl/linux/event_loop.rs index 71c3b98db..559e07cd8 100644 --- a/src/platform_impl/linux/event_loop.rs +++ b/src/platform_impl/linux/event_loop.rs @@ -259,10 +259,14 @@ impl EventLoop { } WindowRequest::Fullscreen(fullscreen) => match fullscreen { Some(f) => { - if let Fullscreen::Borderless(Some(monitor)) = f { - let number = monitor.inner.number; - let screen = window.display().default_screen(); - window.fullscreen_on_monitor(&screen, number); + if let Fullscreen::Borderless(m) = f { + if let Some(monitor) = m { + let number = monitor.inner.number; + let screen = window.display().default_screen(); + window.fullscreen_on_monitor(&screen, number); + } else { + window.fullscreen(); + } } } None => window.unfullscreen(),