Struct relm4::component::AsyncComponentBuilder
source · pub struct AsyncComponentBuilder<C: AsyncComponent> {
pub root: C::Root,
/* private fields */
}
Expand description
A component that is ready for docking and launch.
Fields§
§root: C::Root
The root widget of the component.
Implementations§
source§impl<C: AsyncComponent> AsyncComponentBuilder<C>
impl<C: AsyncComponent> AsyncComponentBuilder<C>
sourcepub fn update_root<F: FnOnce(&mut C::Root)>(self, func: F) -> Self
pub fn update_root<F: FnOnce(&mut C::Root)>(self, func: F) -> Self
Configure the root widget before launching.
sourcepub const fn widget(&self) -> &C::Root
pub const fn widget(&self) -> &C::Root
Access the root widget before the component is initialized.
sourcepub fn priority(self, priority: Priority) -> Self
pub fn priority(self, priority: Priority) -> Self
Change the priority at which the messages of this component are handled.
- Use [
glib::PRIORITY_HIGH
] for high priority event sources. - Use [
glib::PRIORITY_LOW
] for very low priority background tasks. - Use [
glib::PRIORITY_DEFAULT_IDLE
] for default priority idle functions. - Use [
glib::PRIORITY_HIGH_IDLE
] for high priority idle functions.
source§impl<C: AsyncComponent> AsyncComponentBuilder<C>where
C::Root: AsRef<Widget>,
impl<C: AsyncComponent> AsyncComponentBuilder<C>where
C::Root: AsRef<Widget>,
sourcepub fn attach_to(self, container: &impl RelmContainerExt) -> Self
pub fn attach_to(self, container: &impl RelmContainerExt) -> Self
Attach the component’s root widget to a given container.
source§impl<C: AsyncComponent> AsyncComponentBuilder<C>where
C::Root: AsRef<Window> + Clone,
impl<C: AsyncComponent> AsyncComponentBuilder<C>where
C::Root: AsRef<Window> + Clone,
sourcepub fn transient_for(self, widget: impl AsRef<Widget>) -> Self
pub fn transient_for(self, widget: impl AsRef<Widget>) -> Self
Set the component’s root widget transient for a given window.
This function doesn’t require a gtk::Window
as parameter,
but instead uses RelmWidgetExt::toplevel_window()
to retrieve the toplevel
window of any gtk::Widget
.
Therefore, you don’t have to pass a window to every component.
If the root widget is a native dialog, such as gtk::FileChooserNative
,
you should use transient_for_native
instead.
source§impl<C: AsyncComponent> AsyncComponentBuilder<C>where
C::Root: AsRef<NativeDialog> + Clone,
impl<C: AsyncComponent> AsyncComponentBuilder<C>where
C::Root: AsRef<NativeDialog> + Clone,
sourcepub fn transient_for_native(self, widget: impl AsRef<Widget>) -> Self
pub fn transient_for_native(self, widget: impl AsRef<Widget>) -> Self
Set the component’s root widget transient for a given window.
This function doesn’t require a gtk::Window
as parameter,
but instead uses RelmWidgetExt::toplevel_window()
to retrieve the toplevel
window of any gtk::Widget
.
Therefore, you don’t have to pass a window to every component.
Applicable to native dialogs only, such as gtk::FileChooserNative
.
If the root widget is a non-native dialog,
you should use transient_for
instead.
source§impl<C: AsyncComponent> AsyncComponentBuilder<C>
impl<C: AsyncComponent> AsyncComponentBuilder<C>
sourcepub fn launch(self, payload: C::Init) -> AsyncConnector<C>
pub fn launch(self, payload: C::Init) -> AsyncConnector<C>
Starts the component, passing ownership to a future attached to a [gtk::glib::MainContext].
Examples found in repository?
109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
pub fn run_async_with_args<C, S>(self, payload: C::Init, args: &[S])
where
C: AsyncComponent,
C::Root: IsA<gtk::Window> + WidgetExt,
S: AsRef<str>,
{
use std::cell::Cell;
let Self { app } = self;
let payload = Cell::new(Some(payload));
app.connect_activate(move |app| {
if let Some(payload) = payload.take() {
assert!(
app.is_registered(),
"App should be already registered when activated"
);
let builder = AsyncComponentBuilder::<C>::default();
let connector = builder.launch(payload);
// Run late initialization for transient windows for example.
crate::late_initialization::run_late_init();
let mut controller = connector.detach();
let window = controller.widget().clone();
controller.detach_runtime();
app.add_window(window.as_ref());
window.show();
} else {
panic!("Can't start Relm4 applications twice");
}
});
app.run_with_args(args);
}