#if wxUSE_BASE
-// ----------------------------------------------------------------------------
-// common data
-// ----------------------------------------------------------------------------
-
// ============================================================================
// implementation
// ============================================================================
if (buf.GetChar(0) >= wxT('A'))
firstDigit = buf.GetChar(0) - wxT('A') + 10;
else
- firstDigit = buf.GetChar(0) - wxT('0');
+ firstDigit = buf.GetChar(0) - wxT('0');
if (buf.GetChar(1) >= wxT('A'))
secondDigit = buf.GetChar(1) - wxT('A') + 10;
// misc functions
// ----------------------------------------------------------------------------
+// Don't synthesize KeyUp events holding down a key and producing KeyDown
+// events with autorepeat. On by default and always on in wxMSW. wxGTK version
+// in utilsgtk.cpp.
+#ifndef __WXGTK__
+bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) )
+{
+ return true; // detectable auto-repeat is the only mode MSW supports
+}
+#endif // !wxGTK
+
// Return the current date/time
wxString wxNow()
{
#endif
}
+#if WXWIN_COMPATIBILITY_2_8
void wxUsleep(unsigned long milliseconds)
{
wxMilliSleep(milliseconds);
}
+#endif
const wxChar *wxGetInstallPrefix()
{
}
+// ----------------------------------------------------------------------------
+// wxPlatform
+// ----------------------------------------------------------------------------
+
/*
* Class to make it easier to specify platform-dependent values
*/
if ( !email )
return false;
- wxStrncpy(address, email, maxSize - 1);
- address[maxSize - 1] = wxT('\0');
+ wxStrlcpy(address, email.t_str(), maxSize);
return true;
}
}
// ----------------------------------------------------------------------------
-// wxApp::Yield() wrappers for backwards compatibility
+// Id functions
// ----------------------------------------------------------------------------
-bool wxYield()
-{
- return wxTheApp && wxTheApp->Yield();
-}
-
-bool wxYieldIfNeeded()
-{
- return wxTheApp && wxTheApp->Yield(true);
-}
-
// Id generation
static long wxCurrentId = 100;
/* Byte-wise swap two items of size SIZE. */
#define SWAP(a, b, size) \
- do \
- { \
- register size_t __size = (size); \
- register char *__a = (a), *__b = (b); \
+ do \
+ { \
+ register size_t __size = (size); \
+ register char *__a = (a), *__b = (b); \
do \
- { \
- char __tmp = *__a; \
+ { \
+ char __tmp = *__a; \
*__a++ = *__b; \
- *__b++ = __tmp; \
- } while (--__size > 0); \
+ *__b++ = __tmp; \
+ } while (--__size > 0); \
} while (0)
/* Discontinue quicksort algorithm when partition gets below this size.
}
}
+#endif // wxUSE_BASE
-#endif // wxUSE_BASE
// ============================================================================
// GUI-only functions from now on
// 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
if ( wxExecute(xdg_open + " " + document) )
return true;
}
+#elif defined(__WXMSW__)
+ 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
- return false;
+ // 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
+
+ return false;
}
// ----------------------------------------------------------------------------
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();
// 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 )
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
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);
-
- 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.
msg.Printf(_T("wxWidgets Library (%s port)\n")
_T("Version %d.%d.%d%s%s, compiled at %s %s\n")
_T("Runtime version of toolkit used is %d.%d.%s\n")
- _T("Copyright (c) 1995-2008 wxWidgets team"),
+ _T("Copyright (c) 1995-2009 wxWidgets team"),
wxPlatformInfo::Get().GetPortIdName().c_str(),
wxMAJOR_VERSION,
wxMINOR_VERSION,
return rc;
}
-// Don't synthesize KeyUp events holding down a key and producing KeyDown
-// events with autorepeat. On by default and always on in wxMSW. wxGTK version
-// in utilsgtk.cpp.
-#ifndef __WXGTK__
-bool wxSetDetectableAutoRepeat( bool WXUNUSED(flag) )
+// ----------------------------------------------------------------------------
+// wxApp::Yield() wrappers for backwards compatibility
+// ----------------------------------------------------------------------------
+
+bool wxYield()
{
- return true; // detectable auto-repeat is the only mode MSW supports
+ return wxTheApp && wxTheApp->Yield();
+}
+
+bool wxYieldIfNeeded()
+{
+ return wxTheApp && wxTheApp->Yield(true);
}
-#endif // !wxGTK
#endif // wxUSE_GUI