properly pass events to parent controls, closes #4701

This commit is contained in:
Juan Linietsky 2016-06-06 22:03:29 -03:00
parent e535c942f3
commit aec5506414
1 changed files with 23 additions and 15 deletions

View File

@ -1492,22 +1492,30 @@ void Viewport::_gui_call_input(Control *p_control,const InputEvent& p_input) {
// _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)
break;
if (!p_control->is_inside_tree())
if (!control->is_inside_tree())
break;
p_control->emit_signal(SceneStringNames::get_singleton()->input_event,p_input);
if (!p_control->is_inside_tree() || p_control->is_set_as_toplevel()) {
control->emit_signal(SceneStringNames::get_singleton()->input_event,p_input);
if (!control->is_inside_tree() || control->is_set_as_toplevel()) {
break;
}
if (gui.key_event_accepted)
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;
p_control=p_control->data.parent;
}
if (ci->is_set_as_toplevel())
break;
ci=ci->get_parent_item();
}
//_unblock();