diff --git a/examples/dialog.rs b/examples/dialog.rs index da84fa4..e4e6d4c 100644 --- a/examples/dialog.rs +++ b/examples/dialog.rs @@ -1,7 +1,7 @@ use cosmic::{ - app::{self, Command, Core, Settings}, + app::{self, Core, Settings, Task}, executor, - iced::{subscription::Subscription, window}, + iced::{window, Subscription}, widget, Application, Element, }; use cosmic_files::dialog::{Dialog, DialogKind, DialogMessage, DialogResult}; @@ -42,18 +42,18 @@ impl Application for App { &mut self.core } - fn init(core: Core, _flags: Self::Flags) -> (Self, Command) { + fn init(core: Core, _flags: Self::Flags) -> (Self, Task) { ( Self { core, dialog_opt: None, result_opt: None, }, - Command::none(), + Task::none(), ) } - fn update(&mut self, message: Message) -> Command { + fn update(&mut self, message: Message) -> Task { match message { Message::DialogMessage(dialog_message) => { if let Some(dialog) = &mut self.dialog_opt { @@ -78,7 +78,7 @@ impl Application for App { } } - Command::none() + Task::none() } fn view_window(&self, window_id: window::Id) -> Element { diff --git a/src/app.rs b/src/app.rs index f1e1061..bc2623a 100644 --- a/src/app.rs +++ b/src/app.rs @@ -3926,25 +3926,31 @@ impl Application for App { struct TrashWatcherSubscription; let mut subscriptions = vec![ - event::listen_with(|event, status, _window_id| match event { - Event::Keyboard(KeyEvent::KeyPressed { key, modifiers, .. }) => match status { - event::Status::Ignored => Some(Message::Key(modifiers, key)), - event::Status::Captured => None, - }, - Event::Keyboard(KeyEvent::ModifiersChanged(modifiers)) => { - Some(Message::Modifiers(modifiers)) + event::listen_with(|event, status, window_id| { + //TODO: why are we getting events for this window Id? + if window_id == window::Id::NONE { + return None; } - Event::Window(WindowEvent::CloseRequested) => Some(Message::WindowClose), - #[cfg(feature = "wayland")] - Event::PlatformSpecific(event::PlatformSpecific::Wayland(wayland_event)) => { - match wayland_event { - WaylandEvent::Output(output_event, output) => { - Some(Message::OutputEvent(output_event, output)) - } - _ => None, + match event { + Event::Keyboard(KeyEvent::KeyPressed { key, modifiers, .. }) => match status { + event::Status::Ignored => Some(Message::Key(modifiers, key)), + event::Status::Captured => None, + }, + Event::Keyboard(KeyEvent::ModifiersChanged(modifiers)) => { + Some(Message::Modifiers(modifiers)) } + Event::Window(WindowEvent::CloseRequested) => Some(Message::WindowClose), + #[cfg(feature = "wayland")] + Event::PlatformSpecific(event::PlatformSpecific::Wayland(wayland_event)) => { + match wayland_event { + WaylandEvent::Output(output_event, output) => { + Some(Message::OutputEvent(output_event, output)) + } + _ => None, + } + } + _ => None, } - _ => None, }), Config::subscription().map(|update| { if !update.errors.is_empty() { diff --git a/src/dialog.rs b/src/dialog.rs index db98d3e..1ef4ed5 100644 --- a/src/dialog.rs +++ b/src/dialog.rs @@ -170,7 +170,7 @@ impl Dialog { settings.platform_specific.application_id = App::APP_ID.to_string(); } - //let (window_id, window_command) = window::open(settings); + let (window_id, window_command) = window::open(settings.clone()); let core = Core::default(); let flags = Flags { @@ -184,13 +184,16 @@ impl Dialog { None } }), - //TODO - window_id: window::Id::NONE, + window_id, config_handler, config, }; - let (cosmic, cosmic_command) = Cosmic::::init((core, flags, settings)); + // settings here is unused + let (mut cosmic, cosmic_command) = Cosmic::::init((core, flags, settings)); + let update_command = cosmic.update(app::Message::Cosmic( + app::cosmic::Message::MainWindowCreated(window_id), + )); ( Self { @@ -198,9 +201,15 @@ impl Dialog { mapper, on_result: Box::new(on_result), }, - cosmic_command - .map(DialogMessage) - .map(move |message| app::Message::App(mapper(message))), + Task::batch([ + window_command.map(|_id| message::none()), + cosmic_command + .map(DialogMessage) + .map(move |message| app::Message::App(mapper(message))), + update_command + .map(DialogMessage) + .map(move |message| app::Message::App(mapper(message))), + ]), ) } @@ -1582,15 +1591,21 @@ impl Application for App { fn subscription(&self) -> Subscription { struct WatcherSubscription; let mut subscriptions = vec![ - event::listen_with(|event, status, _window_id| match event { - Event::Keyboard(KeyEvent::KeyPressed { key, modifiers, .. }) => match status { - event::Status::Ignored => Some(Message::Key(modifiers, key)), - event::Status::Captured => None, - }, - Event::Keyboard(KeyEvent::ModifiersChanged(modifiers)) => { - Some(Message::Modifiers(modifiers)) + event::listen_with(|event, status, window_id| { + //TODO: why are we getting events for this window Id? + if window_id == window::Id::NONE { + return None; + } + match event { + Event::Keyboard(KeyEvent::KeyPressed { key, modifiers, .. }) => match status { + event::Status::Ignored => Some(Message::Key(modifiers, key)), + event::Status::Captured => None, + }, + Event::Keyboard(KeyEvent::ModifiersChanged(modifiers)) => { + Some(Message::Modifiers(modifiers)) + } + _ => None, } - _ => None, }), Config::subscription().map(|update| { if !update.errors.is_empty() {