ROOT logo
// @(#)root/qt:$Id: TQtClientFilter.cxx 28205 2009-04-14 19:38:00Z brun $
// Author: Valeri Fine   21/01/2002

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * Copyright (C) 2002 by Valeri Fine.                                    *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#include "TQtClientFilter.h"
#include "TQtRConfig.h"

#include "TQtClientWidget.h"
#include "TGQt.h"
#include "TQtEventQueue.h"
#include "TQUserEvent.h"
#include "TQtLock.h"

#include "TSystem.h"
#include "TStopwatch.h"
#include "qevent.h"
#include <qdatetime.h>
#include <qcursor.h>
#include <qtextcodec.h>

#include <QWheelEvent>
#include <QByteArray>
#include <QFocusEvent>
#include <QPaintEvent>
#include <QCloseEvent>
#include <QMoveEvent>
#include <QKeyEvent>
#include <QResizeEvent>
#include <QMouseEvent>
#include <QDebug>

#include <cassert>
#include "KeySymbols.h"
#define QTCLOSE_DESTROY_RESPOND 1

//______________________________________________________________________________
//
// QtClientFilter provides QOject event filter to map Qt and  ROOT events 
//   (see: http://doc.trolltech.com/4.3/qobject.html#installEventFilter )
//______________________________________________________________________________

ClassImp(TQtClientFilter)

TQtClientWidget *TQtClientFilter::fgPointerGrabber=0;
TQtClientWidget *TQtClientFilter::fgButtonGrabber =0;
TQtClientWidget *TQtClientFilter::fgActiveGrabber =0;

UInt_t           TQtClientFilter::fgGrabPointerEventMask = 0;
Bool_t           TQtClientFilter::fgGrabPointerOwner     = kFALSE;
QCursor         *TQtClientFilter::fgGrabPointerCursor    = 0;

TQtPointerGrabber *TQtClientFilter::fgGrabber = 0;
//______________________________________________________________________________________
static inline UInt_t  MapModifierState(Qt::KeyboardModifiers qState)
{
   UInt_t state = 0;
   if ( qState & Qt::ShiftModifier   ) state |= kKeyShiftMask;
   if ( qState & Qt::ControlModifier ) state |= kKeyControlMask;
   if ( qState & Qt::AltModifier     ) state |= kKeyMod1Mask;
   if ( qState & Qt::MetaModifier    ) state |= kKeyLockMask;
   return state;
}

//______________________________________________________________________________________
static inline UInt_t  MapButtonState(Qt::MouseButtons qState)
{
   UInt_t state = 0;
   if ( qState & Qt::RightButton     ) state |= kButton3Mask;
   if ( qState & Qt::MidButton       ) state |= kButton2Mask;
   if ( qState & Qt::LeftButton      ) state |= kButton1Mask;
   return state;
}

//______________________________________________________________________________________
static inline void MapEvent( QWheelEvent &qev, Event_t &ev)
{
    // Map Qt QWheelEvent (like MouseEvent) to ROOT kButton4 and kButton5 events
   ev.fX      = qev.x();
   ev.fY      = qev.y();
   ev.fXRoot  = qev.globalX();
   ev.fYRoot  = qev.globalY();

   if ( qev.delta() > 0 ) {
      ev.fCode   = kButton4;
      ev.fState |= kButton4Mask;
   } else {
      ev.fCode   = kButton5;
      ev.fState |= kButton5Mask;
   }
   ev.fState |= MapModifierState(qev.modifiers());
   ev.fState |= MapButtonState(qev.buttons());
   ev.fUser[0] = TGQt::rootwid(TGQt::wid(ev.fWindow)->childAt(ev.fX,ev.fY)) ;
   qev.ignore(); // propage the mouse event further
   // fprintf(stderr, "QEvent::Wheel %p %d child=%p\n",ev.fWindow, ev.fCode, ev.fUser[0]);
}
//______________________________________________________________________________________
Bool_t TQtClientFilter::IsGrabSelected(UInt_t selectEventMask)
{
   // return the selection by "grabButton" / "grabPointer"
   return fgGrabber ? fgGrabber->IsGrabSelected(selectEventMask) : kFALSE;
}
//______________________________________________________________________________________
static inline void MapEvent(QMouseEvent &qev, Event_t &ev)
{
   ev.fX      = qev.x();
   ev.fY      = qev.y();
   ev.fXRoot  = qev.globalX();
   ev.fYRoot  = qev.globalY();
   switch ( qev.button() )  {
      case Qt::LeftButton:
         // Set if the left button is pressed, or if this event refers to the left button.
         //(The left button may be the right button on left-handed mice.)
         ev.fCode  = kButton1;
         break;
      case Qt::MidButton:
         // the middle button.
         ev.fCode  = kButton2;
         break;
      case Qt::RightButton:
         //  the right button
         ev.fCode  = kButton3;
         break;
      default:
         if (qev.type() != QEvent::MouseMove) {
          qDebug() << "MapEvent Error ***. Unexpected event." << &qev;
          return;
         }
         break;
   };
   ev.fState |= MapModifierState(qev.modifiers());
   ev.fState |= MapButtonState(qev.buttons());   
   if (ev.fCode)
      ev.fUser[0] = TGQt::rootwid(TGQt::wid(ev.fWindow)->childAt(ev.fX,ev.fY)) ;

   qev.ignore(); // propagate the mouse event further
}


//---- Key symbol mapping
struct KeyQSymbolMap_t {
   Qt::Key fQKeySym;
   EKeySym fKeySym;
};

//---- Mapping table of all non-trivial mappings (the ASCII keys map
//---- one to one so are not included)

static KeyQSymbolMap_t gKeyQMap[] = {
   {Qt::Key_Escape,    kKey_Escape},
   {Qt::Key_Tab,       kKey_Tab},
   {Qt::Key_Backtab,   kKey_Backtab},
#if QT_VERSION < 0x40000
   {Qt::Key_BackSpace, kKey_Backspace},
#else /* QT_VERSION */
   {Qt::Key_Backspace, kKey_Backspace},
#endif /* QT_VERSION */
   {Qt::Key_Return,    kKey_Return},
   {Qt::Key_Insert,    kKey_Insert},
   {Qt::Key_Delete,    kKey_Delete},
   {Qt::Key_Pause,     kKey_Pause},
   {Qt::Key_Print,     kKey_Print},
   {Qt::Key_SysReq,    kKey_SysReq},
   {Qt::Key_Home,      kKey_Home},       // cursor movement
   {Qt::Key_End,       kKey_End},
   {Qt::Key_Left,      kKey_Left},
   {Qt::Key_Up,        kKey_Up},
   {Qt::Key_Right,     kKey_Right},
   {Qt::Key_Down,      kKey_Down},
#if QT_VERSION < 0x40000
   {Qt::Key_Prior,     kKey_Prior},
   {Qt::Key_Next,      kKey_Next},
#else /* QT_VERSION */
   {Qt::Key_PageUp,     kKey_Prior},
   {Qt::Key_PageDown,      kKey_Next},
#endif /* QT_VERSION */
   {Qt::Key_Shift,     kKey_Shift},
   {Qt::Key_Control,   kKey_Control},
   {Qt::Key_Meta,      kKey_Meta},
   {Qt::Key_Alt,       kKey_Alt},
   {Qt::Key_CapsLock,  kKey_CapsLock},
   {Qt::Key_NumLock ,  kKey_NumLock},
   {Qt::Key_ScrollLock, kKey_ScrollLock},
   {Qt::Key_Space,     kKey_Space},  // numeric keypad
   {Qt::Key_Tab,       kKey_Tab},
   {Qt::Key_Enter,     kKey_Enter},
   {Qt::Key_Equal,     kKey_Equal},
   {Qt::Key_Asterisk,  kKey_Asterisk},
   {Qt::Key_Plus,      kKey_Plus},
   {Qt::Key_Comma,     kKey_Comma},
   {Qt::Key_Minus,     kKey_Minus},
   {Qt::Key_Period,    kKey_Period},
   {Qt::Key_Slash,     kKey_Slash},
   {Qt::Key(0), (EKeySym) 0}
};
//______________________________________________________________________________________
static inline UInt_t MapKeySym(const QKeyEvent &qev)
{
   UInt_t text = 0;;
   Qt::Key key = Qt::Key(qev.key());
   for (int i = 0; gKeyQMap[i].fKeySym; i++) {	// any other keys
      if (key ==  gKeyQMap[i].fQKeySym) {
         return   UInt_t(gKeyQMap[i].fKeySym);
      }
   }
#if 0
   QByteArray oar = gQt->GetTextDecoder()->fromUnicode(qev.text());
   const char *r = oar.constData();
   qstrncpy((char *)&text, (const char *)r,1);
   return text;
#else
   text = UInt_t(qev.text().toAscii().data()[0]);
#ifdef QT_STILL_HAS_BUG   
   // Regenerate the ascii code (Qt bug I guess)
   if  (qev.modifiers() != Qt::NoModifier)  {
      if (  ( Qt::Key_A <= key && key <= Qt::Key_Z)  ) 
            text =  (( qev.state() & Qt::ShiftModifier )?  'A' : 'a') + (key - Qt::Key_A) ;
      else if (  ( Qt::Key_0 <= key && key <= Qt::Key_9)  ) 
            text =    '0'  + (key - Qt::Key_0);
   }
#endif
    // we have to accomodate the new ROOT GUI logic.
    // the information about the "ctrl" key should be provided TWICE nowadays 12.04.2005 vf.
//   }
   return text;
#endif
}
//______________________________________________________________________________________
static inline void MapEvent(const QKeyEvent  &qev, Event_t &ev)
{
   ev.fType  = qev.type() == QEvent::KeyPress ?  kGKeyPress : kKeyRelease;
   ev.fCode  = MapKeySym(qev);
   ev.fState = MapModifierState(qev.modifiers());
   ev.fCount = qev.count();
   ev.fUser[0] = TGQt::rootwid(TGQt::wid(ev.fWindow)->childAt(ev.fX,ev.fY)) ;
   // qev.accept();
}
//______________________________________________________________________________________
static inline void MapEvent(const QMoveEvent &qev, Event_t &ev)
{
   ev.fX = qev.pos().x();
   ev.fY = qev.pos().y();
}
//______________________________________________________________________________________
static inline void MapEvent(const QResizeEvent &qev, Event_t &ev)
{
   ev.fWidth  = qev.size().width();	   // width and
   ev.fHeight = qev.size().height();	// height of exposed area
}
//______________________________________________________________________________________
static inline void MapEvent(const QPaintEvent &qev, Event_t &ev)
{
   ev.fX = qev.rect().x();
   ev.fY = qev.rect().y();
   ev.fWidth  = qev.rect().width();	  // width and
   ev.fHeight = qev.rect().height();  // height of exposed area
   ev.fCount  = 0;
   //         ev.fCount = xev.expose.count;	// number of expose events still to come
}
//______________________________________________________________________________________
static inline void MapEvent(const TQUserEvent &qev, Event_t &ev)
{
   qev.getData(ev);
}
//______________________________________________________________________________
TQtClientFilter::~TQtClientFilter()
{
   TQtLock lock;  // critical section
   if (fRootEventQueue) {
      delete fRootEventQueue;
      fRootEventQueue = 0;
   }
}
//______________________________________________________________________________
static inline bool IsMouseCursorInside()
{
   // Detect whether the mouse cursor is inside of any application widget
   bool inside = false;
   QPoint absPostion = QCursor::pos();
   QWidget *currentW = QApplication::widgetAt(absPostion);
   // fprintf(stderr,"  -0-  IsMouseCursorInside frame=%p, grabber=%p, "
   //           , currentW,QWidget::mouseGrabber());
   if (currentW) {
      QRect widgetRect = currentW->geometry();
      widgetRect.moveTopLeft(currentW->mapToGlobal(QPoint(0,0)));
      inside = widgetRect.contains(absPostion);
      // fprintf(stderr," widget x=%d, y=%d, cursor x=%d, y=%d"
      //      ,widgetRect.x(),widgetRect.y(),absPostion.x(),absPostion.y());
   }
   // fprintf(stderr," inside = %d \n",inside);
   return inside;
}

#ifdef QTCLOSE_DESTROY_RESPOND
//______________________________________________________________________________
static void SendCloseMessage(Event_t &closeEvent)
{
   // Send close message to window provided via closeEvent.
   // This method should be called just the user closes the window via WM
   // See: TGMainFrame::SendCloseMessage() 

   if (closeEvent.fType != kDestroyNotify) return;
   Event_t evt = closeEvent;

   evt.fType   = kClientMessage;
   evt.fFormat = 32;
   evt.fHandle = gWM_DELETE_WINDOW;

   // evt.fWindow  = GetId();
   evt.fUser[0] = (Long_t) gWM_DELETE_WINDOW;
   evt.fUser[1] = 0;
   evt.fUser[2] = 0;
   evt.fUser[3] = 0;
   evt.fUser[4] = 0;
   // fprintf(stderr,"SendCloseMessage Closing id=%p widget=%p\n"
   //      , (void *)evt.fWindow, (TQtClientWidget*)TGQt::wid(evt.fWindow));
   
   gVirtualX->SendEvent(evt.fWindow, &evt);
}
#endif

//______________________________________________________________________________
void DebugMe() {
   // fprintf(stderr, "Debug me please \n");
}

//______________________________________________________________________________
static inline QWidget *widgetAt(int x, int y)
{
   // Find the child window (Qt itself can not do that :( strange :)
   QWidget *w = (TQtClientWidget *)QApplication::widgetAt(x,y);
   if (w) {
      QWidget *child = w->childAt(w->mapFromGlobal(QPoint(x, y )));
      if (child) w = child;
   }
   return w;
}
//______________________________________________________________________________
void TQtClientFilter::AddKeyEvent( const QKeyEvent &keyEvent, TQtClientWidget *frame)
{
   // Map and and to the ROOT event queue Qt KeyBoard event mapped to the ROOT Event_t
   // For "dest" widget 
   if (frame) {
     Event_t &evt = *new Event_t;
     memset( &evt,0,sizeof(Event_t));
     QPaintDevice *paintDev = (QPaintDevice *)frame;
     evt.fWindow    = TGQt::rootwid(paintDev);

     evt.fSendEvent = keyEvent.spontaneous();
     evt.fTime      = QTime::currentTime().msec ();
     evt.fX         = frame->x();
     evt.fY         = frame->y();
     evt.fWidth     = frame->width();	// width and
     evt.fHeight    = frame->height();	// height excluding the frame

     QPoint pointRoot = frame->mapToGlobal(QPoint(0,0));
     evt.fXRoot     = pointRoot.x();
     evt.fYRoot     = pointRoot.y();
     MapEvent(keyEvent,evt);

     fRootEventQueue->enqueue(&evt);
  }
}

//______________________________________________________________________________
bool TQtClientFilter::SelectGrab(Event_t &event, UInt_t selectEventMask,QMouseEvent &mouse) 
{
   // Select Event:  --  04.12.2005  --
   return fgGrabber ? fgGrabber->SelectGrab(event,selectEventMask, mouse) : kFALSE;
}

//______________________________________________________________________________
bool TQtClientFilter::eventFilter( QObject *qWidget, QEvent *e ){
   // Dispatch The Qt event from event queue to Event_t structure
   // Not all of the event fields are valid for each event type,
   // except fType and fWindow.

   // Set to default event. This method however, should never be called.
   // check whether we are getting the desktop event
   UInt_t selectEventMask = 0;
   Bool_t  grabSelectEvent    = kFALSE;
   static TStopwatch *filterTime = 0;
   static int neventProcessed = 0;
   neventProcessed ++;
   Event_t &evt = *new Event_t;
   memset( &evt,0,sizeof(Event_t));
   evt.fType      = kOtherEvent;

   // Cast it carefully
   TQtClientWidget *frame = dynamic_cast<TQtClientWidget *>(qWidget);
   if (!(frame /* && gQt->IsRegistered(frame)  */) )    {
         if (filterTime) filterTime->Stop();
         return kFALSE; // it is a desktop, it is NOT ROOT gui object
   }
   QPaintDevice *paintDev = (QPaintDevice *)frame;

   // Fill the default event values

   evt.fWindow    = TGQt::rootwid(paintDev);

   evt.fSendEvent = !e->spontaneous();
   evt.fTime      = QTime::currentTime().msec ();
   evt.fX         = frame->x();
   evt.fY         = frame->y();
   evt.fWidth     = frame->width();	// width and
   evt.fHeight    = frame->height();	// height excluding the frame
  
   QPoint pointRoot = frame->mapToGlobal(QPoint(0,0));
   evt.fXRoot     = pointRoot.x();
   evt.fYRoot     = pointRoot.y();

   QMouseEvent *mouseEvent = 0;
   QWheelEvent *wheelEvent = 0; //
   QKeyEvent   *keyEvent   = 0; //     Q Event::KeyPress or QEvent::KeyRelease.
   QFocusEvent *focusEvent = 0; //     Q Event::KeyPress or QEvent::KeyRelease.
   Bool_t destroyNotify = kFALSE; // by default we have to ignore all Qt::Close events
   // DumpRootEvent(event);
   
   switch ( e->type() ) {
      case QEvent::Wheel:                // mouse wheel event
         evt.fType = kButtonPress;
         wheelEvent  = (QWheelEvent *)e;
         MapEvent(*wheelEvent,evt);
         selectEventMask |=  kButtonPressMask;
         break;
         
      case QEvent::MouseButtonPress:     // mouse button pressed
         evt.fType   = kButtonPress;
      case QEvent::MouseButtonDblClick:
         if (e->type()== QEvent::MouseButtonDblClick)
            evt.fType   = kButtonDoubleClick;
         mouseEvent = (QMouseEvent *)e;
         MapEvent(*mouseEvent,evt);
         selectEventMask |=  kButtonPressMask;
         mouseEvent->accept();
         if (    !fgGrabber
              &&  fButtonGrabList.count(frame) >0 
              &&  frame->IsGrabbed(evt) )
         {
            GrabPointer(frame, frame->ButtonEventMask(),0,frame->GrabButtonCursor(), kTRUE,kFALSE);
            // Make sure fgButtonGrabber is Ok. GrabPointer zeros fgButtonGrabber!!!
            fgButtonGrabber = frame;
            grabSelectEvent = kTRUE;
         }
         else {
            grabSelectEvent = SelectGrab(evt,selectEventMask,*mouseEvent);

            // it was grabbed ny Qt anyway, Check it
            // fprintf(stderr," 3. -- Event::MouseButtonPress -- Qt grabber %p Check the redundant grabbing current frame=%p active grabbing frame = %p; grabSelectEvent=%d. event=%p ROOT grabber %p\n"
            //      , QWidget::mouseGrabber(), frame, fgActiveGrabber,grabSelectEvent,e,fgPointerGrabber);
         }
         break;

      case QEvent::MouseButtonRelease:   // mouse button released
         evt.fType   = kButtonRelease;
         mouseEvent = (QMouseEvent *)e;
         MapEvent(*mouseEvent,evt);
         selectEventMask |=  kButtonReleaseMask;
         // fprintf(stderr, "QEvent::MouseButtonRelease, turn grabbing OFF id = %x widget = %p,Qt grabber =%p,button grabber%p; qt event=%p\n"
         //      , TGQt::rootwid(frame), frame, QWidget::mouseGrabber(),fgButtonGrabber,e);
         if (fgButtonGrabber) {
            grabSelectEvent =  SelectGrab(evt,selectEventMask,*mouseEvent);
            if ( !mouseEvent->buttons() ) {
                GrabPointer(0, 0, 0, 0, kFALSE);  // ungrab pointer
            } 
         }
         else {
            grabSelectEvent = SelectGrab(evt,selectEventMask,*mouseEvent);
          }
         break;

      case QEvent::MouseMove:            // mouse move
         evt.fType   = kMotionNotify;
         mouseEvent = (QMouseEvent *)e;
         MapEvent(*mouseEvent,evt);
         selectEventMask |=  kPointerMotionMask;
         if ( mouseEvent->buttons()  )
         {       selectEventMask |=  kButtonMotionMask;        }
         
         grabSelectEvent = SelectGrab(evt,selectEventMask,*mouseEvent);
#if 0
         {
            TQtClientWidget *w = (TQtClientWidget*)TGQt::wid(evt.fWindow); // to print
            UInt_t eventMask = w->SelectEventMask();
            UInt_t pointerMask = w->PointerMask();
             // fprintf(stderr," 1. QMouseMove evt widget id = %x pointer =%p; frame = %p; select = %d\n", evt.fWindow, w, frame, grabSelectEvent);
             // fprintf(stderr," 2. QMouseMove pointer mask %o, evt mask = %o, current mask = %o inout selected = %d\n",pointerMask, eventMask, selectEventMask,
             //      frame->IsEventSelected(selectEventMask));
         }
#endif

         // grabSelectEvent = IsGrabSelected(selectEventMask);
         break;
      case QEvent::KeyPress:             // key pressed
         keyEvent = (QKeyEvent *)e;
         MapEvent(*keyEvent,evt);         
         selectEventMask |=  kKeyPressMask;
         ((QKeyEvent *)e)->accept();
         //  fprintf(stderr, " accepted: case QEvent::KeyPress: <%c><%d>: frame = %x; grabber = %x grabbed = %d\n",evt.fCode,evt.fCode,TGQt::wid(frame), TGQt::wid(grabber),grabEvent);
         //  fprintf(stderr, "  QEvent::KeyPress: <%s>: key = %d, key_f=%d, frame = %p\n",(const char *)keyEvent->text(),keyEvent->key(),Qt::Key_F,frame);
         //  fprintf(stderr, "  QEvent::KeyPress: Current focus %p\n",(QPaintDevice *) qApp->focusWidget () );
         //  fprintf(stderr, "---------------\n\n");
         break;
      case QEvent::KeyRelease:           // key released
         keyEvent = (QKeyEvent *)e;
         MapEvent(*keyEvent,evt);
         selectEventMask |=  kKeyReleaseMask;
         ((QKeyEvent *)e)->accept();
         break;
      case QEvent::FocusIn:              // keyboard focus received
         focusEvent   = (QFocusEvent *)e;
         evt.fCode  = kNotifyNormal;
         evt.fState = 0;
         evt.fType  = kFocusIn;
         selectEventMask |=  kFocusChangeMask;
         // fprintf(stderr, "       case IN QEvent::FocusEvent:frame = %x; \n",TGQt::wid(frame));
       break;
      case QEvent::FocusOut:             // keyboard focus lost
         focusEvent   = (QFocusEvent *)e;
         evt.fCode  = kNotifyNormal;
         evt.fState = 0;
         evt.fType  = kFocusOut;
         selectEventMask |=  kFocusChangeMask;
         // fprintf(stderr, "       case OUT QEvent::FocusEvent:frame = %x; \n",TGQt::wid(frame));
         break;
      case QEvent::Enter:                // mouse enters widget
         evt.fType      = kEnterNotify;
         selectEventMask |= kEnterWindowMask | kPointerMotionMask ;
         grabSelectEvent  = IsGrabSelected(selectEventMask);
         // fprintf(stderr,"  QEvent::Enter == frame=%p, active = %p, pointer = %p;  button =%p, grabber = %p\n"
         //       , frame, fgActiveGrabber, fgPointerGrabber, fgButtonGrabber, QWidget::mouseGrabber());
         break;
      case QEvent::Leave:                // mouse leaves widget
         evt.fType      = kLeaveNotify;
         selectEventMask |= kLeaveWindowMask | kPointerMotionMask;
         grabSelectEvent  = IsGrabSelected(selectEventMask);
         // fprintf(stderr," 1. QEvent::LEAVE == cursor = %p, frame=%p, active = %p, pointer = %p button =%p; grabber = %p  grabSelect =%d, id=%x\n"
         //       , QApplication::widgetAt(QCursor::pos() )
         //       , frame, fgActiveGrabber, fgPointerGrabber, fgButtonGrabber, QWidget::mouseGrabber(), grabSelectEvent, TGQt::rootwid(fgPointerGrabber)
         //       );
         if ( fgGrabber )fgGrabber->ActivateGrabbing();
         break;
      case QEvent::Close:
         evt.fType   = kDestroyNotify;
         selectEventMask |=  kStructureNotifyMask;
         if (fgGrabber && fgGrabber->IsGrabbing(frame) ) {
            GrabPointer(0, 0, 0, 0,kFALSE);
         }
#ifndef QTCLOSE_DESTROY_RESPOND
         if ( e->spontaneous() && frame->DeleteNotify() )
         {
            frame->SetDeleteNotify(kFALSE);
            destroyNotify = kTRUE;
            ((QCloseEvent *)e)->accept();
         }
#else
         // fprintf(stderr, " QEvent::Close spontaneous %d: for %p flag = %d\n",e->spontaneous(),frame,destroyNotify);
         frame->SetClosing(); // to avoid the double notification
 // ROOT GUI does not expect this messages to be dispatched.
         if (!e->spontaneous() ) 
         {
            if (frame->DeleteNotify() ) {
               frame->SetDeleteNotify(kFALSE);
               // Ignore this Qt event, ROOT is willing to close the widget
               ((QCloseEvent *)e)->accept();
               SendCloseMessage(evt);
            }
         }
#endif
         break;
      case QEvent::Destroy:              //  during object destruction
         evt.fType   = kDestroyNotify;
         selectEventMask |=  kStructureNotifyMask;
         if (fgGrabber && fgGrabber->IsGrabbing(frame) ) {
            GrabPointer(0, 0, 0, 0,kFALSE);
         }
         // fprintf(stderr, " QEvent::Destroy spontaneous %d: for %p  flag = %d\n",e->spontaneous(),frame,destroyNotify);
#ifdef QTCLOSE_DESTROY_RESPOND
         // ROOT GUI does not expect this messages to be dispatched.
         SendCloseMessage(evt); // nothing to do here yet 
#endif         
         break;
      case QEvent::Show:                 // Widget was shown on screen,
      case QEvent::ShowWindowRequest:    //  (obsolete)  widget's window should be mapped
         evt.fType   = kMapNotify;
         selectEventMask |=  kStructureNotifyMask;
         break;
      case QEvent::Paint:                //   widget's window should be mapped
         evt.fType   = kExpose;
         MapEvent(*(QPaintEvent *)e,evt);
         selectEventMask |=  kExposureMask;
         break;
      case QEvent::Hide:                //   widget's window should be unmapped
         evt.fType   = kUnmapNotify;
         selectEventMask |=  kStructureNotifyMask;
         break;
      case QEvent::Resize:              // window move/resize event
         evt.fType   = kConfigureNotify;
         MapEvent(*(QResizeEvent *)e,evt);
         selectEventMask |=  kStructureNotifyMask;
         break;
      case QEvent::Move:
         evt.fType   = kConfigureNotify;
         MapEvent(*(QMoveEvent *)e,evt);
         selectEventMask |=  kStructureNotifyMask;
         break;
       case QEvent::Clipboard:          // window move/resize event
         evt.fType  =  kSelectionNotify;
#ifdef R__QTX11
          // this is the platform depended part
         evt.fType   = kSelectionClear; // , kSelectionRequest, kSelectionNotify;
#endif
         // grabSelectEvent  = kTRUE; // to be revised later, It was: grabEvent = kTRUE;
         selectEventMask |=  kStructureNotifyMask;
         break;
     default:
         if ( e->type() >= TQUserEvent::Id()) {
            // evt.fType = kClientMessage; ..event type will be set by MapEvent anyway
            MapEvent(*(TQUserEvent *)e,evt);
            grabSelectEvent  = kTRUE; // to be revised later, It was: grabEvent = kTRUE;
            if (evt.fType != kClientMessage && evt.fType != kDestroyNotify)
                fprintf(stderr, "** Error ** TQUserEvent:  %d %d\n", evt.fType, kClientMessage);
            else if (evt.fType == kDestroyNotify) {
               //  remove all events related to the dead window
               // fprintf(stderr,"kClientEvent kDestroyNotify %p id=%x evt\n",((TQtClientWidget*)(TGQt::wid(evt.fWindow))), evt.fWindow);
#ifdef QTDEBUG
               int nRemoved = fRootEventQueue->RemoveItems(&evt);
               fprintf(stderr,"kClientMessage kDestroyNotify %p %d events have been removed from the queue\n",evt.fWindow,nRemoved );
#endif
            }
            // else fprintf(stderr, "TQUserEvent: %p  %d %d\n", evt.fWindow, evt.fType, kClientMessage);
         } else {
            delete &evt;
            if (filterTime) filterTime->Stop();
            return kFALSE;  // We need the standard Qt processing
         }

        // GUI event types. Later merge with EEventType in Button.h and rename to
        // EEventTypes. Also rename in that case kGKeyPress to kKeyPress.
        //enum EGEventType {
        //   kClientMessage, kSelectionClear, kSelectionRequest, kSelectionNotify,
        //   kColormapNotify
        //};
       break;
   };

   bool justInit =  false;
   if (!fRootEventQueue) {
      fRootEventQueue = new TQtEventQueue();
      // send message to another thread
      justInit = true;
   }
#if ROOT_VERSION_CODE >= ROOT_VERSION(9,15,9)         
   if (evt.fType ==  kExpose ) {
     Bool_t keepEvent4Qt =
          (((TQtClientWidget*)(TGQt::wid(evt.fWindow)))->IsEventSelected(selectEventMask) );
     if (filterTime) filterTime->Stop();
     delete &evt;
     return !keepEvent4Qt;
   }
#endif         

   if ( destroyNotify 
       || (evt.fType == kClientMessage) || (evt.fType == kDestroyNotify)  ||
       (
           (  (grabSelectEvent && ( mouseEvent  || (evt.fType == kEnterNotify ) || (evt.fType == kLeaveNotify ) ) )
         ||
           ( (!fgGrabber || !( mouseEvent  || (evt.fType == kEnterNotify ) || (evt.fType == kLeaveNotify ) ) )
            && 
            ((TQtClientWidget*)(TGQt::wid(evt.fWindow)))->IsEventSelected(selectEventMask) ) ) ) )
   {
//---------------------------------------------------------------------------
//    QT message has been mapped to ROOT one and ready to be shipped out
//---------------------------------------------------------------------------
     fRootEventQueue->enqueue(&evt);
//---------------------------------------------------------------------------
   } else {
      delete &evt;
      if (filterTime) filterTime->Stop();
      return kFALSE;  // We need the standard Qt processing
   }

   
   // We should hold ALL events because we want to process them themsleves.
   // However non-accepted mouse event should be propagated further
   if (wheelEvent && !wheelEvent->isAccepted () ) return kFALSE;
   if (mouseEvent && !mouseEvent->isAccepted () ) return kFALSE;
   if (keyEvent   && !keyEvent->isAccepted ()   ) return kFALSE;
   if (focusEvent                               ) return kFALSE;
   switch (e->type() ) {
      case QEvent::Show:                 //  Widget was shown on screen,
      case QEvent::ShowWindowRequest:    // (obsolete)  widget's window should be mapped
      case QEvent::Hide:                 //  widget's window should be unmapped
      case QEvent::Leave:
      case QEvent::Enter:
      case QEvent::Shortcut:
         if (filterTime) filterTime->Stop();
         return kFALSE;
      default: break;
//      case QEvent::Paint:                //   widget's window should be mapped
   };
  // return frame->GetCanvasWidget()==0;
  return kTRUE; // eat event. We want the special processing via TGClient
}

//______________________________________________________________________________
void TQtClientFilter::GrabPointer(TQtClientWidget *grabber, UInt_t evmask, Window_t /*confine*/,
                                    QCursor *cursor, Bool_t grab, Bool_t owner_events)
{
    // Set the X11 style active grabbing for ROOT TG widgets
   TQtPointerGrabber *gr = fgGrabber; fgGrabber = 0; 
   if (gr) {
      if (gr->IsGrabbing(fgButtonGrabber)) fgButtonGrabber = 0;
      delete gr;
   }
   if (grab) {
        fgGrabber = new TQtPointerGrabber (grabber,evmask,grabber->SelectEventMask()
                                    , cursor, grab, owner_events);
   }
}

//______________________________________________________________________________
//
//   class TQtPointerGrabber  to implement X11 style mouse grabbing under Qt
//______________________________________________________________________________

//______________________________________________________________________________
TQtPointerGrabber::TQtPointerGrabber(TQtClientWidget *grabber, UInt_t evGrabMask
                                    , UInt_t evInputMask, QCursor *cursor
                                    , Bool_t grab, Bool_t owner_events
                                    , QWidget *confine)
{
   fIsActive= kFALSE;
   SetGrabPointer(grabber,evGrabMask, evInputMask,cursor,grab,owner_events, confine);
}
//______________________________________________________________________________
TQtPointerGrabber::~TQtPointerGrabber()
{
   SetGrabPointer(0,0,0,0,kFALSE);
}
//______________________________________________________________________________
void TQtPointerGrabber::ActivateGrabbing(bool on)
{
   // Activate the active mouse pointer event grabbing.
   static int grabCounter = 0;
   assert (fPointerGrabber);
   QWidget *qtGrabber = QWidget::mouseGrabber();
   if (on) {
      if (qtGrabber != fPointerGrabber) {
         if (qtGrabber) qtGrabber->releaseMouse();
            if (fPointerGrabber->isVisible() ) {
            if (fGrabPointerCursor) fPointerGrabber->grabMouse(*fGrabPointerCursor);
            else                    fPointerGrabber->grabMouse();
#ifdef  QT3
            if (!QApplication::hasGlobalMouseTracking () )
                 QApplication::setGlobalMouseTracking (true);
#endif
            grabCounter++;
         }
      }
      // assert (grabCounter < 2);
   } else {
      if (fIsActive && (qtGrabber != fPointerGrabber))  {
         fprintf(stderr," ** Attention ** TQtPointerGrabber::ActivateGrabbing qtGrabber %p == fPointerGrabber %p\n", qtGrabber, fPointerGrabber);
      }
      if (qtGrabber) qtGrabber->releaseMouse();
      if (fGrabPointerCursor) fPointerGrabber->SetCursor();
#ifdef  QT3
      if (QApplication::hasGlobalMouseTracking () )
          QApplication::setGlobalMouseTracking (false);
#endif
   }
   fIsActive = on;
   // Make sure the result is correct
   QWidget *grabber = QWidget::mouseGrabber();

   assert ( !fPointerGrabber->isVisible() || (fIsActive) || (!fIsActive && !grabber) );
}
//______________________________________________________________________________
void  TQtPointerGrabber::SetGrabPointer(TQtClientWidget *grabber
                             , UInt_t evGrabMask, UInt_t evInputMask
                             , QCursor *cursor, Bool_t grab, Bool_t owner_events
                             , QWidget *confine)
{
   if (grab) {
      // Grab widget. 
      fPointerGrabber       = grabber;
      fGrabPointerEventMask = evGrabMask;
      fInputPointerEventMask= evInputMask;
      fGrabPointerOwner     = owner_events;
      fGrabPointerCursor    = cursor;
      fPointerConfine       = confine;
      // Set the mouse tracking
      fPointerGrabber->setMouseTracking( fGrabPointerEventMask & kPointerMotionMask );
 } else {
      // Restore the normal mouse tracking.
      fPointerGrabber->setMouseTracking( fInputPointerEventMask & kPointerMotionMask );
            
      // Ungrab the widget.
      DisactivateGrabbing();
      
      fPointerGrabber       = 0;
      fGrabPointerEventMask = 0;
      fGrabPointerOwner     = kFALSE;
      fGrabPointerCursor    = 0;
      fPointerConfine       = 0;
 }
 // fprintf(stderr," TQtPointerGrabber::SetGrabPointer : -- grab= %d; grabber = %p; PointerMask=%o; normal Mask = %o; owner = %d\n"
 //         ,  grab, fPointerGrabber,  fGrabPointerEventMask, fInputPointerEventMask
 //         ,  fGrabPointerOwner);

}
//______________________________________________________________________________
bool TQtPointerGrabber::SelectGrab(Event_t &evt, UInt_t selectEventMask, QMouseEvent &mouse)
{ 
  // Select Event:  --  25.11.2005  --
  TQtClientWidget *widget = (TQtClientWidget*)TGQt::wid(evt.fWindow);
  bool pass2Root = FALSE;

  QWidget *grabber = QWidget::mouseGrabber();
  TQtClientWidget *pointerGrabber =  fPointerGrabber;
  if (fIsActive && grabber && (grabber != (QWidget *)pointerGrabber) )
  {
     // This is a Qt automical grabbing we have to fight with :)
     // fprintf(stderr, "1.  TQtPointerGrabber::SelectGrab Qt grabber to fight with Qt grabber = %p, ROOT grabber = %p\n"
     //      , this, grabber );
     DisactivateGrabbing();
     grabber = QWidget::mouseGrabber();
  }
  bool inside = FALSE;
  if ( ( inside = IsMouseCursorInside() ) ) {
      if ( grabber ) {
           if ( fGrabPointerOwner ) { 
                // The cursor has "Entered" the application
                // Disable the Qt automatic grabbing
                DisactivateGrabbing();
                // Generate the Enter Event 
                // . . . to be done yet . . . 
                
                // Find the child widget there to pass event to
                widget = (TQtClientWidget *)widgetAt(evt.fXRoot,evt.fYRoot);
                if (widget == pointerGrabber) widget = 0;
           } else {
              // re-grab it as needed 
              ActivateGrabbing();
              widget = 0;
           }
      } else {
         // we remained inside
         // make sure our flag is Ok. (To disable the possible Qt interfere) 
         if (!fGrabPointerOwner) 
         { 
            ActivateGrabbing();
            widget = 0;
         } else {
            DisactivateGrabbing();
            if (widget == pointerGrabber) widget = 0;
         }
      }
      // fprintf(stderr, "2. TQtPointerGrabber::SelectGrab  grabber = %p, ROOT grabber = %p widget=%p, globalTracjing =%d, MouseGrabber=%p want=%x\n"
      //      , grabber,pointerGrabber, widget, QApplication::hasGlobalMouseTracking (),QWidget::mouseGrabber(),WantEvent(widget, selectEventMask)); 

   } else { // The mouse cursor is outside of the application
       if ( !grabber ) {
          ActivateGrabbing();
          grabber = pointerGrabber;
       } else {
         //  make sure it is our grab
         assert (grabber == (QWidget *)pointerGrabber );
       }
       widget = 0;
   }
   
   // Check the selection
   if (! (fGrabPointerOwner || inside) )
   {
      mouse.accept();
      if ( IsGrabSelected (selectEventMask) ) {
          // Grab this event.
         pointerGrabber->GrabEvent(evt);
         // fprintf(stderr," QtPointerGrabber::SelectGrab  1.1. Active grabbing %p id =%x inside = %d\n",
         //        pointerGrabber, evt.fWindow, inside);
         pass2Root = TRUE;
      }
   } else {
     if ( IsGrabSelected (selectEventMask) ) {
        // Look for the the grabbing parent.
        if (widget) {
           pass2Root = (widget->SelectEventMask() & selectEventMask);
           // fprintf(stderr," QtPointerGrabber::SelectGrab  1.3. As usual grabbing %p id =%x inside = %d, pass=%d mask %o; Qt  grabber=%p\n",
           //     widget, evt.fWindow, inside, pass2Root, selectEventMask,  QWidget::mouseGrabber() );
           if (!pass2Root) {
              TQtClientWidget *parent = (TQtClientWidget *)widget->parentWidget();
              // Look up ahead
              while (parent  && !(parent->SelectEventMask() & selectEventMask) && (parent != pointerGrabber) )
              {      parent = (TQtClientWidget *)parent->parentWidget();      }
              if (!parent || parent == pointerGrabber )  widget =0;
              else if (parent && (parent != pointerGrabber) ) {
                 // fprintf(stderr," QtPointerGrabber::SelectGrab  1.4. Expect next parent  grabbing %p mask %o; Qt grabber=%p\n",
                 //      parent, selectEventMask,  QWidget::mouseGrabber() );
              }
           }
        }
        if (!widget) {
           pointerGrabber->GrabEvent(evt);
           // fprintf(stderr," QtPointerGrabber::SelectGrab  1.5. Active grabbing %p id =%x inside = %d\n",
           //     pointerGrabber, evt.fWindow, inside);
           pass2Root = TRUE;
           mouse.accept();
        }
     } else if (widget) {
         pass2Root = widget->SelectEventMask() & selectEventMask;
         // fprintf(stderr," QtPointerGrabber::SelectGrab  1.6. As usual grabbing %p id =%x inside = %d, pass=%d mask %o\n",
         //       pointerGrabber, evt.fWindow, inside, pass2Root, selectEventMask );
         // if (pass2Root) mouse.accept();       
     }
   }

   return pass2Root;
 }
//______________________________________________________________________________
Bool_t TQtPointerGrabber::IsGrabSelected(UInt_t selectEventMask) const
{  return  fGrabPointerEventMask & selectEventMask; }
 TQtClientFilter.cxx:1
 TQtClientFilter.cxx:2
 TQtClientFilter.cxx:3
 TQtClientFilter.cxx:4
 TQtClientFilter.cxx:5
 TQtClientFilter.cxx:6
 TQtClientFilter.cxx:7
 TQtClientFilter.cxx:8
 TQtClientFilter.cxx:9
 TQtClientFilter.cxx:10
 TQtClientFilter.cxx:11
 TQtClientFilter.cxx:12
 TQtClientFilter.cxx:13
 TQtClientFilter.cxx:14
 TQtClientFilter.cxx:15
 TQtClientFilter.cxx:16
 TQtClientFilter.cxx:17
 TQtClientFilter.cxx:18
 TQtClientFilter.cxx:19
 TQtClientFilter.cxx:20
 TQtClientFilter.cxx:21
 TQtClientFilter.cxx:22
 TQtClientFilter.cxx:23
 TQtClientFilter.cxx:24
 TQtClientFilter.cxx:25
 TQtClientFilter.cxx:26
 TQtClientFilter.cxx:27
 TQtClientFilter.cxx:28
 TQtClientFilter.cxx:29
 TQtClientFilter.cxx:30
 TQtClientFilter.cxx:31
 TQtClientFilter.cxx:32
 TQtClientFilter.cxx:33
 TQtClientFilter.cxx:34
 TQtClientFilter.cxx:35
 TQtClientFilter.cxx:36
 TQtClientFilter.cxx:37
 TQtClientFilter.cxx:38
 TQtClientFilter.cxx:39
 TQtClientFilter.cxx:40
 TQtClientFilter.cxx:41
 TQtClientFilter.cxx:42
 TQtClientFilter.cxx:43
 TQtClientFilter.cxx:44
 TQtClientFilter.cxx:45
 TQtClientFilter.cxx:46
 TQtClientFilter.cxx:47
 TQtClientFilter.cxx:48
 TQtClientFilter.cxx:49
 TQtClientFilter.cxx:50
 TQtClientFilter.cxx:51
 TQtClientFilter.cxx:52
 TQtClientFilter.cxx:53
 TQtClientFilter.cxx:54
 TQtClientFilter.cxx:55
 TQtClientFilter.cxx:56
 TQtClientFilter.cxx:57
 TQtClientFilter.cxx:58
 TQtClientFilter.cxx:59
 TQtClientFilter.cxx:60
 TQtClientFilter.cxx:61
 TQtClientFilter.cxx:62
 TQtClientFilter.cxx:63
 TQtClientFilter.cxx:64
 TQtClientFilter.cxx:65
 TQtClientFilter.cxx:66
 TQtClientFilter.cxx:67
 TQtClientFilter.cxx:68
 TQtClientFilter.cxx:69
 TQtClientFilter.cxx:70
 TQtClientFilter.cxx:71
 TQtClientFilter.cxx:72
 TQtClientFilter.cxx:73
 TQtClientFilter.cxx:74
 TQtClientFilter.cxx:75
 TQtClientFilter.cxx:76
 TQtClientFilter.cxx:77
 TQtClientFilter.cxx:78
 TQtClientFilter.cxx:79
 TQtClientFilter.cxx:80
 TQtClientFilter.cxx:81
 TQtClientFilter.cxx:82
 TQtClientFilter.cxx:83
 TQtClientFilter.cxx:84
 TQtClientFilter.cxx:85
 TQtClientFilter.cxx:86
 TQtClientFilter.cxx:87
 TQtClientFilter.cxx:88
 TQtClientFilter.cxx:89
 TQtClientFilter.cxx:90
 TQtClientFilter.cxx:91
 TQtClientFilter.cxx:92
 TQtClientFilter.cxx:93
 TQtClientFilter.cxx:94
 TQtClientFilter.cxx:95
 TQtClientFilter.cxx:96
 TQtClientFilter.cxx:97
 TQtClientFilter.cxx:98
 TQtClientFilter.cxx:99
 TQtClientFilter.cxx:100
 TQtClientFilter.cxx:101
 TQtClientFilter.cxx:102
 TQtClientFilter.cxx:103
 TQtClientFilter.cxx:104
 TQtClientFilter.cxx:105
 TQtClientFilter.cxx:106
 TQtClientFilter.cxx:107
 TQtClientFilter.cxx:108
 TQtClientFilter.cxx:109
 TQtClientFilter.cxx:110
 TQtClientFilter.cxx:111
 TQtClientFilter.cxx:112
 TQtClientFilter.cxx:113
 TQtClientFilter.cxx:114
 TQtClientFilter.cxx:115
 TQtClientFilter.cxx:116
 TQtClientFilter.cxx:117
 TQtClientFilter.cxx:118
 TQtClientFilter.cxx:119
 TQtClientFilter.cxx:120
 TQtClientFilter.cxx:121
 TQtClientFilter.cxx:122
 TQtClientFilter.cxx:123
 TQtClientFilter.cxx:124
 TQtClientFilter.cxx:125
 TQtClientFilter.cxx:126
 TQtClientFilter.cxx:127
 TQtClientFilter.cxx:128
 TQtClientFilter.cxx:129
 TQtClientFilter.cxx:130
 TQtClientFilter.cxx:131
 TQtClientFilter.cxx:132
 TQtClientFilter.cxx:133
 TQtClientFilter.cxx:134
 TQtClientFilter.cxx:135
 TQtClientFilter.cxx:136
 TQtClientFilter.cxx:137
 TQtClientFilter.cxx:138
 TQtClientFilter.cxx:139
 TQtClientFilter.cxx:140
 TQtClientFilter.cxx:141
 TQtClientFilter.cxx:142
 TQtClientFilter.cxx:143
 TQtClientFilter.cxx:144
 TQtClientFilter.cxx:145
 TQtClientFilter.cxx:146
 TQtClientFilter.cxx:147
 TQtClientFilter.cxx:148
 TQtClientFilter.cxx:149
 TQtClientFilter.cxx:150
 TQtClientFilter.cxx:151
 TQtClientFilter.cxx:152
 TQtClientFilter.cxx:153
 TQtClientFilter.cxx:154
 TQtClientFilter.cxx:155
 TQtClientFilter.cxx:156
 TQtClientFilter.cxx:157
 TQtClientFilter.cxx:158
 TQtClientFilter.cxx:159
 TQtClientFilter.cxx:160
 TQtClientFilter.cxx:161
 TQtClientFilter.cxx:162
 TQtClientFilter.cxx:163
 TQtClientFilter.cxx:164
 TQtClientFilter.cxx:165
 TQtClientFilter.cxx:166
 TQtClientFilter.cxx:167
 TQtClientFilter.cxx:168
 TQtClientFilter.cxx:169
 TQtClientFilter.cxx:170
 TQtClientFilter.cxx:171
 TQtClientFilter.cxx:172
 TQtClientFilter.cxx:173
 TQtClientFilter.cxx:174
 TQtClientFilter.cxx:175
 TQtClientFilter.cxx:176
 TQtClientFilter.cxx:177
 TQtClientFilter.cxx:178
 TQtClientFilter.cxx:179
 TQtClientFilter.cxx:180
 TQtClientFilter.cxx:181
 TQtClientFilter.cxx:182
 TQtClientFilter.cxx:183
 TQtClientFilter.cxx:184
 TQtClientFilter.cxx:185
 TQtClientFilter.cxx:186
 TQtClientFilter.cxx:187
 TQtClientFilter.cxx:188
 TQtClientFilter.cxx:189
 TQtClientFilter.cxx:190
 TQtClientFilter.cxx:191
 TQtClientFilter.cxx:192
 TQtClientFilter.cxx:193
 TQtClientFilter.cxx:194
 TQtClientFilter.cxx:195
 TQtClientFilter.cxx:196
 TQtClientFilter.cxx:197
 TQtClientFilter.cxx:198
 TQtClientFilter.cxx:199
 TQtClientFilter.cxx:200
 TQtClientFilter.cxx:201
 TQtClientFilter.cxx:202
 TQtClientFilter.cxx:203
 TQtClientFilter.cxx:204
 TQtClientFilter.cxx:205
 TQtClientFilter.cxx:206
 TQtClientFilter.cxx:207
 TQtClientFilter.cxx:208
 TQtClientFilter.cxx:209
 TQtClientFilter.cxx:210
 TQtClientFilter.cxx:211
 TQtClientFilter.cxx:212
 TQtClientFilter.cxx:213
 TQtClientFilter.cxx:214
 TQtClientFilter.cxx:215
 TQtClientFilter.cxx:216
 TQtClientFilter.cxx:217
 TQtClientFilter.cxx:218
 TQtClientFilter.cxx:219
 TQtClientFilter.cxx:220
 TQtClientFilter.cxx:221
 TQtClientFilter.cxx:222
 TQtClientFilter.cxx:223
 TQtClientFilter.cxx:224
 TQtClientFilter.cxx:225
 TQtClientFilter.cxx:226
 TQtClientFilter.cxx:227
 TQtClientFilter.cxx:228
 TQtClientFilter.cxx:229
 TQtClientFilter.cxx:230
 TQtClientFilter.cxx:231
 TQtClientFilter.cxx:232
 TQtClientFilter.cxx:233
 TQtClientFilter.cxx:234
 TQtClientFilter.cxx:235
 TQtClientFilter.cxx:236
 TQtClientFilter.cxx:237
 TQtClientFilter.cxx:238
 TQtClientFilter.cxx:239
 TQtClientFilter.cxx:240
 TQtClientFilter.cxx:241
 TQtClientFilter.cxx:242
 TQtClientFilter.cxx:243
 TQtClientFilter.cxx:244
 TQtClientFilter.cxx:245
 TQtClientFilter.cxx:246
 TQtClientFilter.cxx:247
 TQtClientFilter.cxx:248
 TQtClientFilter.cxx:249
 TQtClientFilter.cxx:250
 TQtClientFilter.cxx:251
 TQtClientFilter.cxx:252
 TQtClientFilter.cxx:253
 TQtClientFilter.cxx:254
 TQtClientFilter.cxx:255
 TQtClientFilter.cxx:256
 TQtClientFilter.cxx:257
 TQtClientFilter.cxx:258
 TQtClientFilter.cxx:259
 TQtClientFilter.cxx:260
 TQtClientFilter.cxx:261
 TQtClientFilter.cxx:262
 TQtClientFilter.cxx:263
 TQtClientFilter.cxx:264
 TQtClientFilter.cxx:265
 TQtClientFilter.cxx:266
 TQtClientFilter.cxx:267
 TQtClientFilter.cxx:268
 TQtClientFilter.cxx:269
 TQtClientFilter.cxx:270
 TQtClientFilter.cxx:271
 TQtClientFilter.cxx:272
 TQtClientFilter.cxx:273
 TQtClientFilter.cxx:274
 TQtClientFilter.cxx:275
 TQtClientFilter.cxx:276
 TQtClientFilter.cxx:277
 TQtClientFilter.cxx:278
 TQtClientFilter.cxx:279
 TQtClientFilter.cxx:280
 TQtClientFilter.cxx:281
 TQtClientFilter.cxx:282
 TQtClientFilter.cxx:283
 TQtClientFilter.cxx:284
 TQtClientFilter.cxx:285
 TQtClientFilter.cxx:286
 TQtClientFilter.cxx:287
 TQtClientFilter.cxx:288
 TQtClientFilter.cxx:289
 TQtClientFilter.cxx:290
 TQtClientFilter.cxx:291
 TQtClientFilter.cxx:292
 TQtClientFilter.cxx:293
 TQtClientFilter.cxx:294
 TQtClientFilter.cxx:295
 TQtClientFilter.cxx:296
 TQtClientFilter.cxx:297
 TQtClientFilter.cxx:298
 TQtClientFilter.cxx:299
 TQtClientFilter.cxx:300
 TQtClientFilter.cxx:301
 TQtClientFilter.cxx:302
 TQtClientFilter.cxx:303
 TQtClientFilter.cxx:304
 TQtClientFilter.cxx:305
 TQtClientFilter.cxx:306
 TQtClientFilter.cxx:307
 TQtClientFilter.cxx:308
 TQtClientFilter.cxx:309
 TQtClientFilter.cxx:310
 TQtClientFilter.cxx:311
 TQtClientFilter.cxx:312
 TQtClientFilter.cxx:313
 TQtClientFilter.cxx:314
 TQtClientFilter.cxx:315
 TQtClientFilter.cxx:316
 TQtClientFilter.cxx:317
 TQtClientFilter.cxx:318
 TQtClientFilter.cxx:319
 TQtClientFilter.cxx:320
 TQtClientFilter.cxx:321
 TQtClientFilter.cxx:322
 TQtClientFilter.cxx:323
 TQtClientFilter.cxx:324
 TQtClientFilter.cxx:325
 TQtClientFilter.cxx:326
 TQtClientFilter.cxx:327
 TQtClientFilter.cxx:328
 TQtClientFilter.cxx:329
 TQtClientFilter.cxx:330
 TQtClientFilter.cxx:331
 TQtClientFilter.cxx:332
 TQtClientFilter.cxx:333
 TQtClientFilter.cxx:334
 TQtClientFilter.cxx:335
 TQtClientFilter.cxx:336
 TQtClientFilter.cxx:337
 TQtClientFilter.cxx:338
 TQtClientFilter.cxx:339
 TQtClientFilter.cxx:340
 TQtClientFilter.cxx:341
 TQtClientFilter.cxx:342
 TQtClientFilter.cxx:343
 TQtClientFilter.cxx:344
 TQtClientFilter.cxx:345
 TQtClientFilter.cxx:346
 TQtClientFilter.cxx:347
 TQtClientFilter.cxx:348
 TQtClientFilter.cxx:349
 TQtClientFilter.cxx:350
 TQtClientFilter.cxx:351
 TQtClientFilter.cxx:352
 TQtClientFilter.cxx:353
 TQtClientFilter.cxx:354
 TQtClientFilter.cxx:355
 TQtClientFilter.cxx:356
 TQtClientFilter.cxx:357
 TQtClientFilter.cxx:358
 TQtClientFilter.cxx:359
 TQtClientFilter.cxx:360
 TQtClientFilter.cxx:361
 TQtClientFilter.cxx:362
 TQtClientFilter.cxx:363
 TQtClientFilter.cxx:364
 TQtClientFilter.cxx:365
 TQtClientFilter.cxx:366
 TQtClientFilter.cxx:367
 TQtClientFilter.cxx:368
 TQtClientFilter.cxx:369
 TQtClientFilter.cxx:370
 TQtClientFilter.cxx:371
 TQtClientFilter.cxx:372
 TQtClientFilter.cxx:373
 TQtClientFilter.cxx:374
 TQtClientFilter.cxx:375
 TQtClientFilter.cxx:376
 TQtClientFilter.cxx:377
 TQtClientFilter.cxx:378
 TQtClientFilter.cxx:379
 TQtClientFilter.cxx:380
 TQtClientFilter.cxx:381
 TQtClientFilter.cxx:382
 TQtClientFilter.cxx:383
 TQtClientFilter.cxx:384
 TQtClientFilter.cxx:385
 TQtClientFilter.cxx:386
 TQtClientFilter.cxx:387
 TQtClientFilter.cxx:388
 TQtClientFilter.cxx:389
 TQtClientFilter.cxx:390
 TQtClientFilter.cxx:391
 TQtClientFilter.cxx:392
 TQtClientFilter.cxx:393
 TQtClientFilter.cxx:394
 TQtClientFilter.cxx:395
 TQtClientFilter.cxx:396
 TQtClientFilter.cxx:397
 TQtClientFilter.cxx:398
 TQtClientFilter.cxx:399
 TQtClientFilter.cxx:400
 TQtClientFilter.cxx:401
 TQtClientFilter.cxx:402
 TQtClientFilter.cxx:403
 TQtClientFilter.cxx:404
 TQtClientFilter.cxx:405
 TQtClientFilter.cxx:406
 TQtClientFilter.cxx:407
 TQtClientFilter.cxx:408
 TQtClientFilter.cxx:409
 TQtClientFilter.cxx:410
 TQtClientFilter.cxx:411
 TQtClientFilter.cxx:412
 TQtClientFilter.cxx:413
 TQtClientFilter.cxx:414
 TQtClientFilter.cxx:415
 TQtClientFilter.cxx:416
 TQtClientFilter.cxx:417
 TQtClientFilter.cxx:418
 TQtClientFilter.cxx:419
 TQtClientFilter.cxx:420
 TQtClientFilter.cxx:421
 TQtClientFilter.cxx:422
 TQtClientFilter.cxx:423
 TQtClientFilter.cxx:424
 TQtClientFilter.cxx:425
 TQtClientFilter.cxx:426
 TQtClientFilter.cxx:427
 TQtClientFilter.cxx:428
 TQtClientFilter.cxx:429
 TQtClientFilter.cxx:430
 TQtClientFilter.cxx:431
 TQtClientFilter.cxx:432
 TQtClientFilter.cxx:433
 TQtClientFilter.cxx:434
 TQtClientFilter.cxx:435
 TQtClientFilter.cxx:436
 TQtClientFilter.cxx:437
 TQtClientFilter.cxx:438
 TQtClientFilter.cxx:439
 TQtClientFilter.cxx:440
 TQtClientFilter.cxx:441
 TQtClientFilter.cxx:442
 TQtClientFilter.cxx:443
 TQtClientFilter.cxx:444
 TQtClientFilter.cxx:445
 TQtClientFilter.cxx:446
 TQtClientFilter.cxx:447
 TQtClientFilter.cxx:448
 TQtClientFilter.cxx:449
 TQtClientFilter.cxx:450
 TQtClientFilter.cxx:451
 TQtClientFilter.cxx:452
 TQtClientFilter.cxx:453
 TQtClientFilter.cxx:454
 TQtClientFilter.cxx:455
 TQtClientFilter.cxx:456
 TQtClientFilter.cxx:457
 TQtClientFilter.cxx:458
 TQtClientFilter.cxx:459
 TQtClientFilter.cxx:460
 TQtClientFilter.cxx:461
 TQtClientFilter.cxx:462
 TQtClientFilter.cxx:463
 TQtClientFilter.cxx:464
 TQtClientFilter.cxx:465
 TQtClientFilter.cxx:466
 TQtClientFilter.cxx:467
 TQtClientFilter.cxx:468
 TQtClientFilter.cxx:469
 TQtClientFilter.cxx:470
 TQtClientFilter.cxx:471
 TQtClientFilter.cxx:472
 TQtClientFilter.cxx:473
 TQtClientFilter.cxx:474
 TQtClientFilter.cxx:475
 TQtClientFilter.cxx:476
 TQtClientFilter.cxx:477
 TQtClientFilter.cxx:478
 TQtClientFilter.cxx:479
 TQtClientFilter.cxx:480
 TQtClientFilter.cxx:481
 TQtClientFilter.cxx:482
 TQtClientFilter.cxx:483
 TQtClientFilter.cxx:484
 TQtClientFilter.cxx:485
 TQtClientFilter.cxx:486
 TQtClientFilter.cxx:487
 TQtClientFilter.cxx:488
 TQtClientFilter.cxx:489
 TQtClientFilter.cxx:490
 TQtClientFilter.cxx:491
 TQtClientFilter.cxx:492
 TQtClientFilter.cxx:493
 TQtClientFilter.cxx:494
 TQtClientFilter.cxx:495
 TQtClientFilter.cxx:496
 TQtClientFilter.cxx:497
 TQtClientFilter.cxx:498
 TQtClientFilter.cxx:499
 TQtClientFilter.cxx:500
 TQtClientFilter.cxx:501
 TQtClientFilter.cxx:502
 TQtClientFilter.cxx:503
 TQtClientFilter.cxx:504
 TQtClientFilter.cxx:505
 TQtClientFilter.cxx:506
 TQtClientFilter.cxx:507
 TQtClientFilter.cxx:508
 TQtClientFilter.cxx:509
 TQtClientFilter.cxx:510
 TQtClientFilter.cxx:511
 TQtClientFilter.cxx:512
 TQtClientFilter.cxx:513
 TQtClientFilter.cxx:514
 TQtClientFilter.cxx:515
 TQtClientFilter.cxx:516
 TQtClientFilter.cxx:517
 TQtClientFilter.cxx:518
 TQtClientFilter.cxx:519
 TQtClientFilter.cxx:520
 TQtClientFilter.cxx:521
 TQtClientFilter.cxx:522
 TQtClientFilter.cxx:523
 TQtClientFilter.cxx:524
 TQtClientFilter.cxx:525
 TQtClientFilter.cxx:526
 TQtClientFilter.cxx:527
 TQtClientFilter.cxx:528
 TQtClientFilter.cxx:529
 TQtClientFilter.cxx:530
 TQtClientFilter.cxx:531
 TQtClientFilter.cxx:532
 TQtClientFilter.cxx:533
 TQtClientFilter.cxx:534
 TQtClientFilter.cxx:535
 TQtClientFilter.cxx:536
 TQtClientFilter.cxx:537
 TQtClientFilter.cxx:538
 TQtClientFilter.cxx:539
 TQtClientFilter.cxx:540
 TQtClientFilter.cxx:541
 TQtClientFilter.cxx:542
 TQtClientFilter.cxx:543
 TQtClientFilter.cxx:544
 TQtClientFilter.cxx:545
 TQtClientFilter.cxx:546
 TQtClientFilter.cxx:547
 TQtClientFilter.cxx:548
 TQtClientFilter.cxx:549
 TQtClientFilter.cxx:550
 TQtClientFilter.cxx:551
 TQtClientFilter.cxx:552
 TQtClientFilter.cxx:553
 TQtClientFilter.cxx:554
 TQtClientFilter.cxx:555
 TQtClientFilter.cxx:556
 TQtClientFilter.cxx:557
 TQtClientFilter.cxx:558
 TQtClientFilter.cxx:559
 TQtClientFilter.cxx:560
 TQtClientFilter.cxx:561
 TQtClientFilter.cxx:562
 TQtClientFilter.cxx:563
 TQtClientFilter.cxx:564
 TQtClientFilter.cxx:565
 TQtClientFilter.cxx:566
 TQtClientFilter.cxx:567
 TQtClientFilter.cxx:568
 TQtClientFilter.cxx:569
 TQtClientFilter.cxx:570
 TQtClientFilter.cxx:571
 TQtClientFilter.cxx:572
 TQtClientFilter.cxx:573
 TQtClientFilter.cxx:574
 TQtClientFilter.cxx:575
 TQtClientFilter.cxx:576
 TQtClientFilter.cxx:577
 TQtClientFilter.cxx:578
 TQtClientFilter.cxx:579
 TQtClientFilter.cxx:580
 TQtClientFilter.cxx:581
 TQtClientFilter.cxx:582
 TQtClientFilter.cxx:583
 TQtClientFilter.cxx:584
 TQtClientFilter.cxx:585
 TQtClientFilter.cxx:586
 TQtClientFilter.cxx:587
 TQtClientFilter.cxx:588
 TQtClientFilter.cxx:589
 TQtClientFilter.cxx:590
 TQtClientFilter.cxx:591
 TQtClientFilter.cxx:592
 TQtClientFilter.cxx:593
 TQtClientFilter.cxx:594
 TQtClientFilter.cxx:595
 TQtClientFilter.cxx:596
 TQtClientFilter.cxx:597
 TQtClientFilter.cxx:598
 TQtClientFilter.cxx:599
 TQtClientFilter.cxx:600
 TQtClientFilter.cxx:601
 TQtClientFilter.cxx:602
 TQtClientFilter.cxx:603
 TQtClientFilter.cxx:604
 TQtClientFilter.cxx:605
 TQtClientFilter.cxx:606
 TQtClientFilter.cxx:607
 TQtClientFilter.cxx:608
 TQtClientFilter.cxx:609
 TQtClientFilter.cxx:610
 TQtClientFilter.cxx:611
 TQtClientFilter.cxx:612
 TQtClientFilter.cxx:613
 TQtClientFilter.cxx:614
 TQtClientFilter.cxx:615
 TQtClientFilter.cxx:616
 TQtClientFilter.cxx:617
 TQtClientFilter.cxx:618
 TQtClientFilter.cxx:619
 TQtClientFilter.cxx:620
 TQtClientFilter.cxx:621
 TQtClientFilter.cxx:622
 TQtClientFilter.cxx:623
 TQtClientFilter.cxx:624
 TQtClientFilter.cxx:625
 TQtClientFilter.cxx:626
 TQtClientFilter.cxx:627
 TQtClientFilter.cxx:628
 TQtClientFilter.cxx:629
 TQtClientFilter.cxx:630
 TQtClientFilter.cxx:631
 TQtClientFilter.cxx:632
 TQtClientFilter.cxx:633
 TQtClientFilter.cxx:634
 TQtClientFilter.cxx:635
 TQtClientFilter.cxx:636
 TQtClientFilter.cxx:637
 TQtClientFilter.cxx:638
 TQtClientFilter.cxx:639
 TQtClientFilter.cxx:640
 TQtClientFilter.cxx:641
 TQtClientFilter.cxx:642
 TQtClientFilter.cxx:643
 TQtClientFilter.cxx:644
 TQtClientFilter.cxx:645
 TQtClientFilter.cxx:646
 TQtClientFilter.cxx:647
 TQtClientFilter.cxx:648
 TQtClientFilter.cxx:649
 TQtClientFilter.cxx:650
 TQtClientFilter.cxx:651
 TQtClientFilter.cxx:652
 TQtClientFilter.cxx:653
 TQtClientFilter.cxx:654
 TQtClientFilter.cxx:655
 TQtClientFilter.cxx:656
 TQtClientFilter.cxx:657
 TQtClientFilter.cxx:658
 TQtClientFilter.cxx:659
 TQtClientFilter.cxx:660
 TQtClientFilter.cxx:661
 TQtClientFilter.cxx:662
 TQtClientFilter.cxx:663
 TQtClientFilter.cxx:664
 TQtClientFilter.cxx:665
 TQtClientFilter.cxx:666
 TQtClientFilter.cxx:667
 TQtClientFilter.cxx:668
 TQtClientFilter.cxx:669
 TQtClientFilter.cxx:670
 TQtClientFilter.cxx:671
 TQtClientFilter.cxx:672
 TQtClientFilter.cxx:673
 TQtClientFilter.cxx:674
 TQtClientFilter.cxx:675
 TQtClientFilter.cxx:676
 TQtClientFilter.cxx:677
 TQtClientFilter.cxx:678
 TQtClientFilter.cxx:679
 TQtClientFilter.cxx:680
 TQtClientFilter.cxx:681
 TQtClientFilter.cxx:682
 TQtClientFilter.cxx:683
 TQtClientFilter.cxx:684
 TQtClientFilter.cxx:685
 TQtClientFilter.cxx:686
 TQtClientFilter.cxx:687
 TQtClientFilter.cxx:688
 TQtClientFilter.cxx:689
 TQtClientFilter.cxx:690
 TQtClientFilter.cxx:691
 TQtClientFilter.cxx:692
 TQtClientFilter.cxx:693
 TQtClientFilter.cxx:694
 TQtClientFilter.cxx:695
 TQtClientFilter.cxx:696
 TQtClientFilter.cxx:697
 TQtClientFilter.cxx:698
 TQtClientFilter.cxx:699
 TQtClientFilter.cxx:700
 TQtClientFilter.cxx:701
 TQtClientFilter.cxx:702
 TQtClientFilter.cxx:703
 TQtClientFilter.cxx:704
 TQtClientFilter.cxx:705
 TQtClientFilter.cxx:706
 TQtClientFilter.cxx:707
 TQtClientFilter.cxx:708
 TQtClientFilter.cxx:709
 TQtClientFilter.cxx:710
 TQtClientFilter.cxx:711
 TQtClientFilter.cxx:712
 TQtClientFilter.cxx:713
 TQtClientFilter.cxx:714
 TQtClientFilter.cxx:715
 TQtClientFilter.cxx:716
 TQtClientFilter.cxx:717
 TQtClientFilter.cxx:718
 TQtClientFilter.cxx:719
 TQtClientFilter.cxx:720
 TQtClientFilter.cxx:721
 TQtClientFilter.cxx:722
 TQtClientFilter.cxx:723
 TQtClientFilter.cxx:724
 TQtClientFilter.cxx:725
 TQtClientFilter.cxx:726
 TQtClientFilter.cxx:727
 TQtClientFilter.cxx:728
 TQtClientFilter.cxx:729
 TQtClientFilter.cxx:730
 TQtClientFilter.cxx:731
 TQtClientFilter.cxx:732
 TQtClientFilter.cxx:733
 TQtClientFilter.cxx:734
 TQtClientFilter.cxx:735
 TQtClientFilter.cxx:736
 TQtClientFilter.cxx:737
 TQtClientFilter.cxx:738
 TQtClientFilter.cxx:739
 TQtClientFilter.cxx:740
 TQtClientFilter.cxx:741
 TQtClientFilter.cxx:742
 TQtClientFilter.cxx:743
 TQtClientFilter.cxx:744
 TQtClientFilter.cxx:745
 TQtClientFilter.cxx:746
 TQtClientFilter.cxx:747
 TQtClientFilter.cxx:748
 TQtClientFilter.cxx:749
 TQtClientFilter.cxx:750
 TQtClientFilter.cxx:751
 TQtClientFilter.cxx:752
 TQtClientFilter.cxx:753
 TQtClientFilter.cxx:754
 TQtClientFilter.cxx:755
 TQtClientFilter.cxx:756
 TQtClientFilter.cxx:757
 TQtClientFilter.cxx:758
 TQtClientFilter.cxx:759
 TQtClientFilter.cxx:760
 TQtClientFilter.cxx:761
 TQtClientFilter.cxx:762
 TQtClientFilter.cxx:763
 TQtClientFilter.cxx:764
 TQtClientFilter.cxx:765
 TQtClientFilter.cxx:766
 TQtClientFilter.cxx:767
 TQtClientFilter.cxx:768
 TQtClientFilter.cxx:769
 TQtClientFilter.cxx:770
 TQtClientFilter.cxx:771
 TQtClientFilter.cxx:772
 TQtClientFilter.cxx:773
 TQtClientFilter.cxx:774
 TQtClientFilter.cxx:775
 TQtClientFilter.cxx:776
 TQtClientFilter.cxx:777
 TQtClientFilter.cxx:778
 TQtClientFilter.cxx:779
 TQtClientFilter.cxx:780
 TQtClientFilter.cxx:781
 TQtClientFilter.cxx:782
 TQtClientFilter.cxx:783
 TQtClientFilter.cxx:784
 TQtClientFilter.cxx:785
 TQtClientFilter.cxx:786
 TQtClientFilter.cxx:787
 TQtClientFilter.cxx:788
 TQtClientFilter.cxx:789
 TQtClientFilter.cxx:790
 TQtClientFilter.cxx:791
 TQtClientFilter.cxx:792
 TQtClientFilter.cxx:793
 TQtClientFilter.cxx:794
 TQtClientFilter.cxx:795
 TQtClientFilter.cxx:796
 TQtClientFilter.cxx:797
 TQtClientFilter.cxx:798
 TQtClientFilter.cxx:799
 TQtClientFilter.cxx:800
 TQtClientFilter.cxx:801
 TQtClientFilter.cxx:802
 TQtClientFilter.cxx:803
 TQtClientFilter.cxx:804
 TQtClientFilter.cxx:805
 TQtClientFilter.cxx:806
 TQtClientFilter.cxx:807
 TQtClientFilter.cxx:808
 TQtClientFilter.cxx:809
 TQtClientFilter.cxx:810
 TQtClientFilter.cxx:811
 TQtClientFilter.cxx:812
 TQtClientFilter.cxx:813
 TQtClientFilter.cxx:814
 TQtClientFilter.cxx:815
 TQtClientFilter.cxx:816
 TQtClientFilter.cxx:817
 TQtClientFilter.cxx:818
 TQtClientFilter.cxx:819
 TQtClientFilter.cxx:820
 TQtClientFilter.cxx:821
 TQtClientFilter.cxx:822
 TQtClientFilter.cxx:823
 TQtClientFilter.cxx:824
 TQtClientFilter.cxx:825
 TQtClientFilter.cxx:826
 TQtClientFilter.cxx:827
 TQtClientFilter.cxx:828
 TQtClientFilter.cxx:829
 TQtClientFilter.cxx:830
 TQtClientFilter.cxx:831
 TQtClientFilter.cxx:832
 TQtClientFilter.cxx:833
 TQtClientFilter.cxx:834
 TQtClientFilter.cxx:835
 TQtClientFilter.cxx:836
 TQtClientFilter.cxx:837
 TQtClientFilter.cxx:838
 TQtClientFilter.cxx:839
 TQtClientFilter.cxx:840
 TQtClientFilter.cxx:841
 TQtClientFilter.cxx:842
 TQtClientFilter.cxx:843
 TQtClientFilter.cxx:844
 TQtClientFilter.cxx:845
 TQtClientFilter.cxx:846
 TQtClientFilter.cxx:847
 TQtClientFilter.cxx:848
 TQtClientFilter.cxx:849
 TQtClientFilter.cxx:850
 TQtClientFilter.cxx:851
 TQtClientFilter.cxx:852
 TQtClientFilter.cxx:853
 TQtClientFilter.cxx:854
 TQtClientFilter.cxx:855
 TQtClientFilter.cxx:856
 TQtClientFilter.cxx:857
 TQtClientFilter.cxx:858
 TQtClientFilter.cxx:859
 TQtClientFilter.cxx:860
 TQtClientFilter.cxx:861
 TQtClientFilter.cxx:862
 TQtClientFilter.cxx:863
 TQtClientFilter.cxx:864
 TQtClientFilter.cxx:865
 TQtClientFilter.cxx:866
 TQtClientFilter.cxx:867
 TQtClientFilter.cxx:868
 TQtClientFilter.cxx:869
 TQtClientFilter.cxx:870
 TQtClientFilter.cxx:871
 TQtClientFilter.cxx:872
 TQtClientFilter.cxx:873
 TQtClientFilter.cxx:874
 TQtClientFilter.cxx:875
 TQtClientFilter.cxx:876
 TQtClientFilter.cxx:877
 TQtClientFilter.cxx:878
 TQtClientFilter.cxx:879
 TQtClientFilter.cxx:880
 TQtClientFilter.cxx:881
 TQtClientFilter.cxx:882
 TQtClientFilter.cxx:883
 TQtClientFilter.cxx:884
 TQtClientFilter.cxx:885
 TQtClientFilter.cxx:886
 TQtClientFilter.cxx:887
 TQtClientFilter.cxx:888
 TQtClientFilter.cxx:889
 TQtClientFilter.cxx:890
 TQtClientFilter.cxx:891
 TQtClientFilter.cxx:892
 TQtClientFilter.cxx:893
 TQtClientFilter.cxx:894
 TQtClientFilter.cxx:895
 TQtClientFilter.cxx:896
 TQtClientFilter.cxx:897
 TQtClientFilter.cxx:898
 TQtClientFilter.cxx:899
 TQtClientFilter.cxx:900
 TQtClientFilter.cxx:901
 TQtClientFilter.cxx:902
 TQtClientFilter.cxx:903
 TQtClientFilter.cxx:904
 TQtClientFilter.cxx:905
 TQtClientFilter.cxx:906
 TQtClientFilter.cxx:907
 TQtClientFilter.cxx:908
 TQtClientFilter.cxx:909
 TQtClientFilter.cxx:910
 TQtClientFilter.cxx:911
 TQtClientFilter.cxx:912
 TQtClientFilter.cxx:913
 TQtClientFilter.cxx:914
 TQtClientFilter.cxx:915
 TQtClientFilter.cxx:916
 TQtClientFilter.cxx:917
 TQtClientFilter.cxx:918
 TQtClientFilter.cxx:919
 TQtClientFilter.cxx:920
 TQtClientFilter.cxx:921
 TQtClientFilter.cxx:922
 TQtClientFilter.cxx:923
 TQtClientFilter.cxx:924
 TQtClientFilter.cxx:925
 TQtClientFilter.cxx:926
 TQtClientFilter.cxx:927
 TQtClientFilter.cxx:928
 TQtClientFilter.cxx:929
 TQtClientFilter.cxx:930