Quick answer: Set mouse_filter = MOUSE_FILTER_IGNORE on decorative overlays and MOUSE_FILTER_PASS on containers that should let children receive input. Buttons keep MOUSE_FILTER_STOP so they consume their own clicks.

A semi-transparent gradient panel sits on top of your button row for visual effect. Clicks on the buttons do nothing because the panel ate them.

The Symptom

Buttons visible but unresponsive. Clicks register on a parent or overlay Control instead. Console may show a focus on the wrong node.

The Three Filter Modes

The Fix

Decorative overlays: Ignore.

$GradientOverlay.mouse_filter = Control.MOUSE_FILTER_IGNORE

The gradient renders but doesn’t catch clicks. Buttons underneath fire.

Container that wants its own hover but lets buttons work: Pass.

Buttons: leave at default Stop. They eat their own clicks (correct).

Layout Containers

VBoxContainer, HBoxContainer, etc. default to Stop in some versions, which is occasionally surprising. If a layout container appears to swallow clicks, set it to Pass.

Verifying

Use the Debugger’s focus visualization or print on _gui_input. The button’s pressed signal should fire on click. If a parent prints first instead, that parent is on Stop and needs to switch.

“Ignore for decoration. Pass for layout. Stop for interactive. Clicks land where they should.”

Related Issues

For Theme stylebox states, see stylebox. For RichTextLabel BBCode, see BBCode.

Three filter modes. Pick per role.