// @(#)root/gui:$Id$
// Author: Fons Rademakers   27/12/97

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

    This source is based on Xclass95, a Win95-looking GUI toolkit.
    Copyright (C) 1996, 1997 David Barth, Ricky Ralston, Hector Peraza.

    Xclass95 is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

**************************************************************************/

//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TGClient                                                             //
//                                                                      //
// Window client. In client server windowing systems, like X11 this     //
// class is used to make the initial connection to the window server.   //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "RConfigure.h"

#include "TGClient.h"
#include "TROOT.h"
#include "TApplication.h"
#include "TSystem.h"
#include "TEnv.h"
#include "THashList.h"
#include "TSysEvtHandler.h"
#include "TVirtualX.h"
#include "TGWindow.h"
#include "TGResourcePool.h"
#include "TGGC.h"
#include "TGFont.h"
#include "TGMimeTypes.h"
#include "TGFrame.h"
#include "TGIdleHandler.h"
#include "TError.h"
#include "TGlobal.h"

// Global pointer to the TGClient object
static TGClient *gClientGlobal = 0;

namespace {
static struct AddPseudoGlobals {
AddPseudoGlobals() {
   // User "gCling" as synonym for "libCore static initialization has happened".
   // This code here must not trigger it.
   TGlobalMappedFunction::Add(new TGlobalMappedFunction("gClient", "TGClient*",
                                 (TGlobalMappedFunction::GlobalFunc_t)&TGClient::Instance));
}
} gAddPseudoGlobals;
}

// Initialize gClient in case libGui is loaded in batch mode
void TriggerDictionaryInitialization_libGui();
class TGClientInit {
public:
   TGClientInit() {
      if (ROOT::gROOTLocal && ROOT::gROOTLocal->IsBatch()) {
         // For now check if the heaeder files (or the module containing them)
         // has been loaded in Cling.
         // This is required because the dictionaries must be initialized
         // __before__ the TGClient creation which will induce the creation
         // of a TClass object which will need the dictionary for TGClient!
         TriggerDictionaryInitialization_libGui();
         new TGClient();
      }
      TApplication::NeedGraphicsLibs();
   }
};
static TGClientInit gClientInit;

//______________________________________________________________________________
TGClient *TGClient::Instance()
{
   // Returns global gClient (initialize graphics first, if not already done)

   if (!gClientGlobal && gApplication)
      gApplication->InitializeGraphics();
   return gClientGlobal;
}

//----- Graphics Input handler -------------------------------------------------
//______________________________________________________________________________
class TGInputHandler : public TFileHandler {
private:
   TGClient  *fClient;   // connection to display server
public:
   TGInputHandler(TGClient *c, Int_t fd) : TFileHandler(fd, 1) { fClient = c; }
   Bool_t Notify();
   // Important: don't override ReadNotify()
};

//______________________________________________________________________________
Bool_t TGInputHandler::Notify()
{
   // Notify input from the display server.

   return fClient->HandleInput();
}


ClassImp(TGClient)

//______________________________________________________________________________
TGClient::TGClient(const char *dpyName)
{
   // Create a connection with the display sever on host dpyName and setup
   // the complete GUI system, i.e., graphics contexts, fonts, etc. for all
   // widgets.

   fRoot         = 0;
   fPicturePool  = 0;
   fMimeTypeList = 0;
   fWlist        = 0;
   fPlist        = 0;
   fUWHandlers   = 0;
   fIdleHandlers = 0;

   if (gClientGlobal) {
      Error("TGClient", "only one instance of TGClient allowed");
      MakeZombie();
      return;
   }

   // Set DISPLAY based on utmp (only if DISPLAY is not yet set).
   gSystem->SetDisplay();

   // Open the connection to the display
   if ((fXfd = gVirtualX->OpenDisplay(dpyName)) < 0) {
      Error("TGClient", "can't open display \"%s\", switching to batch mode...\n In case you run from a remote ssh session, reconnect with ssh -Y",
            gVirtualX->DisplayName(dpyName));
      MakeZombie();
      return;
   }

   if (fXfd >= 0 && !ROOT::gROOTLocal->IsBatch()) {
      TGInputHandler *xi = new TGInputHandler(this, fXfd);
      if (fXfd) gSystem->AddFileHandler(xi);
      // X11 events are handled via gXDisplay->Notify() in
      // TUnixSystem::DispatchOneEvent(). When no events available we wait for
      // events on all TFileHandlers including this one via a select() call.
      // However, X11 events are always handled via gXDisplay->Notify() and not
      // via the ReadNotify() (therefore TGInputHandler should not override
      // TFileHandler::ReadNotify()).
      gXDisplay = xi;
   }

   // Initialize internal window list. Use a THashList for fast
   // finding of windows based on window id (see GetWindowById()).

   fWlist = new THashList(200);
   fPlist = new TList;

   // Create root window

   fDefaultRoot = fRoot = new TGFrame(this, gVirtualX->GetDefaultRootWindow());

   // Setup some atoms (defined in TVirtualX)...

   gWM_DELETE_WINDOW = gVirtualX->InternAtom("WM_DELETE_WINDOW", kFALSE);
   gMOTIF_WM_HINTS   = gVirtualX->InternAtom("_MOTIF_WM_HINTS", kFALSE);
   gROOT_MESSAGE     = gVirtualX->InternAtom("_ROOT_MESSAGE", kFALSE);

   // Create the graphics event handler, an object for the root window,
   // a picture pool, mimetype list, etc...

   fGlobalNeedRedraw = kFALSE;
   fForceRedraw      = kFALSE;
   fWaitForWindow    = kNone;
   fWaitForEvent     = kOtherEvent;

   fResourcePool    = new TGResourcePool(this);

   fPicturePool     = fResourcePool->GetPicturePool();
   fGCPool          = fResourcePool->GetGCPool();
   fFontPool        = fResourcePool->GetFontPool();

   fMimeTypeList    = fResourcePool->GetMimeTypes();
   fDefaultColormap = fResourcePool->GetDefaultColormap();

   // Set some color defaults...

   fWhite        = fResourcePool->GetWhiteColor();
   fBlack        = fResourcePool->GetBlackColor();
   fBackColor    = fResourcePool->GetFrameBgndColor();
   fForeColor    = fResourcePool->GetFrameFgndColor();
   fHilite       = GetHilite(fBackColor);
   fShadow       = GetShadow(fBackColor);
   fSelForeColor = fResourcePool->GetSelectedFgndColor();
   fSelBackColor = fResourcePool->GetSelectedBgndColor();

   fStyle        = 0;
   TString style = gEnv->GetValue("Gui.Style", "modern");
   if (style.Contains("modern", TString::kIgnoreCase))
      fStyle = 1;

   gClientGlobal = this;
}

//______________________________________________________________________________
const TGWindow *TGClient::GetRoot() const
{
   // Returns current root (i.e. base) window. By changing the root
   // window one can change the window hierarchy, e.g. a top level
   // frame (TGMainFrame) can be embedded in another window.

   return fRoot;
}

//______________________________________________________________________________
const TGWindow *TGClient::GetDefaultRoot() const
{
   // Returns the root (i.e. desktop) window. Should only be used as parent
   // for frames that will never be embedded, like popups, message boxes,
   // etc. (like TGToolTips, TGMessageBox, etc.).

   return fDefaultRoot;
}

//______________________________________________________________________________
void TGClient::SetRoot(TGWindow *root)
{
   // Sets the current root (i.e. base) window. By changing the root
   // window one can change the window hierarchy, e.g. a top level
   // frame (TGMainFrame) can be embedded in another window.

   fRoot = root ? root : fDefaultRoot;
}

//______________________________________________________________________________
void TGClient::SetStyle(const char *style)
{
   // Set the button style (modern or classic).

   fStyle = 0;
   if (style && strstr(style, "modern"))
      fStyle = 1;
}

//______________________________________________________________________________
UInt_t TGClient::GetDisplayWidth() const
{
   // Get display width.

   Int_t  x, y;
   UInt_t w, h;

   gVirtualX->GetGeometry(-1, x, y, w, h);

   return w;
}

//______________________________________________________________________________
UInt_t TGClient::GetDisplayHeight() const
{
   // Get display height.

   Int_t  x, y;
   UInt_t w, h;

   gVirtualX->GetGeometry(-1, x, y, w, h);

   return h;
}

//______________________________________________________________________________
const TGPicture *TGClient::GetPicture(const char *name)
{
   // Get picture from the picture pool. Picture must be freed using
   // TGClient::FreePicture(). If picture is not found 0 is returned.

   return fPicturePool->GetPicture(name);
}

//______________________________________________________________________________
const TGPicture *TGClient::GetPicture(const char *name,
                                      UInt_t new_width, UInt_t new_height)
{
   // Get picture with specified size from pool (picture will be scaled if
   // necessary). Picture must be freed using TGClient::FreePicture(). If
   // picture is not found 0 is returned.

   return fPicturePool->GetPicture(name, new_width, new_height);
}

//______________________________________________________________________________
void TGClient::FreePicture(const TGPicture *pic)
{
   // Free picture resource.

   if (pic) fPicturePool->FreePicture(pic);
}

//______________________________________________________________________________
TGGC *TGClient::GetGC(GCValues_t *values, Bool_t rw)
{
   // Get graphics context from the gc pool. Context must be freed via
   // TGClient::FreeGC(). If rw is true a new read/write-able GC
   // is returned, otherwise a shared read-only context is returned.
   // For historical reasons it is also possible to create directly a
   // TGGC object, but it is advised to use this new interface only.

   return fGCPool->GetGC(values, rw);
}

//______________________________________________________________________________
void TGClient::FreeGC(const TGGC *gc)
{
   // Free a graphics context.

   fGCPool->FreeGC(gc);
}

//______________________________________________________________________________
void TGClient::FreeGC(GContext_t gc)
{
   // Free a graphics context.

   fGCPool->FreeGC(gc);
}

//______________________________________________________________________________
TGFont *TGClient::GetFont(const char *font, Bool_t fixedDefault)
{
   // Get a font from the font pool. Fonts must be freed via
   // TGClient::FreeFont(). Returns 0 in case of error or if font
   // does not exist. If fixedDefault is false the "fixed" font
   // will not be substituted as fallback when the asked for font
   // does not exist.

   return fFontPool->GetFont(font, fixedDefault);
}

//______________________________________________________________________________
TGFont *TGClient::GetFont(const TGFont *font)
{
   // Get again specified font. Will increase its usage count.

   return fFontPool->GetFont(font);
}

//______________________________________________________________________________
void TGClient::FreeFont(const TGFont *font)
{
   // Free a font.

   fFontPool->FreeFont(font);
}

//______________________________________________________________________________
void TGClient::NeedRedraw(TGWindow *w, Bool_t force)
{
   // Set redraw flags.
   if (gVirtualX->NeedRedraw((ULong_t)w,force)) return;
   if (force) {
      w->DoRedraw();
      return;
   }
   w->fNeedRedraw = kTRUE;
   fGlobalNeedRedraw = kTRUE;
}

//______________________________________________________________________________
void TGClient::CancelRedraw(TGWindow *w)
{
   w->fNeedRedraw = kFALSE;
}

//______________________________________________________________________________
Bool_t TGClient::GetColorByName(const char *name, Pixel_t &pixel) const
{
   // Get a color by name. If color is found return kTRUE and pixel is
   // set to the color's pixel value, kFALSE otherwise.

   ColorStruct_t      color;
   WindowAttributes_t attributes = WindowAttributes_t();
   Bool_t             status = kTRUE;

   gVirtualX->GetWindowAttributes(fRoot->GetId(), attributes);
   color.fPixel = 0;
   if (!gVirtualX->ParseColor(attributes.fColormap, name, color)) {
      Error("GetColorByName", "couldn't parse color %s", name);
      status = kFALSE;
   } else if (!gVirtualX->AllocColor(attributes.fColormap, color)) {
      Warning("GetColorByName", "couldn't retrieve color %s.\n"
              "Please close any other application, like netscape, "
              "that might exhaust\nthe colormap and start ROOT again", name);
      status = kFALSE;
   }

   pixel = color.fPixel;

   return status;
}

//______________________________________________________________________________
FontStruct_t TGClient::GetFontByName(const char *name, Bool_t fixedDefault) const
{
   // Get a font by name. If font is not found, fixed font is returned,
   // if fixed font also does not exist return 0 and print error.
   // The loaded font needs to be freed using TVirtualX::DeleteFont().
   // If fixedDefault is false the "fixed" font will not be substituted
   // as fallback when the asked for font does not exist.

   if (gROOT->IsBatch())
      return (FontStruct_t) -1;

   FontStruct_t font = gVirtualX->LoadQueryFont(name);

   if (!font && fixedDefault) {
      font = gVirtualX->LoadQueryFont("fixed");
      if (font)
         Warning("GetFontByName", "couldn't retrieve font %s, using \"fixed\"", name);
   }
   if (!font) {
      if (fixedDefault)
         Error("GetFontByName", "couldn't retrieve font %s nor backup font \"fixed\"", name);
      else
         Warning("GetFontByName", "couldn't retrieve font %s", name);
   }

   return font;
}

//______________________________________________________________________________
Pixel_t TGClient::GetHilite(Pixel_t base_color) const
{
   // Return pixel value of hilite color based on base_color.

   ColorStruct_t      color, white_p;
   WindowAttributes_t attributes = WindowAttributes_t();

   gVirtualX->GetWindowAttributes(fRoot->GetId(), attributes);

   color.fPixel = base_color;
   gVirtualX->QueryColor(attributes.fColormap, color);

   GetColorByName("white", white_p.fPixel);
   gVirtualX->QueryColor(attributes.fColormap, white_p);

   color.fRed   = TMath::Max((UShort_t)(white_p.fRed/5),   color.fRed);
   color.fGreen = TMath::Max((UShort_t)(white_p.fGreen/5), color.fGreen);
   color.fBlue  = TMath::Max((UShort_t)(white_p.fBlue/5),  color.fBlue);

   color.fRed   = (UShort_t)TMath::Min((Int_t)white_p.fRed,   (Int_t)(color.fRed*140)/100);
   color.fGreen = (UShort_t)TMath::Min((Int_t)white_p.fGreen, (Int_t)(color.fGreen*140)/100);
   color.fBlue  = (UShort_t)TMath::Min((Int_t)white_p.fBlue,  (Int_t)(color.fBlue*140)/100);

   if (!gVirtualX->AllocColor(attributes.fColormap, color))
      Error("GetHilite", "couldn't allocate hilight color");

   return color.fPixel;
}

//______________________________________________________________________________
Pixel_t TGClient::GetShadow(Pixel_t base_color) const
{
   // Return pixel value of shadow color based on base_color.
   // Shadow is 60% of base_color intensity.

   ColorStruct_t      color;
   WindowAttributes_t attributes = WindowAttributes_t();

   gVirtualX->GetWindowAttributes(fRoot->GetId(), attributes);

   color.fPixel = base_color;
   gVirtualX->QueryColor(attributes.fColormap, color);

   color.fRed   = (UShort_t)((color.fRed*60)/100);
   color.fGreen = (UShort_t)((color.fGreen*60)/100);
   color.fBlue  = (UShort_t)((color.fBlue*60)/100);

   if (!gVirtualX->AllocColor(attributes.fColormap, color))
      Error("GetShadow", "couldn't allocate shadow color");

   return color.fPixel;
}

//______________________________________________________________________________
void TGClient::FreeColor(Pixel_t color) const
{
   // Free color.

   gVirtualX->FreeColor(fDefaultColormap, color);
}

//______________________________________________________________________________
void TGClient::RegisterWindow(TGWindow *w)
{
   // Add a TGWindow to the clients list of windows.

   fWlist->Add(w);

   // Emits signal
   RegisteredWindow(w->GetId());
}

//______________________________________________________________________________
void TGClient::UnregisterWindow(TGWindow *w)
{
   // Remove a TGWindow from the list of windows.

   fWlist->Remove(w);
}

//______________________________________________________________________________
void TGClient::RegisterPopup(TGWindow *w)
{
   // Add a popup menu to the list of popups. This list is used to pass
   // events to popup menus that are popped up over a transient window which
   // is waited for (see WaitFor()).

   fPlist->Add(w);

   // Emits signal
   RegisteredWindow(w->GetId());
}

//______________________________________________________________________________
void TGClient::UnregisterPopup(TGWindow *w)
{
   // Remove a popup menu from the list of popups.

   fPlist->Remove(w);
}

//______________________________________________________________________________
void TGClient::AddUnknownWindowHandler(TGUnknownWindowHandler *h)
{
   // Add handler for unknown (i.e. unregistered) windows.

   if (!fUWHandlers) {
      fUWHandlers = new TList;
      fUWHandlers->SetOwner();
   }

   fUWHandlers->Add(h);
}

//______________________________________________________________________________
void TGClient::RemoveUnknownWindowHandler(TGUnknownWindowHandler *h)
{
   // Remove handler for unknown (i.e. unregistered) windows.

   fUWHandlers->Remove(h);
}

//______________________________________________________________________________
void TGClient::AddIdleHandler(TGIdleHandler *h)
{
   // Add handler for idle events.

   if (!fIdleHandlers) {
      fIdleHandlers = new TList;
      fIdleHandlers->SetOwner();
   }

   fIdleHandlers->Add(h);
}

//______________________________________________________________________________
void TGClient::RemoveIdleHandler(TGIdleHandler *h)
{
   // Remove handler for idle events.

   fIdleHandlers->Remove(h);
}

//______________________________________________________________________________
TGWindow *TGClient::GetWindowById(Window_t wid) const
{
   // Find a TGWindow via its handle. If window is not found return 0.

   TGWindow  wt(wid);

   return (TGWindow *) fWlist->FindObject(&wt);
}

//______________________________________________________________________________
TGWindow *TGClient::GetWindowByName(const char *name) const
{
   // Find a TGWindow via its name (unique name used in TGWindow::SavePrimitive).
   // If window is not found return 0.

   TIter next(fWlist);

   TObject *obj;
   while ((obj = next())) {
      TString n = obj->GetName();
      if (n == name) {
         return (TGWindow*)obj;
      }
   }
   return 0;
}

//______________________________________________________________________________
TGClient::~TGClient()
{
   // Closing down client: cleanup and close X connection.

   if (IsZombie())
      return;

   if (fWlist)
      fWlist->Delete("slow");
   delete fWlist;
   delete fPlist;
   delete fUWHandlers;
   delete fIdleHandlers;
   delete fResourcePool;

   gVirtualX->CloseDisplay(); // this should do a cleanup of the remaining
                              // X allocated objects...
}

//______________________________________________________________________________
Bool_t TGClient::ProcessOneEvent()
{
   // Process one event. This method should only be called when there is
   // a GUI event ready to be processed. If event has been processed
   // kTRUE is returned. If processing of a specific event type for a specific
   // window was requested kFALSE is returned when specific event has been
   // processed, kTRUE otherwise. If no more pending events return kFALSE.

   Event_t event;

   if (!fRoot) return kFALSE;
   if (gVirtualX->EventsPending()) {
      gVirtualX->NextEvent(event);
      if (fWaitForWindow == kNone) {
         HandleEvent(&event);
         if (fForceRedraw)
            DoRedraw();
         return kTRUE;
      } else {
         HandleMaskEvent(&event, fWaitForWindow);
         if ((event.fType == fWaitForEvent) && (event.fWindow == fWaitForWindow))
            fWaitForWindow = kNone;
         if (fForceRedraw)
            DoRedraw();
         return kTRUE;
      }
   }

   // if nothing else to do redraw windows that need redrawing
   if (DoRedraw()) return kTRUE;

   // process one idle event if there is nothing else to do
   if (ProcessIdleEvent()) return kTRUE;

   return kFALSE;
}

//______________________________________________________________________________
Bool_t TGClient::ProcessIdleEvent()
{
   // Process one idle event.

   if (fIdleHandlers) {
      TGIdleHandler *ih = (TGIdleHandler *) fIdleHandlers->First();
      if (ih) {
         RemoveIdleHandler(ih);
         ih->HandleEvent();
         return kTRUE;
      }
   }
   return kFALSE;
}

//______________________________________________________________________________
Bool_t TGClient::HandleInput()
{
   // Handles input from the display server. Returns kTRUE if one or more
   // events have been processed, kFALSE otherwise.

   Bool_t handledevent = kFALSE;

   while (ProcessOneEvent())
      handledevent = kTRUE;
   return handledevent;
}

//______________________________________________________________________________
void TGClient::WaitFor(TGWindow *w)
{
   // Wait for window to be destroyed.

   Window_t wsave    = fWaitForWindow;
   EGEventType esave = fWaitForEvent;

   fWaitForWindow = w->GetId();
   fWaitForEvent  = kDestroyNotify;

   //Let VirtualX know, that we are
   //in a nested loop for a window w.
   //Noop on X11/win32gdk.
   if (gVirtualX)
      gVirtualX->BeginModalSessionFor(w->GetId());

   while (fWaitForWindow != kNone) {
      if (esave == kUnmapNotify)
         wsave = kNone;
      gSystem->ProcessEvents();//gSystem->InnerLoop();
      gSystem->Sleep(5);
   }

   fWaitForWindow = wsave;
   fWaitForEvent  = esave;
}

//______________________________________________________________________________
void TGClient::WaitForUnmap(TGWindow *w)
{
   // Wait for window to be unmapped.

   Window_t wsave    = fWaitForWindow;
   EGEventType esave = fWaitForEvent;

   fWaitForWindow = w->GetId();
   fWaitForEvent  = kUnmapNotify;

   //Let VirtualX know, that we are
   //in a nested loop for a window w.
   //Noop on X11/win32gdk.
   if (gVirtualX)
      gVirtualX->BeginModalSessionFor(w->GetId());

   while (fWaitForWindow != kNone) {
      gSystem->ProcessEvents();//gSystem->InnerLoop();
      gSystem->Sleep(5);
   }

   fWaitForWindow = wsave;
   fWaitForEvent  = esave;
}

//______________________________________________________________________________
void TGClient::ResetWaitFor(TGWindow *w)
{
   // reset waiting

   if (fWaitForWindow == w->GetId()) fWaitForWindow = kNone;
}

//______________________________________________________________________________
Bool_t TGClient::ProcessEventsFor(TGWindow *w)
{
   // Like gSystem->ProcessEvents() but then only allow events for w to
   // be processed. For example to interrupt the processing and destroy
   // the window, call gROOT->SetInterrupt() before destroying the window.

   Window_t wsave    = fWaitForWindow;
   EGEventType esave = fWaitForEvent;

   fWaitForWindow = w->GetId();
   fWaitForEvent  = kDestroyNotify;

   Bool_t intr = gSystem->ProcessEvents();

   fWaitForWindow = wsave;
   fWaitForEvent  = esave;

   return intr;
}

//______________________________________________________________________________
Bool_t TGClient::DoRedraw()
{
   // Redraw all windows that need redrawing. Returns kFALSE if no redraw
   // was needed, kTRUE otherwise.
   // Only redraw the application's windows when the event queue
   // does not contain expose event anymore.

   if (!fGlobalNeedRedraw) return kFALSE;

   TGWindow *w;
   TObjLink *lnk = fWlist->FirstLink();
   while (lnk) {
      w = (TGWindow *) lnk->GetObject();
      if (w->fNeedRedraw) {
         w->DoRedraw();
         w->fNeedRedraw = kFALSE;
      }
      lnk = lnk->Next();
   }

   fGlobalNeedRedraw = kFALSE;
   fForceRedraw      = kFALSE;

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGClient::HandleEvent(Event_t *event)
{
   // Handle a GUI event.

   TGWindow *w;

   // Emit signal for event recorder(s)
   if (event->fType != kConfigureNotify) {
      ProcessedEvent(event, 0);
   }

   // Find window where event happened
   if ((w = GetWindowById(event->fWindow)) == 0) {
      if (fUWHandlers && fUWHandlers->GetSize() > 0) {
         TGUnknownWindowHandler *unkwh;
         TListIter it(fUWHandlers);
         while ((unkwh = (TGUnknownWindowHandler*)it.Next())) {
            if (unkwh->HandleEvent(event))
               return kTRUE;
         }
      }
      //Warning("HandleEvent", "unknown window %ld not handled\n",
      //        event->fWindow);
      return kFALSE;
   }

   // and let it handle the event
   w->HandleEvent(event);

   return kTRUE;
}

//______________________________________________________________________________
Bool_t TGClient::HandleMaskEvent(Event_t *event, Window_t wid)
{
   // Handle masked events only if window wid is the window for which the
   // event was reported or if wid is a parent of the event window. The not
   // masked event are handled directly. The masked events are:
   // kButtonPress, kButtonRelease, kKeyPress, kKeyRelease, kEnterNotify,
   // kLeaveNotify, kMotionNotify.

   TGWindow *w, *ptr, *pop;

   if ((w = GetWindowById(event->fWindow)) == 0) return kFALSE;

   // Emit signal for event recorder(s)
   if (event->fType != kConfigureNotify) {
      ProcessedEvent(event, wid);
   }

   // This breaks class member protection, but TGClient is a friend of
   // TGWindow and _should_ know what to do and what *not* to do...

   for (ptr = w; ptr->fParent != 0; ptr = (TGWindow *) ptr->fParent) {
      if ((ptr->fId == wid) ||
          ((event->fType != kButtonPress) &&
           (event->fType != kButtonRelease) &&
           (event->fType != kGKeyPress) &&
           (event->fType != kKeyRelease) &&
           (event->fType != kEnterNotify) &&
           (event->fType != kLeaveNotify) &&
           (event->fType != kMotionNotify))) {
         w->HandleEvent(event);
         return kTRUE;
      }
   }

   // check if this is a popup menu
   TIter next(fPlist);
   while ((pop = (TGWindow *) next())) {
      for (ptr = w; ptr->fParent != 0; ptr = (TGWindow *) ptr->fParent) {
         if ((ptr->fId == pop->fId) &&
             ((event->fType == kButtonPress) ||
              (event->fType == kButtonRelease) ||
              (event->fType == kGKeyPress) ||
              (event->fType == kKeyRelease) ||
              (event->fType == kEnterNotify) ||
              (event->fType == kLeaveNotify) ||
              (event->fType == kMotionNotify))) {
            w->HandleEvent(event);
            return kTRUE;
         }
      }
   }

   if (event->fType == kButtonPress || event->fType == kGKeyPress)
      gVirtualX->Bell(0);

   return kFALSE;
}

//______________________________________________________________________________
void TGClient::ProcessLine(TString cmd, Long_t msg, Long_t parm1, Long_t parm2)
{
   // Execute string "cmd" via the interpreter. Before executing replace
   // in the command string the token $MSG, $PARM1 and $PARM2 by msg,
   // parm1 and parm2, respectively. The function in cmd string must accept
   // these as longs.

   if (cmd.IsNull()) return;

   char s[32];

   snprintf(s, sizeof(s), "%ld", msg);
   cmd.ReplaceAll("$MSG", s);

   snprintf(s, sizeof(s), "%ld", parm1);
   cmd.ReplaceAll("$PARM1", s);

   snprintf(s, sizeof(s), "%ld", parm2);
   cmd.ReplaceAll("$PARM2", s);

   gROOT->ProcessLine(cmd.Data());
}

//______________________________________________________________________________
Bool_t TGClient::IsEditDisabled() const
{
   // Returns kTRUE if edit/guibuilding is forbidden.

   return (fDefaultRoot->GetEditDisabled() == 1);
}

//______________________________________________________________________________
void TGClient::SetEditDisabled(Bool_t on)
{
   // If on is kTRUE editting/guibuilding is forbidden.

   fDefaultRoot->SetEditDisabled(on);
}

//______________________________________________________________________________
void TGClient::ProcessedEvent(Event_t *event, Window_t wid)
{
   // Emits a signal when an event has been processed.
   // Used in TRecorder.

   Long_t args[2];
   args[0] = (Long_t) event;
   args[1] = (Long_t) wid;

   Emit("ProcessedEvent(Event_t*, Window_t)", args);
}

//______________________________________________________________________________
void TGClient::RegisteredWindow(Window_t w)
{
   // Emits a signal when a Window has been registered in TGClient.
   // Used in TRecorder.

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