Understanding how Event Reply work when using stacked UMG Widgets and mouse events


I’m trying to understand how Event Reply works. Based on what I’ve read in the documentation and on the forums, it seems that when you return a Handled reply from a mouse event, if it is handled , then the event won’t “bubble” and be propagated to other widgets in the hierarchy.

Following this logic, I have been trying to setup something where I have two stacked widgets. The foreground widget is a border that I want to use to process Right Click mouse events only. Behind it, I have a button that I want to be click-able using the Left Mouse Button input.

The setup looks like something like this:

Now here’s what I am expecting to happen but that doesn’t work:

When I click on the Border in front of the button and the Mouse Button Down is processed and is “unhandled” (the Event Reply I return), I am expecting the mouse click to actually get passed to the button behind it. But it seems that it doesn’t work that way or I am doing something wrong.

Note: I have also tried using an image instead of a button, but with the same result.

Is what I am trying to achieve even possible or is my logic or setup faulty?


What version of Unreal Engine are you using. I had something similar working in 4.6, but it is not working any more in 4.8.

I am on 4.14.3 and noticed a similar issue. I have two images as children of a canvas. If the top image returns Unhandled for a mouse down, the image behind it never gets the chance to handle it. Technically it seems no other widget gets a chance to handle it.

Did you ever figure this out?
This is the only place I’ve been able to find that highlights my current issue exactly and I cannot figure out the solution at all!

Adding another comment here to bump this question up. I just ran into this exact problem today.

So I figured this out last week. The issue is events are not passed to sibling widgets. In your example if you made the button a child of the border then you would be able to ignore right mouse button clicks by returning unhandled and it would bubble up to the border where it could be handled.

TLDR: Bubbling up only works from child to parent widgets, there is no event passing at all between sibling widgets.