wxString FileDialog::GetPath() const
{
   char *f = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(m_widget));
   wxFileName path(wxConvFileName->cMB2WX(f));
   g_free(f);

   if (!path.HasExt())
   {
      if (!(m_dialogStyle & FD_NO_ADD_EXTENSION))
      {  
         int filterIndex = GetFilterIndex();
         if (filterIndex != -1)
         {
            wxStringTokenizer tokenizer(m_patterns[filterIndex], wxT(";"));            
            if (tokenizer.HasMoreTokens())
            {
               wxString extension = tokenizer.GetNextToken().AfterFirst(wxT('.'));
               if (extension.Right(2) == wxT("*"))
               {
                  extension = wxEmptyString;
               }
               path.SetExt(extension);
            }
         }
      }
   }

   return path.GetFullPath();
}
void FileDialog::GTKFilterChanged()
{
    wxFileCtrlEvent event(wxEVT_FILECTRL_FILTERCHANGED, this, GetId());

    event.SetFilterIndex(GetFilterIndex());

    GetEventHandler()->ProcessEvent(event);
}