Fix desynced UI (#727)

This commit is contained in:
0HyperCube 2022-07-15 18:41:14 +01:00 committed by Keavon Chambers
parent 03633bf313
commit f77c1f2ef4
2 changed files with 5 additions and 1 deletions

View File

@ -7,6 +7,7 @@ use serde::{Deserialize, Serialize};
#[impl_message(Message, Layout)]
#[derive(PartialEq, Clone, Deserialize, Serialize, Debug)]
pub enum LayoutMessage {
RefreshLayout { layout_target: LayoutTarget },
SendLayout { layout: Layout, layout_target: LayoutTarget },
UpdateLayout { layout_target: LayoutTarget, widget_id: u64, value: serde_json::Value },
}

View File

@ -69,13 +69,15 @@ impl MessageHandler<LayoutMessage, ()> for LayoutMessageHandler {
use LayoutMessage::*;
#[remain::sorted]
match action {
RefreshLayout { layout_target } => {
self.send_layout(layout_target, responses);
}
SendLayout { layout, layout_target } => {
self.layouts[layout_target as usize] = layout;
self.send_layout(layout_target, responses);
}
UpdateLayout { layout_target, widget_id, value } => {
self.send_layout(layout_target, responses);
let layout = &mut self.layouts[layout_target as usize];
let widget_holder = layout.iter_mut().find(|widget| widget.widget_id == widget_id);
if widget_holder.is_none() {
@ -184,6 +186,7 @@ impl MessageHandler<LayoutMessage, ()> for LayoutMessageHandler {
}
Widget::TextLabel(_) => {}
};
responses.push_back(RefreshLayout { layout_target }.into());
}
}
}