Merge pull request #69318 from Sauermann/fix-refresh-gui-events

Fix scene reload crash related to mouse cursor update
This commit is contained in:
Rémi Verschelde 2023-04-25 15:36:26 +02:00 committed by GitHub
commit 6aac8af6f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 10 deletions

View file

@ -1735,13 +1735,18 @@ real_t Control::get_stretch_ratio() const {
// Input events.
void Control::_call_gui_input(const Ref<InputEvent> &p_event) {
emit_signal(SceneStringNames::get_singleton()->gui_input, p_event); //signal should be first, so it's possible to override an event (and then accept it)
if (!is_inside_tree() || get_viewport()->is_input_handled()) {
return; //input was handled, abort
if (p_event->get_device() != InputEvent::DEVICE_ID_INTERNAL) {
emit_signal(SceneStringNames::get_singleton()->gui_input, p_event); // Signal should be first, so it's possible to override an event (and then accept it).
}
GDVIRTUAL_CALL(_gui_input, p_event);
if (!is_inside_tree() || get_viewport()->is_input_handled()) {
return; //input was handled, abort
return; // Input was handled, abort.
}
if (p_event->get_device() != InputEvent::DEVICE_ID_INTERNAL) {
GDVIRTUAL_CALL(_gui_input, p_event);
}
if (!is_inside_tree() || get_viewport()->is_input_handled()) {
return; // Input was handled, abort.
}
gui_input(p_event);
}

View file

@ -2791,7 +2791,9 @@ void Node::request_ready() {
}
void Node::_call_input(const Ref<InputEvent> &p_event) {
GDVIRTUAL_CALL(_input, p_event);
if (p_event->get_device() != InputEvent::DEVICE_ID_INTERNAL) {
GDVIRTUAL_CALL(_input, p_event);
}
if (!is_inside_tree() || !get_viewport() || get_viewport()->is_input_handled()) {
return;
}
@ -2799,7 +2801,9 @@ void Node::_call_input(const Ref<InputEvent> &p_event) {
}
void Node::_call_shortcut_input(const Ref<InputEvent> &p_event) {
GDVIRTUAL_CALL(_shortcut_input, p_event);
if (p_event->get_device() != InputEvent::DEVICE_ID_INTERNAL) {
GDVIRTUAL_CALL(_shortcut_input, p_event);
}
if (!is_inside_tree() || !get_viewport() || get_viewport()->is_input_handled()) {
return;
}
@ -2807,7 +2811,9 @@ void Node::_call_shortcut_input(const Ref<InputEvent> &p_event) {
}
void Node::_call_unhandled_input(const Ref<InputEvent> &p_event) {
GDVIRTUAL_CALL(_unhandled_input, p_event);
if (p_event->get_device() != InputEvent::DEVICE_ID_INTERNAL) {
GDVIRTUAL_CALL(_unhandled_input, p_event);
}
if (!is_inside_tree() || !get_viewport() || get_viewport()->is_input_handled()) {
return;
}
@ -2815,7 +2821,9 @@ void Node::_call_unhandled_input(const Ref<InputEvent> &p_event) {
}
void Node::_call_unhandled_key_input(const Ref<InputEvent> &p_event) {
GDVIRTUAL_CALL(_unhandled_key_input, p_event);
if (p_event->get_device() != InputEvent::DEVICE_ID_INTERNAL) {
GDVIRTUAL_CALL(_unhandled_key_input, p_event);
}
if (!is_inside_tree() || !get_viewport() || get_viewport()->is_input_handled()) {
return;
}

View file

@ -1377,7 +1377,9 @@ void Window::_window_input(const Ref<InputEvent> &p_ev) {
}
}
emit_signal(SceneStringNames::get_singleton()->window_input, p_ev);
if (p_ev->get_device() != InputEvent::DEVICE_ID_INTERNAL) {
emit_signal(SceneStringNames::get_singleton()->window_input, p_ev);
}
if (is_inside_tree()) {
push_input(p_ev);