// Copyright 2022 System76 // SPDX-License-Identifier: MPL-2.0 mod app_runner; mod component; mod handle; mod macros; use gtk4::prelude::*; use tokio::sync::mpsc; pub use self::app_runner::AppRunner; pub use self::component::{Component, ComponentInner, ElmComponent}; pub use self::handle::{Handle, Registered}; pub use async_trait::async_trait; pub use gtk4 as gtk; pub use relm4_macros::view; pub type Sender = mpsc::UnboundedSender; pub type Receiver = mpsc::UnboundedReceiver; /// Provides a convenience function for getting a widget out of a type. pub trait Widget { fn widget(&self) -> &W; } pub trait CosmicWidgetExt: Widget where W: AsRef, { fn attach_size_group(&self, sg: >k::SizeGroup) -> &Self { sg.add_widget(self.widget().as_ref()); self } } /// Convenience function for forwarding events from a receiver to different sender. pub fn forward O) + 'static>( mut receiver: Receiver, sender: Sender, transformer: F, ) { spawn_local(async move { while let Some(event) = receiver.recv().await { if sender.send(transformer(event)).is_err() { break; } } }) } /// Convenience function for spawning tasks on the local executor pub fn spawn_local + 'static>(func: F) { gtk4::glib::MainContext::default().spawn_local(func); }