diff options
author | Haoyu Qiu <timothyqiu32@gmail.com> | 2021-10-10 18:10:28 +0800 |
---|---|---|
committer | Haoyu Qiu <timothyqiu32@gmail.com> | 2021-10-10 18:10:28 +0800 |
commit | 7ecb133b224b6d96e60d7eb9c080ec6f23130d8d (patch) | |
tree | 98148a4143a714439ade638c3b8ff69cef19f192 /scene | |
parent | 22f2b275286b859a6c23e179939a7a7c48e8c894 (diff) |
Fix Viewport::handle_input_locally related infinite recursion
Diffstat (limited to 'scene')
-rw-r--r-- | scene/main/viewport.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index e88bb3b952..eab5916a4e 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<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) { |