diff options
Diffstat (limited to 'src/yuzu')
-rw-r--r-- | src/yuzu/configuration/configure_general.cpp | 46 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.ui | 27 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_system.ui | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/shared_translation.cpp | 4 | ||||
-rw-r--r-- | src/yuzu/main.cpp | 64 | ||||
-rw-r--r-- | src/yuzu/main.h | 1 | ||||
-rw-r--r-- | src/yuzu/uisettings.h | 3 |
7 files changed, 88 insertions, 59 deletions
diff --git a/src/yuzu/configuration/configure_general.cpp b/src/yuzu/configuration/configure_general.cpp index ce7e17850..701b895e7 100644 --- a/src/yuzu/configuration/configure_general.cpp +++ b/src/yuzu/configuration/configure_general.cpp @@ -29,9 +29,6 @@ ConfigureGeneral::ConfigureGeneral(const Core::System& system_, if (!Settings::IsConfiguringGlobal()) { ui->button_reset_defaults->setVisible(false); } -#ifndef __linux__ - ui->enable_gamemode->setVisible(false); -#endif } ConfigureGeneral::~ConfigureGeneral() = default; @@ -39,12 +36,29 @@ ConfigureGeneral::~ConfigureGeneral() = default; void ConfigureGeneral::SetConfiguration() {} void ConfigureGeneral::Setup(const ConfigurationShared::Builder& builder) { - QLayout& layout = *ui->general_widget->layout(); + QLayout& general_layout = *ui->general_widget->layout(); + QLayout& linux_layout = *ui->linux_widget->layout(); + + std::map<u32, QWidget*> general_hold{}; + std::map<u32, QWidget*> linux_hold{}; + + std::vector<Settings::BasicSetting*> settings; + + auto push = [&settings](auto& list) { + for (auto setting : list) { + settings.push_back(setting); + } + }; - std::map<u32, QWidget*> hold{}; + push(UISettings::values.linkage.by_category[Settings::Category::UiGeneral]); + push(Settings::values.linkage.by_category[Settings::Category::Linux]); - for (const auto setting : - UISettings::values.linkage.by_category[Settings::Category::UiGeneral]) { + // Only show Linux group on Unix +#ifndef __unix__ + ui->LinuxGroupBox->setVisible(false); +#endif + + for (const auto setting : settings) { auto* widget = builder.BuildWidget(setting, apply_funcs); if (widget == nullptr) { @@ -55,11 +69,23 @@ void ConfigureGeneral::Setup(const ConfigurationShared::Builder& builder) { continue; } - hold.emplace(setting->Id(), widget); + switch (setting->GetCategory()) { + case Settings::Category::UiGeneral: + general_hold.emplace(setting->Id(), widget); + break; + case Settings::Category::Linux: + linux_hold.emplace(setting->Id(), widget); + break; + default: + widget->deleteLater(); + } } - for (const auto& [id, widget] : hold) { - layout.addWidget(widget); + for (const auto& [id, widget] : general_hold) { + general_layout.addWidget(widget); + } + for (const auto& [id, widget] : linux_hold) { + linux_layout.addWidget(widget); } } diff --git a/src/yuzu/configuration/configure_general.ui b/src/yuzu/configuration/configure_general.ui index a10e7d3a5..ef20891a3 100644 --- a/src/yuzu/configuration/configure_general.ui +++ b/src/yuzu/configuration/configure_general.ui @@ -47,6 +47,33 @@ </widget> </item> <item> + <widget class="QGroupBox" name="LinuxGroupBox"> + <property name="title"> + <string>Linux</string> + </property> + <layout class="QVBoxLayout" name="LinuxVerticalLayout_1"> + <item> + <widget class="QWidget" name="linux_widget" native="true"> + <layout class="QVBoxLayout" name="LinuxVerticalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> diff --git a/src/yuzu/configuration/configure_system.ui b/src/yuzu/configuration/configure_system.ui index 2a735836e..04b771129 100644 --- a/src/yuzu/configuration/configure_system.ui +++ b/src/yuzu/configuration/configure_system.ui @@ -57,7 +57,7 @@ </widget> </item> <item> - <widget class="QGroupBox" name="groupBox"> + <widget class="QGroupBox" name="coreGroup"> <property name="title"> <string>Core</string> </property> diff --git a/src/yuzu/configuration/shared_translation.cpp b/src/yuzu/configuration/shared_translation.cpp index 903805e75..ee0ca4aa7 100644 --- a/src/yuzu/configuration/shared_translation.cpp +++ b/src/yuzu/configuration/shared_translation.cpp @@ -175,7 +175,9 @@ std::unique_ptr<TranslationMap> InitializeTranslations(QWidget* parent) { INSERT(UISettings, hide_mouse, tr("Hide mouse on inactivity"), QStringLiteral()); INSERT(UISettings, controller_applet_disabled, tr("Disable controller applet"), QStringLiteral()); - INSERT(UISettings, enable_gamemode, tr("Enable Gamemode"), QStringLiteral()); + + // Linux + INSERT(Settings, enable_gamemode, tr("Enable Gamemode"), QStringLiteral()); // Ui Debugging diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index cf61d4258..6ef518b6a 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -17,6 +17,7 @@ #ifdef __unix__ #include <csignal> #include <sys/socket.h> +#include "common/linux/gamemode.h" #endif #include <boost/container/flat_set.hpp> @@ -185,10 +186,6 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1; } #endif -#ifdef __linux__ -#include <gamemode_client.h> -#endif - constexpr int default_mouse_hide_timeout = 2500; constexpr int default_mouse_center_timeout = 10; constexpr int default_input_update_timeout = 1; @@ -323,6 +320,7 @@ GMainWindow::GMainWindow(std::unique_ptr<QtConfig> config_, bool has_broken_vulk provider{std::make_unique<FileSys::ManualContentProvider>()} { #ifdef __unix__ SetupSigInterrupts(); + SetGamemodeEnabled(Settings::values.enable_gamemode.GetValue()); #endif system->Initialize(); @@ -2130,14 +2128,8 @@ void GMainWindow::OnEmulationStopped() { discord_rpc->Update(); -#ifdef __linux__ - if (UISettings::values.enable_gamemode) { - if (gamemode_request_end() < 0) { - LOG_WARNING(Frontend, "Failed to stop gamemode: {}", gamemode_error_string()); - } else { - LOG_INFO(Frontend, "Stopped gamemode"); - } - } +#ifdef __unix__ + Common::Linux::StopGamemode(); #endif // The emulation is stopped, so closing the window or not does not matter anymore @@ -3519,14 +3511,8 @@ void GMainWindow::OnStartGame() { discord_rpc->Update(); -#ifdef __linux__ - if (UISettings::values.enable_gamemode) { - if (gamemode_request_start() < 0) { - LOG_WARNING(Frontend, "Failed to start gamemode: {}", gamemode_error_string()); - } else { - LOG_INFO(Frontend, "Started gamemode"); - } - } +#ifdef __unix__ + Common::Linux::StartGamemode(); #endif } @@ -3549,14 +3535,8 @@ void GMainWindow::OnPauseGame() { UpdateMenuState(); AllowOSSleep(); -#ifdef __linux__ - if (UISettings::values.enable_gamemode) { - if (gamemode_request_end() < 0) { - LOG_WARNING(Frontend, "Failed to stop gamemode: {}", gamemode_error_string()); - } else { - LOG_INFO(Frontend, "Stopped gamemode"); - } - } +#ifdef __unix__ + Common::Linux::StopGamemode(); #endif } @@ -3839,6 +3819,9 @@ void GMainWindow::OnConfigure() { const auto old_theme = UISettings::values.theme; const bool old_discord_presence = UISettings::values.enable_discord_presence.GetValue(); const auto old_language_index = Settings::values.language_index.GetValue(); +#ifdef __unix__ + const bool old_gamemode = Settings::values.enable_gamemode.GetValue(); +#endif Settings::SetConfiguringGlobal(true); ConfigureDialog configure_dialog(this, hotkey_registry, input_subsystem.get(), @@ -3900,6 +3883,11 @@ void GMainWindow::OnConfigure() { if (UISettings::values.enable_discord_presence.GetValue() != old_discord_presence) { SetDiscordEnabled(UISettings::values.enable_discord_presence.GetValue()); } +#ifdef __unix__ + if (Settings::values.enable_gamemode.GetValue() != old_gamemode) { + SetGamemodeEnabled(Settings::values.enable_gamemode.GetValue()); + } +#endif if (!multiplayer_state->IsHostingPublicRoom()) { multiplayer_state->UpdateCredentials(); @@ -5215,25 +5203,13 @@ void GMainWindow::SetDiscordEnabled([[maybe_unused]] bool state) { discord_rpc->Update(); } -void GMainWindow::SetGamemodeDisabled([[maybe_unused]] bool state) { -#ifdef __linux__ +#ifdef __unix__ +void GMainWindow::SetGamemodeEnabled(bool state) { if (emulation_running) { - if (state) { - if (gamemode_request_end() < 0) { - LOG_WARNING(Frontend, "Failed to stop gamemode: {}", gamemode_error_string()); - } else { - LOG_INFO(Frontend, "Stopped gamemode"); - } - } else { - if (gamemode_request_start() < 0) { - LOG_WARNING(Frontend, "Failed to start gamemode: {}", gamemode_error_string()); - } else { - LOG_INFO(Frontend, "Started gamemode"); - } - } + Common::Linux::SetGamemodeState(state); } -#endif } +#endif void GMainWindow::changeEvent(QEvent* event) { #ifdef __unix__ diff --git a/src/yuzu/main.h b/src/yuzu/main.h index c989c079d..2e13e1834 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -340,6 +340,7 @@ private: void SetupSigInterrupts(); static void HandleSigInterrupt(int); void OnSigInterruptNotifierActivated(); + void SetGamemodeEnabled(bool state); #endif private slots: diff --git a/src/yuzu/uisettings.h b/src/yuzu/uisettings.h index 3e5ddc07a..549a39e1b 100644 --- a/src/yuzu/uisettings.h +++ b/src/yuzu/uisettings.h @@ -140,9 +140,6 @@ struct Values { Settings::Specialization::Default, true, true}; - // Gamemode - Setting<bool> enable_gamemode{linkage, false, "enable_gamemode", Category::UiGeneral}; - Setting<bool> disable_web_applet{linkage, true, "disable_web_applet", Category::Ui}; // Discord RPC |