X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dbe44db1e2edbf282db4c1557c2d52beca22abd6..9c39f4f538b97bc595c31770947a49705e08aaf0:/src/common/utilscmn.cpp diff --git a/src/common/utilscmn.cpp b/src/common/utilscmn.cpp index 0c46279c19..a498ce07e6 100644 --- a/src/common/utilscmn.cpp +++ b/src/common/utilscmn.cpp @@ -937,11 +937,16 @@ void wxQsort(void *const pbase, size_t total_elems, // Launch document with default app // ---------------------------------------------------------------------------- -bool wxLaunchDefaultApplication(const wxString &document, int flags) +bool wxLaunchDefaultApplication(const wxString& document, int flags) { wxUnusedVar(flags); - -#ifdef __UNIX__ + +#ifdef __WXMAC__ + static const char * const OPEN_CMD = "/usr/bin/open"; + if ( wxFileExists(OPEN_CMD) && + wxExecute(wxString(OPEN_CMD) + " " + document) ) + return true; +#elif defined(__UNIX__) // Our best best is to use xdg-open from freedesktop.org cross-desktop // compatibility suite xdg-utils // (see http://portland.freedesktop.org/wiki/) -- this is installed on @@ -954,9 +959,21 @@ bool wxLaunchDefaultApplication(const wxString &document, int flags) if ( wxExecute(xdg_open + " " + document) ) return true; } +#elif defined(__WXMSW__) + const INT_PTR result = (INT_PTR)::ShellExecute + ( + NULL, // parent window + _T("open"), + document.wx_str(), + NULL, // parameters + NULL, // working directory + SW_SHOWDEFAULT + ); + if ( result > 32 ) + return true; #endif - return false; + return false; } // ---------------------------------------------------------------------------- @@ -968,7 +985,7 @@ bool wxLaunchDefaultApplication(const wxString &document, int flags) bool wxCocoaLaunchDefaultBrowser(const wxString& url, int flags); #endif -bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) +static bool DoLaunchDefaultBrowser(const wxString& urlOrig, int flags) { wxUnusedVar(flags); @@ -1004,13 +1021,14 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) wxRegKey keyDDE(key, wxT("DDEExec")); if ( keyDDE.Exists() ) { - const wxString ddeTopic = wxRegKey(keyDDE, wxT("topic")); - // we only know the syntax of WWW_OpenURL DDE request for IE, // optimistically assume that all other browsers are compatible // with it + static const wxChar *TOPIC_OPEN_URL = wxT("WWW_OpenURL"); wxString ddeCmd; - bool ok = ddeTopic == wxT("WWW_OpenURL"); + wxRegKey keyTopic(keyDDE, wxT("topic")); + bool ok = keyTopic.Exists() && + keyTopic.QueryDefaultValue() == TOPIC_OPEN_URL; if ( ok ) { ddeCmd = keyDDE.QueryDefaultValue(); @@ -1023,7 +1041,7 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) // in is -1 (meaning "current") by default, replace it with // 0 which means "new" (see KB article 160957) ok = ddeCmd.Replace(wxT("-1"), wxT("0"), - false /* only first occurence */) == 1; + false /* only first occurrence */) == 1; } if ( ok ) @@ -1039,7 +1057,7 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) wxLogNull noLog; const wxString ddeServer = wxRegKey(keyDDE, wxT("application")); - if ( wxExecuteDDE(ddeServer, ddeTopic, ddeCmd) ) + if ( wxExecuteDDE(ddeServer, TOPIC_OPEN_URL, ddeCmd) ) return true; // this is not necessarily an error: maybe browser is @@ -1057,6 +1075,7 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) sei.lpFile = url.c_str(); sei.lpVerb = _T("open"); sei.nShow = SW_SHOWNORMAL; + sei.fMask = SEE_MASK_FLAG_NO_UI; // we give error message ourselves ::ShellExecuteEx(&sei); @@ -1176,6 +1195,15 @@ bool wxLaunchDefaultBrowser(const wxString& urlOrig, int flags) return false; } +bool wxLaunchDefaultBrowser(const wxString& url, int flags) +{ + if ( flags & wxBROWSER_NOBUSYCURSOR ) + return DoLaunchDefaultBrowser(url, flags); + + wxBusyCursor bc; + return DoLaunchDefaultBrowser(url, flags); +} + // ---------------------------------------------------------------------------- // Menu accelerators related functions // ---------------------------------------------------------------------------- @@ -1492,8 +1520,8 @@ wxString wxGetPasswordFromUser(const wxString& message, #if wxUSE_COLOURDLG -wxColour wxGetColourFromUser(wxWindow *parent, - const wxColour& colInit, +wxColour wxGetColourFromUser(wxWindow *parent, + const wxColour& colInit, const wxString& caption, wxColourData *ptrData) {