\slide{dispatching}{The dispatch and operator() function}{
  int handler::dispatch(kit* _tk, int _argc, char* _argv[]) {
  tk = _tk; argc = _argc; argv = _argv;
  return this->operator()();
  }
  
  int handler::operator()() { 
\c{\fbox{operator()}}
event e = tk->event(); if (e.type()==ButtonPress) press(e); else if (e.type()==ButtonRelease) release(e); else if (e.type()==KeyPress) keypress(e); else if (e.type()==KeyRelease) keyrelease(e); else if (e.type()==MotionNotify) motion(e); else if (e.type()==EnterNotify) enter(e); else if (e.type()==LeaveNotify) leave(e); else other(e); return OK; }
}{
  int handler::dispatch(kit* _tk, int _argc, char* _argv[]) {
  	tk = _tk; argc = _argc; argv = _argv;
  	return this->operator()();
  }
  
  int handler::operator()() { 
\fbox{operator()}
event e = tk->event(); if ( e.type() == ButtonPress ) press(e); else if ( e.type() == ButtonRelease ) release(e); else if ( e.type() == KeyPress ) keypress(e); else if ( e.type() == KeyRelease ) keyrelease(e); else if ( e.type() == MotionNotify ) motion(e); else if ( e.type() == EnterNotify ) enter(e); else if ( e.type() == LeaveNotify ) leave(e); else other(e); return OK; }
} }