diff options
author | Juan Linietsky <reduzio@gmail.com> | 2018-01-05 15:39:10 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2018-01-05 15:40:08 -0300 |
commit | 90d47ae23d49e3ef23f144db1db0ca938f86de3d (patch) | |
tree | a3a07f35ef8e6fe282a7c42c51bb2c13d1d0edf2 /scene/main | |
parent | eaa9a98c6304a3af525c3e1116299904dbd585db (diff) |
Force button release when window focuses out, fixes #15318 and likely many other issues.
Diffstat (limited to 'scene/main')
-rw-r--r-- | scene/main/viewport.cpp | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 6ac99524c8..5f1257a855 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -679,6 +679,20 @@ void Viewport::_notification(int p_what) { } } break; + case SceneTree::NOTIFICATION_WM_FOCUS_OUT: { + if (gui.mouse_focus) { + //if mouse is being pressed, send a release event + Ref<InputEventMouseButton> mb; + mb.instance(); + mb->set_position(gui.mouse_focus->get_local_mouse_position()); + mb->set_global_position(gui.mouse_focus->get_local_mouse_position()); + mb->set_button_index(gui.mouse_focus_button); + mb->set_pressed(false); + Control *c = gui.mouse_focus; + gui.mouse_focus = NULL; + c->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); + } + } break; } } @@ -2377,12 +2391,9 @@ List<Control *>::Element *Viewport::_gui_show_modal(Control *p_control) { mb->set_global_position(gui.mouse_focus->get_local_mouse_position()); mb->set_button_index(gui.mouse_focus_button); mb->set_pressed(false); - gui.mouse_focus->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); - - //if (gui.mouse_over == gui.mouse_focus) { - // gui.mouse_focus->notification(Control::NOTIFICATION_MOUSE_EXIT); - //} + Control *c = gui.mouse_focus; gui.mouse_focus = NULL; + c->call_multilevel(SceneStringNames::get_singleton()->_gui_input, mb); } return gui.modal_stack.back(); |