From ab2921121ec89feb8a926648728beee1551edcf3 Mon Sep 17 00:00:00 2001
From: lat9nq <22451773+lat9nq@users.noreply.github.com>
Date: Sun, 23 Jul 2023 17:08:25 -0400
Subject: [PATCH] shared_widget: Determine default request earlier

Fixes a bug where a restore button could be created for an unmanaged
widget.
---
 src/yuzu/configuration/shared_widget.cpp | 41 +++++++++++++-----------
 1 file changed, 22 insertions(+), 19 deletions(-)

diff --git a/src/yuzu/configuration/shared_widget.cpp b/src/yuzu/configuration/shared_widget.cpp
index 74985129b7..410fa80cd4 100644
--- a/src/yuzu/configuration/shared_widget.cpp
+++ b/src/yuzu/configuration/shared_widget.cpp
@@ -390,25 +390,6 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
 
     QWidget* data_component{nullptr};
 
-    if (!Settings::IsConfiguringGlobal() && managed) {
-        restore_button = CreateRestoreGlobalButton(setting.UsingGlobal(), this);
-
-        touch = [this]() {
-            LOG_DEBUG(Frontend, "Enabling custom setting for \"{}\"", setting.GetLabel());
-            restore_button->setEnabled(true);
-            restore_button->setVisible(true);
-        };
-    }
-
-    if (require_checkbox) {
-        QWidget* lhs =
-            CreateCheckBox(other_setting, label, checkbox_serializer, checkbox_restore_func, touch);
-        layout->addWidget(lhs);
-    } else if (setting.TypeId() != typeid(bool)) {
-        QLabel* qt_label = CreateLabel(label);
-        layout->addWidget(qt_label);
-    }
-
     request = [&]() {
         if (request != RequestType::Default) {
             return request;
@@ -435,6 +416,25 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
         return request;
     }();
 
+    if (!Settings::IsConfiguringGlobal() && managed) {
+        restore_button = CreateRestoreGlobalButton(setting.UsingGlobal(), this);
+
+        touch = [this]() {
+            LOG_DEBUG(Frontend, "Enabling custom setting for \"{}\"", setting.GetLabel());
+            restore_button->setEnabled(true);
+            restore_button->setVisible(true);
+        };
+    }
+
+    if (require_checkbox) {
+        QWidget* lhs =
+            CreateCheckBox(other_setting, label, checkbox_serializer, checkbox_restore_func, touch);
+        layout->addWidget(lhs);
+    } else if (setting.TypeId() != typeid(bool)) {
+        QLabel* qt_label = CreateLabel(label);
+        layout->addWidget(qt_label);
+    }
+
     if (setting.TypeId() == typeid(bool)) {
         data_component = CreateCheckBox(&setting, label, serializer, restore_func, touch);
     } else if (setting.IsEnum()) {
@@ -505,6 +505,9 @@ void Widget::SetupComponent(const QString& label, std::function<void()>& load_fu
 
         QObject::connect(restore_button, &QAbstractButton::clicked,
                          [this, restore_func, checkbox_restore_func](bool) {
+                             LOG_DEBUG(Frontend, "Restore global state for \"{}\"",
+                                       setting.GetLabel());
+
                              restore_button->setEnabled(false);
                              restore_button->setVisible(false);
 
-- 
GitLab