Properly revert FormatSpec changes on "cancel"
[ardour.git] / gtk2_ardour / engine_dialog.cc
index 9475d39ec29efcbfcb4b972899339c794b13ccd4..69dc179798b71c515494640b1353cdf4d8609365 100644 (file)
@@ -1032,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()));
        }
 
@@ -1363,8 +1364,15 @@ EngineControl::set_samplerate_popdown_strings ()
        if (!s.empty()) {
                if (ARDOUR::AudioEngine::instance()->running()) {
                        sample_rate_combo.set_active_text (rate_as_string (backend->sample_rate()));
-               }
-               else if (desired.empty ()) {
+               } else if (ARDOUR_UI::instance()->session_loaded) {
+                       float active_sr = ARDOUR_UI::instance()->the_session()->nominal_sample_rate ();
+
+                       if (std::find (sr.begin (), sr.end (), active_sr) == sr.end ()) {
+                               active_sr = sr.front ();
+                       }
+
+                       sample_rate_combo.set_active_text (rate_as_string (active_sr));
+               } else if (desired.empty ()) {
                        float new_active_sr = backend->default_sample_rate ();
 
                        if (std::find (sr.begin (), sr.end (), new_active_sr) == sr.end ()) {
@@ -1375,7 +1383,6 @@ EngineControl::set_samplerate_popdown_strings ()
                } else {
                        sample_rate_combo.set_active_text (desired);
                }
-
        }
        update_sensitivity ();
 }
@@ -1873,7 +1880,7 @@ EngineControl::maybe_display_saved_state ()
                DEBUG_ECONTROL ("Restoring saved state");
                PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
 
-               if (!_desired_sample_rate) {
+               if (0 == _desired_sample_rate && sample_rate_combo.get_sensitive ()) {
                        sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
                }
                set_active_text_if_present (buffer_size_combo, bufsize_as_string (state->buffer_size));
@@ -2198,7 +2205,7 @@ EngineControl::set_current_state (const State& state)
        device_combo.set_active_text (state->device);
        input_device_combo.set_active_text (state->input_device);
        output_device_combo.set_active_text (state->output_device);
-       if (!_desired_sample_rate) {
+       if (0 == _desired_sample_rate && sample_rate_combo.get_sensitive ()) {
                sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
        }
        set_active_text_if_present (buffer_size_combo, bufsize_as_string (state->buffer_size));
@@ -2832,7 +2839,7 @@ EngineControl::check_audio_latency_measurement ()
        }
 
        char buf[256];
-       ARDOUR::framecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
+       ARDOUR::samplecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
 
        if (sample_rate == 0) {
                lm_results.set_markup (string_compose (results_markup, _("Disconnected from audio engine")));
@@ -2840,12 +2847,12 @@ EngineControl::check_audio_latency_measurement ()
                return false;
        }
 
-       int frames_total = mtdm->del();
-       int extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
+       int samples_total = mtdm->del();
+       int extra = samples_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
 
        snprintf (buf, sizeof (buf), "%s%d samples (%.3lf ms)\n%s%d samples (%.3lf ms)",
                        _("Detected roundtrip latency: "),
-                       frames_total, frames_total * 1000.0f/sample_rate,
+                       samples_total, samples_total * 1000.0f/sample_rate,
                        _("Systemic latency: "),
                        extra, extra * 1000.0f/sample_rate);
 
@@ -2886,7 +2893,7 @@ EngineControl::check_midi_latency_measurement ()
        }
 
        char buf[256];
-       ARDOUR::framecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
+       ARDOUR::samplecnt_t const sample_rate = ARDOUR::AudioEngine::instance()->sample_rate();
 
        if (sample_rate == 0) {
                lm_results.set_markup (string_compose (results_markup, _("Disconnected from audio engine")));
@@ -2894,11 +2901,11 @@ EngineControl::check_midi_latency_measurement ()
                return false;
        }
 
-       ARDOUR::framecnt_t frames_total = mididm->latency();
-       ARDOUR::framecnt_t extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
+       ARDOUR::samplecnt_t samples_total = mididm->latency();
+       ARDOUR::samplecnt_t extra = samples_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
        snprintf (buf, sizeof (buf), "%s%" PRId64" samples (%.1lf ms) dev: %.2f[spl]\n%s%" PRId64" samples (%.1lf ms)",
                        _("Detected roundtrip latency: "),
-                       frames_total, frames_total * 1000.0f / sample_rate, mididm->deviation (),
+                       samples_total, samples_total * 1000.0f / sample_rate, mididm->deviation (),
                        _("Systemic latency: "),
                        extra, extra * 1000.0f / sample_rate);
 
@@ -2999,9 +3006,9 @@ EngineControl::use_latency_button_clicked ()
                if (!mididm) {
                        return;
                }
-               ARDOUR::framecnt_t frames_total = mididm->latency();
-               ARDOUR::framecnt_t extra = frames_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
-               uint32_t one_way = max ((ARDOUR::framecnt_t) 0, extra / 2);
+               ARDOUR::samplecnt_t samples_total = mididm->latency();
+               ARDOUR::samplecnt_t extra = samples_total - ARDOUR::AudioEngine::instance()->latency_signal_delay();
+               uint32_t one_way = max ((ARDOUR::samplecnt_t) 0, extra / 2);
                _measure_midi->input_latency = one_way;
                _measure_midi->output_latency = one_way;
                if (backend->can_change_systemic_latency_when_running ()) {