diff options
author | 2022-06-15 20:38:51 -0300 | |
---|---|---|
committer | 2023-01-09 11:27:04 -0800 | |
commit | 8fdd5ee8b60e551088d4a18fb1d58b6c3e62ba7d (patch) | |
tree | 5dd4b29e496035aea53fa70702c18f3262128284 /winit/src/multi_window/state.rs | |
parent | 00d6baf861ba57984a341283823e9fea3c262130 (diff) | |
download | iced-8fdd5ee8b60e551088d4a18fb1d58b6c3e62ba7d.tar.gz iced-8fdd5ee8b60e551088d4a18fb1d58b6c3e62ba7d.tar.bz2 iced-8fdd5ee8b60e551088d4a18fb1d58b6c3e62ba7d.zip |
Synchronize window list with `windows` method
Diffstat (limited to 'winit/src/multi_window/state.rs')
-rw-r--r-- | winit/src/multi_window/state.rs | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/winit/src/multi_window/state.rs b/winit/src/multi_window/state.rs index 2d120ca1..009a3698 100644 --- a/winit/src/multi_window/state.rs +++ b/winit/src/multi_window/state.rs @@ -1,10 +1,12 @@ use crate::application::{self, StyleSheet as _}; use crate::conversion; -use crate::multi_window::Application; +use crate::multi_window::{Application, Event}; use crate::{Color, Debug, Point, Size, Viewport}; +use std::collections::HashMap; use std::marker::PhantomData; use winit::event::{Touch, WindowEvent}; +use winit::event_loop::EventLoopProxy; use winit::window::Window; /// The state of a windowed [`Application`]. @@ -181,7 +183,23 @@ where /// and window after calling [`Application::update`]. /// /// [`Application::update`]: crate::Program::update - pub fn synchronize(&mut self, application: &A, window: &Window) { + pub fn synchronize( + &mut self, + application: &A, + windows: &HashMap<usize, Window>, + proxy: &EventLoopProxy<Event<A::Message>>, + ) { + let new_windows = application.windows(); + for (id, settings) in new_windows { + if !windows.contains_key(&id) { + proxy + .send_event(Event::NewWindow(id, settings)) + .expect("Failed to send message"); + } + } + + let window = windows.values().next().expect("No window found"); + // Update window title let new_title = application.title(); |