Fix on_enter bug in ftxui::Input (#667)

Fixed:https://github.com/ArthurSonzogni/FTXUI/issues/666
This commit is contained in:
Arthur Sonzogni 2023-06-04 21:34:16 +02:00 committed by GitHub
parent 7b7177b59c
commit ff5817b8a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 15 deletions

View File

@ -341,27 +341,19 @@ class InputBase : public ComponentBase {
}
bool HandleReturn() {
int& cursor_position = option_->cursor_position();
content_->insert(cursor_position, "\n");
cursor_position++;
option_->on_change();
if (option_->multiline()) {
HandleCharacter("\n");
}
option_->on_enter();
return true;
}
bool HandleCharacter(const std::string& character) {
if (character == "\n" && !option_->multiline()) {
option_->on_enter();
return false;
}
int& cursor_position = option_->cursor_position();
content_->insert(cursor_position, character);
cursor_position += character.size();
option_->on_change();
if (character == "\n") {
option_->on_enter();
}
return true;
}
@ -369,6 +361,9 @@ class InputBase : public ComponentBase {
int& cursor_position = option_->cursor_position();
cursor_position = util::clamp(cursor_position, 0, (int)content_->size());
if (event == Event::Return) {
return HandleReturn();
}
if (event.is_character()) {
return HandleCharacter(event.character());
}
@ -405,9 +400,6 @@ class InputBase : public ComponentBase {
if (event == Event::ArrowRightCtrl) {
return HandleRightCtrl();
}
if (event == Event::Return) {
return HandleReturn();
}
return false;
}

View File

@ -722,6 +722,18 @@ TEST(InputTest, MouseClickComplex) {
EXPECT_EQ(option.cursor_position(), 17);
}
TEST(InputTest, OnEnter) {
std::string content;
auto option = InputOption();
bool on_enter_called = false;
option.on_enter = [&] { on_enter_called = true; };
Component input = Input(&content, &option);
EXPECT_FALSE(on_enter_called);
EXPECT_TRUE(input->OnEvent(Event::Return));
EXPECT_TRUE(on_enter_called);
}
} // namespace ftxui
// Copyright 2023 Arthur Sonzogni. All rights reserved.