void wxGenericFileCtrl::HandleAction( const wxString &fn ) { if ( m_ignoreChanges ) return; wxString filename( fn ); if ( filename.empty() ) { return; } if ( filename == wxT( "." ) ) return; wxString dir = m_list->GetDir(); // "some/place/" means they want to chdir not try to load "place" const bool want_dir = filename.Last() == wxFILE_SEP_PATH; if ( want_dir ) filename = filename.RemoveLast(); if ( filename == wxT( ".." ) ) { m_ignoreChanges = true; m_list->GoToParentDir(); GenerateFolderChangedEvent( this, this ); UpdateControls(); m_ignoreChanges = false; return; } #ifdef __UNIX__ if ( filename == wxT( "~" ) ) { m_ignoreChanges = true; m_list->GoToHomeDir(); GenerateFolderChangedEvent( this, this ); UpdateControls(); m_ignoreChanges = false; return; } if ( filename.BeforeFirst( wxT( '/' ) ) == wxT( "~" ) ) { filename = wxString( wxGetUserHome() ) + filename.Remove( 0, 1 ); } #endif // __UNIX__ if ( !( m_style & wxFC_SAVE ) ) { if ( ( filename.Find( wxT( '*' ) ) != wxNOT_FOUND ) || ( filename.Find( wxT( '?' ) ) != wxNOT_FOUND ) ) { if ( filename.Find( wxFILE_SEP_PATH ) != wxNOT_FOUND ) { wxMessageBox( _( "Illegal file specification." ), _( "Error" ), wxOK | wxICON_ERROR, this ); return; } m_list->SetWild( filename ); return; } } if ( !IsTopMostDir( dir ) ) dir += wxFILE_SEP_PATH; if ( !wxIsAbsolutePath( filename ) ) { dir += filename; filename = dir; } if ( wxDirExists( filename ) ) { m_ignoreChanges = true; m_list->GoToDir( filename ); UpdateControls(); GenerateFolderChangedEvent( this, this ); m_ignoreChanges = false; return; } // they really wanted a dir, but it doesn't exist if ( want_dir ) { wxMessageBox( _( "Directory doesn't exist." ), _( "Error" ), wxOK | wxICON_ERROR, this ); return; } // append the default extension to the filename if it doesn't have any // // VZ: the logic of testing for !wxFileExists() only for the open file // dialog is not entirely clear to me, why don't we allow saving to a // file without extension as well? if ( !( m_style & wxFC_OPEN ) || !wxFileExists( filename ) ) { filename = wxFileDialogBase::AppendExtension( filename, m_filterExtension ); GenerateFileActivatedEvent( this, this, wxFileName( filename ).GetFullName() ); return; } GenerateFileActivatedEvent( this, this ); }
static void gtkfilechooserwidget_file_activated_callback( GtkWidget *WXUNUSED( widget ), wxGtkFileCtrl *fileCtrl ) { GenerateFileActivatedEvent( fileCtrl, fileCtrl ); }