diff options
| -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) { |