Properly handle numeric events
[quassel.git] / src / common / eventmanager.h
index d7480d1..780d21b 100644 (file)
@@ -96,15 +96,17 @@ public:
     IrcEventUnknown,    ///< Unknown non-numeric cmd
 
     IrcEventNumeric             = 0x00031000, /* needs 1000 (0x03e8) consecutive free values! */
+    IrcEventNumericMask         = 0x00000fff, /* for checking if an event is numeric */
 
     MessageEvent                = 0x00040000, ///< Stringified event suitable for converting to Message
   };
 
   EventManager(QObject *parent = 0);
-  //virtual ~EventManager();
+  virtual ~EventManager();
 
   EventType eventTypeByName(const QString &name) const;
   EventType eventGroupByName(const QString &name) const;
+  QString enumName(EventType type) const;
 
 public slots:
   void registerObject(QObject *object, Priority priority = NormalPriority, const QString &methodPrefix = "handle");
@@ -119,6 +121,9 @@ public slots:
    */
   void sendEvent(Event *event);
 
+protected:
+  virtual void customEvent(QEvent *event);
+
 private:
   struct Handler {
     QObject *object;
@@ -140,6 +145,7 @@ private:
   //! Add handlers to an existing sorted (by priority) handler list
   void insertHandlers(const QList<Handler> &newHandlers, QList<Handler> &existing);
 
+  void processEvents();
   void dispatchEvent(Event *event);
 
   //! @return the EventType enum
@@ -147,6 +153,8 @@ private:
 
   HandlerHash _registeredHandlers;
   mutable QMetaEnum _enum;
+
+  QList<Event *> _eventQueue;
 };
 
 Q_DECLARE_OPERATORS_FOR_FLAGS(EventManager::EventFlags);