@ -25,6 +25,7 @@
# ifdef __unix__
# ifdef __unix__
# include <csignal>
# include <csignal>
# include <sys/socket.h>
# include <sys/socket.h>
# include "qt_common/gui_settings.h"
# endif
# endif
# ifdef __linux__
# ifdef __linux__
# include "common/linux/gamemode.h"
# include "common/linux/gamemode.h"
@ -552,6 +553,10 @@ GMainWindow::GMainWindow(bool has_broken_vulkan)
// Gen keys if necessary
// Gen keys if necessary
OnCheckFirmwareDecryption ( ) ;
OnCheckFirmwareDecryption ( ) ;
# ifdef __unix__
OnCheckGraphicsBackend ( ) ;
# endif
// Check for orphaned profiles and reset profile data if necessary
// Check for orphaned profiles and reset profile data if necessary
QtCommon : : Content : : FixProfiles ( ) ;
QtCommon : : Content : : FixProfiles ( ) ;
@ -3497,6 +3502,9 @@ void GMainWindow::OnConfigure() {
# ifdef __linux__
# ifdef __linux__
const bool old_gamemode = Settings : : values . enable_gamemode . GetValue ( ) ;
const bool old_gamemode = Settings : : values . enable_gamemode . GetValue ( ) ;
# endif
# endif
# ifdef __unix__
const bool old_force_x11 = Settings : : values . gui_force_x11 . GetValue ( ) ;
# endif
Settings : : SetConfiguringGlobal ( true ) ;
Settings : : SetConfiguringGlobal ( true ) ;
ConfigureDialog configure_dialog ( this , hotkey_registry , input_subsystem . get ( ) ,
ConfigureDialog configure_dialog ( this , hotkey_registry , input_subsystem . get ( ) ,
@ -3561,6 +3569,11 @@ void GMainWindow::OnConfigure() {
SetGamemodeEnabled ( Settings : : values . enable_gamemode . GetValue ( ) ) ;
SetGamemodeEnabled ( Settings : : values . enable_gamemode . GetValue ( ) ) ;
}
}
# endif
# endif
# ifdef __unix__
if ( Settings : : values . gui_force_x11 . GetValue ( ) ! = old_force_x11 ) {
GraphicsBackend : : SetForceX11 ( Settings : : values . gui_force_x11 . GetValue ( ) ) ;
}
# endif
if ( ! multiplayer_state - > IsHostingPublicRoom ( ) ) {
if ( ! multiplayer_state - > IsHostingPublicRoom ( ) ) {
multiplayer_state - > UpdateCredentials ( ) ;
multiplayer_state - > UpdateCredentials ( ) ;
@ -4536,6 +4549,54 @@ void GMainWindow::OnCheckFirmwareDecryption() {
UpdateMenuState ( ) ;
UpdateMenuState ( ) ;
}
}
# ifdef __unix__
void GMainWindow : : OnCheckGraphicsBackend ( ) {
const QString platformName = QGuiApplication : : platformName ( ) ;
const QByteArray qtPlatform = qgetenv ( " QT_QPA_PLATFORM " ) ;
if ( platformName = = QStringLiteral ( " xcb " ) | | qtPlatform = = " xcb " )
return ;
const bool isWayland = platformName . startsWith ( QStringLiteral ( " wayland " ) , Qt : : CaseInsensitive ) | | qtPlatform . startsWith ( " wayland " ) ;
if ( ! isWayland )
return ;
const bool currently_hidden = Settings : : values . gui_hide_backend_warning . GetValue ( ) ;
if ( currently_hidden )
return ;
QMessageBox msgbox ( this ) ;
msgbox . setWindowTitle ( tr ( " Wayland Detected! " ) ) ;
msgbox . setText ( tr ( " Wayland is known to have significant performance issues and mysterious bugs. \n "
" It's recommended to use X11 instead. \n \n "
" Would you like to force it for future launches? " ) ) ;
msgbox . setIcon ( QMessageBox : : Warning ) ;
QPushButton * okButton = msgbox . addButton ( tr ( " Use X11 " ) , QMessageBox : : AcceptRole ) ;
msgbox . addButton ( tr ( " Continue with Wayland " ) , QMessageBox : : RejectRole ) ;
msgbox . setDefaultButton ( okButton ) ;
QCheckBox * cb = new QCheckBox ( tr ( " Don't show again " ) , & msgbox ) ;
cb - > setChecked ( currently_hidden ) ;
msgbox . setCheckBox ( cb ) ;
msgbox . exec ( ) ;
const bool hide = cb - > isChecked ( ) ;
if ( hide ! = currently_hidden ) {
Settings : : values . gui_hide_backend_warning . SetValue ( hide ) ;
}
if ( msgbox . clickedButton ( ) = = okButton ) {
Settings : : values . gui_force_x11 . SetValue ( true ) ;
GraphicsBackend : : SetForceX11 ( true ) ;
QMessageBox : : information ( this ,
tr ( " Restart Required " ) ,
tr ( " Restart Eden to apply the X11 backend. " ) ) ;
}
}
# endif
bool GMainWindow : : CheckFirmwarePresence ( ) {
bool GMainWindow : : CheckFirmwarePresence ( ) {
return FirmwareManager : : CheckFirmwarePresence ( * QtCommon : : system . get ( ) ) ;
return FirmwareManager : : CheckFirmwarePresence ( * QtCommon : : system . get ( ) ) ;
}
}
@ -5029,6 +5090,9 @@ int main(int argc, char* argv[]) {
qputenv ( " DISPLAY " , " :0 " ) ;
qputenv ( " DISPLAY " , " :0 " ) ;
}
}
if ( GraphicsBackend : : GetForceX11 ( ) & & qEnvironmentVariableIsEmpty ( " QT_QPA_PLATFORM " ) )
qputenv ( " QT_QPA_PLATFORM " , " xcb " ) ;
// Fix the Wayland appId. This needs to match the name of the .desktop file without the .desktop
// Fix the Wayland appId. This needs to match the name of the .desktop file without the .desktop
// suffix.
// suffix.
QGuiApplication : : setDesktopFileName ( QStringLiteral ( " dev.eden_emu.eden " ) ) ;
QGuiApplication : : setDesktopFileName ( QStringLiteral ( " dev.eden_emu.eden " ) ) ;