diff options
Diffstat (limited to 'libs/pbd/pbd/base_ui.h')
-rw-r--r-- | libs/pbd/pbd/base_ui.h | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/libs/pbd/pbd/base_ui.h b/libs/pbd/pbd/base_ui.h index 186a3c55a6..ea1afbbb5a 100644 --- a/libs/pbd/pbd/base_ui.h +++ b/libs/pbd/pbd/base_ui.h @@ -29,6 +29,7 @@ #include <glibmm/threads.h> #include <glibmm/main.h> +#include "pbd/libpbd_visibility.h" #include "pbd/crossthread.h" #include "pbd/event_loop.h" @@ -41,7 +42,7 @@ */ -class BaseUI : public sigc::trackable, public PBD::EventLoop +class LIBPBD_API BaseUI : public sigc::trackable, public PBD::EventLoop { public: BaseUI (const std::string& name); @@ -71,13 +72,13 @@ class BaseUI : public sigc::trackable, public PBD::EventLoop void quit (); protected: - CrossThreadChannel request_channel; bool _ok; Glib::RefPtr<Glib::MainLoop> _main_loop; - Glib::Threads::Thread* run_loop_thread; + Glib::RefPtr<Glib::MainContext> m_context; + Glib::Threads::Thread* run_loop_thread; Glib::Threads::Mutex _run_lock; - Glib::Threads::Cond _running; + Glib::Threads::Cond _running; /* this signals _running from within the event loop, from an idle callback @@ -92,9 +93,17 @@ class BaseUI : public sigc::trackable, public PBD::EventLoop virtual void thread_init () {}; +#ifdef PLATFORM_WINDOWS + static gboolean _request_handler (gpointer); + bool request_handler (); +#else /** Called when there input ready on the request_channel */ bool request_handler (Glib::IOCondition); +#endif + + void signal_new_request (); + void attach_request_source (); /** Derived UI objects must implement this method, * which will be called whenever there are requests @@ -105,6 +114,10 @@ class BaseUI : public sigc::trackable, public PBD::EventLoop private: std::string _name; BaseUI* base_ui_instance; + +#ifndef PLATFORM_WINDOWS + CrossThreadChannel request_channel; +#endif static uint64_t rt_bit; |