Several of Cemu's settings dialogs (GeneralSettings2, InputSettings2,
GraphicPacksWindow2, ...) and most of its tool wxFrames have no
Cancel/Close/OK button. On a Wayland compositor that doesn't draw
server-side decorations there is also no compositor-drawn close button,
so once opened these windows cannot be dismissed.
wxDialog's built-in Esc handling (wxDialogBase::OnCharHook in
src/common/dlgcmn.cpp) forwards Esc to a button with wxID_CANCEL or
the affirmative-id button via EmulateButtonClickIfPresent; with
neither button present, SendCloseButtonClickEvent returns false and
the handler just Skip()s. wxFrame has no Esc handling at all (the
event table in src/common/framecmn.cpp only carries menu-open/close
entries).
Add wxHelper::BindEscapeCloses(target), a one-liner that binds
WXK_ESCAPE on wxEVT_CHAR_HOOK to target->Close(). Close() goes
through the wxEVT_CLOSE_WINDOW path, where wxDialogBase::OnCloseWindow
does fall back to EndDialog(wxID_CANCEL) when no Cancel/OK button
is found - so the helper closes buttonless dialogs correctly. Apply
as the first statement of every wxDialog and wxFrame ctor in
src/gui/wxgui/, except:
- MainWindow: Esc shouldn't quit Cemu.
- PadViewFrame: already binds Esc to leave fullscreen.
- HotkeySettings: inline variant guarded by !m_activeInputButton
so an in-progress keyboard capture (whose cancel path is
OnKeyUp + IsValidKeycodeUp rejecting WXK_ESCAPE) still wins.
Tag the File>Exit menu item label with "\tCtrl+Q"; wxMenuItemBase::
GetAccel() parses everything after the tab via wxAcceleratorEntry::
Create and wxMenuBar registers it as an accelerator.
|
||
|---|---|---|
| .github | ||
| bin | ||
| cmake | ||
| dependencies | ||
| dist | ||
| src | ||
| .clang-format | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| boost.natvis | ||
| BUILD.md | ||
| CMakeLists.txt | ||
| CMakeSettings.json | ||
| CODING_STYLE.md | ||
| LICENSE.txt | ||
| README.md | ||
| vcpkg.json | ||
Cemu - Wii U emulator
This is the code repository of Cemu, a Wii U emulator that is able to run most Wii U games and homebrew in a playable state. It's written in C/C++ and is being actively developed with new features and fixes.
Cemu is currently only available for 64-bit Windows, Linux & macOS devices.
Links:
- Open Source Announcement
- Official Website
- Compatibility List/Wiki
- Official Subreddit
- Official Discord
- Official Matrix Server
- Setup Guide
Other relevant repositories:
Download
You can download the latest Cemu releases for Windows, Linux and Mac from the GitHub Releases. For Linux you can also find Cemu on flathub.
On Windows, Cemu is available both as an installer and in a portable format, where no installation is required besides extracting it in a safe place.
The native macOS build is currently purely experimental and should not be considered stable or ready for issue-free gameplay. There are also known issues with degraded performance due to the use of MoltenVK and Rosetta for ARM Macs. We appreciate your patience while we improve Cemu for macOS.
Pre-2.0 releases can be found on Cemu's changelog page.
Build Instructions
To compile Cemu yourself on Windows, Linux or macOS, view BUILD.md.
Issues
Issues with the emulator should be filed using GitHub Issues.
The old bug tracker can be found at bugs.cemu.info and still contains relevant issues and feature suggestions.
Contributing
Pull requests are very welcome. For easier coordination you can visit the developer discussion channel on Discord or alternatively the Matrix Server. Before submitting a pull request, please read and follow our code style guidelines listed in CODING_STYLE.md.
If coding isn't your thing, testing games and making detailed bug reports or updating the (usually outdated) compatibility wiki is also appreciated!
Questions about Cemu's software architecture can also be answered on Discord (or through the Matrix bridge).
License
Cemu is licensed under Mozilla Public License 2.0. Exempt from this are all files in the dependencies directory for which the licenses of the original code apply as well as some individual files in the src folder, as specified in those file headers respectively.