mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-19 19:18:57 +02:00
[meta] Add option to FORCE X11 as Graphics Backend (#2820)
* save the option on a external file because settings are loaded AFTER Qt window is created and then the graphics backend is already applied Signed-off-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2820 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: Shinmegumi <shinmegumi@eden-emu.dev> Co-authored-by: Caio Oliveira <caiooliveirafarias0@gmail.com> Co-committed-by: Caio Oliveira <caiooliveirafarias0@gmail.com>
This commit is contained in:
parent
e4b0c03a22
commit
2f591d33d3
7 changed files with 119 additions and 0 deletions
|
|
@ -25,6 +25,7 @@
|
|||
#ifdef __unix__
|
||||
#include <csignal>
|
||||
#include <sys/socket.h>
|
||||
#include "qt_common/gui_settings.h"
|
||||
#endif
|
||||
#ifdef __linux__
|
||||
#include "common/linux/gamemode.h"
|
||||
|
|
@ -552,6 +553,10 @@ GMainWindow::GMainWindow(bool has_broken_vulkan)
|
|||
// Gen keys if necessary
|
||||
OnCheckFirmwareDecryption();
|
||||
|
||||
#ifdef __unix__
|
||||
OnCheckGraphicsBackend();
|
||||
#endif
|
||||
|
||||
// Check for orphaned profiles and reset profile data if necessary
|
||||
QtCommon::Content::FixProfiles();
|
||||
|
||||
|
|
@ -3497,6 +3502,9 @@ void GMainWindow::OnConfigure() {
|
|||
#ifdef __linux__
|
||||
const bool old_gamemode = Settings::values.enable_gamemode.GetValue();
|
||||
#endif
|
||||
#ifdef __unix__
|
||||
const bool old_force_x11 = Settings::values.gui_force_x11.GetValue();
|
||||
#endif
|
||||
|
||||
Settings::SetConfiguringGlobal(true);
|
||||
ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get(),
|
||||
|
|
@ -3561,6 +3569,11 @@ void GMainWindow::OnConfigure() {
|
|||
SetGamemodeEnabled(Settings::values.enable_gamemode.GetValue());
|
||||
}
|
||||
#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()) {
|
||||
multiplayer_state->UpdateCredentials();
|
||||
|
|
@ -4536,6 +4549,54 @@ void GMainWindow::OnCheckFirmwareDecryption() {
|
|||
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() {
|
||||
return FirmwareManager::CheckFirmwarePresence(*QtCommon::system.get());
|
||||
}
|
||||
|
|
@ -5029,6 +5090,9 @@ int main(int argc, char* argv[]) {
|
|||
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
|
||||
// suffix.
|
||||
QGuiApplication::setDesktopFileName(QStringLiteral("dev.eden_emu.eden"));
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue