diff --git a/rpcs3/main.cpp b/rpcs3/main.cpp index 467134142e..38cfe9db9b 100644 --- a/rpcs3/main.cpp +++ b/rpcs3/main.cpp @@ -81,7 +81,6 @@ static atomic_t s_headless = false; static atomic_t s_no_gui = false; static atomic_t s_argv0; -atomic_t g_start_games_fullscreen = false; std::string g_pad_profile_override; extern thread_local std::string(*g_tls_log_prefix)(); @@ -935,14 +934,8 @@ int main(int argc, char** argv) } s_no_gui = parser.isSet(arg_no_gui); - g_start_games_fullscreen = parser.isSet(arg_fullscreen); - if (g_start_games_fullscreen && !s_no_gui) - { - report_fatal_error(fmt::format("The option '%s' can only be used in combination with '%s'.", arg_fullscreen, arg_no_gui)); - } - - if (auto gui_app = qobject_cast(app.data())) + if (gui_application* gui_app = qobject_cast(app.data())) { gui_app->setAttribute(Qt::AA_UseHighDpiPixmaps); gui_app->setAttribute(Qt::AA_DisableWindowContextHelpButton); @@ -953,13 +946,23 @@ int main(int argc, char** argv) gui_app->SetWithCliBoot(parser.isSet(arg_installfw) || parser.isSet(arg_installpkg) || !parser.positionalArguments().isEmpty()); gui_app->SetActiveUser(active_user); + if (parser.isSet(arg_fullscreen)) + { + if (!s_no_gui) + { + report_fatal_error(fmt::format("The option '%s' can only be used in combination with '%s'.", arg_fullscreen, arg_no_gui)); + } + + gui_app->SetStartGamesFullscreen(true); + } + if (!gui_app->Init()) { Emu.Quit(true); return 0; } } - else if (auto headless_app = qobject_cast(app.data())) + else if (headless_application* headless_app = qobject_cast(app.data())) { s_headless = true; diff --git a/rpcs3/rpcs3qt/gl_gs_frame.cpp b/rpcs3/rpcs3qt/gl_gs_frame.cpp index e1f48ba6c4..549ab10449 100644 --- a/rpcs3/rpcs3qt/gl_gs_frame.cpp +++ b/rpcs3/rpcs3qt/gl_gs_frame.cpp @@ -5,8 +5,8 @@ #include #include -gl_gs_frame::gl_gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings) - : gs_frame(screen, geometry, appIcon, std::move(gui_settings)) +gl_gs_frame::gl_gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings, bool force_fullscreen) + : gs_frame(screen, geometry, appIcon, std::move(gui_settings), force_fullscreen) { setSurfaceType(QSurface::OpenGLSurface); diff --git a/rpcs3/rpcs3qt/gl_gs_frame.h b/rpcs3/rpcs3qt/gl_gs_frame.h index 50f09f634d..bc6e9ad65e 100644 --- a/rpcs3/rpcs3qt/gl_gs_frame.h +++ b/rpcs3/rpcs3qt/gl_gs_frame.h @@ -18,7 +18,7 @@ private: GLContext *m_primary_context = nullptr; public: - explicit gl_gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings); + explicit gl_gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings, bool force_fullscreen); draw_context_t make_context() override; void set_current(draw_context_t ctx) override; diff --git a/rpcs3/rpcs3qt/gs_frame.cpp b/rpcs3/rpcs3qt/gs_frame.cpp index 5e66f20ff1..95ef424890 100644 --- a/rpcs3/rpcs3qt/gs_frame.cpp +++ b/rpcs3/rpcs3qt/gs_frame.cpp @@ -50,7 +50,6 @@ extern atomic_t g_user_asked_for_recording; extern atomic_t g_user_asked_for_screenshot; extern atomic_t g_user_asked_for_frame_capture; extern atomic_t g_disable_frame_limit; -extern atomic_t g_start_games_fullscreen; extern atomic_t g_recording_mode; atomic_t g_game_window_focused = false; @@ -62,10 +61,11 @@ bool is_input_allowed() constexpr auto qstr = QString::fromStdString; -gs_frame::gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings) +gs_frame::gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings, bool force_fullscreen) : QWindow() , m_initial_geometry(geometry) , m_gui_settings(std::move(gui_settings)) + , m_start_games_fullscreen(force_fullscreen) { m_disable_mouse = m_gui_settings->GetValue(gui::gs_disableMouse).toBool(); m_disable_kb_hotkeys = m_gui_settings->GetValue(gui::gs_disableKbHotkeys).toBool(); @@ -611,7 +611,7 @@ void gs_frame::show() Emu.CallFromMainThread([this]() { QWindow::show(); - if (g_cfg.misc.start_fullscreen || g_start_games_fullscreen) + if (g_cfg.misc.start_fullscreen || m_start_games_fullscreen) { setVisibility(FullScreen); } diff --git a/rpcs3/rpcs3qt/gs_frame.h b/rpcs3/rpcs3qt/gs_frame.h index f96880b2fd..feaaf88f23 100644 --- a/rpcs3/rpcs3qt/gs_frame.h +++ b/rpcs3/rpcs3qt/gs_frame.h @@ -43,11 +43,12 @@ private: bool m_hide_mouse_after_idletime = false; u32 m_hide_mouse_idletime = 2000; // ms bool m_flip_showed_frame = false; + bool m_start_games_fullscreen = false; std::shared_ptr m_video_encoder{}; public: - explicit gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings); + explicit gs_frame(QScreen* screen, const QRect& geometry, const QIcon& appIcon, std::shared_ptr gui_settings, bool force_fullscreen); ~gs_frame(); draw_context_t make_context() override; diff --git a/rpcs3/rpcs3qt/gui_application.cpp b/rpcs3/rpcs3qt/gui_application.cpp index b8318397da..4d1248be91 100644 --- a/rpcs3/rpcs3qt/gui_application.cpp +++ b/rpcs3/rpcs3qt/gui_application.cpp @@ -299,13 +299,13 @@ std::unique_ptr gui_application::get_gs_frame() { case video_renderer::opengl: { - frame = new gl_gs_frame(screen, frame_geometry, app_icon, m_gui_settings); + frame = new gl_gs_frame(screen, frame_geometry, app_icon, m_gui_settings, m_start_games_fullscreen); break; } case video_renderer::null: case video_renderer::vulkan: { - frame = new gs_frame(screen, frame_geometry, app_icon, m_gui_settings); + frame = new gs_frame(screen, frame_geometry, app_icon, m_gui_settings, m_start_games_fullscreen); break; } } diff --git a/rpcs3/rpcs3qt/gui_application.h b/rpcs3/rpcs3qt/gui_application.h index 744f894c36..f5fca9c36e 100644 --- a/rpcs3/rpcs3qt/gui_application.h +++ b/rpcs3/rpcs3qt/gui_application.h @@ -44,6 +44,11 @@ public: m_with_cli_boot = with_cli_boot; } + void SetStartGamesFullscreen(bool start_games_fullscreen = false) + { + m_start_games_fullscreen = start_games_fullscreen; + } + /** Call this method before calling app.exec */ bool Init() override; @@ -82,6 +87,7 @@ private: bool m_show_gui = true; bool m_use_cli_style = false; bool m_with_cli_boot = false; + bool m_start_games_fullscreen = false; private Q_SLOTS: void OnChangeStyleSheetRequest();