summaryrefslogtreecommitdiff
path: root/src/lib/ui_signaller.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/ui_signaller.h')
-rw-r--r--src/lib/ui_signaller.h38
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 */