Don't hide Audio Setup dialog when clicking 'OK' if engine fails to start
authorTim Mayberry <mojofunk@gmail.com>
Sat, 26 Sep 2015 10:22:46 +0000 (20:22 +1000)
committerTim Mayberry <mojofunk@gmail.com>
Wed, 30 Sep 2015 23:10:19 +0000 (09:10 +1000)
This has to be handled in two places, in ARDOUR_UI::do_audio_midi_setup and in
the dialogs response handler and in as the window can also be triggered via the
window action manager.

gtk2_ardour/ardour_ui.cc
gtk2_ardour/engine_dialog.cc

index ee356fb2a9a22c378c551e49875f26ab1f33690a..2a4a8c530d88cfe872366a201bceebb7e2b14639 100644 (file)
@@ -4828,13 +4828,21 @@ ARDOUR_UI::do_audio_midi_setup (uint32_t desired_sample_rate)
        audio_midi_setup->set_desired_sample_rate (desired_sample_rate);
        audio_midi_setup->set_position (WIN_POS_CENTER);
 
-       switch (audio_midi_setup->run()) {
-       case Gtk::RESPONSE_OK:
-               return 0;
-       case Gtk::RESPONSE_APPLY:
-               return 0;
-       default:
-               return -1;
+       int response;
+
+       while (true) {
+               response = audio_midi_setup->run();
+               switch (response) {
+               case Gtk::RESPONSE_OK:
+                       if (!AudioEngine::instance()->running()) {
+                               continue;
+                       } else {
+                               return 0;
+                       }
+                       return 0;
+               default:
+                       return -1;
+               }
        }
 }
 
index 663702104b88ce1e42e6513ab15e248c2f30a2a8..8799d6aa8ff2f411a68c9936d73b1efd35e70276 100644 (file)
@@ -415,10 +415,12 @@ EngineControl::on_response (int response_id)
 
        switch (response_id) {
                case RESPONSE_OK:
+                       if (push_state_to_backend (true) != 0) {
+                               return;
+                       } else {
+                               hide ();
+                       }
 #ifdef PLATFORM_WINDOWS
-                       // For some reason we don't understand, 'hide()'
-                       // needs to get called first in Windows
-                       hide ();
 
                        // But if there's no session open, this can produce
                        // a long gap when nothing appears to be happening.
@@ -430,13 +432,8 @@ EngineControl::on_response (int response_id)
                                        }
                                }
                        }
-                       push_state_to_backend (true);
-                       break;
-#else
-                       push_state_to_backend (true);
-                       hide ();
-                       break;
 #endif
+                       break;
                case RESPONSE_DELETE_EVENT:
                        {
                                GdkEventButton ev;