I really need to figure out how to make an event continue down the chain even after being handled. If I have two controls which overlap AND both have gui_input() functions, the one on top will get the event input and then consume it. The gui_input() of the second control does not fire. I want to consume the event but allow it to fall through to the control underneath and call that controls gui_input.

How can I make this happen?

On the Control in the Inspector, look under Mouse -> Filter and set it to Pass. I believe this will let it propagate (you can also use Ignore if you are not using mouse events on that object and just want it to go to the next object).

I wish this worked, but once the control on top uses the event it is set to "handled" and stops propagating. I want it to fire a mouse click for both controls

So I understand now. Mouse pass does work, but it sends the event up the tree (so to the parent, and to the parent's parent, up to the root). There does not seem to be a way to pass events to children or siblings directly (though you can do it manually by firing a signal that other objects are listening for).

In any case, there is a way to make it work. You just have to make the GUI elements that are behind parents of the ones below. This won't work for siblings, but in most cases this should be fine as long as you don't have many overlapping objects. I attached a sample project for you to see.

Thank you for taking the time.

a year later