Migration from v0.6 to v0.7
Component changes
Switching between the Component and AsyncComponent traits has been a bit unpleasant in previous versions due to complex errors generated by the code generated by async-trait.
To avoid this, the signatures of Component and AsyncComponent were unified.
This means, that Component::init() and SimpleComponent::init() now take Self::Root as owned parameter instead of a reference (&Self::Root).
In most places, this just means that you have to remove a &.
Factory changes
ParentInput and forward_to_parent() were removed from FactoryComponent and AsyncFactoryComponent.
Instead, factories now support basically the same builder pattern as components.
Example
Replace this:
#![allow(unused)]
fn main() {
#[relm4::factory]
impl FactoryComponent for Counter {
type ParentInput = AppMsg;
fn forward_to_parent(output: Self::Output) -> Option<AppMsg> {
Some(match output {
CounterOutput::SendFront(index) => AppMsg::SendFront(index),
CounterOutput::MoveUp(index) => AppMsg::MoveUp(index),
CounterOutput::MoveDown(index) => AppMsg::MoveDown(index),
})
}
// ...
}
#[relm4::component]
impl SimpleComponent for App {
// ...
fn init(
counter: Self::Init,
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let counters = FactoryVecDeque::new(gtk::Box::default(), sender.input_sender());
// ...
}
}
}
With this:
#![allow(unused)]
fn main() {
#[relm4::component]
impl SimpleComponent for App {
// ...
fn init(
counter: Self::Init,
root: &Self::Root,
sender: ComponentSender<Self>,
) -> ComponentParts<Self> {
let counters = FactoryVecDeque::builder()
.launch(gtk::Box::default())
.forward(sender.input_sender(), |output| match output {
CounterOutput::SendFront(index) => AppMsg::SendFront(index),
CounterOutput::MoveUp(index) => AppMsg::MoveUp(index),
CounterOutput::MoveDown(index) => AppMsg::MoveDown(index),
});
// ...
}
}
}
Other changes
set_global_cssandset_global_css_from_fileare now methods ofRelmAppto prevent calling them before initializing GTK- The
drawingmodule was moved into the newabstractionsmodule