diff --git a/src/gui/dialog.cpp b/src/gui/dialog.cpp index 260c7bf0bb7..b10f29918e5 100644 --- a/src/gui/dialog.cpp +++ b/src/gui/dialog.cpp @@ -48,6 +48,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& callback, bool focus) { diff --git a/src/gui/dialog.hpp b/src/gui/dialog.hpp index bb379c137a0..86c499a2f6f 100644 --- a/src/gui/dialog.hpp +++ b/src/gui/dialog.hpp @@ -47,6 +47,7 @@ class Dialog virtual ~Dialog(); void set_text(const std::string& text); + void clear_buttons(); void add_button(const std::string& text, const std::function& callback = {}, bool focus = false); diff --git a/src/supertux/menu/addon_menu.cpp b/src/supertux/menu/addon_menu.cpp index 76f64f8860a..b9ee6c380a8 100644 --- a/src/supertux/menu/addon_menu.cpp +++ b/src/supertux/menu/addon_menu.cpp @@ -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 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(); }); diff --git a/src/supertux/menu/download_dialog.cpp b/src/supertux/menu/download_dialog.cpp index 8ba7fc288e7..c8d1cfdf506 100644 --- a/src/supertux/menu/download_dialog.cpp +++ b/src/supertux/menu/download_dialog.cpp @@ -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 */ diff --git a/src/supertux/menu/download_dialog.hpp b/src/supertux/menu/download_dialog.hpp index 1853ae930ec..45b5b5fb5d9 100644 --- a/src/supertux/menu/download_dialog.hpp +++ b/src/supertux/menu/download_dialog.hpp @@ -38,6 +38,7 @@ class DownloadDialog : public Dialog private: void on_abort(); + void on_download_complete(); void update_text();