Fix Input onchange not called (#776)

This commit is contained in:
chrysante
2023-11-11 17:29:19 +01:00
committed by GitHub
parent 0631c3ab3f
commit e8589dd533
2 changed files with 13 additions and 2 deletions

View File

@@ -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

View File

@@ -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();