diff options
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 17 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 5 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui_ed.cc | 5 | ||||
-rw-r--r-- | gtk2_ardour/engine_dialog.cc | 52 | ||||
-rw-r--r-- | gtk2_ardour/engine_dialog.h | 3 | ||||
-rw-r--r-- | gtk2_ardour/startup.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/startup.h | 2 |
7 files changed, 46 insertions, 40 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 9eae8b4268..b7d6459ae2 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -214,6 +214,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir) } ui_config = new UIConfiguration(); + _audio_midi_setup = new EngineControl; editor = 0; mixer = 0; @@ -4145,3 +4146,19 @@ ARDOUR_UI::reset_route_peak_display (Route* route) reset_peak_display (); } } + +EngineControl* +ARDOUR_UI::audio_midi_setup_widget () +{ + /* remove widget from any existing parent, since it is about + to be packed somewhere else. + */ + + Gtk::Container* parent = _audio_midi_setup->get_parent (); + + if (parent) { + parent->remove (*_audio_midi_setup); + } + + return _audio_midi_setup; +} diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index f8b47bd3e8..6be0d39848 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -90,6 +90,7 @@ class BigClockWindow; class BundleManager; class ButtonJoiner; class ConnectionEditor; +class EngineControl; class KeyEditor; class LocationUIWindow; class MainClock; @@ -288,6 +289,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr const std::string& announce_string() const { return _announce_string; } + EngineControl* audio_midi_setup_widget(); + protected: friend class PublicEditor; @@ -748,6 +751,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI, public ARDOUR::SessionHandlePtr std::string _announce_string; void check_announcements (); + + EngineControl* _audio_midi_setup; }; #endif /* __ardour_gui_h__ */ diff --git a/gtk2_ardour/ardour_ui_ed.cc b/gtk2_ardour/ardour_ui_ed.cc index c30627fdec..002b7dd3ed 100644 --- a/gtk2_ardour/ardour_ui_ed.cc +++ b/gtk2_ardour/ardour_ui_ed.cc @@ -647,11 +647,10 @@ ARDOUR_UI::save_ardour_state () window_node->add_child_nocopy (*tearoff_node); Config->add_extra_xml (*window_node); + Config->add_extra_xml (_audio_midi_setup->get_state()); - if (_startup && _startup->engine_control() && _startup->engine_control()->was_used()) { - Config->add_extra_xml (_startup->engine_control()->get_state()); - } Config->save_state(); + if (ui_config->dirty()) { ui_config->save_state (); } diff --git a/gtk2_ardour/engine_dialog.cc b/gtk2_ardour/engine_dialog.cc index c50198a960..7a543306e6 100644 --- a/gtk2_ardour/engine_dialog.cc +++ b/gtk2_ardour/engine_dialog.cc @@ -68,7 +68,6 @@ EngineControl::EngineControl () #else , basic_packer (9, 2) #endif - , _used (false) { using namespace Notebook_Helpers; Label* label; @@ -471,31 +470,28 @@ EngineControl::get_state () XMLNode* root = new XMLNode ("AudioMIDISetup"); std::string path; - if (_used) { - - if (!states.empty()) { - XMLNode* state_nodes = new XMLNode ("EngineStates"); + if (!states.empty()) { + XMLNode* state_nodes = new XMLNode ("EngineStates"); + + for (StateList::const_iterator i = states.begin(); i != states.end(); ++i) { - for (StateList::const_iterator i = states.begin(); i != states.end(); ++i) { - - XMLNode* node = new XMLNode ("State"); - - node->add_property ("backend", (*i).backend); - node->add_property ("driver", (*i).driver); - node->add_property ("device", (*i).device); - node->add_property ("sample-rate", (*i).sample_rate); - node->add_property ("buffer-size", (*i).buffer_size); - node->add_property ("input-latency", (*i).input_latency); - node->add_property ("output-latency", (*i).output_latency); - node->add_property ("input-channels", (*i).input_channels); - node->add_property ("output-channels", (*i).output_channels); - node->add_property ("active", (*i).active ? "yes" : "no"); - - state_nodes->add_child_nocopy (*node); - } - - root->add_child_nocopy (*state_nodes); + XMLNode* node = new XMLNode ("State"); + + node->add_property ("backend", (*i).backend); + node->add_property ("driver", (*i).driver); + node->add_property ("device", (*i).device); + node->add_property ("sample-rate", (*i).sample_rate); + node->add_property ("buffer-size", (*i).buffer_size); + node->add_property ("input-latency", (*i).input_latency); + node->add_property ("output-latency", (*i).output_latency); + node->add_property ("input-channels", (*i).input_channels); + node->add_property ("output-channels", (*i).output_channels); + node->add_property ("active", (*i).active ? "yes" : "no"); + + state_nodes->add_child_nocopy (*node); } + + root->add_child_nocopy (*state_nodes); } return *root; @@ -518,6 +514,7 @@ EngineControl::set_state (const XMLNode& root) states.clear (); + for (citer = clist.begin(); citer != clist.end(); ++citer) { child = *citer; @@ -653,13 +650,6 @@ EngineControl::setup_engine (bool start) return -1; } - /* we've used this dialog to configure the engine, which means - * that our state becomes relevant for saving (and thus - * implicitly, restoring. - */ - - _used = true; - /* get a pointer to the current state object, creating one if * necessary */ diff --git a/gtk2_ardour/engine_dialog.h b/gtk2_ardour/engine_dialog.h index 3ee7a388bc..7c9c652f57 100644 --- a/gtk2_ardour/engine_dialog.h +++ b/gtk2_ardour/engine_dialog.h @@ -41,7 +41,6 @@ class EngineControl : public Gtk::VBox { static bool need_setup (); int setup_engine (bool start); - bool was_used() const { return _used; } XMLNode& get_state (); void set_state (const XMLNode&); @@ -96,8 +95,6 @@ class EngineControl : public Gtk::VBox { sigc::connection sr_connection; sigc::connection bs_connection; - bool _used; - static bool engine_running (); void driver_changed (); diff --git a/gtk2_ardour/startup.cc b/gtk2_ardour/startup.cc index 2e6fe49e98..d776e3c36f 100644 --- a/gtk2_ardour/startup.cc +++ b/gtk2_ardour/startup.cc @@ -314,7 +314,7 @@ ArdourStartup::session_folder () void ArdourStartup::setup_audio_page () { - engine_dialog = manage (new EngineControl); + engine_dialog = ARDOUR_UI::instance()->audio_midi_setup_widget (); engine_dialog->set_border_width (12); diff --git a/gtk2_ardour/startup.h b/gtk2_ardour/startup.h index 4af6ffbc2a..5a95994c4e 100644 --- a/gtk2_ardour/startup.h +++ b/gtk2_ardour/startup.h @@ -56,8 +56,6 @@ class ArdourStartup : public Gtk::Assistant { bool use_session_template(); std::string session_template_name(); - EngineControl* engine_control() { return engine_dialog; } - // advanced session options bool create_master_bus() const; |