Release mouse when SpinBox leaves scene tree

This commit is contained in:
kobewi
2021-03-06 22:22:24 +01:00
parent 05248535f7
commit 83f6c6b360
2 changed files with 12 additions and 6 deletions

View File

@ -91,6 +91,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<InputEvent> &p_event) { void SpinBox::_gui_input(const Ref<InputEvent> &p_event) {
if (!is_editable()) { if (!is_editable()) {
return; return;
@ -136,12 +144,7 @@ void SpinBox::_gui_input(const Ref<InputEvent> &p_event) {
if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) { if (mb.is_valid() && !mb->is_pressed() && mb->get_button_index() == BUTTON_LEFT) {
//set_default_cursor_shape(CURSOR_ARROW); //set_default_cursor_shape(CURSOR_ARROW);
range_click_timer->stop(); range_click_timer->stop();
_release_mouse();
if (drag.enabled) {
drag.enabled = false;
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
warp_mouse(drag.capture_pos);
}
drag.allowed = false; drag.allowed = false;
} }
@ -199,6 +202,8 @@ void SpinBox::_notification(int p_what) {
} else if (p_what == NOTIFICATION_ENTER_TREE) { } else if (p_what == NOTIFICATION_ENTER_TREE) {
_adjust_width_for_icon(get_theme_icon("updown")); _adjust_width_for_icon(get_theme_icon("updown"));
_value_changed(0); _value_changed(0);
} else if (p_what == NOTIFICATION_EXIT_TREE) {
_release_mouse();
} else if (p_what == NOTIFICATION_TRANSLATION_CHANGED) { } else if (p_what == NOTIFICATION_TRANSLATION_CHANGED) {
_value_changed(0); _value_changed(0);
} else if (p_what == NOTIFICATION_THEME_CHANGED) { } else if (p_what == NOTIFICATION_THEME_CHANGED) {

View File

@ -43,6 +43,7 @@ class SpinBox : public Range {
Timer *range_click_timer; Timer *range_click_timer;
void _range_click_timeout(); void _range_click_timeout();
void _release_mouse();
void _text_entered(const String &p_string); void _text_entered(const String &p_string);
virtual void _value_changed(double) override; virtual void _value_changed(double) override;