summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/ardour_ui.cc16
-rw-r--r--gtk2_ardour/engine_dialog.cc9
-rw-r--r--gtk2_ardour/engine_dialog.h3
-rw-r--r--gtk2_ardour/new_session_dialog.cc83
-rw-r--r--gtk2_ardour/new_session_dialog.h3
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