+static bool
+idle_notify_engine_stopped ()
+{
+ Glib::RefPtr<Action> act = ActionManager::get_action ("Window", "toggle-audio-midi-setup");
+ Glib::RefPtr<ToggleAction> tact = Glib::RefPtr<ToggleAction>::cast_dynamic(act);
+
+ MessageDialog msg (
+ _("The current operation is not possible because of an error communicating with the audio hardware."),
+ false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE, true);
+
+ msg.add_button (_("Cancel"), Gtk::RESPONSE_CANCEL);
+
+ if (tact && !tact->get_active()) {
+ msg.add_button (_("Configure Hardware"), Gtk::RESPONSE_OK);
+ }
+
+ if (msg.run () == Gtk::RESPONSE_OK) {
+ tact->set_active ();
+ }
+ return false; /* do not call again */
+}
+
+bool
+ARDOUR_UI_UTILS::engine_is_running ()
+{
+ if (ARDOUR::AudioEngine::instance()->running ()) {
+ return true;
+ }
+ Glib::signal_idle().connect (sigc::ptr_fun (&idle_notify_engine_stopped));
+ return false;
+}
+
+