diff options
Diffstat (limited to 'src/common')
| -rw-r--r-- | src/common/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | src/common/linux/gamemode.cpp | 39 | ||||
| -rw-r--r-- | src/common/linux/gamemode.h | 24 | ||||
| -rw-r--r-- | src/common/settings.cpp | 2 | ||||
| -rw-r--r-- | src/common/settings.h | 5 | ||||
| -rw-r--r-- | src/common/settings_common.h | 1 | 
6 files changed, 78 insertions, 2 deletions
diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index e216eb3de..57cbb9d07 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -174,6 +174,15 @@ if(ANDROID)      )  endif() +if (UNIX) +  target_sources(common PRIVATE +    linux/gamemode.cpp +    linux/gamemode.h +  ) + +  target_link_libraries(common PRIVATE gamemode) +endif() +  if(ARCHITECTURE_x86_64)      target_sources(common          PRIVATE diff --git a/src/common/linux/gamemode.cpp b/src/common/linux/gamemode.cpp new file mode 100644 index 000000000..8876d8dc4 --- /dev/null +++ b/src/common/linux/gamemode.cpp @@ -0,0 +1,39 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include <gamemode_client.h> + +#include "common/linux/gamemode.h" +#include "common/settings.h" + +namespace Common::Linux { + +void StartGamemode() { +    if (Settings::values.enable_gamemode) { +        if (gamemode_request_start() < 0) { +            LOG_WARNING(Frontend, "Failed to start gamemode: {}", gamemode_error_string()); +        } else { +            LOG_INFO(Frontend, "Started gamemode"); +        } +    } +} + +void StopGamemode() { +    if (Settings::values.enable_gamemode) { +        if (gamemode_request_end() < 0) { +            LOG_WARNING(Frontend, "Failed to stop gamemode: {}", gamemode_error_string()); +        } else { +            LOG_INFO(Frontend, "Stopped gamemode"); +        } +    } +} + +void SetGamemodeState(bool state) { +    if (state) { +        StartGamemode(); +    } else { +        StopGamemode(); +    } +} + +} // namespace Common::Linux diff --git a/src/common/linux/gamemode.h b/src/common/linux/gamemode.h new file mode 100644 index 000000000..b80646ae2 --- /dev/null +++ b/src/common/linux/gamemode.h @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +namespace Common::Linux { + +/** + * Start the (Feral Interactive) Linux gamemode if it is installed and it is activated + */ +void StartGamemode(); + +/** + * Stop the (Feral Interactive) Linux gamemode if it is installed and it is activated + */ +void StopGamemode(); + +/** + * Start or stop the (Feral Interactive) Linux gamemode if it is installed and it is activated + * @param state The new state the gamemode should have + */ +void SetGamemodeState(bool state); + +} // namespace Common::Linux diff --git a/src/common/settings.cpp b/src/common/settings.cpp index a10131eb2..3e829253f 100644 --- a/src/common/settings.cpp +++ b/src/common/settings.cpp @@ -219,6 +219,8 @@ const char* TranslateCategory(Category category) {          return "Services";      case Category::Paths:          return "Paths"; +    case Category::Linux: +        return "Linux";      case Category::MaxEnum:          break;      } diff --git a/src/common/settings.h b/src/common/settings.h index 788020bde..491f0d3e0 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -178,8 +178,6 @@ struct Values {                                               true,                                               &use_speed_limit}; -    Setting<bool> enable_gamemode{linkage, false, "enable_gamemode", Category::Core}; -      // Cpu      SwitchableSetting<CpuAccuracy, true> cpu_accuracy{linkage,           CpuAccuracy::Auto,                                                        CpuAccuracy::Auto, CpuAccuracy::Paranoid, @@ -429,6 +427,9 @@ struct Values {                                                     true,                                                     true}; +    // Linux +    SwitchableSetting<bool> enable_gamemode{linkage, true, "enable_gamemode", Category::Linux}; +      // Controls      InputSetting<std::array<PlayerInput, 10>> players; diff --git a/src/common/settings_common.h b/src/common/settings_common.h index 7943223eb..344c04439 100644 --- a/src/common/settings_common.h +++ b/src/common/settings_common.h @@ -41,6 +41,7 @@ enum class Category : u32 {      Multiplayer,      Services,      Paths, +    Linux,      MaxEnum,  };  | 
