Fix ResizableSplit handling keyboard navigation incorrectly (#842)

Co-authored-by: ArthurSonzogni <sonzogniarthur@gmail.com>
This commit is contained in:
na-trium-144 2024-04-19 00:28:28 +09:00 committed by GitHub
parent e03a0797be
commit 0dfd59bd09
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 55 additions and 5 deletions

View File

@ -25,6 +25,7 @@ current (development)
Fixed by @chrysante in chrysante in PR #776.
- Bugfix: Propertly restore cursor shape on exit. See #792.
- Bugfix: Fix cursor position in when in the last column. See #831.
- Bugfix: Fix `ResizeableSplit` keyboard navigation. Fixed by #842.
### Dom
- Feature: Add `hscroll_indicator`. It display an horizontal indicator

View File

@ -23,10 +23,32 @@ class ResizableSplitBase : public ComponentBase {
public:
explicit ResizableSplitBase(ResizableSplitOption options)
: options_(std::move(options)) {
Add(Container::Horizontal({
options_->main,
options_->back,
}));
switch (options_->direction()) {
case Direction::Left:
Add(Container::Horizontal({
options_->main,
options_->back,
}));
break;
case Direction::Right:
Add(Container::Horizontal({
options_->back,
options_->main,
}));
break;
case Direction::Up:
Add(Container::Vertical({
options_->main,
options_->back,
}));
break;
case Direction::Down:
Add(Container::Vertical({
options_->back,
options_->main,
}));
break;
}
}
bool OnEvent(Event event) final {

View File

@ -19,7 +19,7 @@ namespace ftxui {
namespace {
Component BasicComponent() {
return Renderer([] { return text(""); });
return Renderer([](bool focused) { return text(""); });
}
Event MousePressed(int x, int y) {
@ -207,5 +207,32 @@ TEST(ResizableSplit, BasicBottomWithCustomSeparator) {
EXPECT_EQ(position, 2);
}
TEST(ResizableSplit, NavigationVertical) {
int position = 0;
auto component_top = BasicComponent();
auto component_bottom = BasicComponent();
auto component =
ResizableSplitTop(component_top, component_bottom, &position);
EXPECT_TRUE(component_top->Active());
EXPECT_FALSE(component_bottom->Active());
EXPECT_FALSE(component->OnEvent(Event::ArrowRight));
EXPECT_TRUE(component_top->Active());
EXPECT_FALSE(component_bottom->Active());
EXPECT_TRUE(component->OnEvent(Event::ArrowDown));
EXPECT_FALSE(component_top->Active());
EXPECT_TRUE(component_bottom->Active());
EXPECT_FALSE(component->OnEvent(Event::ArrowDown));
EXPECT_FALSE(component_top->Active());
EXPECT_TRUE(component_bottom->Active());
EXPECT_TRUE(component->OnEvent(Event::ArrowUp));
EXPECT_TRUE(component_top->Active());
EXPECT_FALSE(component_bottom->Active());
}
} // namespace ftxui
// NOLINTEND