diff --git a/src/citra/emu_window/emu_window_sdl2.cpp b/src/citra/emu_window/emu_window_sdl2.cpp index 300f8c791..5752566b9 100644 --- a/src/citra/emu_window/emu_window_sdl2.cpp +++ b/src/citra/emu_window/emu_window_sdl2.cpp @@ -100,8 +100,8 @@ EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 0); - std::string window_title = Common::StringFromFormat("Citra %s| %s-%s ", Common::g_build_name, - Common::g_scm_branch, Common::g_scm_desc); + std::string window_title = Common::StringFromFormat( + "Citra %s| %s-%s ", Common::g_build_fullname, Common::g_scm_branch, Common::g_scm_desc); render_window = SDL_CreateWindow(window_title.c_str(), SDL_WINDOWPOS_UNDEFINED, // x position @@ -134,8 +134,8 @@ EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { OnMinimalClientAreaChangeRequest(GetActiveConfig().min_client_area_size); SDL_PumpEvents(); SDL_GL_SetSwapInterval(Settings::values.use_vsync); - NGLOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_name, Common::g_scm_branch, - Common::g_scm_desc); + NGLOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, + Common::g_scm_branch, Common::g_scm_desc); DoneCurrent(); } diff --git a/src/citra_qt/aboutdialog.cpp b/src/citra_qt/aboutdialog.cpp index d00f41013..65d815427 100644 --- a/src/citra_qt/aboutdialog.cpp +++ b/src/citra_qt/aboutdialog.cpp @@ -13,7 +13,7 @@ AboutDialog::AboutDialog(QWidget* parent) ui->setupUi(this); ui->labelLogo->setPixmap(QIcon::fromTheme("citra").pixmap(200)); ui->labelBuildInfo->setText( - ui->labelBuildInfo->text().arg(Common::g_build_name, Common::g_scm_branch, + ui->labelBuildInfo->text().arg(Common::g_build_fullname, Common::g_scm_branch, Common::g_scm_desc, QString(Common::g_build_date).left(10))); } diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 5bfc0c969..cea372b47 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -137,8 +137,8 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { ConnectWidgetEvents(); SetupUIStrings(); - NGLOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_name, Common::g_scm_branch, - Common::g_scm_desc); + NGLOG_INFO(Frontend, "Citra Version: {} | {}-{}", Common::g_build_fullname, + Common::g_scm_branch, Common::g_scm_desc); show(); @@ -606,6 +606,10 @@ bool GMainWindow::LoadROM(const QString& filename) { Core::System& system{Core::System::GetInstance()}; const Core::System::ResultStatus result{system.Load(render_window, filename.toStdString())}; + std::string title; + system.GetAppLoader().ReadTitle(title); + game_title = QString::fromStdString(title); + SetupUIStrings(); if (result != Core::System::ResultStatus::Success) { switch (result) { @@ -755,6 +759,9 @@ void GMainWindow::ShutdownGame() { if (defer_update_prompt) { ShowUpdatePrompt(); } + + game_title.clear(); + SetupUIStrings(); } void GMainWindow::StoreRecentFile(const QString& filename) { @@ -1407,8 +1414,11 @@ void GMainWindow::OnLanguageChanged(const QString& locale) { } void GMainWindow::SetupUIStrings() { - setWindowTitle( - tr("Citra %1| %2-%3").arg(Common::g_build_name, Common::g_scm_branch, Common::g_scm_desc)); + if (game_title.isEmpty()) { + setWindowTitle(tr("Citra %1").arg(Common::g_build_fullname)); + } else { + setWindowTitle(tr("Citra %1| %2").arg(Common::g_build_fullname, game_title)); + } } void GMainWindow::SyncMenuUISettings() { diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index edb893168..55879330b 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -202,6 +202,8 @@ private: // Whether emulation is currently running in Citra. bool emulation_running = false; std::unique_ptr emu_thread; + // The title of the game currently running + QString game_title; // Debugger panes ProfilerWidget* profilerWidget; diff --git a/src/common/CMakeLists.txt b/src/common/CMakeLists.txt index cc8c35569..98456e671 100644 --- a/src/common/CMakeLists.txt +++ b/src/common/CMakeLists.txt @@ -1,13 +1,16 @@ # Generate cpp with Git revision from template -# Also if this is a CI build, add the build name (ie: Nightly, Bleeding Edge) to the scm_rev file as well +# Also if this is a CI build, add the build name (ie: Nightly, Canary) to the scm_rev file as well set(REPO_NAME "") +set(BUILD_VERSION "0") if ($ENV{CI}) if ($ENV{TRAVIS}) set(BUILD_REPOSITORY $ENV{TRAVIS_REPO_SLUG}) + set(BUILD_TAG $ENV{TRAVIS_TAG}) elseif($ENV{APPVEYOR}) set(BUILD_REPOSITORY $ENV{APPVEYOR_REPO_NAME}) + set(BUILD_TAG $ENV{APPVEYOR_REPO_TAG_NAME}) endif() - # regex capture the string nightly or bleeding-edge into CMAKE_MATCH_1 + # regex capture the string nightly or canary into CMAKE_MATCH_1 string(REGEX MATCH "citra-emu/citra-?(.*)" OUTVAR ${BUILD_REPOSITORY}) if (${CMAKE_MATCH_COUNT} GREATER 0) # capitalize the first letter of each word in the repo name. @@ -16,10 +19,21 @@ if ($ENV{CI}) string(SUBSTRING ${WORD} 0 1 FIRST_LETTER) string(SUBSTRING ${WORD} 1 -1 REMAINDER) string(TOUPPER ${FIRST_LETTER} FIRST_LETTER) - # this leaves a trailing space on the last word, but we actually want that - # because of how it's styled in the title bar. - set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER} ") + set(REPO_NAME "${REPO_NAME}${FIRST_LETTER}${REMAINDER}") endforeach() + if (BUILD_TAG) + string(REGEX MATCH "${CMAKE_MATCH_1}-([0-9]+)" OUTVAR ${BUILD_TAG}) + if (${CMAKE_MATCH_COUNT} GREATER 0) + set(BUILD_VERSION ${CMAKE_MATCH_1}) + endif() + if (BUILD_VERSION) + # This leaves a trailing space on the last word, but we actually want that + # because of how it's styled in the title bar. + set(BUILD_FULLNAME "${REPO_NAME} #${BUILD_VERSION} ") + else() + set(BUILD_FULLNAME "") + endif() + endif() endif() endif() configure_file("${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.cpp.in" "${CMAKE_CURRENT_SOURCE_DIR}/scm_rev.cpp" @ONLY) diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in index 4083095d5..daf99487f 100644 --- a/src/common/scm_rev.cpp.in +++ b/src/common/scm_rev.cpp.in @@ -9,6 +9,8 @@ #define GIT_DESC "@GIT_DESC@" #define BUILD_NAME "@REPO_NAME@" #define BUILD_DATE "@BUILD_DATE@" +#define BUILD_VERSION "@BUILD_VERSION@" +#define BUILD_FULLNAME "@BUILD_FULLNAME@" namespace Common { @@ -17,6 +19,8 @@ const char g_scm_branch[] = GIT_BRANCH; const char g_scm_desc[] = GIT_DESC; const char g_build_name[] = BUILD_NAME; const char g_build_date[] = BUILD_DATE; +const char g_build_fullname[] = BUILD_FULLNAME; +const char g_build_version[] = BUILD_VERSION; } // namespace diff --git a/src/common/scm_rev.h b/src/common/scm_rev.h index db0f4a947..af9a9daed 100644 --- a/src/common/scm_rev.h +++ b/src/common/scm_rev.h @@ -11,5 +11,7 @@ extern const char g_scm_branch[]; extern const char g_scm_desc[]; extern const char g_build_name[]; extern const char g_build_date[]; +extern const char g_build_fullname[]; +extern const char g_build_version[]; } // namespace Common