Wait for an explicit "Close" by the user instead of closing the DownloadDialog automa...
authorIngo Ruhnke <grumbel@gmail.com>
Tue, 26 Aug 2014 20:00:33 +0000 (22:00 +0200)
committerIngo Ruhnke <grumbel@gmail.com>
Tue, 26 Aug 2014 22:57:45 +0000 (00:57 +0200)
Downloads are most of the time rather fast, having the window just pop
up and go away feels a bit irritating.

src/gui/dialog.cpp
src/gui/dialog.hpp
src/supertux/menu/addon_menu.cpp
src/supertux/menu/download_dialog.cpp
src/supertux/menu/download_dialog.hpp

index 260c7bf..b10f299 100644 (file)
@@ -49,6 +49,13 @@ Dialog::set_text(const std::string& text)
 }
 
 void
+Dialog::clear_buttons()
+{
+  m_buttons.clear();
+  m_selected_button = 0;
+}
+
+void
 Dialog::add_button(const std::string& text, const std::function<void ()>& callback, bool focus)
 {
   m_buttons.push_back({text, callback});
index bb379c1..86c499a 100644 (file)
@@ -47,6 +47,7 @@ public:
   virtual ~Dialog();
 
   void set_text(const std::string& text);
+  void clear_buttons();
   void add_button(const std::string& text, const std::function<void ()>& callback = {},
                   bool focus = false);
 
index 76f64f8..b9ee6c3 100644 (file)
@@ -186,7 +186,6 @@ AddonMenu::menu_action(MenuItem* item)
     {
       TransferStatusPtr status = m_addon_manager.request_check_online();
       status->then([this]{
-          MenuManager::instance().set_dialog({});
           refresh();
         });
       std::unique_ptr<DownloadDialog> dialog(new DownloadDialog(status));
@@ -236,7 +235,6 @@ AddonMenu::menu_action(MenuItem* item)
             {
               log_warning << "Enabling addon failed: " << err.what() << std::endl;
             }
-            MenuManager::instance().set_dialog({});
             refresh();
           });
 
index 8ba7fc2..c8d1cfd 100644 (file)
@@ -30,6 +30,10 @@ DownloadDialog::DownloadDialog(TransferStatusPtr status) :
     });
 
   update_text();
+
+  status->then([this]{
+      on_download_complete();
+    });
 }
 
 void
@@ -70,4 +74,13 @@ DownloadDialog::on_abort()
   AddonManager::current()->abort_install();
 }
 
+void
+DownloadDialog::on_download_complete()
+{
+  clear_buttons();
+  add_button(_("Close"), [this]{
+      MenuManager::instance().set_dialog({});
+    });
+}
+
 /* EOF */
index 1853ae9..45b5b5f 100644 (file)
@@ -38,6 +38,7 @@ public:
 
 private:
   void on_abort();
+  void on_download_complete();
 
   void update_text();