From e8589dd533fec9835831d818564524499decc4fa Mon Sep 17 00:00:00 2001 From: chrysante <82979635+chrysante@users.noreply.github.com> Date: Sat, 11 Nov 2023 17:29:19 +0100 Subject: [PATCH] Fix Input onchange not called (#776) --- CHANGELOG.md | 2 ++ src/ftxui/component/input.cpp | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d931aa9..847e6bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ current (development) ### Component - Feature: Add support for `Input`'s insert mode. Add `InputOption::insert` option. Added by @mingsheng13. +- Bugfix: `Input` `onchange` was not called on backspace or delete key. + Fixed by @chrysante in chrysante in PR #776. ### Dom - Feature: Add `hscroll_indicator`. It display an horizontal indicator diff --git a/src/ftxui/component/input.cpp b/src/ftxui/component/input.cpp index caef66c..7228f13 100644 --- a/src/ftxui/component/input.cpp +++ b/src/ftxui/component/input.cpp @@ -207,10 +207,11 @@ class InputBase : public ComponentBase, public InputOption { const size_t end = cursor_position(); content->erase(start, end - start); cursor_position() = start; + on_change(); return true; } - bool HandleDelete() { + bool DeleteImpl() { if (cursor_position() == (int)content->size()) { return false; } @@ -220,6 +221,14 @@ class InputBase : public ComponentBase, public InputOption { return true; } + bool HandleDelete() { + if (DeleteImpl()) { + on_change(); + return true; + } + return false; + } + bool HandleArrowLeft() { if (cursor_position() == 0) { return false; @@ -345,7 +354,7 @@ class InputBase : public ComponentBase, public InputOption { bool HandleCharacter(const std::string& character) { if (!insert() && cursor_position() < (int)content->size() && content()[cursor_position()] != '\n') { - HandleDelete(); + DeleteImpl(); } content->insert(cursor_position(), character); cursor_position() += character.size();