Explorar el Código

SystemMenu: Fix bad behavior in shutdown dialog

The selected option was stored in a captured stack variable which was
long gone by the time we looked at it, so this dialog didn't really
behave the way you'd expect. Put it in a member instead. :^)
Andreas Kling hace 5 años
padre
commit
b1d35248e4

+ 5 - 6
Applications/SystemMenu/PowerDialog.cpp

@@ -82,20 +82,19 @@ PowerDialog::PowerDialog()
     header->set_size_policy(GUI::SizePolicy::Fill, GUI::SizePolicy::Fixed);
     header->set_font(Gfx::Font::default_bold_font());
 
-    int selected = -1;
     for (size_t i = 0; i < options.size(); i++) {
         auto action = options[i];
         auto radio = main->add<GUI::RadioButton>();
         radio->set_enabled(action.enabled);
         radio->set_text(action.title);
 
-        radio->on_checked = [&selected, i](auto) {
-            selected = i;
+        radio->on_checked = [this, i](auto) {
+            m_selected_option = i;
         };
 
         if (action.default_action) {
             radio->set_checked(true);
-            selected = i;
+            m_selected_option = i;
         }
     }
 
@@ -104,8 +103,8 @@ PowerDialog::PowerDialog()
     button_box->layout()->set_spacing(8);
 
     auto ok_button = button_box->add<GUI::Button>();
-    ok_button->on_click = [this, &selected](auto&) {
-        done(selected);
+    ok_button->on_click = [this](auto&) {
+        done(m_selected_option);
     };
     ok_button->set_text("OK");
 

+ 2 - 0
Applications/SystemMenu/PowerDialog.h

@@ -36,4 +36,6 @@ public:
 private:
     PowerDialog();
     ~PowerDialog();
+
+    int m_selected_option { -1 };
 };