diff options
-rw-r--r-- | libs/gtkmm2ext/gtk_ui.cc | 32 | ||||
-rw-r--r-- | libs/gtkmm2ext/gtkmm2ext/gtk_ui.h | 6 |
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; |