summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
Diffstat (limited to 'winit')
-rw-r--r--winit/Cargo.toml6
-rw-r--r--winit/src/application.rs21
-rw-r--r--winit/src/conversion.rs10
-rw-r--r--winit/src/settings.rs7
-rw-r--r--winit/src/window.rs9
5 files changed, 42 insertions, 11 deletions
diff --git a/winit/Cargo.toml b/winit/Cargo.toml
index dd5c12c2..255b28bb 100644
--- a/winit/Cargo.toml
+++ b/winit/Cargo.toml
@@ -11,11 +11,16 @@ keywords = ["gui", "ui", "graphics", "interface", "widgets"]
categories = ["gui"]
[features]
+default = ["x11", "wayland", "wayland-dlopen", "wayland-csd-adwaita"]
trace = ["tracing", "tracing-core", "tracing-subscriber"]
chrome-trace = ["trace", "tracing-chrome"]
debug = ["iced_native/debug"]
system = ["sysinfo"]
application = []
+x11 = ["winit/x11"]
+wayland = ["winit/wayland"]
+wayland-dlopen = ["winit/wayland-dlopen"]
+wayland-csd-adwaita = ["winit/wayland-csd-adwaita"]
[dependencies]
window_clipboard = "0.2"
@@ -26,6 +31,7 @@ thiserror = "1.0"
version = "0.27"
git = "https://github.com/iced-rs/winit.git"
rev = "940457522e9fb9f5dac228b0ecfafe0138b4048c"
+default-features = false
[dependencies.iced_native]
version = "0.9"
diff --git a/winit/src/application.rs b/winit/src/application.rs
index b13b7214..dd345785 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -179,13 +179,17 @@ where
.unwrap_or(None)
});
- let _ = match target {
- Some(node) => node
- .replace_child(&canvas, &node)
- .expect(&format!("Could not replace #{}", node.id())),
- None => body
- .append_child(&canvas)
- .expect("Append canvas to HTML body"),
+ match target {
+ Some(node) => {
+ let _ = node
+ .replace_with_with_node_1(&canvas)
+ .expect(&format!("Could not replace #{}", node.id()));
+ }
+ None => {
+ let _ = body
+ .append_child(&canvas)
+ .expect("Append canvas to HTML body");
+ }
};
}
@@ -766,6 +770,9 @@ pub fn run_command<A, E>(
mode,
));
}
+ window::Action::ChangeIcon(icon) => {
+ window.set_window_icon(conversion::icon(icon))
+ }
window::Action::FetchMode(tag) => {
let mode = if window.is_visible().unwrap_or(true) {
conversion::mode(window.fullscreen())
diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs
index 1b2ead36..cf066ef6 100644
--- a/winit/src/conversion.rs
+++ b/winit/src/conversion.rs
@@ -236,6 +236,7 @@ pub fn mouse_interaction(
winit::window::CursorIcon::EwResize
}
Interaction::ResizingVertically => winit::window::CursorIcon::NsResize,
+ Interaction::NotAllowed => winit::window::CursorIcon::NotAllowed,
}
}
@@ -509,6 +510,15 @@ pub fn user_attention(
}
}
+/// Converts some [`Icon`] into it's `winit` counterpart.
+///
+/// Returns `None` if there is an error during the conversion.
+pub fn icon(icon: window::Icon) -> Option<winit::window::Icon> {
+ let (pixels, size) = icon.into_raw();
+
+ winit::window::Icon::from_rgba(pixels, size.width, size.height).ok()
+}
+
// As defined in: http://www.unicode.org/faq/private_use.html
pub(crate) fn is_private_use_character(c: char) -> bool {
matches!(
diff --git a/winit/src/settings.rs b/winit/src/settings.rs
index 78d58000..6658773d 100644
--- a/winit/src/settings.rs
+++ b/winit/src/settings.rs
@@ -92,7 +92,7 @@ pub struct Window {
pub always_on_top: bool,
/// The window icon, which is also usually used in the taskbar
- pub icon: Option<winit::window::Icon>,
+ pub icon: Option<crate::window::Icon>,
/// Platform specific settings.
pub platform_specific: platform::PlatformSpecific,
@@ -134,8 +134,9 @@ impl Window {
.with_resizable(self.resizable)
.with_decorations(self.decorations)
.with_transparent(self.transparent)
- .with_window_icon(self.icon)
- .with_always_on_top(self.always_on_top);
+ .with_window_icon(self.icon.and_then(conversion::icon))
+ .with_always_on_top(self.always_on_top)
+ .with_visible(self.visible);
if let Some(position) = conversion::position(
primary_monitor.as_ref(),
diff --git a/winit/src/window.rs b/winit/src/window.rs
index 961562bd..ba0180c8 100644
--- a/winit/src/window.rs
+++ b/winit/src/window.rs
@@ -2,7 +2,9 @@
use crate::command::{self, Command};
use iced_native::window;
-pub use window::{frames, Event, Mode, RedrawRequest, UserAttention};
+pub use window::{
+ frames, icon, Event, Icon, Mode, RedrawRequest, UserAttention,
+};
/// Closes the current window and exits the application.
pub fn close<Message>() -> Command<Message> {
@@ -104,3 +106,8 @@ pub fn fetch_id<Message>(
f,
))))
}
+
+/// Changes the [`Icon`] of the window.
+pub fn change_icon<Message>(icon: Icon) -> Command<Message> {
+ Command::single(command::Action::Window(window::Action::ChangeIcon(icon)))
+}