Prepare central engine check and user notification

This commit is contained in:
Robin Gareus 2018-11-27 23:57:53 +01:00
parent 1d8dc009f7
commit 415721fa5b
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
2 changed files with 40 additions and 0 deletions

View File

@ -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

View File

@ -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);