X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/657a7545e0c7a9bb2132fb336b08357c80616357..b9efe021b554fa3967d1442cf758435c5cd5ae8f:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 977675ac1a..8bb3fcd982 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -583,9 +583,12 @@ bool wxLaunchDefaultBrowser(const wxString& url) //browser window if ( command.empty() || wxExecute(command) == -1) { + int nResult; //HINSTANCE error code + +#if !defined(__WXWINCE__) // CYGWIN and MINGW may have problems - so load ShellExecute // dynamically - typedef HINSTANCE (*LPShellExecute)(HWND hwnd, const wxChar* lpOperation, + typedef HINSTANCE (WINAPI *LPShellExecute)(HWND hwnd, const wxChar* lpOperation, const wxChar* lpFile, const wxChar* lpParameters, const wxChar* lpDirectory, @@ -615,16 +618,48 @@ bool wxLaunchDefaultBrowser(const wxString& url) // Windows sometimes doesn't open the browser correctly when using mime // types, so do ShellExecute - i.e. start (from James Carroll) - unsigned int nResult = (int) (*lpShellExecute)(NULL, NULL, finalurl.c_str(), + nResult = (int) (*lpShellExecute)(NULL, NULL, finalurl.c_str(), NULL, wxT(""), SW_SHOWNORMAL); - // Unload Shell32.dll ::FreeLibrary(hShellDll); +#else + //Windows CE does not have normal ShellExecute - but it has + //ShellExecuteEx all the way back to version 1.0 + + + //Set up the SHELLEXECUTEINFO structure to pass to ShellExecuteEx + SHELLEXECUTEINFO sei; + sei.cbSize = sizeof(SHELLEXECUTEINFO); + sei.dwHotKey = 0; + sei.fMask = 0; + sei.hIcon = NULL; + sei.hInstApp = NULL; + sei.hkeyClass = NULL; + // Not in WinCE +#if 0 + sei.hMonitor = NULL; +#endif + sei.hProcess = NULL; + sei.hwnd = NULL; + sei.lpClass = NULL; + sei.lpDirectory = NULL; + sei.lpFile = finalurl.c_str(); + sei.lpIDList = NULL; + sei.lpParameters = NULL; + sei.lpVerb = TEXT("open"); + sei.nShow = SW_SHOWNORMAL; + + //Call ShellExecuteEx + ShellExecuteEx(&sei); + + //Get error code + nResult = (int) sei.hInstApp; +#endif // Hack for Firefox (returns file not found for some reason) // from Angelo Mandato's wxHyperlinksCtrl - // HINSTANCE_ERROR == 32 - if (nResult <= HINSTANCE_ERROR && nResult != SE_ERR_FNF) + // HINSTANCE_ERROR == 32 (HINSTANCE_ERROR does not exist on Windows CE) + if (nResult <= 32 && nResult != SE_ERR_FNF) return false; #ifdef __WXDEBUG__ @@ -660,7 +695,13 @@ bool wxLaunchDefaultBrowser(const wxString& url) } } else - return false; + { + // fallback to checking for the BROWSER environment variable + cmd = wxGetenv(wxT("BROWSER")); + if ( cmd.empty() || wxExecute(cmd + wxT(" ") + finalurl) == -1) + return false; + } + #else // !wxUSE_MIMETYPE && !(WXMSW && wxUSE_NATIVE_CONFIG)