RootX11ErrorHandler

From: Olivier Meplan (meplan@isn.in2p3.fr)
Date: Fri Oct 15 1999 - 18:27:56 MEST


Hi rooters!

I have a pb with destructor of this object:

class NameSubWin: public  TGTransientFrame  // (derivee d une fenetre
GUI)
{
  private:
        TGCompositeFrame     *fS0;
        TGCompositeFrame     *fSH1,*fSH2;
        TGTextButton               *fButtonOK,*fButtonCan;
        TGLayoutHints             *fL0;
        TGLabel                        *fLmsg;
        TGTextEntry                *TEName;
        TGTextBuffer               *TBName;//!  do not stream

  public :
         NameSubWin(const TGWindow *p, const TGWindow *main, UInt_t w,
UInt_t h,
                                   UInt_t options = kMainFrame |
kVerticalFrame);
         ~NameSubWin();
         Bool_t ProcessMessage(Long_t msg, Long_t parm1, Long_t parm2);
         void CloseWindow(){delete this;}

        ClassDef(NameSubWin,1)
};

The Methods are:
NameSubWin::NameSubWin(const TGWindow *p, const TGWindow *main, UInt_t
w,
 UInt_t h,UInt_t options ): TGTransientFrame(p, main, w, h, options)
{

        fS0 = new TGVerticalFrame(this, 500, 200);
        fL0= new TGLayoutHints(kLHintsTop | kLHintsLeft |
kLHintsExpandX  , 2, 2, 2, 2);
         AddFrame(fS0, fL0);

        fSH1=new TGHorizontalFrame(fS0, 200, 20);
        fS0->AddFrame(fSH1,fL0);

         fSH1->AddFrame(fLmsg=new TGLabel(fSH1, new TGString("Name:")),
fL0);
         TEName = new TGTextEntry(fSH1, TBName = new
TGTextBuffer(100),1);
         TBName->AddText(0, "");
         TEName->Resize(200, TEName->GetDefaultHeight());
         fSH1->AddFrame(TEName, fL0);
           TEName->Associate(this);

        //
        // Frame for Ok/Cancel button
        //
         fSH2=new TGHorizontalFrame(fS0, 200, 20,kFixedWidth);
         fS0->AddFrame(fSH2,new TGLayoutHints(kLHintsBottom |
kLHintsRight,0,0,10,0));

         fButtonOK = new TGTextButton(fSH2, "&Ok",M_BUT_OK);
         fButtonCan= new TGTextButton(fSH2,"&Cancel",M_BUT_CANCEL);
        fSH2->AddFrame(fButtonOK, new TGLayoutHints(kLHintsTop |
kLHintsLeft | kLHintsExpandX,2, 2, 2, 2));
        fSH2->AddFrame(fButtonCan, new TGLayoutHints(kLHintsTop |
kLHintsLeft | kLHintsExpandX,2, 2, 2, 2));
         fButtonOK->Associate(this);
         fButtonCan->Associate(this);


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

// The REMAP Section
//***************************************************************************

        MapSubwindows();
        Resize(GetDefaultSize());
        // position relative to the parent's window
         Window_t wdum;
         int ax, ay;
         gGXW->TranslateCoordinates(main->GetId(), GetParent()->GetId(),

                          ((TGFrame *) main)->GetWidth()/2,
                          (((TGFrame *) main)->GetHeight() - fHeight) >>
1,ax, ay, wdum);
         Move(ax, ay);
         SetWindowName("New Histo Name");
         MapWindow();
        fClient->WaitFor(this);

}
//
//----------------------------------------------------------------------------

//
NameSubWin::~NameSubWin()
{
        delete fButtonOK ; delete fButtonCan;
        delete fSH2;
         //delete TEName;
         //delete fLmsg;
         delete fSH1;
        delete fS0 ;  delete fL0 ;
}
//
//----------------------------------------------------------------------------

//
Bool_t NameSubWin::ProcessMessage(Long_t msg, Long_t parm1, Long_t
parm2)
{
 switch (GET_MSG(msg))
 {
  case kC_COMMAND:
   switch (GET_SUBMSG(msg))
   {
               case kCM_BUTTON:
                                switch (parm1)
                                {
                                 case M_BUT_CANCEL:
                                         fOK2PLot=0;
                                                CloseWindow();
                                                break;
                                        case M_BUT_OK:
                                         fOK2PLot=1;

strcpy(histoname,TEName->GetBuffer()->GetString());
                                                CloseWindow();
                                                break;

                                }
                 break;
   }
        }
 return kTRUE;
}


If Comment delete in the destructor are uncomment I have a
        Fatal in <operator delete>: storage area overwritten
With the comment, if I push the cancel button all is ok but if I push
the OK button and if I have filled (with let say 1 character) the
TGTextEntry I got a
        Error in <RootX11ErrorHandler>: BadWindow (invalid Window
parameter) (XID: 142606504)
And I don't know neither why nor what to do....
I seems to me that I am doing something which is very similar to the
guitest (that is of course working well) but apparently I miss
something.
Is there anybody to help me?
Thanks.
Olivier


--
=========================================================
|Olivier Meplan             |E-mail:meplan@isn.in2p3.fr
|                           |
|ISN, 53 avenue des Martyrs |  Tel +33(0)4 76-28-41-90
|F-38026 GRENOBLE cedex     |  Fax +33(0)4 76-28-40-04
=========================================================



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:41 MET