[GUI] Implement Properties that can Recursively Disable Child Controls' Focus Mode
& Mouse Filter
#97495
+177
−20
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Closes godotengine/godot-proposals#8200
This mechanism makes it easier for developers to manipulate a group of controls under one single control, such as disabling elements under a panel while retaining their visibility.
QQ2024927-173954.mp4
Previous Design
These two properties do not change the original values in the child nodes.
get_focus_mode_with_recursive
get_focus_mode
but takes parent'sfocus_none_recursive
property into account.get_mouse_filter_with_recursive
get_mouse_filter
but takes parent'smouse_ignore_recursive
property into account.The addition of this mechanism makes it easier for developers to manipulate a group of controls under one single control, such as disabling elements under a panel while retaining their visibility.
QQ2024926-224220.mp4
New Design
This new design enables child control to ignore the parent's recursive setting.
Added the following members to
Control
:These two properties do not change the original values in the child nodes.
focus_recursive_behavior
RecursiveBehavior
focus_mode
overridden toFOCUS_NONE
when evaluating input.mouse_recursive_behavior
RecursiveBehavior
mouse_filter
overridden toMOUSE_FILTER_IGNORE
when evaluating input.get_focus_mode_with_recursive
get_focus_mode
but takes parent'sfocus_recursive_behavior
property into account.get_mouse_filter_with_recursive
get_mouse_filter
but takes parent'smouse_recursive_behavior
property into account.RECURSIVE_BEHAVIOR_INHERIT
RECURSIVE_BEHAVIOR_DISABLED
RECURSIVE_BEHAVIOR_ENABLED
Script Attached to the Buttons