From 7ecb133b224b6d96e60d7eb9c080ec6f23130d8d Mon Sep 17 00:00:00 2001 From: Haoyu Qiu Date: Sun, 10 Oct 2021 18:10:28 +0800 Subject: [PATCH] Fix Viewport::handle_input_locally related infinite recursion --- scene/main/viewport.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index e88bb3b952b1..eab5916a4e9d 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -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(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) {