mirror of
https://github.com/archr-linux/Arch-R.git
synced 2026-07-12 18:19:42 -07:00
Sync standalone + libretro emulator fixes from ROCKNIX
retroarch: bump to commit bdba046f (v1.22.2 + fixes) and rebase the two local patches (0010-paths, 0011-cheevos-sounds) so they apply cleanly against the new tree. setsettings.sh: configure_hotkeys now detects the InputPlumber-emulated DualSense pad first, then falls back to js0 / joypad. Without this, retroarch took the raw event device and the hotkey binding never matched what InputPlumber actually exposed to userspace. drastic-sa: pull the new libdrastouch (sharp-shimmerless + quilez pixel shaders, SDL2 hook) and the matching start_drastic.sh, which now reads the shader setting and exports DSHOOK_SHADER. Drops the dead S922X libmali block we never executed on RK3326. hypseus-singe: rewrite of start_hypseus.sh fixes broken controls (autoconfig.cfg lookup was matching too loosely) and adds the set_kill on exit so the quit hotkey actually terminates the emulator instead of leaving it parented to ES. ppsspp-sa: add 005-hide-unsupported-ui-items.patch to drop the "www.ppsspp.org" link and the "Buy PPSSPP Gold" button from the main screen. Handheld UX cleanup, no behavioral change. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -348,7 +348,11 @@ EOF
|
||||
function configure_hotkeys() {
|
||||
log "Configure hotkeys..."
|
||||
local MY_CONTROLLER
|
||||
if grep -q "js0" /proc/bus/input/devices; then
|
||||
|
||||
if grep -q "Sony Interactive Entertainment DualSense Wireless Controller" /proc/bus/input/devices; then
|
||||
# InputPlumber virtual DS5
|
||||
MY_CONTROLLER="Sony Interactive Entertainment DualSense Wireless Controller"
|
||||
elif grep -q "js0" /proc/bus/input/devices; then
|
||||
MY_CONTROLLER=$(grep -b4 js0 /proc/bus/input/devices | awk 'BEGIN {FS="\""}; /Name/ {printf $2}')
|
||||
else
|
||||
MY_CONTROLLER=$(grep -b4 joypad /proc/bus/input/devices | awk 'BEGIN {FS="\""}; /Name/ {printf $2}')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
|
||||
|
||||
PKG_NAME="retroarch"
|
||||
PKG_VERSION="fae7468de15b32a0e105e45325e5ca85e62ea7d4" # v1.22.2 + fixes
|
||||
PKG_VERSION="bdba046fa6766380bc2457532f38e589df769aaf" # v1.22.2 + fixes
|
||||
PKG_SITE="https://github.com/libretro/RetroArch"
|
||||
PKG_URL="${PKG_SITE}/archive/${PKG_VERSION}.tar.gz"
|
||||
PKG_LICENSE="GPLv3"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c
|
||||
index e1db1da096..7baf8a5f21 100644
|
||||
index 1fcf97e507..17d1a10a40 100644
|
||||
--- a/frontend/drivers/platform_unix.c
|
||||
+++ b/frontend/drivers/platform_unix.c
|
||||
@@ -1812,7 +1812,7 @@ static void frontend_unix_get_env(int *argc,
|
||||
@@ -2018,7 +2018,7 @@ static void frontend_unix_get_env(int *argc,
|
||||
"/usr/share/games/retroarch",
|
||||
"assets", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS]));
|
||||
else
|
||||
@@ -11,23 +11,23 @@ index e1db1da096..7baf8a5f21 100644
|
||||
"assets", sizeof(g_defaults.dirs[DEFAULT_DIR_ASSETS]));
|
||||
|
||||
#if defined(DINGUX)
|
||||
@@ -1885,7 +1885,7 @@ static void frontend_unix_get_env(int *argc,
|
||||
@@ -2091,7 +2091,7 @@ static void frontend_unix_get_env(int *argc,
|
||||
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_REMAP],
|
||||
g_defaults.dirs[DEFAULT_DIR_MENU_CONFIG],
|
||||
"remaps", sizeof(g_defaults.dirs[DEFAULT_DIR_REMAP]));
|
||||
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_PLAYLIST], base_path,
|
||||
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_PLAYLIST], "/tmp/",
|
||||
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_PLAYLIST], "/tmp/",
|
||||
"playlists", sizeof(g_defaults.dirs[DEFAULT_DIR_PLAYLIST]));
|
||||
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG], base_path,
|
||||
"records_config", sizeof(g_defaults.dirs[DEFAULT_DIR_RECORD_CONFIG]));
|
||||
@@ -1896,14 +1896,14 @@ static void frontend_unix_get_env(int *argc,
|
||||
@@ -2102,14 +2102,14 @@ static void frontend_unix_get_env(int *argc,
|
||||
libretro_database_directory,
|
||||
sizeof(g_defaults.dirs[DEFAULT_DIR_DATABASE]));
|
||||
else
|
||||
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_DATABASE], base_path,
|
||||
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_DATABASE], "/tmp/",
|
||||
"database/rdb", sizeof(g_defaults.dirs[DEFAULT_DIR_DATABASE]));
|
||||
if (!string_is_empty(libretro_video_shader_directory))
|
||||
if (libretro_video_shader_directory && *libretro_video_shader_directory)
|
||||
strlcpy(g_defaults.dirs[DEFAULT_DIR_SHADER],
|
||||
libretro_video_shader_directory,
|
||||
sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER]));
|
||||
@@ -35,9 +35,9 @@ index e1db1da096..7baf8a5f21 100644
|
||||
- fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SHADER], base_path,
|
||||
+ fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_SHADER], "/tmp/",
|
||||
"shaders", sizeof(g_defaults.dirs[DEFAULT_DIR_SHADER]));
|
||||
if (!string_is_empty(libretro_cheats_directory))
|
||||
if (libretro_cheats_directory && *libretro_cheats_directory)
|
||||
strlcpy(g_defaults.dirs[DEFAULT_DIR_CHEATS],
|
||||
@@ -1912,9 +1912,9 @@ static void frontend_unix_get_env(int *argc,
|
||||
@@ -2118,9 +2118,9 @@ static void frontend_unix_get_env(int *argc,
|
||||
else
|
||||
fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_CHEATS], base_path,
|
||||
"cheats", sizeof(g_defaults.dirs[DEFAULT_DIR_CHEATS]));
|
||||
|
||||
+5
-5
@@ -1,8 +1,8 @@
|
||||
diff --git a/audio/audio_driver.c b/audio/audio_driver.c
|
||||
index 01a727eb95..fc43700d22 100644
|
||||
index d5cabac95b..caa992381c 100644
|
||||
--- a/audio/audio_driver.c
|
||||
+++ b/audio/audio_driver.c
|
||||
@@ -1339,8 +1339,8 @@ static void audio_driver_load_menu_bgm_callback(retro_task_t *task,
|
||||
@@ -1569,8 +1569,8 @@ static void audio_driver_load_menu_bgm_c
|
||||
void audio_driver_load_system_sounds(void)
|
||||
{
|
||||
char basename_noext[NAME_MAX_LENGTH];
|
||||
@@ -13,7 +13,7 @@ index 01a727eb95..fc43700d22 100644
|
||||
settings_t *settings = config_get_ptr();
|
||||
const char *dir_assets = settings->paths.directory_assets;
|
||||
const bool audio_enable_menu = settings->bools.audio_enable_menu;
|
||||
@@ -1365,19 +1365,6 @@ void audio_driver_load_system_sounds(void)
|
||||
@@ -1597,19 +1597,6 @@ void audio_driver_load_system_sounds(voi
|
||||
if (!audio_enable_menu && !audio_enable_cheevo_unlock)
|
||||
goto end;
|
||||
|
||||
@@ -33,10 +33,10 @@ index 01a727eb95..fc43700d22 100644
|
||||
list = dir_list_new(sounds_path, MENU_SOUND_FORMATS, false, false, false, false);
|
||||
list_fallback = dir_list_new(sounds_fallback_path, MENU_SOUND_FORMATS, false, false, false, false);
|
||||
|
||||
@@ -1423,8 +1410,13 @@ void audio_driver_load_system_sounds(void)
|
||||
path_notice_back = path;
|
||||
@@ -1660,8 +1647,13 @@ void audio_driver_load_system_sounds(voi
|
||||
else if (string_is_equal_noncase(basename_noext, "bgm"))
|
||||
path_bgm = path;
|
||||
#endif
|
||||
- else if (string_is_equal_noncase(basename_noext, "unlock"))
|
||||
- path_cheevo_unlock = path;
|
||||
+ else if(string_is_empty(settings->arrays.cheevos_unlock_sound) == false) {
|
||||
|
||||
@@ -17,6 +17,7 @@ HIRES3D=$(get_setting hires_3d "${PLATFORM}" "${GAME}")
|
||||
THREADED3D=$(get_setting threaded_3d "${PLATFORM}" "${GAME}")
|
||||
FOLLOW3D=$(get_setting follow_3d_renderer "${PLATFORM}" "${GAME}")
|
||||
MICTHRESH=$(get_setting microphone_sensitivity "${PLATFORM}" "${GAME}")
|
||||
SHADER=$(get_setting shader "${PLATFORM}" "${GAME}")
|
||||
|
||||
#load gptokeyb support files
|
||||
control-gen_init.sh
|
||||
@@ -82,21 +83,11 @@ fi
|
||||
cd /storage/.config/drastic/
|
||||
@HOTKEY@
|
||||
|
||||
# Fix for libmali gpu driver on S922X platform
|
||||
if [ "${HW_DEVICE}" = "S922X" ]; then
|
||||
GPUDRIVER=$(/usr/bin/gpudriver)
|
||||
|
||||
if [ "${GPUDRIVER}" = "libmali" ]; then
|
||||
export SDL_VIDEO_GL_DRIVER=\/usr\/lib\/egl\/libGL.so.1
|
||||
export SDL_VIDEO_EGL_DRIVER=\/usr\/lib\/egl\/libEGL.so.1
|
||||
fi
|
||||
fi
|
||||
|
||||
$GPTOKEYB "drastic" -c "drastic.gptk" &
|
||||
# Fix actual touch inputs by replacing touch->mouse translation and add hw mic support
|
||||
export LD_PRELOAD="/usr/lib/libdrastouch.so"
|
||||
export SDL_TOUCH_MOUSE_EVENTS="0"
|
||||
export DSHOOK_MIC_THRESH="${MICTHRESH}"
|
||||
export DSHOOK_SHADER="${SHADER:-none}"
|
||||
./drastic "$1"
|
||||
_gptokeyb_pid="$(pidof gptokeyb 2>/dev/null)"
|
||||
[ -n "${_gptokeyb_pid}" ] && kill -9 ${_gptokeyb_pid}
|
||||
kill -9 $(pidof gptokeyb)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
+16
-18
@@ -4,6 +4,9 @@
|
||||
# Copyright (C) 2021-present Shanti Gilbert (https://github.com/shantigilbert)
|
||||
# Copyright (C) 2023 JELOS (https://github.com/JustEnoughLinuxOS)
|
||||
|
||||
. /etc/profile
|
||||
set_kill set "-9 hypseus"
|
||||
|
||||
dir="${1}"
|
||||
name=${dir##*/}
|
||||
name=${name%.*}
|
||||
@@ -11,53 +14,49 @@ config="/storage/.config/game/configs/hypseus"
|
||||
configfile="${config}/hypinput.ini"
|
||||
|
||||
# Attempt to auto configure gamepad
|
||||
#
|
||||
GAMEPADINFO="$(sdljoytest -skip_loop)"
|
||||
#JOYGUID=$(echo "${GAMEPADINFO}" | grep "Joystick 0 Guid " | sed "s|Joystick 0 Guid ||")
|
||||
JOYNAME=$(echo "${GAMEPADINFO}" | grep "Joystick 0 name " | sed "s|Joystick 0 name ||" | sed "s|'||g")
|
||||
#
|
||||
|
||||
for file in /usr/share/libretro/autoconfig/*.cfg; do
|
||||
GAMEPAD=$(cat "$file" | grep input_device | cut -d'"' -f 2)
|
||||
if [ "${JOYNAME}" == "${GAMEPAD}" ]; then
|
||||
GPFILE="${file}"
|
||||
GPFILE="/usr/share/libretro/autoconfig/${JOYNAME}.cfg"
|
||||
|
||||
if [[ -f "${GPFILE}" ]]; then
|
||||
# Other keys to consider KEY_SCREENSHOT KEY_QUIT KEY_PAUSE
|
||||
for key in KEY_UP KEY_DOWN KEY_LEFT KEY_RIGHT KEY_BUTTON1 KEY_BUTTON2 KEY_BUTTON3 KEY_START1 KEY_COIN1; do
|
||||
case ${key} in
|
||||
"KEY_UP")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_up_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_up_btn\b' | cut -d '"' -f2)
|
||||
keyboard="1073741906 0"
|
||||
;;
|
||||
"KEY_DOWN")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_down_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_down_btn\b' | cut -d '"' -f2)
|
||||
keyboard="1073741905 0"
|
||||
;;
|
||||
"KEY_LEFT")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_left_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_left_btn\b' | cut -d '"' -f2)
|
||||
keyboard="1073741904 0"
|
||||
;;
|
||||
"KEY_RIGHT")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_right_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_right_btn\b' | cut -d '"' -f2)
|
||||
keyboard="1073741903 0"
|
||||
;;
|
||||
"KEY_BUTTON1")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_a_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_a_btn\b' | cut -d '"' -f2)
|
||||
keyboard="1073742048 0"
|
||||
;;
|
||||
"KEY_BUTTON2")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_b_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_b_btn\b' | cut -d '"' -f2)
|
||||
keyboard="1073742050 0"
|
||||
;;
|
||||
"KEY_BUTTON3")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_x_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_x_btn\b' | cut -d '"' -f2)
|
||||
keyboard="32 0"
|
||||
;;
|
||||
"KEY_START1")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_start_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_start_btn\b' | cut -d '"' -f2)
|
||||
keyboard="49 0"
|
||||
;;
|
||||
"KEY_COIN1")
|
||||
button=$(cat "${GPFILE}" | grep -E 'input_select_btn' | cut -d '"' -f2)
|
||||
button=$(cat "${GPFILE}" | grep -E '^input_select_btn\b' | cut -d '"' -f2)
|
||||
keyboard="53 54"
|
||||
;;
|
||||
esac
|
||||
@@ -71,8 +70,7 @@ for file in /usr/share/libretro/autoconfig/*.cfg; do
|
||||
|
||||
sed -i "s|${key}.*|${key} = ${keyboard} ${button} |" ${configfile}
|
||||
done
|
||||
fi
|
||||
done # finish auto gamepad
|
||||
fi # finish auto gamepad
|
||||
|
||||
if [[ -f "${dir}/${name}.commands" ]]; then
|
||||
params=$(<"${dir}/${name}.commands")
|
||||
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
diff --git a/UI/MainScreen.cpp b/UI/MainScreen.cpp
|
||||
index 1af913cbc8..fd5c7fccaf 100644
|
||||
--- a/UI/MainScreen.cpp
|
||||
+++ b/UI/MainScreen.cpp
|
||||
@@ -285,19 +285,19 @@ void MainScreen::CreateMainButtons(UI::ViewGroup *parent, bool portrait) {
|
||||
parent->Add(portrait ? new Choice(ImageID("I_GEAR"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Game Settings", "Settings")))->OnClick.Handle(this, &MainScreen::OnGameSettings);
|
||||
parent->Add(portrait ? new Choice(ImageID("I_INFO"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("About PPSSPP")))->OnClick.Handle(this, &MainScreen::OnCredits);
|
||||
|
||||
- if (!portrait) {
|
||||
- parent->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
|
||||
- }
|
||||
-
|
||||
- if (!System_GetPropertyBool(SYSPROP_APP_GOLD) && (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) != DEVICE_TYPE_VR)) {
|
||||
- Choice *gold = parent->Add(portrait ? new Choice(ImageID("I_ICON_GOLD"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Buy PPSSPP Gold")));
|
||||
- gold->OnClick.Add([this](UI::EventParams &) {
|
||||
- LaunchBuyGold(this->screenManager());
|
||||
- });
|
||||
- gold->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f);
|
||||
- gold->SetImageScale(0.6f); // for the left-icon in case of vertical.
|
||||
- gold->SetShine(true);
|
||||
- }
|
||||
+ //if (!portrait) {
|
||||
+ // parent->Add(new Choice(mm->T("www.ppsspp.org")))->OnClick.Handle(this, &MainScreen::OnPPSSPPOrg);
|
||||
+ //}
|
||||
+
|
||||
+ //if (!System_GetPropertyBool(SYSPROP_APP_GOLD) && (System_GetPropertyInt(SYSPROP_DEVICE_TYPE) != DEVICE_TYPE_VR)) {
|
||||
+ // Choice *gold = parent->Add(portrait ? new Choice(ImageID("I_ICON_GOLD"), portrait ? new LinearLayoutParams() : nullptr) : new Choice(mm->T("Buy PPSSPP Gold")));
|
||||
+ // gold->OnClick.Add([this](UI::EventParams &) {
|
||||
+ // LaunchBuyGold(this->screenManager());
|
||||
+ // });
|
||||
+ // gold->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f);
|
||||
+ // gold->SetImageScale(0.6f); // for the left-icon in case of vertical.
|
||||
+ // gold->SetShine(true);
|
||||
+ //}
|
||||
|
||||
if (!portrait) {
|
||||
parent->Add(new Spacer(16.0));
|
||||
@@ -359,8 +359,9 @@ void MainScreen::CreateViews() {
|
||||
|
||||
Button *focusButton = nullptr;
|
||||
if (hasStorageAccess) {
|
||||
- CreateBrowserTab(Path(g_Config.currentDirectory), "Games", "How to get games", getGamesUri, BrowseFlags::STANDARD, &g_Config.bGridView2, &g_Config.fGameListScrollPosition);
|
||||
- CreateBrowserTab(GetSysDirectory(DIRECTORY_GAME), "Homebrew & Demos", "How to get homebrew & demos", getHomebrewUri, BrowseFlags::HOMEBREW_STORE, &g_Config.bGridView3, &g_Config.fHomebrewScrollPosition);
|
||||
+ CreateBrowserTab(Path(g_Config.currentDirectory), "Games", "", "", BrowseFlags::STANDARD, &g_Config.bGridView2, &g_Config.fGameListScrollPosition);
|
||||
+ CreateBrowserTab(GetSysDirectory(DIRECTORY_GAME), "Homebrew & Demos", "", "", BrowseFlags::HOMEBREW_STORE, &g_Config.bGridView3, &g_Config.fHomebrewScrollPosition);
|
||||
+
|
||||
|
||||
if (g_Config.bRemoteTab && !g_Config.sLastRemoteISOServer.empty()) {
|
||||
Path remotePath(FormatRemoteISOUrl(g_Config.sLastRemoteISOServer.c_str(), g_Config.iLastRemoteISOPort, RemoteSubdir().c_str()));
|
||||
diff --git a/UI/MiscScreens.cpp b/UI/MiscScreens.cpp
|
||||
index 7bd09b9fe7..4030ee32bc 100644
|
||||
--- a/UI/MiscScreens.cpp
|
||||
+++ b/UI/MiscScreens.cpp
|
||||
@@ -547,33 +547,6 @@ void CreditsScreen::CreateDialogViews(UI::ViewGroup *parent) {
|
||||
}
|
||||
|
||||
int rightYOffset = 0;
|
||||
- if (!System_GetPropertyBool(SYSPROP_APP_GOLD)) {
|
||||
- ScreenManager *sm = screenManager();
|
||||
- Choice *gold = new Choice(mm->T("Buy PPSSPP Gold"));
|
||||
- gold->SetIconRight(ImageID("I_ICON_GOLD"), 0.5f);
|
||||
- gold->SetImageScale(0.6f); // for the left-icon in case of vertical.
|
||||
- gold->SetShine(true);
|
||||
-
|
||||
- left->Add(gold)->OnClick.Add([sm](UI::EventParams) {
|
||||
- LaunchBuyGold(sm);
|
||||
- });
|
||||
- rightYOffset = 74;
|
||||
- }
|
||||
- left->Add(new Choice(cr->T("PPSSPP Forums"), ImageID("I_LINK_OUT")))->OnClick.Add([](UI::EventParams &e) {
|
||||
- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://forums.ppsspp.org");
|
||||
- });
|
||||
- left->Add(new Choice(cr->T("Discord"), ImageID("I_LOGO_DISCORD")))->OnClick.Add([](UI::EventParams &e) {
|
||||
- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://discord.gg/5NJB6dD");
|
||||
- });
|
||||
- left->Add(new Choice("www.ppsspp.org", ImageID("I_LINK_OUT")))->OnClick.Add([](UI::EventParams &e) {
|
||||
- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org");
|
||||
- });
|
||||
- right->Add(new Choice(cr->T("Privacy Policy"), ImageID("I_LINK_OUT")))->OnClick.Add([](UI::EventParams &e) {
|
||||
- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://www.ppsspp.org/privacy");
|
||||
- });
|
||||
- right->Add(new Choice(cr->T("@PPSSPP_emu"), ImageID("I_LOGO_X")))->OnClick.Add([](UI::EventParams &e) {
|
||||
- System_LaunchUrl(LaunchUrlType::BROWSER_URL, "https://x.com/PPSSPP_emu");
|
||||
- });
|
||||
|
||||
if (System_GetPropertyBool(SYSPROP_SUPPORTS_SHARE_TEXT)) {
|
||||
right->Add(new Choice(cr->T("Share PPSSPP"), ImageID("I_SHARE")))->OnClick.Add([](UI::EventParams &e) {
|
||||
Reference in New Issue
Block a user