echo popup messages

This commit is contained in:
Dmitry Stepanov
2025-05-18 21:38:11 +03:00
parent fc631b1e0d
commit 3ea23eee8b
3 changed files with 47 additions and 24 deletions
+3 -1
View File
@@ -1303,7 +1303,9 @@ impl Control for ColorField {
// handle_routed_message won't trigger because of it.
fn preview_message(&self, ui: &UserInterface, message: &mut UiMessage) {
if let Some(PopupMessage::Close) = message.data::<PopupMessage>() {
if message.destination() == self.popup {
if message.destination() == self.popup
&& message.direction() == MessageDirection::ToWidget
{
let picker = ui
.node(self.picker)
.cast::<ColorPicker>()
+3 -1
View File
@@ -359,7 +359,9 @@ impl Control for DropdownList {
));
}
} else if let Some(msg) = message.data::<PopupMessage>() {
if message.destination() == *self.popup {
if message.destination() == *self.popup
&& message.direction() == MessageDirection::ToWidget
{
match msg {
PopupMessage::Open => {
ui.send_message(DropdownListMessage::open(
+41 -22
View File
@@ -400,7 +400,7 @@ impl Control for Popup {
if message.destination() == self.handle() {
match msg {
PopupMessage::Open => {
if !*self.is_open {
if !*self.is_open && message.direction() == MessageDirection::ToWidget {
self.is_open.set_value_and_mark_modified(true);
ui.send_message(WidgetMessage::visibility(
self.handle(),
@@ -448,10 +448,11 @@ impl Control for Popup {
MessageDirection::ToWidget,
));
}
ui.send_message(message.reverse());
}
}
PopupMessage::Close => {
if *self.is_open {
if *self.is_open && message.direction() == MessageDirection::ToWidget {
self.is_open.set_value_and_mark_modified(false);
ui.send_message(WidgetMessage::visibility(
self.handle(),
@@ -470,41 +471,59 @@ impl Control for Popup {
if ui.captured_node() == self.handle() {
ui.release_mouse_capture();
}
ui.send_message(message.reverse());
}
}
PopupMessage::Content(content) => {
if self.content.is_some() {
ui.send_message(WidgetMessage::remove(
if *self.content != *content
&& message.direction() == MessageDirection::ToWidget
{
if self.content.is_some() {
ui.send_message(WidgetMessage::remove(
*self.content,
MessageDirection::ToWidget,
));
}
self.content.set_value_and_mark_modified(*content);
ui.send_message(WidgetMessage::link(
*self.content,
MessageDirection::ToWidget,
*self.body,
));
}
self.content.set_value_and_mark_modified(*content);
ui.send_message(WidgetMessage::link(
*self.content,
MessageDirection::ToWidget,
*self.body,
));
ui.send_message(message.reverse());
}
}
PopupMessage::Placement(placement) => {
self.placement.set_value_and_mark_modified(*placement);
self.invalidate_layout();
if *self.placement != *placement
&& message.direction() == MessageDirection::ToWidget
{
self.placement.set_value_and_mark_modified(*placement);
self.invalidate_layout();
ui.send_message(message.reverse());
}
}
PopupMessage::AdjustPosition => {
let new_position =
adjust_placement_position(self.screen_bounds(), ui.screen_size());
if message.direction() == MessageDirection::ToWidget {
let new_position =
adjust_placement_position(self.screen_bounds(), ui.screen_size());
if new_position != self.screen_position() {
ui.send_message(WidgetMessage::desired_position(
self.handle,
MessageDirection::ToWidget,
ui.screen_to_root_canvas_space(new_position),
));
if new_position != self.screen_position() {
ui.send_message(WidgetMessage::desired_position(
self.handle,
MessageDirection::ToWidget,
ui.screen_to_root_canvas_space(new_position),
));
}
}
}
PopupMessage::Owner(owner) => {
self.owner = *owner;
if message.direction() == MessageDirection::ToWidget {
self.owner = *owner;
}
}
PopupMessage::RelayedMessage(_) => (),
}