godotengine / godotengine/godot
Horrible MenuButton UX
- Dominant language
- C++
- Stars
- 117k
- Forks
- 26.8k
- PR merge metrics
- PR metrics pending
Description
### Tested versions
4.5 Stable and prior (tested all the way to 3.3)
### System information
N/A
### Issue description
The `MenuButton` Node is a Hot mess.
1) Items that are Checkable when you click to check them they Don't get checked. You have to provide your own Logic to do so. This is unintuitive and undesirable. What Else could you possibly do with a Check Button other then (Un)Checking it!? To add insult to Injury you cannot setup the signals from the editor (which also mind you further Obfuscates the solution), you need to do so Manually through the `connect` function, in code.
2) The Popup auto-closes on Left Mouse Button regardless of where it is clicked. This is not always desired, as you may have multiple options you want to Check/Uncheck, and the way to Prevent this is Heavily Obscured (you need to do a `menubutton.get_popup().hide_on_checkable_item_selection=false` with no setting in the Editor allowing you to change this behavior
3) The editor makes it seem like Items are part of the MenuButton, but instead you need to do `get_popup().SOME-ITEM-COMMAND` instead of `menubutton.SOME-ITEM-COMMAND` as they're actually the Popup's Variables
### Steps to reproduce
N/A
### Minimal reproduction project (MRP)
N/A
Contributor guide
Research direction
Start with the MenuButton and get_popup() entry points described in the issue, and reproduce the checkable-item and popup-closing behavior in Godot 4.5 or a current build. Clarify which behavior and editor configuration are intended before identifying the affected implementation and tests; done requires an agreed, consistent MenuButton UX.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- design, game-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100