From 08970e7ba0b45ae30922c906c59b0f109864b19b Mon Sep 17 00:00:00 2001
From: luc-git <102831178+luc-git@users.noreply.github.com>
Date: Tue, 20 Jun 2023 14:27:36 +0200
Subject: [PATCH] update graphics api button indicator (#6625)

* update graphics api button indicator

This tiny pull request
* update the graphics button indicator when launching or closing a game (graphics button doesn't update with per game configuration)

* Disable graphics button indicator click while in game

* fix crash

* It fixed crash when opening configure dialog in game if the graphics api for the game is different of the global graphics api
---
 src/citra_qt/configuration/configuration_shared.h |  2 +-
 src/citra_qt/main.cpp                             | 12 +++++-------
 2 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/citra_qt/configuration/configuration_shared.h b/src/citra_qt/configuration/configuration_shared.h
index 61f303013..b611611cc 100644
--- a/src/citra_qt/configuration/configuration_shared.h
+++ b/src/citra_qt/configuration/configuration_shared.h
@@ -83,7 +83,7 @@ void SetPerGameSetting(QComboBox* combobox,
 /// account per-game status
 template <typename Type, bool ranged>
 Type GetComboboxSetting(int index, const Settings::SwitchableSetting<Type, ranged>* setting) {
-    if (Settings::IsConfiguringGlobal() && setting->UsingGlobal()) {
+    if (Settings::IsConfiguringGlobal() || setting->UsingGlobal()) {
         return static_cast<Type>(index);
     } else if (!Settings::IsConfiguringGlobal()) {
         if (index == 0) {
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index ea019d825..12cf28c24 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -371,13 +371,7 @@ void GMainWindow::InitializeWidgets() {
     graphics_api_button->setFocusPolicy(Qt::NoFocus);
     UpdateAPIIndicator();
 
-    connect(graphics_api_button, &QPushButton::clicked, this, [this] {
-        if (emulation_running) {
-            return;
-        }
-
-        UpdateAPIIndicator(true);
-    });
+    connect(graphics_api_button, &QPushButton::clicked, this, [this] { UpdateAPIIndicator(true); });
 
     statusBar()->insertPermanentWidget(0, graphics_api_button);
 
@@ -1734,6 +1728,7 @@ void GMainWindow::OnStartGame() {
     PreventOSSleep();
 
     emu_thread->SetRunning(true);
+    graphics_api_button->setEnabled(false);
     qRegisterMetaType<Core::System::ResultStatus>("Core::System::ResultStatus");
     qRegisterMetaType<std::string>("std::string");
     connect(emu_thread.get(), &EmuThread::ErrorThrown, this, &GMainWindow::OnCoreError);
@@ -1743,6 +1738,7 @@ void GMainWindow::OnStartGame() {
     discord_rpc->Update();
 
     UpdateSaveStates();
+    UpdateAPIIndicator();
 }
 
 void GMainWindow::OnRestartGame() {
@@ -1773,7 +1769,9 @@ void GMainWindow::OnPauseContinueGame() {
 
 void GMainWindow::OnStopGame() {
     ShutdownGame();
+    graphics_api_button->setEnabled(true);
     Settings::RestoreGlobalState(false);
+    UpdateAPIIndicator();
 }
 
 void GMainWindow::OnLoadComplete() {