void CodeBlocksApp::LoadDelayedFiles(MainFrame *const frame) { std::set<wxString> uniqueFilesToOpen(m_DelayedFilesToOpen.begin(), m_DelayedFilesToOpen.end()); for (std::set<wxString>::const_iterator it = uniqueFilesToOpen.begin(); it != uniqueFilesToOpen.end(); ++it) frame->Open(*it, true); m_DelayedFilesToOpen.Clear(); // --file foo.cpp[:line] if (!m_AutoFile.IsEmpty()) { wxString linePart; wxString filePart; // wxString::Last is deprecated long linePos = m_AutoFile.Find(_T(':'), true); if (linePos != wxNOT_FOUND) { linePart = m_AutoFile.Mid(linePos + 1, wxString::npos); filePart = m_AutoFile; filePart.Remove(linePos); } long line = -1; if (linePos != wxNOT_FOUND) { // on windows, if ":line" is omitted: // assuming drive letter before the colon if ToLong fails // c:\foo\bar.h gives \foo\bar.h if ( !linePart.ToLong(&line) ) { // on windows, if :line is omitted: c:\foo\bar.h -> \foo\bar.h is not the line number! filePart = m_AutoFile; } } wxFileName fn(filePart); fn.Normalize(); // really important so that two same files with different names are not loaded twice if (frame->Open(fn.GetFullPath(), false)) { EditorBase* eb = Manager::Get()->GetEditorManager()->GetEditor(fn.GetFullPath()); if (eb && (line != -1)) eb->GotoLine(line - 1, true); } m_AutoFile.Clear(); } }