diff options
Diffstat (limited to 'Swift/QtUI/QtMainEventLoop.h')
-rw-r--r-- | Swift/QtUI/QtMainEventLoop.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/Swift/QtUI/QtMainEventLoop.h b/Swift/QtUI/QtMainEventLoop.h new file mode 100644 index 0000000..678ea04 --- /dev/null +++ b/Swift/QtUI/QtMainEventLoop.h @@ -0,0 +1,40 @@ +#ifndef SWIFT_QtMainEventLoop_H +#define SWIFT_QtMainEventLoop_H + +#include <QObject> +#include <QEvent> +#include <QCoreApplication> + +#include "Swiften/EventLoop/EventLoop.h" + +class QtMainEventLoop : public QObject, public Swift::EventLoop +{ + public: + QtMainEventLoop() {} + + virtual void post(const Event& event) { + QCoreApplication::postEvent(this, new Event(event)); + } + + virtual bool event(QEvent* qevent) { + Event* event = dynamic_cast<Event*>(qevent); + if (event) { + handleEvent(event->event_); + //event->deleteLater(); FIXME: Leak? + return true; + } + + return false; + } + + private: + struct Event : public QEvent { + Event(const EventLoop::Event& event) : + QEvent(QEvent::User), event_(event) { + } + + EventLoop::Event event_; + }; +}; + +#endif |