summaryrefslogtreecommitdiff
path: root/scene/main/viewport.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'scene/main/viewport.cpp')
-rw-r--r--scene/main/viewport.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp
index 78706ee14a..5f1257a855 100644
--- a/scene/main/viewport.cpp
+++ b/scene/main/viewport.cpp
@@ -27,6 +27,7 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+
#include "viewport.h"
#include "os/input.h"
@@ -678,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;
}
}
@@ -2376,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();