RouteDialog: Move built-in types into template list experiment
[ardour.git] / gtk2_ardour / engine_dialog.cc
index f96bcf1b8b68cca75d2383cb99c8efaed241ff9f..3939fec8cb3541ace7f54052a5e8e6818f44ab18 100644 (file)
@@ -803,22 +803,10 @@ EngineControl::update_sensitivity ()
        if (get_popdown_string_count (buffer_size_combo) > 0) {
                if (!engine_running) {
                        buffer_size_combo.set_sensitive (valid);
-               } else if (backend->can_change_sample_rate_when_running()) {
+               } else if (backend->can_change_buffer_size_when_running ()) {
                        buffer_size_combo.set_sensitive (valid || !_have_control);
                } else {
-#if 1
-                       /* TODO
-                        * Currently there is no way to manually stop the
-                        * engine in order to re-configure it.
-                        * This needs to remain sensitive for now.
-                        *
-                        * (it's also handy to implicily
-                        * re-start the engine)
-                        */
-                       buffer_size_combo.set_sensitive (true);
-#else
                        buffer_size_combo.set_sensitive (false);
-#endif
                }
        } else {
                buffer_size_combo.set_sensitive (false);
@@ -1044,6 +1032,7 @@ EngineControl::backend_changed ()
 
        if (!_have_control) {
                // set settings from backend that we do have control over
+               set_buffersize_popdown_strings ();
                set_active_text_if_present (buffer_size_combo, bufsize_as_string (backend->buffer_size()));
        }
 
@@ -1443,7 +1432,7 @@ EngineControl::set_buffersize_popdown_strings ()
                s.push_back (bufsize_as_string (*x));
        }
 
-       uint32_t previous_size = 0;
+       uint32_t previous_size = backend->buffer_size ();
        if (!buffer_size_combo.get_active_text().empty()) {
                previous_size = get_buffer_size ();
        }
@@ -1634,6 +1623,12 @@ void
 EngineControl::buffer_size_changed ()
 {
        DEBUG_ECONTROL ("buffer_size_changed");
+       if (ARDOUR::AudioEngine::instance()->running()) {
+               boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+               if (backend && backend->can_change_buffer_size_when_running ()) {
+                       backend->set_buffer_size (get_buffer_size());
+               }
+       }
        show_buffer_duration ();
 }
 
@@ -1869,7 +1864,7 @@ EngineControl::store_state (State state)
 void
 EngineControl::maybe_display_saved_state ()
 {
-       if (!_have_control) {
+       if (!_have_control || ARDOUR::AudioEngine::instance()->running ()) {
                return;
        }