diff --git a/libs/ui/include/psemek/ui/selector.hpp b/libs/ui/include/psemek/ui/selector.hpp index 433b2ef1..8b94bead 100644 --- a/libs/ui/include/psemek/ui/selector.hpp +++ b/libs/ui/include/psemek/ui/selector.hpp @@ -74,6 +74,6 @@ namespace psemek::ui std::function)> mouseover_callback_; }; - bool spawn(element * root, std::shared_ptr selector, geom::point const & position); + bool spawn(element * root, std::shared_ptr selector, geom::point const & position, std::function on_canceled = nullptr); } diff --git a/libs/ui/source/selector.cpp b/libs/ui/source/selector.cpp index facd5da2..38f57b9b 100644 --- a/libs/ui/source/selector.cpp +++ b/libs/ui/source/selector.cpp @@ -237,7 +237,7 @@ namespace psemek::ui } - bool spawn(element * root, std::shared_ptr selector, geom::point const & position) + bool spawn(element * root, std::shared_ptr selector, geom::point const & position, std::function on_canceled) { ui::screen * screen = find_last_parent_of_type(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(selector_root->parent()); if (p)