summaryrefslogtreecommitdiffstats
path: root/winit
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--winit/src/application.rs15
-rw-r--r--winit/src/clipboard.rs3
-rw-r--r--winit/src/multi_window.rs13
-rw-r--r--winit/src/multi_window/window_manager.rs7
4 files changed, 23 insertions, 15 deletions
diff --git a/winit/src/application.rs b/winit/src/application.rs
index bf48538d..09bf63cc 100644
--- a/winit/src/application.rs
+++ b/winit/src/application.rs
@@ -24,6 +24,7 @@ use crate::{Clipboard, Error, Proxy, Settings};
use futures::channel::mpsc;
use std::mem::ManuallyDrop;
+use std::sync::Arc;
/// An interactive, native cross-platform application.
///
@@ -149,9 +150,11 @@ where
log::debug!("Window builder: {builder:#?}");
- let window = builder
- .build(&event_loop)
- .map_err(Error::WindowCreationFailed)?;
+ let window = Arc::new(
+ builder
+ .build(&event_loop)
+ .map_err(Error::WindowCreationFailed)?,
+ );
#[cfg(target_arch = "wasm32")]
{
@@ -183,7 +186,7 @@ where
};
}
- let compositor = C::new(compositor_settings, Some(&window))?;
+ let compositor = C::new(compositor_settings, window.clone())?;
let mut renderer = compositor.create_renderer();
for font in settings.fonts {
@@ -248,7 +251,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,
+ window: Arc<winit::window::Window>,
should_be_visible: bool,
exit_on_close_request: bool,
) where
@@ -268,7 +271,7 @@ async fn run_instance<A, E, C>(
let mut clipboard = Clipboard::connect(&window);
let mut cache = user_interface::Cache::default();
let mut surface = compositor.create_surface(
- &window,
+ window.clone(),
physical_size.width,
physical_size.height,
);
diff --git a/winit/src/clipboard.rs b/winit/src/clipboard.rs
index f7a32868..8f5c5e63 100644
--- a/winit/src/clipboard.rs
+++ b/winit/src/clipboard.rs
@@ -15,7 +15,8 @@ enum State {
impl Clipboard {
/// Creates a new [`Clipboard`] for the given window.
pub fn connect(window: &winit::window::Window) -> Clipboard {
- let state = window_clipboard::Clipboard::connect(window)
+ #[allow(unsafe_code)]
+ let state = unsafe { window_clipboard::Clipboard::connect(window) }
.ok()
.map(State::Connected)
.unwrap_or(State::Unavailable);
diff --git a/winit/src/multi_window.rs b/winit/src/multi_window.rs
index 84c81bea..3f0ba056 100644
--- a/winit/src/multi_window.rs
+++ b/winit/src/multi_window.rs
@@ -24,6 +24,7 @@ use crate::{Clipboard, Error, Proxy, Settings};
use std::collections::HashMap;
use std::mem::ManuallyDrop;
+use std::sync::Arc;
use std::time::Instant;
/// An interactive, native, cross-platform, multi-windowed application.
@@ -150,9 +151,11 @@ where
log::info!("Window builder: {:#?}", builder);
- let main_window = builder
- .build(&event_loop)
- .map_err(Error::WindowCreationFailed)?;
+ let main_window = Arc::new(
+ builder
+ .build(&event_loop)
+ .map_err(Error::WindowCreationFailed)?,
+ );
#[cfg(target_arch = "wasm32")]
{
@@ -184,7 +187,7 @@ where
};
}
- let mut compositor = C::new(compositor_settings, Some(&main_window))?;
+ let mut compositor = C::new(compositor_settings, main_window.clone())?;
let mut window_manager = WindowManager::new();
let _ = window_manager.insert(
@@ -388,7 +391,7 @@ async fn run_instance<A, E, C>(
} => {
let window = window_manager.insert(
id,
- window,
+ Arc::new(window),
&application,
&mut compositor,
exit_on_close_request,
diff --git a/winit/src/multi_window/window_manager.rs b/winit/src/multi_window/window_manager.rs
index d54156e7..9e15f9ea 100644
--- a/winit/src/multi_window/window_manager.rs
+++ b/winit/src/multi_window/window_manager.rs
@@ -6,6 +6,7 @@ use crate::multi_window::{Application, State};
use crate::style::application::StyleSheet;
use std::collections::BTreeMap;
+use std::sync::Arc;
use winit::monitor::MonitorHandle;
#[allow(missing_debug_implementations)]
@@ -34,7 +35,7 @@ where
pub fn insert(
&mut self,
id: Id,
- window: winit::window::Window,
+ window: Arc<winit::window::Window>,
application: &A,
compositor: &mut C,
exit_on_close_request: bool,
@@ -43,7 +44,7 @@ where
let viewport_version = state.viewport_version();
let physical_size = state.physical_size();
let surface = compositor.create_surface(
- &window,
+ window.clone(),
physical_size.width,
physical_size.height,
);
@@ -122,7 +123,7 @@ where
C: Compositor<Renderer = A::Renderer>,
<A::Renderer as crate::core::Renderer>::Theme: StyleSheet,
{
- pub raw: winit::window::Window,
+ pub raw: Arc<winit::window::Window>,
pub state: State<A>,
pub viewport_version: u64,
pub exit_on_close_request: bool,