SDL: Add support for open URL

From b52e9459ba8cdfd29d2b8ecc68e838e52f1f13ba Mon Sep 17 00:00:00 2001
From: uyjulian <[EMAIL REDACTED]>
Date: Fri, 29 Jan 2021 01:26:13 -0600
Subject: [PATCH] Add support for open URL

---
 CMakeLists.txt             |  4 ++++
 src/misc/vita/SDL_sysurl.c | 44 ++++++++++++++++++++++++++++++++++++++
 src/video/SDL_video.c      |  9 ++++++++
 3 files changed, 57 insertions(+)
 create mode 100644 src/misc/vita/SDL_sysurl.c

diff --git a/CMakeLists.txt b/CMakeLists.txt
index f5fb4cf3f..e7641547f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -2021,6 +2021,10 @@ elseif(VITA)
     set_source_files_properties(${SDL2_SOURCE_DIR}/src/atomic/SDL_spinlock.c PROPERTIES COMPILE_FLAGS -marm)
   endif()
 
+  file(GLOB MISC_SOURCES ${SDL2_SOURCE_DIR}/src/misc/vita/*.c)
+  set(SOURCE_FILES ${SOURCE_FILES} ${MISC_SOURCES})
+  set(HAVE_SDL_MISC TRUE)
+
   if(SDL_AUDIO)
     set(SDL_AUDIO_DRIVER_VITA 1)
     file(GLOB VITA_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/vita/*.c)
diff --git a/src/misc/vita/SDL_sysurl.c b/src/misc/vita/SDL_sysurl.c
new file mode 100644
index 000000000..42f6c456e
--- /dev/null
+++ b/src/misc/vita/SDL_sysurl.c
@@ -0,0 +1,44 @@
+/*
+  Simple DirectMedia Layer
+  Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+*/
+
+#include "../SDL_sysurl.h"
+
+#include <string.h>
+#include <psp2/apputil.h>
+
+int
+SDL_SYS_OpenURL(const char *url)
+{
+    SceAppUtilInitParam init_param;
+    SceAppUtilBootParam boot_param;
+    SceAppUtilWebBrowserParam browser_param;
+    SDL_zero(init_param);
+    SDL_zero(boot_param);
+    sceAppUtilInit(&init_param, &boot_param);
+    SDL_zero(browser_param);
+    browser_param.str = url;
+    browser_param.strlen = strlen(url);
+    sceAppUtilLaunchWebBrowser(&browser_param);
+    return 0;
+}
+
+/* vi: set ts=4 sw=4 expandtab: */
+
diff --git a/src/video/SDL_video.c b/src/video/SDL_video.c
index e262a1969..c3782c05d 100644
--- a/src/video/SDL_video.c
+++ b/src/video/SDL_video.c
@@ -4024,6 +4024,9 @@ SDL_IsScreenKeyboardShown(SDL_Window *window)
     return SDL_FALSE;
 }
 
+#if SDL_VIDEO_DRIVER_VITA
+#include "vita/SDL_vitamessagebox.h"
+#endif
 #if SDL_VIDEO_DRIVER_ANDROID
 #include "android/SDL_androidmessagebox.h"
 #endif
@@ -4107,6 +4110,12 @@ SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
     }
 
     /* It's completely fine to call this function before video is initialized */
+#if SDL_VIDEO_DRIVER_VITA
+    if (retval == -1 &&
+        VITA_ShowMessageBox(messageboxdata, buttonid) == 0) {
+        retval = 0;
+    }
+#endif
 #if SDL_VIDEO_DRIVER_ANDROID
     if (retval == -1 &&
         Android_ShowMessageBox(messageboxdata, buttonid) == 0) {