Merge pull request #59555 from Sauermann/fix-mouseover-drag

This commit is contained in:
Rémi Verschelde 2022-03-28 20:21:28 +02:00 committed by GitHub
commit 2e85105959
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1603,29 +1603,6 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
_gui_call_input(mouse_focus, mb);
}
// In case the mouse was released after for example dragging a scrollbar,
// check whether the current control is different from the stored one. If
// it is different, rather than wait for it to be updated the next time the
// mouse is moved, notify the control so that it can e.g. drop the highlight.
// This code is duplicated from the mm.is_valid()-case further below.
Control *over = nullptr;
if (gui.mouse_focus) {
over = gui.mouse_focus;
} else {
over = gui_find_control(mpos);
}
if (gui.mouse_focus_mask == MouseButton::NONE && over != gui.mouse_over) {
_drop_mouse_over();
_gui_cancel_tooltip();
if (over) {
_gui_call_notification(over, Control::NOTIFICATION_MOUSE_ENTER);
}
}
gui.mouse_over = over;
set_input_as_handled();
}
}
@ -1685,9 +1662,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
}
Control *over = nullptr;
if (gui.mouse_focus) {
over = gui.mouse_focus;
} else if (gui.mouse_in_viewport) {
if (gui.mouse_in_viewport) {
over = gui_find_control(mpos);
}
@ -1701,6 +1676,10 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
}
}
if (gui.mouse_focus) {
over = gui.mouse_focus;
}
DisplayServer::CursorShape ds_cursor_shape = (DisplayServer::CursorShape)Input::get_singleton()->get_default_cursor_shape();
if (over) {