Add GameMode support for Linux build (#796)

This commit is contained in:
Nicholas F 2023-05-11 01:19:44 -04:00 committed by GitHub
parent b74ae21953
commit 1bcdb35e42
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 467 additions and 1 deletions

View file

@ -53,6 +53,7 @@ void CemuConfig::Load(XMLConfigParser& parser)
language = parser.get<sint32>("language", wxLANGUAGE_DEFAULT);
use_discord_presence = parser.get("use_discord_presence", true);
fullscreen_menubar = parser.get("fullscreen_menubar", false);
feral_gamemode = parser.get("feral_gamemode", false);
check_update = parser.get("check_update", check_update);
save_screenshot = parser.get("save_screenshot", save_screenshot);
did_show_vulkan_warning = parser.get("vk_warning", did_show_vulkan_warning);
@ -357,6 +358,7 @@ void CemuConfig::Save(XMLConfigParser& parser)
config.set<sint32>("language", language);
config.set<bool>("use_discord_presence", use_discord_presence);
config.set<bool>("fullscreen_menubar", fullscreen_menubar);
config.set<bool>("feral_gamemode", feral_gamemode);
config.set<bool>("check_update", check_update);
config.set<bool>("save_screenshot", save_screenshot);
config.set<bool>("vk_warning", did_show_vulkan_warning);

View file

@ -366,6 +366,7 @@ struct CemuConfig
ConfigValue<std::string> mlc_path {};
ConfigValue<bool> fullscreen_menubar{ false };
ConfigValue<bool> fullscreen{ false };
ConfigValue<bool> feral_gamemode{false};
ConfigValue<std::string> proxy_server{};
// temporary workaround because feature crashes on macOS

View file

@ -161,6 +161,11 @@ if(ENABLE_CUBEB)
target_link_libraries(CemuGui PRIVATE cubeb::cubeb)
endif()
if(UNIX AND NOT APPLE)
if(ENABLE_FERAL_GAMEMODE)
target_link_libraries(CemuGui PRIVATE gamemode)
endif()
endif()
if (ENABLE_WXWIDGETS)
# PUBLIC because wx/app.h is included in CemuApp.h
target_link_libraries(CemuGui PUBLIC wx::base wx::core wx::gl wx::propgrid wx::xrc)

View file

@ -179,6 +179,13 @@ wxPanel* GeneralSettings2::AddGeneralPage(wxNotebook* notebook)
m_disable_screensaver->SetToolTip(_("Prevents the system from activating the screen saver or going to sleep while running a game."));
second_row->Add(m_disable_screensaver, 0, botflag, 5);
// Enable/disable feral interactive gamemode
#if BOOST_OS_LINUX && defined(ENABLE_FERAL_GAMEMODE)
m_feral_gamemode = new wxCheckBox(box, wxID_ANY, _("Enable Feral GameMode"));
m_feral_gamemode->SetToolTip(_("Use FeralInteractive GameMode if installed."));
second_row->Add(m_feral_gamemode, 0, botflag, 5);
#endif
// temporary workaround because feature crashes on macOS
#if BOOST_OS_MACOS
m_disable_screensaver->Enable(false);
@ -868,7 +875,7 @@ void GeneralSettings2::StoreConfig()
config.fullscreen_menubar = m_fullscreen_menubar->IsChecked();
config.check_update = m_auto_update->IsChecked();
config.save_screenshot = m_save_screenshot->IsChecked();
config.feral_gamemode = m_feral_gamemode->IsChecked();
const bool use_ps = m_permanent_storage->IsChecked();
if(use_ps)
{
@ -1508,6 +1515,8 @@ void GeneralSettings2::ApplyConfig()
m_permanent_storage->SetValue(config.permanent_storage);
m_disable_screensaver->SetValue(config.disable_screensaver);
m_feral_gamemode->SetValue(config.feral_gamemode);
// temporary workaround because feature crashes on macOS
#if BOOST_OS_MACOS
m_disable_screensaver->SetValue(false);

View file

@ -43,6 +43,7 @@ private:
wxCheckBox* m_auto_update, *m_save_screenshot;
wxCheckBox* m_permanent_storage;
wxCheckBox* m_disable_screensaver;
wxCheckBox* m_feral_gamemode;
wxListBox* m_game_paths;
wxTextCtrl* m_mlc_path;

View file

@ -61,6 +61,11 @@
#include "gui/helpers/wxWayland.h"
#endif
//GameMode support
#if BOOST_OS_LINUX && defined(ENABLE_FERAL_GAMEMODE)
#include "gamemode_client.h"
#endif
#include "Cafe/TitleList/TitleInfo.h"
#include "Cafe/TitleList/TitleList.h"
#include "wxHelper.h"
@ -581,6 +586,23 @@ bool MainWindow::FileLoad(std::wstring fileName, wxLaunchGameEvent::INITIATED_BY
if (ActiveSettings::FullscreenEnabled())
SetFullScreen(true);
//GameMode support
#if BOOST_OS_LINUX && defined(ENABLE_FERAL_GAMEMODE)
if(GetConfig().feral_gamemode)
{
// attempt to start gamemode
if(gamemode_request_start() < 0)
{
// GameMode failed to start
cemuLog_log(LogType::Force, "Could not start GameMode");
}
else
{
cemuLog_log(LogType::Force, "GameMode has been started.");
}
}
#endif
CreateCanvas();
CafeSystem::LaunchForegroundTitle();
RecreateMenu();