Enable widget click through

For two widget components that overlap on each other, is there a way to capture mouse input on both of them?
For example, let’s say I have two button overlap.

346220-微信截图-20210813191509.png

Both of them have a OnMouseButtonDown event. If I click the overlap area, I’d like both of them to take effect instead of the first one absorbs the input and prevents it from passing through.
In the event binder, I return “unhandled” but it seems not to work.

is there a way to capture mouse input
on both of them?

Yes.

I return “unhandled” but it seems not to work.

Unhandled is the way to go and should work for this. Ensure the layer underneath has at least 1 element that is set to Visible.

In the event binder

You probably mean onMouseDown (or up), right? As in:

Hello! What practical case requires this logic?

In case there’s any doubt:

LMB will tunnel, everything else will be consumed.


Hello! What practical case requires
this logic?

Oh boy, where do I start?!

  • you have a top down view 2d Map and POIs, click a POI and let the event tunnel to the map below
  • you’re slicing & dicing fruit in one of those silly mobile games; 3 fruit overlap as you tap - now you can slice all three…
  • you can have draggable windows, you click & hold a window to drag it and the owning parent container gets a click too, making it always stay in focus for as long as the Drag OP is valid…
1 Like

I believe unhandled is the correct way too base on the documentation, but it doesn’t seem to work… I’ll take another look when I get back to my computer.
Currently I directly override the NativeOnMouseButtonDown, UP, MOVE in the widget class to handle it. But in this way I’ll have to figure out which widget the mouse hits myself. I’ll try the BP setup ASAP. Thank you!

Hi there.
I tested override OnMouseButtonDown in BP and it works well just like override NativeOnMouseButtonDown in C++. But when I do it in binding event for specific widget(like a boder or image),

346358-events-bind-1.png

The input doesn’t go through… Is there a way to make input go through the widget bind event?

1 Like

Seems like the FReply::Unhandled() will only pass to its parent widget through the widget tree path, not the layerid lower. If the two overlap widget do not in the same widget tree path (from leaf to root), it will not receive the click event while returning ‘Unhandled’ in top layer widget.

Does poster already solve the problem? There seems to be no good method except modifying the engine.