]> icculus.org git repositories - mikachu/openbox.git/blob - otk/eventdispatcher.hh
add OBDisplay_display()
[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, otk::OtkEventHandler *handler);
20   virtual void clearHandler(Window id);
21   virtual void dispatchEvents(void);
22
23   inline void setFallbackHandler(otk::OtkEventHandler *fallback)
24   { _fallback = fallback; }
25   otk::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(otk::OtkEventHandler *master)
30   { _master = master; }
31   otk::OtkEventHandler *getMasterHandler(void) const { return _master; }
32
33   otk::OtkEventHandler *findHandler(Window win);
34
35   inline Time lastTime() const { return _lasttime; }
36   
37 private:
38   OtkEventMap _map;
39   OtkEventHandler *_fallback;
40   OtkEventHandler *_master;
41
42   //! The time at which the last XEvent with a time was received
43   Time _lasttime;
44
45   void dispatch(Window win, const XEvent &e);
46   void dispatchFocus(const XEvent &e);
47 };
48
49 }
50
51 #endif