From 749892c9fc11d9ba596e02144bd8e824611c6d38 Mon Sep 17 00:00:00 2001 From: kobewi Date: Sat, 6 Mar 2021 22:22:24 +0100 Subject: [PATCH] Release mouse when SpinBox leaves scene tree (cherry picked from commit 83f6c6b360bfa3fd62f650ebe491111b3714641a) --- scene/gui/spin_box.cpp | 17 +++++++++++------ scene/gui/spin_box.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/scene/gui/spin_box.cpp b/scene/gui/spin_box.cpp index 63fcca527ff..de3b47b3453 100644 --- a/scene/gui/spin_box.cpp +++ b/scene/gui/spin_box.cpp @@ -92,6 +92,14 @@ void SpinBox::_range_click_timeout() { } } +void SpinBox::_release_mouse() { + if (drag.enabled) { + drag.enabled = false; + Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); + warp_mouse(drag.capture_pos); + } +} + void SpinBox::_gui_input(const Ref &p_event) { if (!is_editable()) { @@ -145,12 +153,7 @@ void SpinBox::_gui_input(const Ref &p_event) { //set_default_cursor_shape(CURSOR_ARROW); range_click_timer->stop(); - - if (drag.enabled) { - drag.enabled = false; - Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE); - warp_mouse(drag.capture_pos); - } + _release_mouse(); drag.allowed = false; } @@ -211,6 +214,8 @@ void SpinBox::_notification(int p_what) { _adjust_width_for_icon(get_icon("updown")); _value_changed(0); + } else if (p_what == NOTIFICATION_EXIT_TREE) { + _release_mouse(); } else if (p_what == NOTIFICATION_THEME_CHANGED) { call_deferred("minimum_size_changed"); diff --git a/scene/gui/spin_box.h b/scene/gui/spin_box.h index e9be0badf39..33a981f4ffc 100644 --- a/scene/gui/spin_box.h +++ b/scene/gui/spin_box.h @@ -44,6 +44,7 @@ class SpinBox : public Range { Timer *range_click_timer; void _range_click_timeout(); + void _release_mouse(); void _text_entered(const String &p_string); virtual void _value_changed(double);