Fix Viewport::handle_input_locally related infinite recursion

This commit is contained in:
Haoyu Qiu 2021-10-10 18:10:28 +08:00
parent 22f2b27528
commit 7ecb133b22

View file

@ -2878,9 +2878,8 @@ bool Viewport::gui_is_dragging() const {
void Viewport::set_input_as_handled() {
_drop_physics_mouseover();
if (handle_input_locally) {
local_input_handled = true;
} else {
if (!handle_input_locally) {
ERR_FAIL_COND(!is_inside_tree());
Viewport *vp = this;
while (true) {
@ -2892,16 +2891,19 @@ void Viewport::set_input_as_handled() {
}
vp = vp->get_parent()->get_viewport();
}
vp->set_input_as_handled();
if (vp != this) {
vp->set_input_as_handled();
return;
}
}
local_input_handled = true;
}
bool Viewport::is_input_handled() const {
if (handle_input_locally) {
return local_input_handled;
} else {
const Viewport *vp = this;
if (!handle_input_locally) {
ERR_FAIL_COND_V(!is_inside_tree(), false);
const Viewport *vp = this;
while (true) {
if (Object::cast_to<Window>(vp)) {
break;
@ -2911,8 +2913,11 @@ bool Viewport::is_input_handled() const {
}
vp = vp->get_parent()->get_viewport();
}
return vp->is_input_handled();
if (vp != this) {
return vp->is_input_handled();
}
}
return local_input_handled;
}
void Viewport::set_handle_input_locally(bool p_enable) {