if ( !email )
return false;
- wxStrncpy(address, email, maxSize - 1);
- address[maxSize - 1] = wxT('\0');
+ wxStrlcpy(address, email.t_str(), maxSize);
return true;
}
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 )
+ WinStruct<SHELLEXECUTEINFO> sei;
+ sei.lpFile = document.wx_str();
+ sei.lpVerb = _T("open");
+#ifdef __WXWINCE__
+ sei.nShow = SW_SHOWNORMAL; // SW_SHOWDEFAULT not defined under CE (#10216)
+#else
+ sei.nShow = SW_SHOWDEFAULT;
+#endif
+
+ // avoid Windows message box in case of error for consistency with
+ // wxLaunchDefaultBrowser() even if don't show the error ourselves in this
+ // function
+ sei.fMask = SEE_MASK_FLAG_NO_UI;
+
+ if ( ::ShellExecuteEx(&sei) )
return true;
#endif
static const wxChar *TOPIC_OPEN_URL = wxT("WWW_OpenURL");
wxString ddeCmd;
wxRegKey keyTopic(keyDDE, wxT("topic"));
- bool ok = keyTopic.Exists() && keyTopic == TOPIC_OPEN_URL;
+ bool ok = keyTopic.Exists() &&
+ keyTopic.QueryDefaultValue() == TOPIC_OPEN_URL;
if ( ok )
{
ddeCmd = keyDDE.QueryDefaultValue();
// 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 )
sei.nShow = SW_SHOWNORMAL;
sei.fMask = SEE_MASK_FLAG_NO_UI; // we give error message ourselves
- ::ShellExecuteEx(&sei);
-
- const INT_PTR nResult = (INT_PTR)sei.hInstApp;
-
- // Firefox returns file not found for some reason, so make an exception
- // for it
- if ( nResult > 32 || nResult == SE_ERR_FNF )
- {
-#ifdef __WXDEBUG__
- // Log something if SE_ERR_FNF happens
- if ( nResult == SE_ERR_FNF )
- wxLogDebug(wxT("SE_ERR_FNF from ShellExecute -- maybe FireFox?"));
-#endif // __WXDEBUG__
+ if ( ::ShellExecuteEx(&sei) )
return true;
- }
#elif defined(__WXCOCOA__)
// NOTE: We need to call the real implementation from src/cocoa/utils.mm
// because the code must use Objective-C features.