button press/releases WORK
[mikachu/openbox.git] / otk / eventdispatcher.hh
1 #ifndef __eventdispatcher
2 #define __eventdispatcher
3
4 #include "eventhandler.hh"
5 #include <map>
6 #include <utility>
7
8 namespace otk {
9
10 typedef std::map<unsigned int, OtkEventHandler *> OtkEventMap;
11
12 class OtkEventDispatcher {
13 public:
14
15   OtkEventDispatcher();
16   virtual ~OtkEventDispatcher();
17
18   virtual void clearAllHandlers(void);
19   virtual void registerHandler(Window id, OtkEventHandler *handler);
20   virtual void clearHandler(Window id);
21   virtual void dispatchEvents(void);
22
23   inline void setFallbackHandler(OtkEventHandler *fallback)
24   { _fallback = fallback; }
25   OtkEventHandler *getFallbackHandler(void) const { return _fallback; }
26
27   //! Sets an event handler that gets all events for all handlers after
28   //! any specific handlers have received them
29   inline void setMasterHandler(OtkEventHandler *master)
30   { _master = master; }
31   OtkEventHandler *getMasterHandler(void) const { return _master; }
32   
33 private:
34   OtkEventMap _map;
35   OtkEventHandler *_fallback;
36   OtkEventHandler *_master;
37
38   //! The time at which the last XEvent with a time was received
39   Time _lasttime; // XXX: store this! also provide an accessor!
40 };
41
42 }
43
44 #endif