Skip to content

Commit

Permalink
Drop mouseover when mouse not in the window
Browse files Browse the repository at this point in the history
Not that this is critical, but it makes behavior of GUI and 2D/3D picking consistent among them.

This also contributes to dropping GUI focus when the mouse leaves the window (in addition to when it loses focus).
  • Loading branch information
RandomShaper committed Mar 29, 2019
1 parent 805eec7 commit 5b00cd8
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 0 deletions.
29 changes: 29 additions & 0 deletions scene/main/viewport.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -659,7 +659,11 @@ void Viewport::_notification(int p_what) {
}

} break;
case SceneTree::NOTIFICATION_WM_MOUSE_EXIT:
case SceneTree::NOTIFICATION_WM_FOCUS_OUT: {

_drop_physics_mouseover();

if (gui.mouse_focus) {
//if mouse is being pressed, send a release event
_drop_mouse_focus();
Expand Down Expand Up @@ -2561,6 +2565,31 @@ void Viewport::_drop_mouse_focus() {
}
}

void Viewport::_drop_physics_mouseover() {

physics_has_last_mousepos = false;

while (physics_2d_mouseover.size()) {
Object *o = ObjectDB::get_instance(physics_2d_mouseover.front()->key());
if (o) {
CollisionObject2D *co = Object::cast_to<CollisionObject2D>(o);
co->_mouse_exit();
}
physics_2d_mouseover.erase(physics_2d_mouseover.front());
}

#ifndef _3D_DISABLED
if (physics_object_over) {
CollisionObject *co = Object::cast_to<CollisionObject>(ObjectDB::get_instance(physics_object_over));
if (co) {
co->_mouse_exit();
}
}

physics_object_over = physics_object_capture = 0;
#endif
}

List<Control *>::Element *Viewport::_gui_show_modal(Control *p_control) {

gui.modal_stack.push_back(p_control);
Expand Down
1 change: 1 addition & 0 deletions scene/main/viewport.h
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,7 @@ class Viewport : public Node {
void _canvas_layer_remove(CanvasLayer *p_canvas_layer);

void _drop_mouse_focus();
void _drop_physics_mouseover();

void _update_canvas_items(Node *p_node);

Expand Down

0 comments on commit 5b00cd8

Please sign in to comment.