[ROOT] TGFileDilog error

From: Ernesto Lopez (lopez@to.infn.it)
Date: Sat Jun 15 2002 - 10:58:50 MEST


Hi rooters,

I found that when create a TGFileDialog and you click over a directory and
then click the open buttom there is:
 *** Break *** segmentation violation
instead of open the directory as the case of a double click.

I changed in:
Bool_t TGFileDialog::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
the case  kCM_BUTTON and kTE_ENTER by a pice of code from
kCT_ITEMDBLCLICK and it works OK.

/////////////////////////////////////

            case kCM_BUTTON:

               switch (parm1) {
                  case kIDF_OK:
                     // same code as under kTE_ENTER
                     if (fTbfname->GetTextLength() == 0) {
                        const char *txt = "Please provide file name or use
\"Cancel\"";
                        new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
                                     "Missing File Name", txt,
kMBIconExclamation,
                                     kMBOk);
                        return kTRUE;
                     }

#ifndef WIN32
                     if (fFc->NumSelected() == 1) {
                        f = (TGFileItem *) fFc->GetNextSelected(&p);
                        if (S_ISDIR(f->GetType())) {

fFc->ChangeDirectory(f->GetItemName()->GetString());
                           fTreeLB->Update(fFc->GetDirectory());
                           if (fFileInfo->fIniDir) delete []
fFileInfo->fIniDir;
                           fFileInfo->fIniDir =
StrDup(fFc->GetDirectory());
                        } else {
                           fFileInfo->fFilename =
gSystem->ConcatFileName(fFc->GetDirectory(),

fTbfname->GetString());
                           delete this;
                        }
                     }
#else
#ifdef GDK_WIN32
                     if (fFc->NumSelected() == 1) {
                        f = (TGFileItem *) fFc->GetNextSelected(&p);
                        if ((f->GetType()) & _S_IFDIR) {

fFc->ChangeDirectory(f->GetItemName()->GetString());
                           fTreeLB->Update(fFc->GetDirectory());
                        } else {
                           fFileInfo->fFilename =
gSystem->ConcatFileName(fFc->GetDirectory(),

fTbfname->GetString());
                           delete this;
                        }
                     }
#endif
#endif
                     break;

////////////////////////////////////////////////////////////

intead of:

///////////////////////////////////////////////////////////

            case kTE_ENTER:
               // same code as under kIDF_OK
               if (fTbfname->GetTextLength() == 0) {
                  const char *txt = "Please provide file name or use
\"Cancel\"";
                  new TGMsgBox(fClient->GetRoot(), GetMainFrame(),
                               "Missing File Name", txt,
kMBIconExclamation,
                               kMBOk);
                  return kTRUE;
               }
               fFileInfo->fFilename =
gSystem->ConcatFileName(fFc->GetDirectory(),

fTbfname->GetString());
               delete this;
               break;

//////////////////////////////////////////////////

Cheers
    Ernesto



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:57 MET