Window

-- receives events
  class window { 
window
public: window(gadget* p) { g = p; } void insert(gadget* p) { g->insert(p); } void receive(event* e) { handler* h = new handler(e); g->pick(h); (*h)(); } private: gadget* g; };

slide: Another window class