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
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.