GraphicPacksWindow: Disable update button when a game is running (#1137)

This commit is contained in:
goeiecool9999 2024-03-26 13:09:24 +01:00 committed by GitHub
parent 111e383d1b
commit 4f3d4624f5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 30 additions and 11 deletions

View File

@ -110,14 +110,6 @@ void deleteDownloadedGraphicPacks()
void DownloadGraphicPacksWindow::UpdateThread()
{
if (CafeSystem::IsTitleRunning())
{
wxMessageBox(_("Graphic packs cannot be updated while a game is running."), _("Graphic packs"), 5, this->GetParent());
// cancel update
m_threadState = ThreadFinished;
return;
}
// get github url
std::string githubAPIUrl;
curlDownloadFileState_t tempDownloadState;
@ -326,8 +318,6 @@ DownloadGraphicPacksWindow::DownloadGraphicPacksWindow(wxWindow* parent)
m_downloadState = std::make_unique<curlDownloadFileState_t>();
m_thread = std::thread(&DownloadGraphicPacksWindow::UpdateThread, this);
}
DownloadGraphicPacksWindow::~DownloadGraphicPacksWindow()
@ -344,6 +334,12 @@ const std::string& DownloadGraphicPacksWindow::GetException() const
int DownloadGraphicPacksWindow::ShowModal()
{
if(CafeSystem::IsTitleRunning())
{
wxMessageBox(_("Graphic packs cannot be updated while a game is running."), _("Graphic packs"), 5, this->GetParent());
return wxID_CANCEL;
}
m_thread = std::thread(&DownloadGraphicPacksWindow::UpdateThread, this);
wxDialog::ShowModal();
return m_threadState == ThreadCanceled ? wxID_CANCEL : wxID_OK;
}

View File

@ -319,6 +319,7 @@ GraphicPacksWindow2::GraphicPacksWindow2(wxWindow* parent, uint64_t title_id_fil
SetSizer(main_sizer);
UpdateTitleRunning(CafeSystem::IsTitleRunning());
FillGraphicPackList();
}
@ -676,6 +677,15 @@ void GraphicPacksWindow2::OnInstalledGamesChanged(wxCommandEvent& event)
event.Skip();
}
void GraphicPacksWindow2::UpdateTitleRunning(bool running)
{
m_update_graphicPacks->Enable(!running);
if(running)
m_update_graphicPacks->SetToolTip(_("Graphic packs cannot be updated while a game is running."));
else
m_update_graphicPacks->SetToolTip(nullptr);
}
void GraphicPacksWindow2::ReloadPack(const GraphicPackPtr& graphic_pack) const
{
if (graphic_pack->HasShaders() || graphic_pack->HasPatches() || graphic_pack->HasCustomVSyncFrequency())

View File

@ -21,6 +21,7 @@ public:
~GraphicPacksWindow2();
static void RefreshGraphicPacks();
void UpdateTitleRunning(bool running);
private:
std::string m_filter;

View File

@ -625,6 +625,7 @@ bool MainWindow::FileLoad(const fs::path launchPath, wxLaunchGameEvent::INITIATE
CreateCanvas();
CafeSystem::LaunchForegroundTitle();
RecreateMenu();
UpdateChildWindowTitleRunningState();
return true;
}
@ -683,6 +684,7 @@ void MainWindow::OnFileMenu(wxCommandEvent& event)
RecreateMenu();
CreateGameListAndStatusBar();
DoLayout();
UpdateChildWindowTitleRunningState();
}
}
@ -2320,6 +2322,14 @@ void MainWindow::RecreateMenu()
SetMenuVisible(false);
}
void MainWindow::UpdateChildWindowTitleRunningState()
{
const bool running = CafeSystem::IsTitleRunning();
if(m_graphic_pack_window)
m_graphic_pack_window->UpdateTitleRunning(running);
}
void MainWindow::RestoreSettingsAfterGameExited()
{
RecreateMenu();

View File

@ -21,6 +21,7 @@ class DebuggerWindow2;
struct GameEntry;
class DiscordPresence;
class TitleManager;
class GraphicPacksWindow2;
class wxLaunchGameEvent;
wxDECLARE_EVENT(wxEVT_LAUNCH_GAME, wxLaunchGameEvent);
@ -146,6 +147,7 @@ public:
private:
void RecreateMenu();
void UpdateChildWindowTitleRunningState();
static wxString GetInitialWindowTitle();
void ShowGettingStartedDialog();
@ -163,7 +165,7 @@ private:
MemorySearcherTool* m_toolWindow = nullptr;
TitleManager* m_title_manager = nullptr;
PadViewFrame* m_padView = nullptr;
wxWindow* m_graphic_pack_window = nullptr;
GraphicPacksWindow2* m_graphic_pack_window = nullptr;
wxTimer* m_timer;
wxPoint m_mouse_position{};