diff options
Diffstat (limited to '')
-rw-r--r-- | winit/src/application.rs | 24 | ||||
-rw-r--r-- | winit/src/icon.rs | 15 | ||||
-rw-r--r-- | winit/src/profiler.rs | 4 | ||||
-rw-r--r-- | winit/src/settings.rs | 3 | ||||
-rw-r--r-- | winit/src/window.rs | 49 |
5 files changed, 66 insertions, 29 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs index d586fd21..692c2f74 100644 --- a/winit/src/application.rs +++ b/winit/src/application.rs @@ -145,11 +145,15 @@ where #[cfg(target_arch = "wasm32")] let target = settings.window.platform_specific.target.clone(); - let builder = settings.window.into_builder( - &application.title(), - event_loop.primary_monitor(), - settings.id, - ); + let should_be_visible = settings.window.visible; + let builder = settings + .window + .into_builder( + &application.title(), + event_loop.primary_monitor(), + settings.id, + ) + .with_visible(false); log::info!("Window builder: {:#?}", builder); @@ -200,6 +204,7 @@ where control_sender, init_command, window, + should_be_visible, settings.exit_on_close_request, ); @@ -266,6 +271,7 @@ async fn run_instance<A, E, C>( mut control_sender: mpsc::UnboundedSender<winit::event_loop::ControlFlow>, init_command: Command<A::Message>, window: winit::window::Window, + should_be_visible: bool, exit_on_close_request: bool, ) where A: Application + 'static, @@ -293,6 +299,10 @@ async fn run_instance<A, E, C>( physical_size.height, ); + if should_be_visible { + window.set_visible(true); + } + run_command( &application, &mut cache, @@ -534,7 +544,7 @@ async fn run_instance<A, E, C>( Err(error) => match error { // This is an unrecoverable error. compositor::SurfaceError::OutOfMemory => { - panic!("{:?}", error); + panic!("{error:?}"); } _ => { debug.render_finished(); @@ -754,7 +764,7 @@ pub fn run_command<A, E>( y, }); } - window::Action::SetMode(mode) => { + window::Action::ChangeMode(mode) => { window.set_visible(conversion::visible(mode)); window.set_fullscreen(conversion::fullscreen( window.primary_monitor(), diff --git a/winit/src/icon.rs b/winit/src/icon.rs index 84b88b39..73b4e037 100644 --- a/winit/src/icon.rs +++ b/winit/src/icon.rs @@ -132,10 +132,9 @@ impl fmt::Display for Error { Error::InvalidData { byte_count } => { write!( f, - "The provided RGBA data (with length {:?}) isn't divisble by \ + "The provided RGBA data (with length {byte_count:?}) isn't divisble by \ 4. Therefore, it cannot be safely interpreted as 32bpp RGBA \ - pixels.", - byte_count, + pixels." ) } Error::DimensionsMismatch { @@ -145,20 +144,18 @@ impl fmt::Display for Error { } => { write!( f, - "The number of RGBA pixels ({:?}) does not match the provided \ - dimensions ({:?}x{:?}).", - pixel_count, width, height, + "The number of RGBA pixels ({pixel_count:?}) does not match the provided \ + dimensions ({width:?}x{height:?})." ) } Error::OsError(e) => write!( f, "The underlying OS failed to create the window \ - icon: {:?}", - e + icon: {e:?}" ), #[cfg(feature = "image_rs")] Error::ImageError(e) => { - write!(f, "Unable to create icon from a file: {:?}", e) + write!(f, "Unable to create icon from a file: {e:?}") } } } diff --git a/winit/src/profiler.rs b/winit/src/profiler.rs index 1f638de8..ff9bbdc0 100644 --- a/winit/src/profiler.rs +++ b/winit/src/profiler.rs @@ -50,8 +50,8 @@ impl Profiler { .to_str() .unwrap_or("trace"); - let path = out_dir - .join(format!("{}_trace_{}.json", curr_exe_name, time)); + let path = + out_dir.join(format!("{curr_exe_name}_trace_{time}.json")); layer = layer.file(path); } else { diff --git a/winit/src/settings.rs b/winit/src/settings.rs index 78c8c156..2f73aff6 100644 --- a/winit/src/settings.rs +++ b/winit/src/settings.rs @@ -119,8 +119,7 @@ impl Window { .with_decorations(self.decorations) .with_transparent(self.transparent) .with_window_icon(self.icon) - .with_always_on_top(self.always_on_top) - .with_visible(self.visible); + .with_always_on_top(self.always_on_top); if let Some(position) = conversion::position( primary_monitor.as_ref(), diff --git a/winit/src/window.rs b/winit/src/window.rs index cc486fc8..fa31dca1 100644 --- a/winit/src/window.rs +++ b/winit/src/window.rs @@ -37,7 +37,7 @@ pub fn resize<Message>( )) } -/// Sets the window to maximized or back. +/// Maximizes the window. pub fn maximize<Message>(id: window::Id, value: bool) -> Command<Message> { Command::single(command::Action::Window( id, @@ -45,7 +45,7 @@ pub fn maximize<Message>(id: window::Id, value: bool) -> Command<Message> { )) } -/// Set the window to minimized or back. +/// Minimes the window. pub fn minimize<Message>(id: window::Id, value: bool) -> Command<Message> { Command::single(command::Action::Window( id, @@ -58,16 +58,11 @@ pub fn move_to<Message>(id: window::Id, x: i32, y: i32) -> Command<Message> { Command::single(command::Action::Window(id, window::Action::Move { x, y })) } -/// Sets the [`Mode`] of the window. -pub fn set_mode<Message>(id: window::Id, mode: Mode) -> Command<Message> { +/// Changes the [`Mode`] of the window. +pub fn change_mode<Message>(id: window::Id, mode: Mode) -> Command<Message> { Command::single(command::Action::Window(id, window::Action::SetMode(mode))) } -/// Sets the window to maximized or back. -pub fn toggle_maximize<Message>(id: window::Id) -> Command<Message> { - Command::single(command::Action::Window(id, window::Action::ToggleMaximize)) -} - /// Fetches the current [`Mode`] of the window. pub fn fetch_mode<Message>( id: window::Id, @@ -78,3 +73,39 @@ pub fn fetch_mode<Message>( window::Action::FetchMode(Box::new(f)), )) } + +/// Toggles the window to maximized or back. +pub fn toggle_maximize<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::ToggleMaximize)) +} + +/// Toggles the window decorations. +pub fn toggle_decorations<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::ToggleDecorations)) +} + +/// Request user attention to the window, this has no effect if the application +/// is already focused. How requesting for user attention manifests is platform dependent, +/// see [`UserAttention`] for details. +/// +/// Providing `None` will unset the request for user attention. Unsetting the request for +/// user attention might not be done automatically by the WM when the window receives input. +pub fn request_user_attention<Message>( + id: window::Id, + user_attention: Option<UserAttention>, +) -> Command<Message> { + Command::single(command::Action::Window( + id, + window::Action::RequestUserAttention(user_attention), + )) +} + +/// Brings the window to the front and sets input focus. Has no effect if the window is +/// already in focus, minimized, or not visible. +/// +/// This [`Command`] steals input focus from other applications. Do not use this method unless +/// you are certain that's what the user wants. Focus stealing can cause an extremely disruptive +/// user experience. +pub fn gain_focus<Message>(id: window::Id) -> Command<Message> { + Command::single(command::Action::Window(id, window::Action::GainFocus)) +} |