diff --git a/libs/ui/include/psemek/ui/edit.hpp b/libs/ui/include/psemek/ui/edit.hpp index 638e8e2f..59e1573e 100644 --- a/libs/ui/include/psemek/ui/edit.hpp +++ b/libs/ui/include/psemek/ui/edit.hpp @@ -52,6 +52,8 @@ namespace psemek::ui using callback_type = std::function; virtual void on_text_entered(callback_type callback, bool signal = true); + virtual void on_start_input(std::function callback); + bool on_event(mouse_move const & e) override; bool on_event(mouse_click const & e) override; bool on_event(key_press const & e) override; @@ -97,6 +99,7 @@ namespace psemek::ui validator_type validator_; callback_type on_text_entered_; + std::function on_start_input_; struct cached_state { @@ -110,6 +113,7 @@ namespace psemek::ui void on_state_changed(); void reset_caret(); void post_text_entered() const; + void post_start_input() const; }; } diff --git a/libs/ui/source/edit.cpp b/libs/ui/source/edit.cpp index 41a75050..64ab533f 100644 --- a/libs/ui/source/edit.cpp +++ b/libs/ui/source/edit.cpp @@ -88,6 +88,11 @@ namespace psemek::ui post_text_entered(); } + void edit::on_start_input(std::function callback) + { + on_start_input_ = std::move(callback); + } + bool edit::on_event(mouse_move const & e) { auto m = geom::cast(e.position); @@ -115,6 +120,7 @@ namespace psemek::ui old_text_ = text_; start_text_input(); reset_caret(); + post_start_input(); } if (cached_state_ && mouse_x_) @@ -426,4 +432,10 @@ namespace psemek::ui } } + void edit::post_start_input() const + { + if (on_start_input_) + post(on_start_input_); + } + }