Merge pull request #103967 from HolonProduction/window-focus

GUI: Fix focus cycle through window
This commit is contained in:
Thaddeus Crews 2025-04-16 10:45:17 -05:00
commit 3c0652699a
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
2 changed files with 49 additions and 2 deletions

View file

@ -218,7 +218,54 @@ TEST_CASE("[SceneTree][Control] Find next/prev valid focus") {
CHECK_UNARY(ctrl->has_focus());
}
SUBCASE("[SceneTree][Control] Has a sibling control but the parent node is not a control") {
SUBCASE("[SceneTree][Control] Has a sibling control and the parent is a window") {
Control *ctrl1 = memnew(Control);
Control *ctrl2 = memnew(Control);
Control *ctrl3 = memnew(Control);
Window *win = SceneTree::get_singleton()->get_root();
ctrl1->set_focus_mode(Control::FocusMode::FOCUS_ALL);
ctrl2->set_focus_mode(Control::FocusMode::FOCUS_ALL);
ctrl3->set_focus_mode(Control::FocusMode::FOCUS_ALL);
ctrl2->add_child(ctrl3);
win->add_child(ctrl1);
win->add_child(ctrl2);
SUBCASE("[SceneTree][Control] Focus Next") {
ctrl1->grab_focus();
CHECK_UNARY(ctrl1->has_focus());
SEND_GUI_ACTION("ui_focus_next");
CHECK_UNARY(ctrl2->has_focus());
SEND_GUI_ACTION("ui_focus_next");
CHECK_UNARY(ctrl3->has_focus());
SEND_GUI_ACTION("ui_focus_next");
CHECK_UNARY(ctrl1->has_focus());
}
SUBCASE("[SceneTree][Control] Focus Prev") {
ctrl1->grab_focus();
CHECK_UNARY(ctrl1->has_focus());
SEND_GUI_ACTION("ui_focus_prev");
CHECK_UNARY(ctrl3->has_focus());
SEND_GUI_ACTION("ui_focus_prev");
CHECK_UNARY(ctrl2->has_focus());
SEND_GUI_ACTION("ui_focus_prev");
CHECK_UNARY(ctrl1->has_focus());
}
memdelete(ctrl3);
memdelete(ctrl1);
memdelete(ctrl2);
}
SUBCASE("[SceneTree][Control] Has a sibling control but the parent node is not a control or window") {
Control *other_ctrl = memnew(Control);
intermediate->add_child(other_ctrl);