summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2015-06-29 16:27:03 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2015-06-29 16:27:03 -0400
commit0274aafdb08238548dd4c20c52cd5375217f4e00 (patch)
treec2698b60932ae5ebcc524dd6d567b7af8ac67218 /libs
parentb79bfe8793047a0a30388457bd8f0abb9641bba2 (diff)
store all error/info/etc messages in a list inside Gtkmm2ext::UI, and provide a method to dump them all to a std::ostream
Diffstat (limited to 'libs')
-rw-r--r--libs/gtkmm2ext/gtk_ui.cc32
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/gtk_ui.h6
2 files changed, 37 insertions, 1 deletions
diff --git a/libs/gtkmm2ext/gtk_ui.cc b/libs/gtkmm2ext/gtk_ui.cc
index b5319fbea7..c4df2b7d5c 100644
--- a/libs/gtkmm2ext/gtk_ui.cc
+++ b/libs/gtkmm2ext/gtk_ui.cc
@@ -482,8 +482,40 @@ UI::do_request (UIRequest* req)
======================================================================*/
void
+UI::dump_errors (std::ostream& ostr)
+{
+ Glib::Threads::Mutex::Lock lm (error_lock);
+ ostr << endl << X_("Errors/Messages:") << endl;
+ for (list<string>::const_iterator i = error_stack.begin(); i != error_stack.end(); ++i) {
+ ostr << *i << endl;
+ }
+ ostr << endl;
+}
+
+void
UI::receive (Transmitter::Channel chn, const char *str)
{
+ {
+ Glib::Threads::Mutex::Lock lm (error_lock);
+ switch (chn) {
+ case Transmitter::Fatal:
+ error_stack.push_back (string (X_("FATAL: ")) + str);
+ break;
+ case Transmitter::Error:
+ error_stack.push_back (string (X_("ERROR: ")) + str);
+ break;
+ case Transmitter::Warning:
+ error_stack.push_back (string (X_("WARNING: ")) + str);
+ break;
+ case Transmitter::Info:
+ error_stack.push_back (string (X_("INFO: ")) + str);
+ break;
+ case Transmitter::Throw:
+ error_stack.push_back (string (X_("THROW: ")) + str);
+ break;
+ }
+ }
+
if (caller_is_ui_thread()) {
process_error_message (chn, str);
} else {
diff --git a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
index 0a66accaef..177adb00ff 100644
--- a/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
+++ b/libs/gtkmm2ext/gtkmm2ext/gtk_ui.h
@@ -138,6 +138,7 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest>
void flush_pending ();
void toggle_errors ();
void show_errors ();
+ void dump_errors (std::ostream&);
void touch_display (Touchable *);
void set_tip (Gtk::Widget &w, const gchar *tip);
void set_tip (Gtk::Widget &w, const std::string &tip);
@@ -166,7 +167,7 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest>
sigc::signal<void> theme_changed;
static bool just_hide_it (GdkEventAny *, Gtk::Window *);
-
+
protected:
virtual void handle_fatal (const char *);
virtual void display_message (const char *prefix, gint prefix_len,
@@ -195,6 +196,9 @@ class LIBGTKMM2EXT_API UI : public AbstractUI<UIRequest>
void process_error_message (Transmitter::Channel, const char *);
void do_quit ();
+ Glib::Threads::Mutex error_lock;
+ std::list<std::string> error_stack;
+
void color_selection_done (bool status);
bool color_selection_deleted (GdkEventAny *);
bool color_picked;