Add wxLaunchDefaultBrowser, note wxGetKeyState change
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33802 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
62705a278a
commit
498a1eeb8d
@ -5,9 +5,11 @@ wxWidgets Change Log - For more verbose changes, see the manual
|
|||||||
2.6.1
|
2.6.1
|
||||||
-----
|
-----
|
||||||
All:
|
All:
|
||||||
|
- Added wxLaunchDefaultBrowser.
|
||||||
|
|
||||||
wxMac:
|
wxMac:
|
||||||
- Added support for launching 'APPL' bundles with wxExecute (usually they have a .app extension and are the ones that reside in the Applications folder).
|
- Added support for launching 'APPL' bundles with wxExecute (usually they have a .app extension and are the ones that reside in the Applications folder).
|
||||||
|
- Fixed a bug in wxGetKeyState where shift and some other keys were returning an incorrect state.
|
||||||
|
|
||||||
2.6.0
|
2.6.0
|
||||||
-----
|
-----
|
||||||
|
@ -164,6 +164,7 @@ the corresponding topic.
|
|||||||
\helpref{wxIsNaN}{wxisnan}\\
|
\helpref{wxIsNaN}{wxisnan}\\
|
||||||
\helpref{wxIsWild}{wxiswild}\\
|
\helpref{wxIsWild}{wxiswild}\\
|
||||||
\helpref{wxKill}{wxkill}\\
|
\helpref{wxKill}{wxkill}\\
|
||||||
|
\helpref{wxLaunchDefaultBrowser}{wxlaunchdefaultbrowser}\\
|
||||||
\helpref{wxLEAVE\_CRIT\_SECT}{wxleavecritsect}\\
|
\helpref{wxLEAVE\_CRIT\_SECT}{wxleavecritsect}\\
|
||||||
\helpref{wxLoadUserResource}{wxloaduserresource}\\
|
\helpref{wxLoadUserResource}{wxloaduserresource}\\
|
||||||
\helpref{wxLogDebug}{wxlogdebug}\\
|
\helpref{wxLogDebug}{wxlogdebug}\\
|
||||||
@ -2978,6 +2979,18 @@ frame or dialog containing it, or {\tt NULL}.
|
|||||||
<wx/window.h>
|
<wx/window.h>
|
||||||
|
|
||||||
|
|
||||||
|
\membersection{::wxLaunchDefaultBrowser}\label{wxlaunchdefaultbrowser}
|
||||||
|
|
||||||
|
\func{bool}{wxLaunchDefaultBrowser}{\param{const wxString\& }{sUrl}}
|
||||||
|
|
||||||
|
Launches the user's default browser and tells it to open the location at {\tt sUrl}.
|
||||||
|
|
||||||
|
Returns true if the application was successfully launched.
|
||||||
|
|
||||||
|
\wxheading{Include files}
|
||||||
|
|
||||||
|
<wx/utils.h>
|
||||||
|
|
||||||
\membersection{::wxLoadUserResource}\label{wxloaduserresource}
|
\membersection{::wxLoadUserResource}\label{wxloaduserresource}
|
||||||
|
|
||||||
\func{wxString}{wxLoadUserResource}{\param{const wxString\& }{resourceName}, \param{const wxString\& }{resourceType=``TEXT"}}
|
\func{wxString}{wxLoadUserResource}{\param{const wxString\& }{resourceName}, \param{const wxString\& }{resourceType=``TEXT"}}
|
||||||
|
@ -324,6 +324,9 @@ WXDLLIMPEXP_BASE bool wxHandleFatalExceptions(bool doit = true);
|
|||||||
|
|
||||||
#endif // wxUSE_ON_FATAL_EXCEPTION
|
#endif // wxUSE_ON_FATAL_EXCEPTION
|
||||||
|
|
||||||
|
// Launch url in the user's default internet browser
|
||||||
|
WXDLLIMPEXP_BASE bool wxLaunchDefaultBrowser(const wxString& url);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Environment variables
|
// Environment variables
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -60,6 +60,9 @@
|
|||||||
|
|
||||||
#include "wx/process.h"
|
#include "wx/process.h"
|
||||||
#include "wx/txtstrm.h"
|
#include "wx/txtstrm.h"
|
||||||
|
#include "wx/uri.h"
|
||||||
|
#include "wx/mimetype.h"
|
||||||
|
#include "wx/config.h"
|
||||||
|
|
||||||
#if defined(__WXWINCE__) && wxUSE_DATETIME
|
#if defined(__WXWINCE__) && wxUSE_DATETIME
|
||||||
#include "wx/datetime.h"
|
#include "wx/datetime.h"
|
||||||
@ -524,6 +527,143 @@ long wxExecute(const wxString& command,
|
|||||||
return wxDoExecuteWithCapture(command, output, &error, flags);
|
return wxDoExecuteWithCapture(command, output, &error, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// Launch default browser
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxLaunchDefaultBrowser(const wxString& url)
|
||||||
|
{
|
||||||
|
wxString finalurl = url;
|
||||||
|
|
||||||
|
//if it isn't a full url, try appending http:// to it
|
||||||
|
if(wxURI(url).IsReference())
|
||||||
|
finalurl = wxString(wxT("http://")) + url;
|
||||||
|
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
wxString command;
|
||||||
|
|
||||||
|
// ShellExecute() always opens in the same window,
|
||||||
|
// so do it manually for new window (from Mahogany)
|
||||||
|
wxRegKey key(wxRegKey::HKCR, url.BeforeFirst(':') + wxT("\\shell\\open"));
|
||||||
|
if ( key.Exists() )
|
||||||
|
{
|
||||||
|
wxRegKey keyDDE(key, wxT("DDEExec"));
|
||||||
|
if ( keyDDE.Exists() )
|
||||||
|
{
|
||||||
|
wxString ddeTopic = wxRegKey(keyDDE, wxT("topic"));
|
||||||
|
|
||||||
|
// we only know the syntax of WWW_OpenURL DDE request
|
||||||
|
if ( ddeTopic == wxT("WWW_OpenURL") )
|
||||||
|
{
|
||||||
|
wxString ddeCmd = keyDDE;
|
||||||
|
|
||||||
|
// this is a bit naive but should work as -1 can't appear
|
||||||
|
// elsewhere in the DDE topic, normally
|
||||||
|
if ( ddeCmd.Replace(wxT("-1"), wxT("0"),
|
||||||
|
FALSE /* only first occurence */) == 1 )
|
||||||
|
{
|
||||||
|
// and also replace the parameters
|
||||||
|
if ( ddeCmd.Replace(wxT("%1"), url, FALSE) == 1 )
|
||||||
|
{
|
||||||
|
// magic incantation understood by wxMSW
|
||||||
|
command << wxT("WX_DDE#")
|
||||||
|
<< wxRegKey(key, wxT("command")).QueryDefaultValue() << wxT('#')
|
||||||
|
<< wxRegKey(keyDDE, wxT("application")).QueryDefaultValue()
|
||||||
|
<< wxT('#') << ddeTopic << wxT('#')
|
||||||
|
<< ddeCmd;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Try wxExecute - if it doesn't work or the regkey stuff
|
||||||
|
//above failed, fallback to opening the file in the same
|
||||||
|
//browser window
|
||||||
|
if ( command.empty() || wxExecute(command) == -1)
|
||||||
|
{
|
||||||
|
// CYGWIN and MINGW may have problems - so load ShellExecute
|
||||||
|
// dynamically
|
||||||
|
typedef HINSTANCE (*LPShellExecute)(HWND hwnd, const wxChar* lpOperation,
|
||||||
|
const wxChar* lpFile,
|
||||||
|
const wxChar* lpParameters,
|
||||||
|
const wxChar* lpDirectory,
|
||||||
|
INT nShowCmd);
|
||||||
|
|
||||||
|
HINSTANCE hShellDll = ::LoadLibrary(wxT("shell32.dll"));
|
||||||
|
if(hShellDll == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
LPShellExecute lpShellExecute =
|
||||||
|
(LPShellExecute) ::GetProcAddress(hShellDll,
|
||||||
|
wxString::Format(wxT("ShellExecute%s"),
|
||||||
|
#ifdef __WXUNICODE__
|
||||||
|
wxT("W")
|
||||||
|
#else
|
||||||
|
wxT("A")
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
);
|
||||||
|
if(lpShellExecute == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Windows sometimes doesn't open the browser correctly when using mime
|
||||||
|
// types, so do ShellExecute - i.e. start <url> (from James Carroll)
|
||||||
|
unsigned int nResult = (int) (*lpShellExecute)(NULL, NULL, finalurl.c_str(),
|
||||||
|
NULL, wxT(""), SW_SHOWNORMAL);
|
||||||
|
|
||||||
|
// Unload Shell32.dll
|
||||||
|
::FreeLibrary(hShellDll);
|
||||||
|
|
||||||
|
// 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)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
# ifdef __WXDEBUG__
|
||||||
|
// Log something if SE_ERR_FNF happens
|
||||||
|
if(nResult == SE_ERR_FNF)
|
||||||
|
wxLogDebug(wxT("Got SE_ERR_FNF from ShellExecute - maybe FireFox"));
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
// Non-windows way
|
||||||
|
wxFileType *ft =
|
||||||
|
wxTheMimeTypesManager->GetFileTypeFromExtension (_T("html"));
|
||||||
|
if (!ft)
|
||||||
|
{
|
||||||
|
wxLogError(_T("No default application can open .html extension"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString mt;
|
||||||
|
ft->GetMimeType(&mt);
|
||||||
|
|
||||||
|
wxString cmd;
|
||||||
|
bool ok =
|
||||||
|
ft->GetOpenCommand (&cmd,
|
||||||
|
wxFileType::MessageParameters (finalurl.c_str(),
|
||||||
|
_T("")));
|
||||||
|
delete ft;
|
||||||
|
|
||||||
|
if (ok)
|
||||||
|
{
|
||||||
|
if( wxExecute (cmd, wxEXEC_ASYNC) == -1 )
|
||||||
|
{
|
||||||
|
wxLogError(_T("Failed to launch application for wxLaunchDefaultBrowser"));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//success - hopefully
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxApp::Yield() wrappers for backwards compatibility
|
// wxApp::Yield() wrappers for backwards compatibility
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user