respect mouse mode when setting enter/exit notifications and signals, fixes #19785
This commit is contained in:
parent
682fdf0f74
commit
93d8f3cdd5
@ -1533,6 +1533,35 @@ void Viewport::_gui_call_input(Control *p_control, const Ref<InputEvent> &p_inpu
|
|||||||
//_unblock();
|
//_unblock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Viewport::_gui_call_notification(Control *p_control, int p_what) {
|
||||||
|
|
||||||
|
CanvasItem *ci = p_control;
|
||||||
|
while (ci) {
|
||||||
|
|
||||||
|
Control *control = Object::cast_to<Control>(ci);
|
||||||
|
if (control) {
|
||||||
|
|
||||||
|
if (control->data.mouse_filter != Control::MOUSE_FILTER_IGNORE) {
|
||||||
|
control->notification(p_what);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!control->is_inside_tree())
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (!control->is_inside_tree() || control->is_set_as_toplevel())
|
||||||
|
break;
|
||||||
|
if (control->data.mouse_filter == Control::MOUSE_FILTER_STOP)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ci->is_set_as_toplevel())
|
||||||
|
break;
|
||||||
|
|
||||||
|
ci = ci->get_parent_item();
|
||||||
|
}
|
||||||
|
|
||||||
|
//_unblock();
|
||||||
|
}
|
||||||
Control *Viewport::_gui_find_control(const Point2 &p_global) {
|
Control *Viewport::_gui_find_control(const Point2 &p_global) {
|
||||||
|
|
||||||
_gui_prepare_subwindows();
|
_gui_prepare_subwindows();
|
||||||
@ -1975,13 +2004,15 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
|
|||||||
|
|
||||||
if (over != gui.mouse_over) {
|
if (over != gui.mouse_over) {
|
||||||
|
|
||||||
if (gui.mouse_over)
|
if (gui.mouse_over) {
|
||||||
gui.mouse_over->notification(Control::NOTIFICATION_MOUSE_EXIT);
|
_gui_call_notification(gui.mouse_over, Control::NOTIFICATION_MOUSE_EXIT);
|
||||||
|
}
|
||||||
|
|
||||||
_gui_cancel_tooltip();
|
_gui_cancel_tooltip();
|
||||||
|
|
||||||
if (over)
|
if (over) {
|
||||||
over->notification(Control::NOTIFICATION_MOUSE_ENTER);
|
_gui_call_notification(over, Control::NOTIFICATION_MOUSE_ENTER);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gui.mouse_over = over;
|
gui.mouse_over = over;
|
||||||
|
@ -305,6 +305,8 @@ private:
|
|||||||
bool disable_input;
|
bool disable_input;
|
||||||
|
|
||||||
void _gui_call_input(Control *p_control, const Ref<InputEvent> &p_input);
|
void _gui_call_input(Control *p_control, const Ref<InputEvent> &p_input);
|
||||||
|
void _gui_call_notification(Control *p_control, int p_what);
|
||||||
|
|
||||||
void _gui_prepare_subwindows();
|
void _gui_prepare_subwindows();
|
||||||
void _gui_sort_subwindows();
|
void _gui_sort_subwindows();
|
||||||
void _gui_sort_roots();
|
void _gui_sort_roots();
|
||||||
|
Loading…
Reference in New Issue
Block a user