-
-
Notifications
You must be signed in to change notification settings - Fork 524
Render SelectFields as MUI Selects #4059
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This renders most drop-down selection prompts inside Heroic. In turn, these dropdowns now work inside the Gamescope session. Current issues: - Controller navigation does not work, hitting "Down" opens the dropdown, with no way to navigate further down to other components - There is a black box in the top-left of the component, where the label should be
MUI CSS class names are not stable, they cannot be used like this
I prefer to use this over CSS rules in a separate file since it can sometimes be unclear where "the magic happens". Having layout and style together is clearer IMO
This will definitely break things, but it makes selects work
253e014
to
7746476
Compare
Navigating "over" selects now works This is done by simulating Tab/Shift-Tab key presses when pressing the respective buttons while focussing a MUI select element I've gone ahead and removed our home-grown `GamepadInputEvent` type, as it's just a lesser version of Electron's input events
This makes dialogs closeable with the back button again
Restoring the focussed element on dialog close is already handled by MUI, we don't need this code ourselves Moving focus on dialog open *should* work automatically as well, however it doesn't. I've tried various methods with element properties and JS, nothing seems to work. As a band-aid fix for now, we simulate 1-2 tab presses to focus the dialog content
218a328
to
e88d290
Compare
Closing selects with the B/Circle button
MUI treats an empty value as "don't show anything selected", while native selects show the first option
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, but I left a comment about an accessibility feature that is not working with the new dialogs
f327b2a
to
201eb19
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've been testing a bit more, I found 1 issue and two small things: one small thing is the the second small thing is that the controller hints (the instructions of what each button does at the bottom of the screen) shows incorrect hints for dropdowns, it thinks it's the context menu of library cards and it shows now the issue is that, when using a controller to navigate the UI (or a keyboard), you can get
a smaller dialog doesn't have this problem:
|
1f72fc7
to
19704e7
Compare
Ideally we'd move `.selectStyle` into its own CSS file (since it's only used for those two buttons now), but I'm not sure what the best way to do that would be
This makes the controller hints show up over dialogs
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR updates drop-down selection components to render as Material UI Selects, enhancing controller navigation and dialog behavior within the Gamescope session. Key changes include replacing native options with MUI MenuItem components, refining gamepad navigation actions, and refactoring dialog components to use MUI's Dialog APIs. Reviewed Changes Copilot reviewed 30 out of 30 changed files in this pull request and generated no comments. Show a summary per file File Description src/frontend/screens/Settings/components/CustomWineProton.tsx Replaced native with MUI MenuItem for custom wine paths. src/frontend/screens/Library/components/InstallModal/* and related selector files Updated drop-down implementations in InstallModal sub-components. src/frontend/components/UI/SelectField/* and ThemeSelector/index.tsx Migrated from native select elements to MUI Select components. src/frontend/helpers/gamepad.ts Added new gamepad actions (tab/shiftTab) and helper functions. src/frontend/components/UI/Dialog/* Refactored dialog components to leverage MUI's Dialog for better UX. src/frontend/components/UI/ControllerHints/index.tsx Adjusted controller hints condition for detecting menus. src/common/types.ts and src/backend/main.ts Removed legacy types and updated gamepad event handling. src/frontend/App.css Adjusted z-index values to accommodate MUI Dialog layering. Comments suppressed due to low confidence (3) src/frontend/components/UI/ControllerHints/index.tsx:60 The condition for detecting context menus changed from '.MuiMenu-list' to '.contextMenu'. Verify this update is intentional and consistent with the rest of the UI component structure. } else if (target.closest('.contextMenu')) { src/frontend/components/UI/SelectField/index.tsx:39 [nitpick] Ensure that the new MUI Select component includes all necessary accessibility attributes (e.g., aria-label) to replicate the native select behavior. <Select src/frontend/helpers/gamepad.ts:146 [nitpick] Review the handling of 'isInMuiPopover' to ensure that simulating a 'tab' action in popover contexts does not introduce unintended navigation issues. } else if (isInMuiPopover()) {
80f17b8
to
0883901
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
This renders most drop-down selection prompts inside Heroic. In turn, these dropdowns now work inside the Gamescope session.
Current issues:
Use the following Checklist if you have changed something on the Backend or Frontend: