int DefaultMimeHandler::DoOpenFile(cbMimeType* mt, const wxString& filename) { if (!mt) return -1; if (mt->useEditor) { // easy. use internal editor. cbEditor* ed = Manager::Get()->GetEditorManager()->Open(filename); if (ed) { // ed->SetProjectFile(pf); ed->Show(true); return 0; } } else if (mt->useAssoc) { // easy too. use associated app #ifdef __WXMSW__ ShellExecute(0, wxString(_T("open")).c_str(), filename.c_str(), 0, 0, SW_SHOW); #endif #ifdef __WXGTK__ wxExecute(wxString::Format(_T("xdg-open \"%s\""), filename.c_str())); #endif #ifdef __WXMAC__ wxExecute(wxString::Format(_T("open \"%s\""), filename.c_str())); #endif return 0; } else { // call external program // create command line wxString external = mt->program; if (external.Find(_T("$(FILE)")) != -1) external.Replace(_T("$(FILE)"), filename); else external << _T(" \"") << filename << _T("\""); // file args wrapped in quotes (bug #1187231) Manager::Get()->GetLogManager()->Log(_T("Launching command: ") + external); // launch external program int ret = 0; if (mt->programIsModal) { wxEnableTopLevelWindows(false); ret = wxExecute(external, wxEXEC_SYNC); wxEnableTopLevelWindows(true); } else wxExecute(external, wxEXEC_ASYNC); return ret; } // failed... return -1; }
EWXWEXPORT(void,ELJApp_EnableTopLevelWindows)(bool _enb) { wxEnableTopLevelWindows(_enb); }