Support selector canceled callback in ui::spawn

This commit is contained in:
Nikita Lisitsa 2022-05-03 20:14:14 +03:00
parent fe1769cf46
commit a368eb32ff
2 changed files with 5 additions and 3 deletions

View file

@ -74,6 +74,6 @@ namespace psemek::ui
std::function<void(std::optional<std::size_t>)> mouseover_callback_;
};
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position);
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void()> on_canceled = nullptr);
}

View file

@ -237,7 +237,7 @@ namespace psemek::ui
}
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position)
bool spawn(element * root, std::shared_ptr<selector> selector, geom::point<float, 2> const & position, std::function<void()> on_canceled)
{
ui::screen * screen = find_last_parent_of_type<struct screen>(root);
if (!screen)
@ -248,8 +248,10 @@ namespace psemek::ui
positioner->set_child(selector);
event_interceptor->set_child(positioner);
auto close = [selector_root = event_interceptor.get(), selector = selector.get()]{
auto close = [selector_root = event_interceptor.get(), selector = selector.get(), on_canceled]{
selector->on_selected([](std::size_t){});
if (on_canceled)
on_canceled();
auto p = dynamic_cast<struct screen *>(selector_root->parent());
if (p)