- // Windows sometimes doesn't open the browser correctly when using mime
- // types, so do ShellExecute - i.e. start <url> (from James Carroll)
- nResult = (int) (*lpShellExecute)(NULL, NULL, finalurl.c_str(),
- NULL, wxT(""), SW_SHOWNORMAL);
- // Unload Shell32.dll
- ::FreeLibrary(hShellDll);
-#else
- //Windows CE does not have normal ShellExecute - but it has
- //ShellExecuteEx all the way back to version 1.0
-
-
- //Set up the SHELLEXECUTEINFO structure to pass to ShellExecuteEx
- SHELLEXECUTEINFO sei;
- sei.cbSize = sizeof(SHELLEXECUTEINFO);
- sei.dwHotKey = 0;
- sei.fMask = 0;
- sei.hIcon = NULL;
- sei.hInstApp = NULL;
- sei.hkeyClass = NULL;
- sei.hMonitor = NULL;
- sei.hProcess = NULL;
- sei.hwnd = NULL;
- sei.lpClass = NULL;
- sei.lpDirectory = NULL;
- sei.lpFile = finalurl.c_str();
- sei.lpIDList = NULL;
- sei.lpParameters = NULL;
- sei.lpVerb = TEXT("open");
- sei.nShow = SW_SHOWNORMAL;
-
- //Call ShellExecuteEx
- ShellExecuteEx(&sei);
-
- //Get error code
- nResult = (int) sei.hInstApp;
+ for (run_ptr = tmp_ptr + size; run_ptr <= thresh; run_ptr += size)
+ if ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, user_data) < 0)
+ tmp_ptr = run_ptr;
+
+ if (tmp_ptr != base_ptr)
+ SWAP (tmp_ptr, base_ptr, size);
+
+ /* Insertion sort, running from left-hand-side up to right-hand-side. */
+
+ run_ptr = base_ptr + size;
+ while ((run_ptr += size) <= end_ptr)
+ {
+ tmp_ptr = run_ptr - size;
+ while ((*cmp) ((void *) run_ptr, (void *) tmp_ptr, user_data) < 0)
+ tmp_ptr -= size;
+
+ tmp_ptr += size;
+ if (tmp_ptr != run_ptr)
+ {
+ char *trav;
+
+ trav = run_ptr + size;
+ while (--trav >= run_ptr)
+ {
+ char c = *trav;
+ char *hi, *lo;
+
+ for (hi = lo = trav; (lo -= size) >= tmp_ptr; hi = lo)
+ *hi = *lo;
+ *hi = c;
+ }
+ }
+ }
+ }
+}
+
+
+
+#endif // wxUSE_BASE
+
+// ============================================================================
+// GUI-only functions from now on
+// ============================================================================
+
+#if wxUSE_GUI
+
+// ----------------------------------------------------------------------------
+// Launch document with default app
+// ----------------------------------------------------------------------------
+
+bool wxLaunchDefaultApplication(const wxString& document, int flags)
+{
+ wxUnusedVar(flags);
+
+#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
+ // most modern distributions and may be tweaked by them to handle
+ // distribution specifics.
+ wxString path, xdg_open;
+ if ( wxGetEnv("PATH", &path) &&
+ wxFindFileInPath(&xdg_open, path, "xdg-open") )
+ {
+ if ( wxExecute(xdg_open + " " + document) )
+ return true;
+ }
+#elif defined(__WXMSW__)
+ WinStruct<SHELLEXECUTEINFO> sei;
+ sei.lpFile = document.wx_str();
+ sei.lpVerb = _T("open");
+ sei.nShow = SW_SHOWDEFAULT;
+
+ // 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;