properly pass events to parent controls, closes #4701
(cherry picked from commit aec5506414
)
This commit is contained in:
parent
bb8b57cbae
commit
cb94271e9f
|
@ -1481,22 +1481,30 @@ void Viewport::_gui_call_input(Control *p_control,const InputEvent& p_input) {
|
||||||
|
|
||||||
// _block();
|
// _block();
|
||||||
|
|
||||||
while(p_control) {
|
CanvasItem *ci=p_control;
|
||||||
|
while(ci) {
|
||||||
|
|
||||||
p_control->call_multilevel(SceneStringNames::get_singleton()->_input_event,p_input);
|
Control *control = ci->cast_to<Control>();
|
||||||
|
if (control) {
|
||||||
|
control->call_multilevel(SceneStringNames::get_singleton()->_input_event,p_input);
|
||||||
if (gui.key_event_accepted)
|
if (gui.key_event_accepted)
|
||||||
break;
|
break;
|
||||||
if (!p_control->is_inside_tree())
|
if (!control->is_inside_tree())
|
||||||
break;
|
break;
|
||||||
p_control->emit_signal(SceneStringNames::get_singleton()->input_event,p_input);
|
control->emit_signal(SceneStringNames::get_singleton()->input_event,p_input);
|
||||||
if (!p_control->is_inside_tree() || p_control->is_set_as_toplevel()) {
|
if (!control->is_inside_tree() || control->is_set_as_toplevel()) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (gui.key_event_accepted)
|
if (gui.key_event_accepted)
|
||||||
break;
|
break;
|
||||||
if (p_control->data.stop_mouse && (p_input.type==InputEvent::MOUSE_BUTTON || p_input.type==InputEvent::MOUSE_MOTION))
|
if (control->data.stop_mouse && (p_input.type==InputEvent::MOUSE_BUTTON || p_input.type==InputEvent::MOUSE_MOTION))
|
||||||
break;
|
break;
|
||||||
p_control=p_control->data.parent;
|
}
|
||||||
|
|
||||||
|
if (ci->is_set_as_toplevel())
|
||||||
|
break;
|
||||||
|
|
||||||
|
ci=ci->get_parent_item();
|
||||||
}
|
}
|
||||||
|
|
||||||
//_unblock();
|
//_unblock();
|
||||||
|
|
Loading…
Reference in New Issue