summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2018-11-27 23:57:53 +0100
committerRobin Gareus <robin@gareus.org>2018-11-27 23:57:53 +0100
commit415721fa5b48f3c3dc164ac60095c095c4e48ad0 (patch)
tree531fea33e7c8953b4431af0cfd2df90ea8637c40
parent1d8dc009f7e1d8a279335724b03682fa727603ae (diff)
Prepare central engine check and user notification
-rw-r--r--gtk2_ardour/utils.cc35
-rw-r--r--gtk2_ardour/utils.h5
2 files changed, 40 insertions, 0 deletions
diff --git a/gtk2_ardour/utils.cc b/gtk2_ardour/utils.cc
index 97c36b7faf..b1b6870ada 100644
--- a/gtk2_ardour/utils.cc
+++ b/gtk2_ardour/utils.cc
@@ -43,6 +43,7 @@
#include "pbd/file_utils.h"
#include "pbd/stacktrace.h"
+#include "ardour/audioengine.h"
#include "ardour/filesystem_paths.h"
#include "ardour/search_paths.h"
@@ -51,6 +52,7 @@
#include "canvas/item.h"
+#include "actions.h"
#include "debug.h"
#include "public_editor.h"
#include "keyboard.h"
@@ -99,6 +101,39 @@ ARDOUR_UI_UTILS::just_hide_it (GdkEventAny */*ev*/, Gtk::Window *win)
return 0;
}
+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::no_engine_notify ()
+{
+ if (ARDOUR::AudioEngine::instance()->running ()) {
+ return false; // 0 == OK
+ }
+ Glib::signal_idle().connect (sigc::ptr_fun (&idle_notify_engine_stopped));
+ return true;
+}
+
+
/* xpm2rgb copied from nixieclock, which bore the legend:
nixieclock - a nixie desktop timepiece
diff --git a/gtk2_ardour/utils.h b/gtk2_ardour/utils.h
index 6713844ba6..47967ae3b5 100644
--- a/gtk2_ardour/utils.h
+++ b/gtk2_ardour/utils.h
@@ -52,6 +52,11 @@ namespace ARDOUR_UI_UTILS {
gint just_hide_it (GdkEventAny*, Gtk::Window*);
void add_item_with_sensitivity (Gtk::Menu_Helpers::MenuList &, Gtk::Menu_Helpers::MenuElem, bool);
+/* return 0 (false) if there is no error (engine runs).
+ * otherwise queue an idle user-notificaion and return true.
+ */
+bool no_engine_notify ();
+
unsigned char* xpm2rgb (const char** xpm, uint32_t& w, uint32_t& h);
unsigned char* xpm2rgba (const char** xpm, uint32_t& w, uint32_t& h);