diff options
Diffstat (limited to 'src/lib/ui_signaller.h')
| -rw-r--r-- | src/lib/ui_signaller.h | 38 |
1 files changed, 21 insertions, 17 deletions
diff --git a/src/lib/ui_signaller.h b/src/lib/ui_signaller.h index ee4d230d4..9d4495cd1 100644 --- a/src/lib/ui_signaller.h +++ b/src/lib/ui_signaller.h @@ -24,6 +24,8 @@ #include <boost/asio.hpp> #include <boost/thread.hpp> +class Signaller; + /** A class to allow signals to be emitted from non-UI threads and handled * by a UI thread. */ @@ -37,23 +39,6 @@ public: _ui_thread = boost::this_thread::get_id (); } - /** Emit a signal from any thread whose handlers will be called in the UI - * thread. Use something like: - * - * ui_signaller->emit (boost::bind (boost::ref (SomeSignal), parameter)); - */ - template <typename T> - void emit (T f) { - if (boost::this_thread::get_id() == _ui_thread) { - /* already in the UI thread */ - f (); - } else { - /* non-UI thread; post to the service and wake up the UI */ - _service.post (f); - wake_ui (); - } - } - /* Do something next time the UI is idle */ template <typename T> void when_idle (T f) { @@ -73,6 +58,25 @@ public: } private: + /** Emit a signal from any thread whose handlers will be called in the UI + * thread. Use something like: + * + * ui_signaller->emit (boost::bind (boost::ref (SomeSignal), parameter)); + */ + template <typename T> + void emit (T f) { + if (boost::this_thread::get_id() == _ui_thread) { + /* already in the UI thread */ + f (); + } else { + /* non-UI thread; post to the service and wake up the UI */ + _service.post (f); + wake_ui (); + } + } + + friend class Signaller; + /** A io_service which is used as the conduit for messages */ boost::asio::io_service _service; /** Object required to keep io_service from stopping when it has nothing to do */ |
