rem: DEBUG("KeyPress");
add: PDEBUG("KeyPress");
context: textEventHandler( WObjDescriptor *desc, XEvent *event )  {  WTextInput *wtext  = desc->parent;  int   handled = False;      /* has the event been handled */  switch( event->type )    {    case MotionNotify:      /* If the button isn't down, we don't care about the       * event, but otherwise we want to adjust the selected       * text so we can wTextRefresh() */      if( event->xmotion.state & (Button1Mask|Button3Mask|Button2Mask) )      {      DEBUG("MotionNotify");      handled = True;      wtext->text.endPos = textXtoPos( wtext, event->xmotion.x );      }      break;    case ButtonPress:      DEBUG("ButtonPress");      handled = True;      wtext->text.startPos = textXtoPos( wtext, event->xbutton.x );      wtext->text.endPos   = wtext->text.startPos;      break;    case ButtonRelease:      DEBUG("ButtonRelease");      handled = True;      wtext->text.endPos = textXtoPos( wtext, event->xbutton.x );      break;    case KeyPress:      DEBUG("KeyPress");      handled = handleKeyPress( wtext, &event->xkey );      break;    case EnterNotify:      DEBUG("EnterNotify");      handled = True;#if 0      if (!wtext->magic) 	{	wtext->magic = wAddTimerHandler(CURSOR_BLINK_RATE, blink, wtext);        wtext->blink_on = !wtext->blink_on;        blink(wtext);        wtext->blinking = 1;        }#endif      break;    case LeaveNotify:      DEBUG("LeaveNotify");      handled = True;#if 0      wtext->blinking = 0;      if (wtext->blink_on)	    blink(wtext);      if (wtext->magic)	    wDeleteTimerHandler(wtext->magic);      wtext->magic = NULL;#endif      break;    default:      break;    }    if( handled )    textRefresh(wtext);  else    WMHandleEvent(event);    return;  }