diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index dea062d9d9..2f4d19c2a6 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -231,6 +231,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir, UIConfi , nsm (0) , _was_dirty (false) , _mixer_on_top (false) + , _initial_verbose_plugin_scan (false) , first_time_engine_run (true) , roll_controllable (new TransportControllable ("transport roll", *this, TransportControllable::Roll)) , stop_controllable (new TransportControllable ("transport stop", *this, TransportControllable::Stop)) @@ -917,10 +918,12 @@ ARDOUR_UI::starting () } else { if (brand_new_user) { + _initial_verbose_plugin_scan = true; ArdourStartup s; s.present (); main().run(); s.hide (); + _initial_verbose_plugin_scan = false; switch (s.response ()) { case Gtk::RESPONSE_OK: break; @@ -4253,7 +4256,7 @@ ARDOUR_UI::plugin_scan_dialog (std::string type, std::string plugin, bool can_ca } const bool cancelled = PluginManager::instance().cancelled(); - if (type != X_("closeme") && !ui_config->get_show_plugin_scan_window()) { + if (type != X_("closeme") && (!ui_config->get_show_plugin_scan_window()) && !_initial_verbose_plugin_scan) { if (cancelled && scan_dlg->is_mapped()) { scan_dlg->hide(); gui_idle_handler(); diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index b6ec8a8799..722a0bf596 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -336,6 +336,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr NSM_Client* nsm; bool _was_dirty; bool _mixer_on_top; + bool _initial_verbose_plugin_scan; bool first_time_engine_run; void goto_editor_window (); diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index d4c8686698..719e94f241 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -37,11 +37,12 @@ #include "ardour/audioengine.h" #include "ardour/filesystem_paths.h" +#include "ardour/filename_extensions.h" +#include "ardour/plugin_manager.h" #include "ardour/recent_sessions.h" #include "ardour/session.h" #include "ardour/session_state_utils.h" #include "ardour/template_utils.h" -#include "ardour/filename_extensions.h" #include "ardour_ui.h" #include "startup.h" @@ -343,13 +344,30 @@ void ArdourStartup::setup_final_page () { string msg = string_compose (_("%1 is ready for use"), PROGRAM_NAME); - - final_page.set_markup (string_compose ("%1", msg)); - final_page.show (); - final_page_index = append_page (final_page); - set_page_complete (final_page, true); - set_page_header_image (final_page, icon_pixbuf); - set_page_type (final_page, ASSISTANT_PAGE_CONFIRM); + + plugin_disco_button.signal_clicked().connect (sigc::mem_fun(*this, &ArdourStartup::discover_plugins)); + plugin_disco_button.set_label (_("Scan for Plugins")); + plugin_disco_button.show (); + + Gtk::Label* final_label = manage (new Label); + final_label->set_markup (string_compose ("%1", msg)); + final_label->show (); + + VBox* vbox = manage (new VBox); + vbox->pack_start (*final_label, true, true); + vbox->pack_start (plugin_disco_button, true, false); + vbox->show (); + + final_page_index = append_page (*vbox); + set_page_complete (*vbox, true); + set_page_header_image (*vbox, icon_pixbuf); + set_page_type (*vbox, ASSISTANT_PAGE_CONFIRM); +} + +void +ArdourStartup::discover_plugins () { + plugin_disco_button.set_sensitive (false); + PluginManager::instance().refresh(); } void diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h index a93a29ef42..74e0aee6b8 100644 --- a/gtk2_ardour/startup.h +++ b/gtk2_ardour/startup.h @@ -63,6 +63,7 @@ class ArdourStartup : public Gtk::Assistant { void on_apply (); void on_cancel (); bool on_delete_event (GdkEventAny*); + void discover_plugins (); static ArdourStartup *the_startup; @@ -101,7 +102,7 @@ class ArdourStartup : public Gtk::Assistant { /* final page */ void setup_final_page (); - Gtk::Label final_page; + Gtk::Button plugin_disco_button; /* always there */