diff options
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 16 | ||||
-rw-r--r-- | gtk2_ardour/engine_dialog.cc | 9 | ||||
-rw-r--r-- | gtk2_ardour/engine_dialog.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/new_session_dialog.cc | 83 | ||||
-rw-r--r-- | gtk2_ardour/new_session_dialog.h | 3 |
5 files changed, 91 insertions, 23 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 2dfec7fe2a..4f57dec905 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -2301,8 +2301,13 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be response = Gtk::RESPONSE_REJECT; goto try_again; } + + /* hide the NSD while we start up the engine */ + + new_session_dialog->hide (); + flush_pending (); } - + if (create_engine ()) { backend_audio_error (!backend_audio_is_running, new_session_dialog); @@ -2346,10 +2351,17 @@ ARDOUR_UI::get_session_parameters (bool backend_audio_is_running, bool should_be switch (new_session_dialog->which_page()) { case NewSessionDialog::OpenPage: - case NewSessionDialog::EnginePage: goto loadit; break; + case NewSessionDialog::EnginePage: + if (new_session_dialog->engine_control.interface_chosen() && !session_path.empty()) { + goto loadit; + } else { + goto try_again; + } + break; + case NewSessionDialog::NewPage: /* nominally the "new" session creator, but could be in use for an old session */ should_be_new = true; diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index 90151fb85d..f643324720 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -884,6 +884,15 @@ EngineControl::driver_changed () hw_meter_button.set_sensitive (false); monitor_button.set_sensitive (false); } + + interface_combo.signal_changed().connect (mem_fun (*this, &EngineControl::emit_interface_chosen)); +} + +void +EngineControl::emit_interface_chosen () +{ + cerr << "interface combo changed\n"; + InterfaceChosen(); } uint32_t diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index c439719d75..6fc075271c 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -29,6 +29,9 @@ class EngineControl : public Gtk::VBox { XMLNode& get_state (); void set_state (const XMLNode&); + sigc::signal<void> InterfaceChosen; + void emit_interface_chosen(); /* grr, need to figure out how to connect signalsl directly */ + private: Gtk::Adjustment periods_adjustment; Gtk::SpinButton periods_spinner; diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc index b094e3a635..7799131737 100644 --- a/gtk2_ardour/new_session_dialog.cc +++ b/gtk2_ardour/new_session_dialog.cc @@ -497,12 +497,20 @@ NewSessionDialog::set_have_engine (bool yn) engine_control.discover_servers (); if (engine_control.interface_chosen()) { m_notebook->append_page (engine_control, _("Audio Setup")); + m_notebook->show_all_children(); + page_set = Pages (page_set | EnginePage); } else { - /* no interface ever selected - make it the first page */ + /* no interface ever selected - make it the first and only page */ m_notebook->prepend_page (engine_control, _("Audio Setup")); + if (page_set & NewPage) { + m_notebook->remove_page (*new_session_table); + } + if (page_set & OpenPage) { + m_notebook->remove_page (*open_session_vbox); + } + m_notebook->show_all_children(); + page_set = Pages (EnginePage); } - m_notebook->show_all_children(); - page_set = Pages (page_set | EnginePage); } } } @@ -776,29 +784,58 @@ NewSessionDialog::which_page () const } } else if (page_set == (NewPage|EnginePage)) { - switch (num) { - case 0: - return NewPage; - default: - return EnginePage; + if (engine_control.interface_chosen()) { + switch (num) { + case 0: + return NewPage; + default: + return EnginePage; + } + } else { + switch (num) { + case 0: + return EnginePage; + default: + return NewPage; + } } } else if (page_set == (NewPage|EnginePage|OpenPage)) { - switch (num) { - case 0: - return NewPage; - case 1: - return OpenPage; - default: - return EnginePage; + if (engine_control.interface_chosen()) { + switch (num) { + case 0: + return NewPage; + case 1: + return OpenPage; + default: + return EnginePage; + } + } else { + switch (num) { + case 0: + return EnginePage; + case 1: + return NewPage; + default: + return OpenPage; + } } } else if (page_set == (OpenPage|EnginePage)) { - switch (num) { - case 0: - return OpenPage; - default: - return EnginePage; + if (engine_control.interface_chosen()) { + switch (num) { + case 0: + return OpenPage; + default: + return EnginePage; + } + } else { + switch (num) { + case 0: + return EnginePage; + default: + return OpenPage; + } } } @@ -852,7 +889,11 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum) case EnginePage: on_new_session_page = false; - m_okbutton->set_label(_("Open")); + if (!engine_control.interface_chosen()) { + m_okbutton->set_label(_("Start Audio Engine")); + } else { + m_okbutton->set_label(_("Open")); + } m_okbutton->set_image (*(manage (new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)))); set_response_sensitive (Gtk::RESPONSE_NONE, false); set_response_sensitive (Gtk::RESPONSE_OK, true); diff --git a/gtk2_ardour/new_session_dialog.h b/gtk2_ardour/new_session_dialog.h index 658b2a8b90..81a0bebfac 100644 --- a/gtk2_ardour/new_session_dialog.h +++ b/gtk2_ardour/new_session_dialog.h @@ -217,6 +217,9 @@ protected: bool have_engine; Glib::ustring engine_page_session_folder; Glib::ustring engine_page_session_name; + + sigc::connection ic_connection; + void engine_interface_chosen(); }; #endif // NEW_SESSION_DIALOG_H |