X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2830b4a411593860aa75ae22478d09db14c789cf..0c7ca81c4f212e0e1cd59c3257164e50932e77aa:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 2468ed2c00..2128a5cd4c 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -533,6 +533,8 @@ long wxExecute(const wxString& command, bool wxLaunchDefaultBrowser(const wxString& url) { + bool success = true; + wxString finalurl = url; //if it isn't a full url, try appending http:// to it @@ -551,12 +553,13 @@ bool wxLaunchDefaultBrowser(const wxString& url) wxRegKey keyDDE(key, wxT("DDEExec")); if ( keyDDE.Exists() ) { - wxString ddeTopic = wxRegKey(keyDDE, wxT("topic")); + wxRegKey keyTopic(keyDDE, wxT("topic")); + wxString ddeTopic = keyTopic.QueryDefaultValue(); // we only know the syntax of WWW_OpenURL DDE request if ( ddeTopic == wxT("WWW_OpenURL") ) { - wxString ddeCmd = keyDDE; + wxString ddeCmd = keyDDE.QueryDefaultValue(); // this is a bit naive but should work as -1 can't appear // elsewhere in the DDE topic, normally @@ -583,9 +586,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, @@ -599,7 +605,7 @@ bool wxLaunchDefaultBrowser(const wxString& url) (LPShellExecute) ::GetProcAddress(hShellDll, wxString::Format(wxT("ShellExecute%s"), -#ifdef __WXUNICODE__ +#if wxUSE_UNICODE wxT("W") #else wxT("A") @@ -615,16 +621,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(), - NULL, wxT(""), SW_SHOWNORMAL); - + 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__ @@ -666,16 +704,16 @@ bool wxLaunchDefaultBrowser(const wxString& url) if ( cmd.empty() || wxExecute(cmd + wxT(" ") + finalurl) == -1) return false; } - + #else // !wxUSE_MIMETYPE && !(WXMSW && wxUSE_NATIVE_CONFIG) - return false; + success = false; #endif //success - hopefully - return true; + return success; } // ---------------------------------------------------------------------------- @@ -1118,4 +1156,3 @@ bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) ) #endif // !wxGTK #endif // wxUSE_GUI -