mirror of https://github.com/OpenTTD/OpenTTD
Fix: [Emscripten] open links in browser (#8655)
parent
ac2b5e57cf
commit
6c8f2227cd
|
@ -71,6 +71,34 @@ Module.preRun.push(function() {
|
||||||
* add_server("localhost", 3979); */
|
* add_server("localhost", 3979); */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var leftButtonDown = false;
|
||||||
|
document.addEventListener("mousedown", e => {
|
||||||
|
if (e.button == 0) {
|
||||||
|
leftButtonDown = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
document.addEventListener("mouseup", e => {
|
||||||
|
if (e.button == 0) {
|
||||||
|
leftButtonDown = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
window.openttd_open_url = function(url, url_len) {
|
||||||
|
const url_string = UTF8ToString(url, url_len);
|
||||||
|
function openWindow() {
|
||||||
|
document.removeEventListener("mouseup", openWindow);
|
||||||
|
window.open(url_string, '_blank');
|
||||||
|
}
|
||||||
|
/* Trying to open the URL while the mouse is down results in the button getting stuck, so wait for the
|
||||||
|
* mouse to be released before opening it. However, when OpenTTD is lagging, the mouse can get released
|
||||||
|
* before the button click even registers, so check for that, and open the URL immediately if that's the
|
||||||
|
* case. */
|
||||||
|
if (leftButtonDown) {
|
||||||
|
document.addEventListener("mouseup", openWindow);
|
||||||
|
} else {
|
||||||
|
openWindow();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* https://github.com/emscripten-core/emscripten/pull/12995 implements this
|
/* https://github.com/emscripten-core/emscripten/pull/12995 implements this
|
||||||
* properly. Till that time, we use a polyfill. */
|
* properly. Till that time, we use a polyfill. */
|
||||||
SOCKFS.websocket_sock_ops.createPeer_ = SOCKFS.websocket_sock_ops.createPeer;
|
SOCKFS.websocket_sock_ops.createPeer_ = SOCKFS.websocket_sock_ops.createPeer;
|
||||||
|
|
|
@ -28,6 +28,10 @@
|
||||||
#include <SDL.h>
|
#include <SDL.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef __EMSCRIPTEN__
|
||||||
|
# include <emscripten.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
# include <sys/mount.h>
|
# include <sys/mount.h>
|
||||||
#elif (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__)
|
#elif (defined(_POSIX_VERSION) && _POSIX_VERSION >= 200112L) || defined(__GLIBC__)
|
||||||
|
@ -288,7 +292,13 @@ bool GetClipboardContents(char *buffer, const char *last)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef __APPLE__
|
#if defined(__EMSCRIPTEN__)
|
||||||
|
void OSOpenBrowser(const char *url)
|
||||||
|
{
|
||||||
|
/* Implementation in pre.js */
|
||||||
|
EM_ASM({ if(window["openttd_open_url"]) window.openttd_open_url($0, $1) }, url, strlen(url));
|
||||||
|
}
|
||||||
|
#elif !defined( __APPLE__)
|
||||||
void OSOpenBrowser(const char *url)
|
void OSOpenBrowser(const char *url)
|
||||||
{
|
{
|
||||||
pid_t child_pid = fork();
|
pid_t child_pid = fork();
|
||||||
|
|
Loading…
Reference in New Issue