From a368eb32ffa56516938d780c805fddef2d0224f1 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Tue, 3 May 2022 20:14:14 +0300 Subject: [PATCH] Support selector canceled callback in ui::spawn --- libs/ui/include/psemek/ui/selector.hpp | 2 +- libs/ui/source/selector.cpp | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) 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)