summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
Diffstat (limited to 'winit')
-rw-r--r--winit/src/application.rs53
-rw-r--r--winit/src/application/profiler.rs4
-rw-r--r--winit/src/settings.rs3
-rw-r--r--winit/src/window.rs75
4 files changed, 102 insertions, 33 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs
index 77ca4b31..3fdec658 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -147,11 +147,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);
@@ -202,6 +206,7 @@ where
control_sender,
init_command,
window,
+ should_be_visible,
settings.exit_on_close_request,
);
@@ -268,6 +273,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,
@@ -295,6 +301,10 @@ async fn run_instance<A, E, C>(
physical_size.height,
);
+ if should_be_visible {
+ window.set_visible(true);
+ }
+
run_command(
&application,
&mut cache,
@@ -535,7 +545,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();
@@ -737,11 +747,11 @@ pub fn run_command<A, E>(
height,
});
}
- window::Action::Maximize(value) => {
- window.set_maximized(value);
+ window::Action::Maximize(maximized) => {
+ window.set_maximized(maximized);
}
- window::Action::Minimize(value) => {
- window.set_minimized(value);
+ window::Action::Minimize(minimized) => {
+ window.set_minimized(minimized);
}
window::Action::Move { x, y } => {
window.set_outer_position(winit::dpi::LogicalPosition {
@@ -749,7 +759,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(),
@@ -771,13 +781,24 @@ pub fn run_command<A, E>(
window.set_maximized(!window.is_maximized())
}
window::Action::ToggleDecorations => {
- window.set_decorations(!window.is_decorated())
+ window.set_decorations(!window.is_decorated());
}
- window::Action::RequestUserAttention(user_attention) => window
- .request_user_attention(
+ window::Action::RequestUserAttention(user_attention) => {
+ window.request_user_attention(
user_attention.map(conversion::user_attention),
- ),
- window::Action::GainFocus => window.focus_window(),
+ );
+ }
+ window::Action::GainFocus => {
+ window.focus_window();
+ }
+ window::Action::ChangeAlwaysOnTop(on_top) => {
+ window.set_always_on_top(on_top);
+ }
+ window::Action::FetchId(tag) => {
+ proxy
+ .send_event(tag(window.id().into()))
+ .expect("Send message to event loop");
+ }
},
command::Action::System(action) => match action {
system::Action::QueryInformation(_tag) => {
diff --git a/winit/src/application/profiler.rs b/winit/src/application/profiler.rs
index 23eaa390..7031507a 100644
--- a/winit/src/application/profiler.rs
+++ b/winit/src/application/profiler.rs
@@ -49,8 +49,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 9bbdef5c..45f38833 100644
--- a/winit/src/settings.rs
+++ b/winit/src/settings.rs
@@ -114,8 +114,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 2306bdf1..961562bd 100644
--- a/winit/src/window.rs
+++ b/winit/src/window.rs
@@ -22,14 +22,18 @@ pub fn resize<Message>(width: u32, height: u32) -> Command<Message> {
}))
}
-/// Sets the window to maximized or back.
-pub fn maximize<Message>(value: bool) -> Command<Message> {
- Command::single(command::Action::Window(window::Action::Maximize(value)))
+/// Maximizes the window.
+pub fn maximize<Message>(maximized: bool) -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::Maximize(
+ maximized,
+ )))
}
-/// Set the window to minimized or back.
-pub fn minimize<Message>(value: bool) -> Command<Message> {
- Command::single(command::Action::Window(window::Action::Minimize(value)))
+/// Minimes the window.
+pub fn minimize<Message>(minimized: bool) -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::Minimize(
+ minimized,
+ )))
}
/// Moves a window to the given logical coordinates.
@@ -38,13 +42,8 @@ pub fn move_to<Message>(x: i32, y: i32) -> Command<Message> {
}
/// Sets the [`Mode`] of the window.
-pub fn set_mode<Message>(mode: Mode) -> Command<Message> {
- Command::single(command::Action::Window(window::Action::SetMode(mode)))
-}
-
-/// Sets the window to maximized or back.
-pub fn toggle_maximize<Message>() -> Command<Message> {
- Command::single(command::Action::Window(window::Action::ToggleMaximize))
+pub fn change_mode<Message>(mode: Mode) -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::ChangeMode(mode)))
}
/// Fetches the current [`Mode`] of the window.
@@ -55,3 +54,53 @@ pub fn fetch_mode<Message>(
Box::new(f),
)))
}
+
+/// Toggles the window to maximized or back.
+pub fn toggle_maximize<Message>() -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::ToggleMaximize))
+}
+
+/// Toggles the window decorations.
+pub fn toggle_decorations<Message>() -> Command<Message> {
+ Command::single(command::Action::Window(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>(
+ user_attention: Option<UserAttention>,
+) -> Command<Message> {
+ Command::single(command::Action::Window(
+ 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>() -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::GainFocus))
+}
+
+/// Changes whether or not the window will always be on top of other windows.
+pub fn change_always_on_top<Message>(on_top: bool) -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::ChangeAlwaysOnTop(
+ on_top,
+ )))
+}
+
+/// Fetches an identifier unique to the window.
+pub fn fetch_id<Message>(
+ f: impl FnOnce(u64) -> Message + 'static,
+) -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::FetchId(Box::new(
+ f,
+ ))))
+}