From b0ca6354147c61fcb75345549b4eaa65b57d9dbe Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Tue, 18 Aug 2020 01:07:12 -0700 Subject: [PATCH] Windows: Show instance counter only with peers. --- Core/Instance.cpp | 8 ++++++++ Core/Instance.h | 1 + Windows/MainWindow.cpp | 12 +++++++++++- Windows/WindowsHost.cpp | 10 +++++++--- Windows/WindowsHost.h | 2 ++ 5 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Core/Instance.cpp b/Core/Instance.cpp index 58673a6483..8084c2ff25 100644 --- a/Core/Instance.cpp +++ b/Core/Instance.cpp @@ -105,6 +105,14 @@ static bool UpdateInstanceCounter(void (*callback)(volatile InstanceInfo *)) { #endif } +int GetInstancePeerCount() { + static int c = 0; + UpdateInstanceCounter([](volatile InstanceInfo *buf) { + c = buf->total; + }); + return c; +} + // Get current number of instance of PPSSPP running. // Must be called only once during init. void InitInstanceCounter() { diff --git a/Core/Instance.h b/Core/Instance.h index 5fdfd8106c..12f6518f10 100644 --- a/Core/Instance.h +++ b/Core/Instance.h @@ -25,6 +25,7 @@ extern uint8_t PPSSPP_ID; void InitInstanceCounter(); void ShutdownInstanceCounter(); +int GetInstancePeerCount(); inline bool IsFirstInstance() { return PPSSPP_ID == 1; diff --git a/Windows/MainWindow.cpp b/Windows/MainWindow.cpp index 59f6820aa5..a6ba627622 100644 --- a/Windows/MainWindow.cpp +++ b/Windows/MainWindow.cpp @@ -46,6 +46,7 @@ #include "Core/Config.h" #include "Core/ConfigValues.h" #include "Core/Debugger/SymbolMap.h" +#include "Core/Instance.h" #include "Core/MIPS/JitCommon/JitCommon.h" #include "Core/MIPS/JitCommon/JitBlockCache.h" #include "Windows/InputBox.h" @@ -466,7 +467,11 @@ namespace MainWindow void UpdateWindowTitle() { // Seems to be fine to call now since we use a UNICODE build... - SetWindowText(hwndMain, windowTitle.c_str()); + std::wstring title = windowTitle; + if (PPSSPP_ID >= 1 && GetInstancePeerCount() > 1) { + title.append(ConvertUTF8ToWString(StringFromFormat(" (instance: %d)", (int)PPSSPP_ID))); + } + SetWindowText(hwndMain, title.c_str()); } void SetWindowTitle(const wchar_t *title) { @@ -708,6 +713,7 @@ namespace MainWindow case WM_ACTIVATE: { + UpdateWindowTitle(); bool pause = true; if (wParam == WA_ACTIVE || wParam == WA_CLICKACTIVE) { WindowsRawInput::GainFocus(); @@ -741,6 +747,10 @@ namespace MainWindow } break; + case WM_SETFOCUS: + UpdateWindowTitle(); + break; + case WM_ERASEBKGND: // This window is always covered by DisplayWindow. No reason to erase. return 1; diff --git a/Windows/WindowsHost.cpp b/Windows/WindowsHost.cpp index f0735eb202..e197877ce7 100644 --- a/Windows/WindowsHost.cpp +++ b/Windows/WindowsHost.cpp @@ -170,9 +170,7 @@ void WindowsHost::SetWindowTitle(const char *message) { #ifdef _DEBUG winTitle.append(L" (debug)"); #endif - if (PPSSPP_ID >= 1) { - winTitle.append(ConvertUTF8ToWString(StringFromFormat(" (instance: %d)", (int)PPSSPP_ID))); - } + lastTitle_ = winTitle; MainWindow::SetWindowTitle(winTitle.c_str()); PostMessage(mainWindow_, MainWindow::WM_USER_WINDOW_TITLE_CHANGED, 0, 0); @@ -194,6 +192,12 @@ void WindowsHost::ShutdownSound() { void WindowsHost::UpdateUI() { PostMessage(mainWindow_, MainWindow::WM_USER_UPDATE_UI, 0, 0); + + int peers = GetInstancePeerCount(); + if (PPSSPP_ID >= 1 && peers != lastNumInstances_) { + lastNumInstances_ = peers; + PostMessage(mainWindow_, MainWindow::WM_USER_WINDOW_TITLE_CHANGED, 0, 0); + } } void WindowsHost::UpdateMemView() { diff --git a/Windows/WindowsHost.h b/Windows/WindowsHost.h index 3aadb76dc8..7c96fe6631 100644 --- a/Windows/WindowsHost.h +++ b/Windows/WindowsHost.h @@ -73,6 +73,8 @@ private: HWND mainWindow_; GraphicsContext *gfx_ = nullptr; size_t numDinputDevices_ = 0; + std::wstring lastTitle_; + int lastNumInstances_ = 0; std::list> input; };