From 3be30efe8e3d66894bbfc99acfa013fec351df82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pedro=20J=2E=20Est=C3=A9banez?= Date: Thu, 9 Mar 2017 01:25:42 +0100 Subject: [PATCH] Fixes for TouchScreenButton - getting stuck on pause - handling input when not visible --- scene/2d/screen_button.cpp | 23 ++++++++++++++++------- scene/2d/screen_button.h | 1 - 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/scene/2d/screen_button.cpp b/scene/2d/screen_button.cpp index 17f2088aee..438b668ec7 100644 --- a/scene/2d/screen_button.cpp +++ b/scene/2d/screen_button.cpp @@ -135,7 +135,7 @@ void TouchScreenButton::_notification(int p_what) { update(); if (!get_tree()->is_editor_hint()) - set_process_input(true); + set_process_input(is_visible()); if (action.operator String()!="" && InputMap::get_singleton()->has_action(action)) { action_id=InputMap::get_singleton()->get_action_id(action); @@ -147,10 +147,21 @@ void TouchScreenButton::_notification(int p_what) { if (is_pressed()) _release(true); } break; + case NOTIFICATION_VISIBILITY_CHANGED: { + if (get_tree()->is_editor_hint()) + break; + if (is_visible()) { + set_process_input(true); + } else { + set_process_input(false); + if (is_pressed()) + _release(); + } + } break; case NOTIFICATION_PAUSED: { - // So the button can be pressed again even though the release gets unhandled because of coming during pause - allow_repress=true; - } + if (is_pressed()) + _release(); + } break; } } @@ -237,7 +248,7 @@ void TouchScreenButton::_input(const InputEvent& p_event) { if (!is_visible()) return; - const bool can_press=finger_pressed==-1 || allow_repress; + const bool can_press=finger_pressed==-1; if (!can_press) return; //already fingering @@ -284,7 +295,6 @@ void TouchScreenButton::_input(const InputEvent& p_event) { void TouchScreenButton::_press(int p_finger_pressed) { finger_pressed=p_finger_pressed; - allow_repress=false; if (action_id!=-1) { @@ -406,7 +416,6 @@ void TouchScreenButton::_bind_methods() { TouchScreenButton::TouchScreenButton() { finger_pressed=-1; - allow_repress=false; action_id=-1; passby_press=false; visibility=VISIBILITY_ALWAYS; diff --git a/scene/2d/screen_button.h b/scene/2d/screen_button.h index 46090e0369..6f3ebdfddb 100644 --- a/scene/2d/screen_button.h +++ b/scene/2d/screen_button.h @@ -56,7 +56,6 @@ private: StringName action; bool passby_press; int finger_pressed; - bool allow_repress; int action_id; VisibilityMode visibility;