changeset 18643:8bdbe20d6e07 draft

(svn r23490) -Add [FS#2750]: OpenBrowser function to open a browser on major OSes
author yexo <yexo@openttd.org>
date Sun, 11 Dec 2011 11:47:08 +0000
parents c033dd088270
children 1ce716d62115
files src/openttd.cpp src/os/macosx/macos.mm src/os/unix/unix.cpp src/os/windows/win32.cpp
diffstat 4 files changed, 34 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/openttd.cpp
+++ b/src/openttd.cpp
@@ -359,6 +359,15 @@
 	}
 }
 
+void OpenBrowser(const char *url)
+{
+	/* Make sure we only accept urls that are sure to open a browser. */
+	if (strstr(url, "http://") != url && strstr(url, "https://") != url) return;
+
+	extern void OSOpenBrowser(const char *url);
+	OSOpenBrowser(url);
+}
+
 /** Callback structure of statements to be executed after the NewGRF scan. */
 struct AfterNewGRFScan : NewGRFScanCallback {
 	Year startyear;                    ///< The start year.
--- a/src/os/macosx/macos.mm
+++ b/src/os/macosx/macos.mm
@@ -118,6 +118,10 @@
 	}
 }
 
+void OSOpenBrowser(const char *url)
+{
+	[ [ NSWorkspace sharedWorkspace ] openURL:[ NSURL URLWithString:[ NSString stringWithUTF8String:url ] ] ];
+}
 
 /**
  * Determine and return the current user's locale.
--- a/src/os/unix/unix.cpp
+++ b/src/os/unix/unix.cpp
@@ -14,6 +14,7 @@
 #include "../../openttd.h"
 #include "../../crashlog.h"
 #include "../../core/random_func.hpp"
+#include "../../debug.h"
 
 
 #include <dirent.h>
@@ -348,4 +349,18 @@
 
 	return count;
 }
+
+void OSOpenBrowser(const char *url)
+{
+	pid_t child_pid = fork();
+	if (child_pid != 0) return;
+
+	const char *args[3];
+	args[0] = "/usr/bin/xdg-open";
+	args[1] = url;
+	args[2] = NULL;
+	execv(args[0], const_cast<char * const *>(args));
+	DEBUG(misc, 0, "Failed to open url: %s", url);
+	exit(0);
+}
 #endif
--- a/src/os/windows/win32.cpp
+++ b/src/os/windows/win32.cpp
@@ -18,6 +18,7 @@
 #include <windows.h>
 #include <fcntl.h>
 #include <shlobj.h> /* SHGetFolderPath */
+#include <Shellapi.h>
 #include "win32.h"
 #include "../../core/alloc_func.hpp"
 #include "../../openttd.h"
@@ -79,6 +80,11 @@
 	MessageBox(GetActiveWindow(), MB_TO_WIDE(buf), _T("Error!"), MB_ICONSTOP);
 }
 
+void OSOpenBrowser(const char *url)
+{
+	ShellExecute(GetActiveWindow(), _T("open"), MB_TO_WIDE(url), NULL, NULL, SW_SHOWNORMAL);
+}
+
 /* Code below for windows version of opendir/readdir/closedir copied and
  * modified from Jan Wassenberg's GPL implementation posted over at
  * http://www.gamedev.net/community/forums/topic.asp?topic_id=364584&whichpage=1&#2398903 */