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 d931aa93..847e6bca 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 caef66c1..7228f131 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();
-- 
GitLab