Merge pull request #13249 from ToKe79/lakka2upstream

Upstream patches from Lakka
This commit is contained in:
Autechre 2021-11-20 22:07:47 +01:00 committed by GitHub
commit 9e40966dce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 378 additions and 2 deletions

View File

@ -1434,7 +1434,9 @@ endif
ifeq ($(HAVE_PLAIN_DRM), 1) ifeq ($(HAVE_PLAIN_DRM), 1)
OBJ += gfx/drivers/drm_gfx.o OBJ += gfx/drivers/drm_gfx.o
INCLUDE_DIRS += -I/usr/include/libdrm ifneq ($(HAVE_LAKKA), 1)
INCLUDE_DIRS += -I/usr/include/libdrm
endif
LIBS += -ldrm LIBS += -ldrm
endif endif

View File

@ -43,6 +43,7 @@ typedef struct bluetooth_driver
bool (*device_is_connected)(void *data, unsigned i); bool (*device_is_connected)(void *data, unsigned i);
void (*device_get_sublabel)(void *data, char *s, unsigned i, size_t len); void (*device_get_sublabel)(void *data, char *s, unsigned i, size_t len);
bool (*connect_device)(void *data, unsigned i); bool (*connect_device)(void *data, unsigned i);
bool (*remove_device)(void *data, unsigned i);
const char *ident; const char *ident;
} bluetooth_driver_t; } bluetooth_driver_t;
@ -71,6 +72,8 @@ void driver_bluetooth_device_get_sublabel(char *s, unsigned i, size_t len);
bool driver_bluetooth_connect_device(unsigned i); bool driver_bluetooth_connect_device(unsigned i);
bool driver_bluetooth_remove_device(unsigned i);
bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data); bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data);
extern const bluetooth_driver_t *bluetooth_drivers[]; extern const bluetooth_driver_t *bluetooth_drivers[];

View File

@ -191,6 +191,45 @@ static bool bluetoothctl_connect_device(void *data, unsigned idx)
return true; return true;
} }
static bool bluetoothctl_remove_device(void *data, unsigned idx)
{
unsigned i;
bluetoothctl_t *btctl = (bluetoothctl_t*) data;
char device[18] = {0};
const char *line = btctl->lines->elems[idx].data;
static struct string_list* list = NULL;
/* bluetoothctl devices outputs lines of the format:
* $ bluetoothctl devices
* 'Device (mac address) (device name)'
*/
list = string_split(line, " ");
if (!list)
return false;
if (list->size == 0)
{
string_list_free(list);
return false;
}
strlcpy(device, list->elems[1].data, sizeof(device));
string_list_free(list);
snprintf(btctl->command, sizeof(btctl->command), "\
echo -e \"disconnect %s\\nremove %s\\n\" | bluetoothctl",
device, device);
pclose(popen(btctl->command, "r"));
runloop_msg_queue_push(msg_hash_to_str(MSG_BLUETOOTH_PAIRING_REMOVED),
1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT,
MESSAGE_QUEUE_CATEGORY_INFO);
btctl->bluetoothctl_counter[idx] = 0;
return true;
}
static void bluetoothctl_device_get_sublabel( static void bluetoothctl_device_get_sublabel(
void *data, char *s, unsigned i, size_t len) void *data, char *s, unsigned i, size_t len)
{ {
@ -211,5 +250,6 @@ bluetooth_driver_t bluetooth_bluetoothctl = {
bluetoothctl_device_is_connected, bluetoothctl_device_is_connected,
bluetoothctl_device_get_sublabel, bluetoothctl_device_get_sublabel,
bluetoothctl_connect_device, bluetoothctl_connect_device,
bluetoothctl_remove_device,
"bluetoothctl", "bluetoothctl",
}; };

View File

@ -604,6 +604,27 @@ static bool bluez_connect_device(void *data, unsigned i)
return true; return true;
} }
static bool bluez_remove_device(void *data, unsigned i)
{
bluez_t *bluez = (bluez_t*)data;
bluez_dbus_connect(bluez);
/* Disconnect the device */
device_method(bluez, bluez->devices->data[i].path, "Disconnect");
/* Remove the device */
if (device_method(bluez, bluez->devices->data[i].path, "RemoveDevice"))
return false;
runloop_msg_queue_push(msg_hash_to_str(MSG_BLUETOOTH_PAIRING_REMOVED),
1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT,
MESSAGE_QUEUE_CATEGORY_INFO);
bluez_dbus_disconnect(bluez);
bluez->bluez_cache_counter[i] = 0;
return true;
}
bluetooth_driver_t bluetooth_bluez = { bluetooth_driver_t bluetooth_bluez = {
bluez_init, bluez_init,
bluez_free, bluez_free,
@ -612,5 +633,6 @@ bluetooth_driver_t bluetooth_bluez = {
bluez_device_is_connected, bluez_device_is_connected,
bluez_device_get_sublabel, bluez_device_get_sublabel,
bluez_connect_device, bluez_connect_device,
bluez_remove_device,
"bluez", "bluez",
}; };

View File

@ -646,6 +646,9 @@ static const bool menu_show_load_content = true;
#ifdef HAVE_CDROM #ifdef HAVE_CDROM
static const bool menu_show_load_disc = true; static const bool menu_show_load_disc = true;
static const bool menu_show_dump_disc = true; static const bool menu_show_dump_disc = true;
#ifdef HAVE_LAKKA
static const bool menu_show_eject_disc = true;
#endif /* HAVE_LAKKA */
#endif #endif
static const bool menu_show_information = true; static const bool menu_show_information = true;
static const bool menu_show_configurations = true; static const bool menu_show_configurations = true;

View File

@ -1828,6 +1828,9 @@ static struct config_bool_setting *populate_settings_bool(
#ifdef HAVE_CDROM #ifdef HAVE_CDROM
SETTING_BOOL("menu_show_load_disc", &settings->bools.menu_show_load_disc, true, menu_show_load_disc, false); SETTING_BOOL("menu_show_load_disc", &settings->bools.menu_show_load_disc, true, menu_show_load_disc, false);
SETTING_BOOL("menu_show_dump_disc", &settings->bools.menu_show_dump_disc, true, menu_show_dump_disc, false); SETTING_BOOL("menu_show_dump_disc", &settings->bools.menu_show_dump_disc, true, menu_show_dump_disc, false);
#ifdef HAVE_LAKKA
SETTING_BOOL("menu_show_eject_disc", &settings->bools.menu_show_eject_disc, true, menu_show_eject_disc, false);
#endif /* HAVE_LAKKA */
#endif #endif
SETTING_BOOL("menu_show_information", &settings->bools.menu_show_information, true, menu_show_information, false); SETTING_BOOL("menu_show_information", &settings->bools.menu_show_information, true, menu_show_information, false);
SETTING_BOOL("menu_show_configurations", &settings->bools.menu_show_configurations, true, menu_show_configurations, false); SETTING_BOOL("menu_show_configurations", &settings->bools.menu_show_configurations, true, menu_show_configurations, false);

View File

@ -653,6 +653,9 @@ typedef struct settings
bool menu_show_load_content; bool menu_show_load_content;
bool menu_show_load_disc; bool menu_show_load_disc;
bool menu_show_dump_disc; bool menu_show_dump_disc;
#ifdef HAVE_LAKKA
bool menu_show_eject_disc;
#endif
bool menu_show_information; bool menu_show_information;
bool menu_show_configurations; bool menu_show_configurations;
bool menu_show_help; bool menu_show_help;

View File

@ -53,6 +53,7 @@ static bluetooth_driver_t bluetooth_null = {
NULL, /* device_is_connected */ NULL, /* device_is_connected */
NULL, /* device_get_sublabel */ NULL, /* device_get_sublabel */
NULL, /* connect_device */ NULL, /* connect_device */
NULL, /* remove_device */
"null", "null",
}; };
@ -668,9 +669,11 @@ void drivers_init(
if (flags & DRIVER_MIDI_MASK) if (flags & DRIVER_MIDI_MASK)
midi_driver_init(settings); midi_driver_init(settings);
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
cpu_scaling_driver_init(); cpu_scaling_driver_init();
#endif #endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
} }
void driver_uninit(int flags) void driver_uninit(int flags)
@ -755,9 +758,11 @@ void driver_uninit(int flags)
if (flags & DRIVER_MIDI_MASK) if (flags & DRIVER_MIDI_MASK)
midi_driver_free(); midi_driver_free();
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
cpu_scaling_driver_free(); cpu_scaling_driver_free();
#endif #endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
} }
void retroarch_deinit_drivers(struct retro_callbacks *cbs) void retroarch_deinit_drivers(struct retro_callbacks *cbs)

View File

@ -131,7 +131,7 @@ static void set_aspect(videocrt_switch_t *p_switch, unsigned int width,
RARCH_LOG("[CRT]: Resolution is stretched. Fractal scaling @ X:%f Y:%f \n", srm_xscale, srm_yscale); RARCH_LOG("[CRT]: Resolution is stretched. Fractal scaling @ X:%f Y:%f \n", srm_xscale, srm_yscale);
} }
else else
RARCH_LOG("[CRT]: SR integer scaled X:%d Y:%d \n",srm.x_scale, srm.y_scale); RARCH_LOG("[CRT]: SR integer scaled X:%d Y:%d \n",(int)srm_xscale, (int)srm_yscale);
scaled_width = roundf(patched_width*srm_xscale); scaled_width = roundf(patched_width*srm_xscale);
scaled_height = roundf(patched_height*srm_yscale); scaled_height = roundf(patched_height*srm_yscale);

View File

@ -80,6 +80,13 @@
#define UDEV_XKB_HANDLING #define UDEV_XKB_HANDLING
#endif #endif
/* Force UDEV_XKB_HANDLING for Lakka */
#ifdef HAVE_LAKKA
#ifndef UDEV_XKB_HANDLING
#define UDEV_XKB_HANDLING
#endif
#endif
#define UDEV_MAX_KEYS (KEY_MAX + 7) / 8 #define UDEV_MAX_KEYS (KEY_MAX + 7) / 8
typedef struct udev_input udev_input_t; typedef struct udev_input udev_input_t;
@ -1391,7 +1398,12 @@ static void *udev_input_init(const char *joypad_driver)
goto error; goto error;
video_context_driver_get_ident(&ctx_ident); video_context_driver_get_ident(&ctx_ident);
#ifdef HAVE_LAKKA
/* Force xkb_handling on Lakka */
udev->xkb_handling = true;
#else
udev->xkb_handling = string_is_equal(ctx_ident.ident, "kms"); udev->xkb_handling = string_is_equal(ctx_ident.ident, "kms");
#endif /* HAVE_LAKKA */
#endif #endif
#if defined(HAVE_EPOLL) #if defined(HAVE_EPOLL)

View File

@ -151,6 +151,7 @@ error:
return -1; return -1;
} }
#ifndef HAVE_LAKKA_SWITCH
static bool udev_set_rumble_gain(unsigned i, unsigned gain) static bool udev_set_rumble_gain(unsigned i, unsigned gain)
{ {
struct input_event ie; struct input_event ie;
@ -179,6 +180,7 @@ static bool udev_set_rumble_gain(unsigned i, unsigned gain)
return true; return true;
} }
#endif
static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char *path) static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char *path)
{ {
@ -299,6 +301,7 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char
p, path, pad->num_effects); p, path, pad->num_effects);
} }
#ifndef HAVE_LAKKA_SWITCH
/* Set rumble gain here, if supported */ /* Set rumble gain here, if supported */
if (test_bit(FF_RUMBLE, ffbit)) if (test_bit(FF_RUMBLE, ffbit))
{ {
@ -307,6 +310,7 @@ static int udev_add_pad(struct udev_device *dev, unsigned p, int fd, const char
: DEFAULT_RUMBLE_GAIN; : DEFAULT_RUMBLE_GAIN;
udev_set_rumble_gain(p, rumble_gain); udev_set_rumble_gain(p, rumble_gain);
} }
#endif
return ret; return ret;
} }
@ -790,7 +794,11 @@ input_device_driver_t udev_joypad = {
udev_joypad_axis, udev_joypad_axis,
udev_joypad_poll, udev_joypad_poll,
udev_set_rumble, udev_set_rumble,
#ifndef HAVE_LAKKA_SWITCH
udev_set_rumble_gain, udev_set_rumble_gain,
#else
NULL,
#endif
udev_joypad_name, udev_joypad_name,
"udev", "udev",
}; };

View File

@ -1730,6 +1730,12 @@ MSG_HASH(
MENU_ENUM_LABEL_DUMP_DISC, MENU_ENUM_LABEL_DUMP_DISC,
"dump_disc" "dump_disc"
) )
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_EJECT_DISC,
"eject_disc"
)
#endif
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL, MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL,
"load_special" "load_special"
@ -2386,6 +2392,12 @@ MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST,
"deferred_load_disc_list" "deferred_load_disc_list"
) )
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_EJECT_DISC,
"deferred_eject_disc"
)
#endif
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_DEFERRED_CURSOR_MANAGER_LIST_RDB_ENTRY_DEVELOPER, MENU_ENUM_LABEL_DEFERRED_CURSOR_MANAGER_LIST_RDB_ENTRY_DEVELOPER,
"deferred_cursor_manager_list_rdb_entry_developer" "deferred_cursor_manager_list_rdb_entry_developer"
@ -4030,6 +4042,12 @@ MSG_HASH(
MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC, MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC,
"menu_show_dump_disc" "menu_show_dump_disc"
) )
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC,
"menu_show_eject_disc"
)
#endif
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_MENU_SHOW_INFORMATION, MENU_ENUM_LABEL_MENU_SHOW_INFORMATION,
"menu_show_information" "menu_show_information"

View File

@ -91,6 +91,16 @@ MSG_HASH( /* FIXME Is a specific image format used? Is it determined automatical
MENU_ENUM_SUBLABEL_DUMP_DISC, MENU_ENUM_SUBLABEL_DUMP_DISC,
"Dump the physical media disc to internal storage. It will be saved as an image file." "Dump the physical media disc to internal storage. It will be saved as an image file."
) )
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_VALUE_EJECT_DISC,
"Eject Disc"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_EJECT_DISC,
"Ejects the disc from physical CD/DVD drive."
)
#endif
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB, MENU_ENUM_LABEL_VALUE_PLAYLISTS_TAB,
"Playlists" "Playlists"
@ -4335,6 +4345,16 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_MENU_SHOW_DUMP_DISC, MENU_ENUM_SUBLABEL_MENU_SHOW_DUMP_DISC,
"Show the 'Dump Disc' option in the Main Menu." "Show the 'Dump Disc' option in the Main Menu."
) )
#ifdef HAVE_LAKKA
MSG_HASH(
MENU_ENUM_LABEL_VALUE_MENU_SHOW_EJECT_DISC,
"Show 'Eject Disc'"
)
MSG_HASH(
MENU_ENUM_SUBLABEL_MENU_SHOW_EJECT_DISC,
"Show the 'Eject Disc' option in the Main Menu."
)
#endif
MSG_HASH( MSG_HASH(
MENU_ENUM_LABEL_VALUE_MENU_SHOW_ONLINE_UPDATER, MENU_ENUM_LABEL_VALUE_MENU_SHOW_ONLINE_UPDATER,
"Show 'Online Updater'" "Show 'Online Updater'"
@ -11889,6 +11909,10 @@ MSG_HASH(
MSG_BLUETOOTH_SCAN_COMPLETE, MSG_BLUETOOTH_SCAN_COMPLETE,
"Bluetooth scan complete." "Bluetooth scan complete."
) )
MSG_HASH(
MSG_BLUETOOTH_PAIRING_REMOVED,
"Pairing removed. Restart RetroArch to connect/pair again."
)
MSG_HASH( MSG_HASH(
MSG_WIFI_SCAN_COMPLETE, MSG_WIFI_SCAN_COMPLETE,
"Wi-Fi scan complete." "Wi-Fi scan complete."

View File

@ -113,6 +113,9 @@ GENERIC_DEFERRED_PUSH(deferred_push_configurations_list, DISPLAYLIST_
GENERIC_DEFERRED_PUSH(deferred_push_load_content_special, DISPLAYLIST_LOAD_CONTENT_LIST) GENERIC_DEFERRED_PUSH(deferred_push_load_content_special, DISPLAYLIST_LOAD_CONTENT_LIST)
GENERIC_DEFERRED_PUSH(deferred_push_load_content_list, DISPLAYLIST_LOAD_CONTENT_LIST) GENERIC_DEFERRED_PUSH(deferred_push_load_content_list, DISPLAYLIST_LOAD_CONTENT_LIST)
GENERIC_DEFERRED_PUSH(deferred_push_dump_disk_list, DISPLAYLIST_DUMP_DISC) GENERIC_DEFERRED_PUSH(deferred_push_dump_disk_list, DISPLAYLIST_DUMP_DISC)
#ifdef HAVE_LAKKA
GENERIC_DEFERRED_PUSH(deferred_push_eject_disc, DISPLAYLIST_EJECT_DISC)
#endif
GENERIC_DEFERRED_PUSH(deferred_push_cdrom_info_detail_list, DISPLAYLIST_CDROM_DETAIL_INFO) GENERIC_DEFERRED_PUSH(deferred_push_cdrom_info_detail_list, DISPLAYLIST_CDROM_DETAIL_INFO)
GENERIC_DEFERRED_PUSH(deferred_push_load_disk_list, DISPLAYLIST_LOAD_DISC) GENERIC_DEFERRED_PUSH(deferred_push_load_disk_list, DISPLAYLIST_LOAD_DISC)
GENERIC_DEFERRED_PUSH(deferred_push_information_list, DISPLAYLIST_INFORMATION_LIST) GENERIC_DEFERRED_PUSH(deferred_push_information_list, DISPLAYLIST_INFORMATION_LIST)
@ -676,6 +679,9 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
const deferred_info_list_t info_list[] = { const deferred_info_list_t info_list[] = {
{MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, deferred_push_dump_disk_list}, {MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, deferred_push_dump_disk_list},
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_DEFERRED_EJECT_DISC, deferred_push_eject_disc},
#endif
{MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, deferred_push_load_disk_list}, {MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, deferred_push_load_disk_list},
{MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, deferred_push_favorites_list}, {MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST, deferred_push_favorites_list},
{MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST, deferred_push_dropdown_box_list}, {MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST, deferred_push_dropdown_box_list},
@ -1276,6 +1282,11 @@ static int menu_cbs_init_bind_deferred_push_compare_label(
case MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST: case MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_dump_disk_list); BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_dump_disk_list);
break; break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_DEFERRED_EJECT_DISC:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_eject_disc);
break;
#endif
case MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_DETAIL_LIST: case MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_DETAIL_LIST:
BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cdrom_info_detail_list); BIND_ACTION_DEFERRED_PUSH(cbs, deferred_push_cdrom_info_detail_list);
break; break;

View File

@ -678,6 +678,7 @@ static int manual_content_scan_core_name_left(unsigned type, const char *label,
return 0; return 0;
} }
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
static int cpu_policy_mode_change(unsigned type, const char *label, static int cpu_policy_mode_change(unsigned type, const char *label,
bool wraparound) bool wraparound)
@ -792,6 +793,7 @@ static int cpu_policy_freq_tweak(unsigned type, const char *label,
return 0; return 0;
} }
#endif #endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
static int core_setting_left(unsigned type, const char *label, static int core_setting_left(unsigned type, const char *label,
bool wraparound) bool wraparound)

View File

@ -447,6 +447,10 @@ static enum msg_hash_enums action_ok_dl_to_enum(unsigned lbl)
return MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_FACEBOOK_LIST; return MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_FACEBOOK_LIST;
case ACTION_OK_DL_DUMP_DISC_LIST: case ACTION_OK_DL_DUMP_DISC_LIST:
return MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST; return MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST;
#ifdef HAVE_LAKKA
case ACTION_OK_DL_EJECT_DISC:
return MENU_ENUM_LABEL_DEFERRED_EJECT_DISC;
#endif
case ACTION_OK_DL_LOAD_DISC_LIST: case ACTION_OK_DL_LOAD_DISC_LIST:
return MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST; return MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST;
case ACTION_OK_DL_ACCOUNTS_YOUTUBE_LIST: case ACTION_OK_DL_ACCOUNTS_YOUTUBE_LIST:
@ -1527,6 +1531,9 @@ int generic_action_ok_displaylist_push(const char *path,
case ACTION_OK_DL_IMAGES_LIST: case ACTION_OK_DL_IMAGES_LIST:
case ACTION_OK_DL_LOAD_DISC_LIST: case ACTION_OK_DL_LOAD_DISC_LIST:
case ACTION_OK_DL_DUMP_DISC_LIST: case ACTION_OK_DL_DUMP_DISC_LIST:
#ifdef HAVE_LAKKA
case ACTION_OK_DL_EJECT_DISC:
#endif
case ACTION_OK_DL_SHADER_PRESET_REMOVE: case ACTION_OK_DL_SHADER_PRESET_REMOVE:
case ACTION_OK_DL_SHADER_PRESET_SAVE: case ACTION_OK_DL_SHADER_PRESET_SAVE:
case ACTION_OK_DL_CDROM_INFO_LIST: case ACTION_OK_DL_CDROM_INFO_LIST:
@ -2733,6 +2740,17 @@ static int action_ok_dump_cdrom(const char *path,
return 0; return 0;
} }
#ifdef HAVE_LAKKA
static int action_ok_eject_disc(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx)
{
#ifdef HAVE_CDROM
system("eject & disown");
#endif /* HAVE_CDROM */
return 0;
}
#endif /* HAVE_LAKKA */
static int action_ok_lookup_setting(const char *path, static int action_ok_lookup_setting(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx) const char *label, unsigned type, size_t idx, size_t entry_idx)
{ {
@ -5642,6 +5660,9 @@ DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_youtube_list, ACTION_OK_DL_ACCOUN
DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_twitch_list, ACTION_OK_DL_ACCOUNTS_TWITCH_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_twitch_list, ACTION_OK_DL_ACCOUNTS_TWITCH_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_facebook_list, ACTION_OK_DL_ACCOUNTS_FACEBOOK_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_push_accounts_facebook_list, ACTION_OK_DL_ACCOUNTS_FACEBOOK_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_push_dump_disc_list, ACTION_OK_DL_DUMP_DISC_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_push_dump_disc_list, ACTION_OK_DL_DUMP_DISC_LIST)
#ifdef HAVE_LAKKA
DEFAULT_ACTION_OK_FUNC(action_ok_push_eject_disc, ACTION_OK_DL_EJECT_DISC)
#endif
DEFAULT_ACTION_OK_FUNC(action_ok_push_load_disc_list, ACTION_OK_DL_LOAD_DISC_LIST) DEFAULT_ACTION_OK_FUNC(action_ok_push_load_disc_list, ACTION_OK_DL_LOAD_DISC_LIST)
DEFAULT_ACTION_OK_FUNC(action_ok_open_archive, ACTION_OK_DL_OPEN_ARCHIVE) DEFAULT_ACTION_OK_FUNC(action_ok_open_archive, ACTION_OK_DL_OPEN_ARCHIVE)
DEFAULT_ACTION_OK_FUNC(action_ok_rgui_menu_theme_preset, ACTION_OK_DL_RGUI_MENU_THEME_PRESET) DEFAULT_ACTION_OK_FUNC(action_ok_rgui_menu_theme_preset, ACTION_OK_DL_RGUI_MENU_THEME_PRESET)
@ -7863,6 +7884,9 @@ static int menu_cbs_init_bind_ok_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_ACCOUNTS_TWITCH, action_ok_push_accounts_twitch_list}, {MENU_ENUM_LABEL_ACCOUNTS_TWITCH, action_ok_push_accounts_twitch_list},
{MENU_ENUM_LABEL_ACCOUNTS_FACEBOOK, action_ok_push_accounts_facebook_list}, {MENU_ENUM_LABEL_ACCOUNTS_FACEBOOK, action_ok_push_accounts_facebook_list},
{MENU_ENUM_LABEL_DUMP_DISC, action_ok_push_dump_disc_list}, {MENU_ENUM_LABEL_DUMP_DISC, action_ok_push_dump_disc_list},
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_EJECT_DISC, action_ok_push_eject_disc},
#endif
{MENU_ENUM_LABEL_LOAD_DISC, action_ok_push_load_disc_list}, {MENU_ENUM_LABEL_LOAD_DISC, action_ok_push_load_disc_list},
{MENU_ENUM_LABEL_SHADER_OPTIONS, action_ok_push_default}, {MENU_ENUM_LABEL_SHADER_OPTIONS, action_ok_push_default},
{MENU_ENUM_LABEL_CORE_OPTIONS, action_ok_push_core_options_list}, {MENU_ENUM_LABEL_CORE_OPTIONS, action_ok_push_core_options_list},
@ -8043,6 +8067,12 @@ static int menu_cbs_init_bind_ok_compare_type(menu_file_list_cbs_t *cbs,
{ {
BIND_ACTION_OK(cbs, action_ok_dump_cdrom); BIND_ACTION_OK(cbs, action_ok_dump_cdrom);
} }
#ifdef HAVE_LAKKA
else if (type == MENU_SET_EJECT_DISC)
{
BIND_ACTION_OK(cbs, action_ok_eject_disc);
}
#endif
else if (type == MENU_SET_CDROM_INFO) else if (type == MENU_SET_CDROM_INFO)
{ {
BIND_ACTION_OK(cbs, action_ok_cdrom_info_list); BIND_ACTION_OK(cbs, action_ok_cdrom_info_list);

View File

@ -48,6 +48,10 @@
#include "../../config.def.h" #include "../../config.def.h"
#ifdef HAVE_BLUETOOTH
#include "../../bluetooth/bluetooth_driver.h"
#endif
#ifdef HAVE_NETWORKING #ifdef HAVE_NETWORKING
#include "../../core_updater_list.h" #include "../../core_updater_list.h"
#endif #endif
@ -539,6 +543,16 @@ static int action_start_load_core(
return ret; return ret;
} }
#ifdef HAVE_BLUETOOTH
static int action_start_bluetooth(const char *path, const char *label,
unsigned menu_type, size_t idx, size_t entry_idx)
{
driver_bluetooth_remove_device((unsigned)idx);
return 0;
}
#endif
#ifdef HAVE_NETWORKING #ifdef HAVE_NETWORKING
static int action_start_core_updater_entry( static int action_start_core_updater_entry(
const char *path, const char *label, const char *path, const char *label,
@ -711,6 +725,11 @@ static int menu_cbs_init_bind_start_compare_label(menu_file_list_cbs_t *cbs)
case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME: case MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME:
BIND_ACTION_START(cbs, action_start_manual_content_scan_core_name); BIND_ACTION_START(cbs, action_start_manual_content_scan_core_name);
break; break;
#ifdef HAVE_BLUETOOTH
case MENU_ENUM_LABEL_CONNECT_BLUETOOTH:
BIND_ACTION_START(cbs, action_start_bluetooth);
break;
#endif
default: default:
return -1; return -1;
} }

View File

@ -411,6 +411,9 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_sideload_core_list, MENU_
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_manager_list, MENU_ENUM_SUBLABEL_CORE_MANAGER_LIST) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_manager_list, MENU_ENUM_SUBLABEL_CORE_MANAGER_LIST)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_load_disc, MENU_ENUM_SUBLABEL_LOAD_DISC) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_load_disc, MENU_ENUM_SUBLABEL_LOAD_DISC)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_dump_disc, MENU_ENUM_SUBLABEL_DUMP_DISC) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_dump_disc, MENU_ENUM_SUBLABEL_DUMP_DISC)
#ifdef HAVE_LAKKA
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_eject_disc, MENU_ENUM_SUBLABEL_EJECT_DISC)
#endif
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_list, MENU_ENUM_SUBLABEL_LOAD_CONTENT_LIST) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_list, MENU_ENUM_SUBLABEL_LOAD_CONTENT_LIST)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_special, MENU_ENUM_SUBLABEL_LOAD_CONTENT_SPECIAL) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_content_special, MENU_ENUM_SUBLABEL_LOAD_CONTENT_SPECIAL)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_load_content_history, MENU_ENUM_SUBLABEL_LOAD_CONTENT_HISTORY) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_load_content_history, MENU_ENUM_SUBLABEL_LOAD_CONTENT_HISTORY)
@ -803,6 +806,9 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_core,
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_content, MENU_ENUM_SUBLABEL_MENU_SHOW_LOAD_CONTENT) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_content, MENU_ENUM_SUBLABEL_MENU_SHOW_LOAD_CONTENT)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_LOAD_DISC) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_load_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_LOAD_DISC)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_dump_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_DUMP_DISC) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_dump_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_DUMP_DISC)
#ifdef HAVE_LAKKA
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_eject_disc, MENU_ENUM_SUBLABEL_MENU_SHOW_EJECT_DISC)
#endif
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_information, MENU_ENUM_SUBLABEL_MENU_SHOW_INFORMATION) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_information, MENU_ENUM_SUBLABEL_MENU_SHOW_INFORMATION)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_configurations, MENU_ENUM_SUBLABEL_MENU_SHOW_CONFIGURATIONS) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_configurations, MENU_ENUM_SUBLABEL_MENU_SHOW_CONFIGURATIONS)
DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_help, MENU_ENUM_SUBLABEL_MENU_SHOW_HELP) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_menu_show_help, MENU_ENUM_SUBLABEL_MENU_SHOW_HELP)
@ -2451,6 +2457,11 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_DUMP_DISC: case MENU_ENUM_LABEL_DUMP_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_dump_disc); BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_dump_disc);
break; break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_EJECT_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_eject_disc);
break;
#endif
case MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT: case MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_load_content); BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_load_content);
break; break;
@ -2460,6 +2471,11 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs,
case MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC: case MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_dump_disc); BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_dump_disc);
break; break;
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_eject_disc);
break;
#endif
case MENU_ENUM_LABEL_MENU_SHOW_INFORMATION: case MENU_ENUM_LABEL_MENU_SHOW_INFORMATION:
BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_information); BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_menu_show_information);
break; break;

View File

@ -602,6 +602,9 @@ DEFAULT_TITLE_MACRO(action_get_crt_switchres_settings_list, MENU_ENUM_LABEL_
DEFAULT_TITLE_MACRO(action_get_configuration_settings_list, MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS) DEFAULT_TITLE_MACRO(action_get_configuration_settings_list, MENU_ENUM_LABEL_VALUE_CONFIGURATION_SETTINGS)
DEFAULT_TITLE_MACRO(action_get_load_disc_list, MENU_ENUM_LABEL_VALUE_LOAD_DISC) DEFAULT_TITLE_MACRO(action_get_load_disc_list, MENU_ENUM_LABEL_VALUE_LOAD_DISC)
DEFAULT_TITLE_MACRO(action_get_dump_disc_list, MENU_ENUM_LABEL_VALUE_DUMP_DISC) DEFAULT_TITLE_MACRO(action_get_dump_disc_list, MENU_ENUM_LABEL_VALUE_DUMP_DISC)
#ifdef HAVE_LAKKA
DEFAULT_TITLE_MACRO(action_get_eject_disc, MENU_ENUM_LABEL_VALUE_EJECT_DISC)
#endif
DEFAULT_TITLE_MACRO(action_get_saving_settings_list, MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS) DEFAULT_TITLE_MACRO(action_get_saving_settings_list, MENU_ENUM_LABEL_VALUE_SAVING_SETTINGS)
DEFAULT_TITLE_MACRO(action_get_logging_settings_list, MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS) DEFAULT_TITLE_MACRO(action_get_logging_settings_list, MENU_ENUM_LABEL_VALUE_LOGGING_SETTINGS)
DEFAULT_TITLE_MACRO(action_get_frame_throttle_settings_list, MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS) DEFAULT_TITLE_MACRO(action_get_frame_throttle_settings_list, MENU_ENUM_LABEL_VALUE_FRAME_THROTTLE_SETTINGS)
@ -930,6 +933,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs,
{MENU_ENUM_LABEL_DEFERRED_CORE_RESTORE_BACKUP_LIST, action_get_title_deferred_core_restore_backup_list}, {MENU_ENUM_LABEL_DEFERRED_CORE_RESTORE_BACKUP_LIST, action_get_title_deferred_core_restore_backup_list},
{MENU_ENUM_LABEL_DEFERRED_CORE_DELETE_BACKUP_LIST, action_get_title_deferred_core_delete_backup_list}, {MENU_ENUM_LABEL_DEFERRED_CORE_DELETE_BACKUP_LIST, action_get_title_deferred_core_delete_backup_list},
{MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, action_get_dump_disc_list}, {MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, action_get_dump_disc_list},
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_DEFERRED_EJECT_DISC, action_get_eject_disc},
#endif
{MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, action_get_load_disc_list}, {MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, action_get_load_disc_list},
{MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST, action_get_configuration_settings_list }, {MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST, action_get_configuration_settings_list },
{MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST, action_get_saving_settings_list}, {MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST, action_get_saving_settings_list},

View File

@ -9302,6 +9302,17 @@ static int materialui_list_push(void *data, void *userdata,
false); false);
} }
#ifdef HAVE_LAKKA
if (settings->bools.menu_show_eject_disc)
{
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION,
false);
}
#endif
#if defined(HAVE_NETWORKING) #if defined(HAVE_NETWORKING)
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM( MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
@ -10082,6 +10093,9 @@ static void materialui_list_insert(
{ {
case MENU_SET_CDROM_INFO: case MENU_SET_CDROM_INFO:
case MENU_SET_CDROM_LIST: case MENU_SET_CDROM_LIST:
#ifdef HAVE_LAKKA
case MENU_SET_EJECT_DISC:
#endif
case MENU_SET_LOAD_CDROM_LIST: case MENU_SET_LOAD_CDROM_LIST:
node->icon_texture_index = MUI_TEXTURE_DISK; node->icon_texture_index = MUI_TEXTURE_DISK;
node->icon_type = MUI_ICON_TYPE_INTERNAL; node->icon_type = MUI_ICON_TYPE_INTERNAL;
@ -10362,6 +10376,9 @@ static void materialui_list_insert(
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_IMAGE_APPEND)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_IMAGE_APPEND)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_DISC)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_LOAD_DISC)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DUMP_DISC)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DUMP_DISC)) ||
#ifdef HAVE_LAKKA
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_EJECT_DISC)) ||
#endif
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISC_INFORMATION)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISC_INFORMATION)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS)) || string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_OPTIONS)) ||
string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_INDEX)) string_is_equal(label, msg_hash_to_str(MENU_ENUM_LABEL_DISK_INDEX))

View File

@ -1602,6 +1602,9 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
{ {
case MENU_ENUM_LABEL_LOAD_DISC: case MENU_ENUM_LABEL_LOAD_DISC:
case MENU_ENUM_LABEL_DUMP_DISC: case MENU_ENUM_LABEL_DUMP_DISC:
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_EJECT_DISC:
#endif
case MENU_ENUM_LABEL_DISC_INFORMATION: case MENU_ENUM_LABEL_DISC_INFORMATION:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_DISC]; return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_DISC];
case MENU_ENUM_LABEL_CORE_OPTIONS: case MENU_ENUM_LABEL_CORE_OPTIONS:
@ -1931,6 +1934,9 @@ static uintptr_t ozone_entries_icon_get_texture(ozone_handle_t *ozone,
{ {
case MENU_SET_CDROM_INFO: case MENU_SET_CDROM_INFO:
case MENU_SET_CDROM_LIST: case MENU_SET_CDROM_LIST:
#ifdef HAVE_LAKKA
case MENU_SET_EJECT_DISC:
#endif
case MENU_SET_LOAD_CDROM_LIST: case MENU_SET_LOAD_CDROM_LIST:
return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_DISC]; return ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_DISC];
case FILE_TYPE_DIRECTORY: case FILE_TYPE_DIRECTORY:
@ -7857,6 +7863,17 @@ static int ozone_list_push(void *data, void *userdata,
false); false);
} }
#ifdef HAVE_LAKKA
if (settings->bools.menu_show_eject_disc)
{
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION,
false);
}
#endif
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM( MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list, info->list,
MENU_ENUM_LABEL_ADD_CONTENT_LIST, MENU_ENUM_LABEL_ADD_CONTENT_LIST,

View File

@ -2638,6 +2638,9 @@ static uintptr_t xmb_icon_get_id(xmb_handle_t *xmb,
case MENU_ENUM_LABEL_LOAD_DISC: case MENU_ENUM_LABEL_LOAD_DISC:
case MENU_ENUM_LABEL_DUMP_DISC: case MENU_ENUM_LABEL_DUMP_DISC:
#ifdef HAVE_LAKKA
case MENU_ENUM_LABEL_EJECT_DISC:
#endif
case MENU_ENUM_LABEL_DISC_INFORMATION: case MENU_ENUM_LABEL_DISC_INFORMATION:
return xmb->textures.list[XMB_TEXTURE_DISC]; return xmb->textures.list[XMB_TEXTURE_DISC];
@ -6882,6 +6885,9 @@ static int xmb_list_push(void *data, void *userdata,
bool menu_show_configurations = settings->bools.menu_show_configurations; bool menu_show_configurations = settings->bools.menu_show_configurations;
bool menu_show_load_disc = settings->bools.menu_show_load_disc; bool menu_show_load_disc = settings->bools.menu_show_load_disc;
bool menu_show_dump_disc = settings->bools.menu_show_dump_disc; bool menu_show_dump_disc = settings->bools.menu_show_dump_disc;
#ifdef HAVE_LAKKA
bool menu_show_eject_disc = settings->bools.menu_show_eject_disc;
#endif
bool menu_show_shutdown = settings->bools.menu_show_shutdown; bool menu_show_shutdown = settings->bools.menu_show_shutdown;
bool menu_show_reboot = settings->bools.menu_show_reboot; bool menu_show_reboot = settings->bools.menu_show_reboot;
#if !defined(IOS) #if !defined(IOS)
@ -7023,6 +7029,17 @@ static int xmb_list_push(void *data, void *userdata,
false); false);
} }
#ifdef HAVE_LAKKA
if (menu_show_eject_disc)
{
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION,
false);
}
#endif
MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM( MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(
info->list, info->list,
MENU_ENUM_LABEL_ADD_CONTENT_LIST, MENU_ENUM_LABEL_ADD_CONTENT_LIST,

View File

@ -198,6 +198,9 @@ enum
ACTION_OK_DL_MIDI_SETTINGS_LIST, ACTION_OK_DL_MIDI_SETTINGS_LIST,
ACTION_OK_DL_LOAD_DISC_LIST, ACTION_OK_DL_LOAD_DISC_LIST,
ACTION_OK_DL_DUMP_DISC_LIST, ACTION_OK_DL_DUMP_DISC_LIST,
#ifdef HAVE_LAKKA
ACTION_OK_DL_EJECT_DISC,
#endif
ACTION_OK_DL_BROWSE_URL_START, ACTION_OK_DL_BROWSE_URL_START,
ACTION_OK_DL_CONTENT_SETTINGS, ACTION_OK_DL_CONTENT_SETTINGS,
ACTION_OK_DL_CDROM_INFO_DETAIL_LIST, ACTION_OK_DL_CDROM_INFO_DETAIL_LIST,

View File

@ -8211,6 +8211,9 @@ unsigned menu_displaylist_build_list(
{MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_LOAD_DISC, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_MENU_SHOW_LOAD_DISC, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC, PARSE_ONLY_BOOL, true },
#ifdef HAVE_LAKKA
{MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC, PARSE_ONLY_BOOL, true },
#endif
{MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_CORE_UPDATER, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_MENU_SHOW_CORE_UPDATER, PARSE_ONLY_BOOL, true },
{MENU_ENUM_LABEL_MENU_SHOW_LEGACY_THUMBNAIL_UPDATER, PARSE_ONLY_BOOL, true }, {MENU_ENUM_LABEL_MENU_SHOW_LEGACY_THUMBNAIL_UPDATER, PARSE_ONLY_BOOL, true },
@ -9537,6 +9540,14 @@ unsigned menu_displaylist_build_list(
MENU_SET_CDROM_LIST); MENU_SET_CDROM_LIST);
#endif #endif
break; break;
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#ifdef HAVE_CDROM
count = menu_displaylist_parse_disc_info(list,
MENU_SET_EJECT_DISC);
#endif /* HAVE_CDROM */
break;
#endif /* HAVE_LAKKA */
default: default:
break; break;
} }
@ -11841,6 +11852,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
case DISPLAYLIST_BROWSE_URL_LIST: case DISPLAYLIST_BROWSE_URL_LIST:
case DISPLAYLIST_DISC_INFO: case DISPLAYLIST_DISC_INFO:
case DISPLAYLIST_DUMP_DISC: case DISPLAYLIST_DUMP_DISC:
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#endif
case DISPLAYLIST_LOAD_CONTENT_LIST: case DISPLAYLIST_LOAD_CONTENT_LIST:
case DISPLAYLIST_LOAD_CONTENT_SPECIAL: case DISPLAYLIST_LOAD_CONTENT_SPECIAL:
case DISPLAYLIST_OPTIONS_REMAPPINGS: case DISPLAYLIST_OPTIONS_REMAPPINGS:
@ -11884,6 +11898,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
break; break;
case DISPLAYLIST_DISC_INFO: case DISPLAYLIST_DISC_INFO:
case DISPLAYLIST_DUMP_DISC: case DISPLAYLIST_DUMP_DISC:
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#endif
case DISPLAYLIST_MENU_SETTINGS_LIST: case DISPLAYLIST_MENU_SETTINGS_LIST:
case DISPLAYLIST_ADD_CONTENT_LIST: case DISPLAYLIST_ADD_CONTENT_LIST:
case DISPLAYLIST_DROPDOWN_LIST_RESOLUTION: case DISPLAYLIST_DROPDOWN_LIST_RESOLUTION:
@ -11942,6 +11959,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
{ {
case DISPLAYLIST_DISC_INFO: case DISPLAYLIST_DISC_INFO:
case DISPLAYLIST_DUMP_DISC: case DISPLAYLIST_DUMP_DISC:
#ifdef HAVE_LAKKA
case DISPLAYLIST_EJECT_DISC:
#endif
info->need_clear = true; info->need_clear = true;
break; break;
default: default:
@ -12344,6 +12364,16 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type,
PARSE_ACTION, false) == 0) PARSE_ACTION, false) == 0)
count++; count++;
} }
#ifdef HAVE_LAKKA
if (settings->bools.menu_show_eject_disc)
{
if (MENU_DISPLAYLIST_PARSE_SETTINGS_ENUM(info->list,
MENU_ENUM_LABEL_EJECT_DISC,
PARSE_ACTION, false) == 0)
count++;
}
#endif /* HAVE_LAKKA */
#endif #endif
#if defined(HAVE_RGUI) || defined(HAVE_MATERIALUI) #if defined(HAVE_RGUI) || defined(HAVE_MATERIALUI)

View File

@ -134,6 +134,9 @@ enum menu_displaylist_ctl_state
DISPLAYLIST_VIDEO_FONTS, DISPLAYLIST_VIDEO_FONTS,
DISPLAYLIST_LOAD_DISC, DISPLAYLIST_LOAD_DISC,
DISPLAYLIST_DUMP_DISC, DISPLAYLIST_DUMP_DISC,
#ifdef HAVE_LAKKA
DISPLAYLIST_EJECT_DISC,
#endif
DISPLAYLIST_OVERLAYS, DISPLAYLIST_OVERLAYS,
#ifdef HAVE_VIDEO_LAYOUT #ifdef HAVE_VIDEO_LAYOUT
DISPLAYLIST_VIDEO_LAYOUT_PATH, DISPLAYLIST_VIDEO_LAYOUT_PATH,

View File

@ -6704,9 +6704,11 @@ void menu_driver_toggle(
if (on) if (on)
{ {
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_MENU); set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_MENU);
#endif #endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
/* If an overlay was displayed before the toggle /* If an overlay was displayed before the toggle
* and overlays are disabled in menu, need to * and overlays are disabled in menu, need to
@ -6725,9 +6727,11 @@ void menu_driver_toggle(
} }
else else
{ {
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_CORE); set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_CORE);
#endif #endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
/* Inhibits pointer 'select' and 'cancel' actions /* Inhibits pointer 'select' and 'cancel' actions
* (until the next time 'select'/'cancel' are released) */ * (until the next time 'select'/'cancel' are released) */

View File

@ -240,6 +240,7 @@ enum menu_settings_type
MENU_SET_CDROM_LIST, MENU_SET_CDROM_LIST,
MENU_SET_LOAD_CDROM_LIST, MENU_SET_LOAD_CDROM_LIST,
MENU_SET_EJECT_DISC,
MENU_SET_CDROM_INFO, MENU_SET_CDROM_INFO,
MENU_SETTING_ACTION_DELETE_PLAYLIST, MENU_SETTING_ACTION_DELETE_PLAYLIST,
MENU_SETTING_ACTION_PLAYLIST_MANAGER_RESET_CORES, MENU_SETTING_ACTION_PLAYLIST_MANAGER_RESET_CORES,

View File

@ -9044,6 +9044,16 @@ static bool setting_append_list(
&group_info, &group_info,
&subgroup_info, &subgroup_info,
parent_group); parent_group);
#ifdef HAVE_LAKKA
CONFIG_ACTION(
list, list_info,
MENU_ENUM_LABEL_EJECT_DISC,
MENU_ENUM_LABEL_VALUE_EJECT_DISC,
&group_info,
&subgroup_info,
parent_group);
#endif
} }
string_list_free(drive_list); string_list_free(drive_list);
@ -16102,6 +16112,23 @@ static bool setting_append_list(
general_write_handler, general_write_handler,
general_read_handler, general_read_handler,
SD_FLAG_NONE); SD_FLAG_NONE);
#ifdef HAVE_LAKKA
CONFIG_BOOL(
list, list_info,
&settings->bools.menu_show_eject_disc,
MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC,
MENU_ENUM_LABEL_VALUE_MENU_SHOW_EJECT_DISC,
menu_show_eject_disc,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,
&subgroup_info,
parent_group,
general_write_handler,
general_read_handler,
SD_FLAG_NONE);
#endif /* HAVE_LAKKA */
#endif #endif
CONFIG_BOOL( CONFIG_BOOL(

View File

@ -386,6 +386,7 @@ enum msg_hash_enums
MSG_TOGGLE_CONTENT_METADATA, MSG_TOGGLE_CONTENT_METADATA,
MSG_NO_THUMBNAIL_AVAILABLE, MSG_NO_THUMBNAIL_AVAILABLE,
MSG_PRESS_AGAIN_TO_QUIT, MSG_PRESS_AGAIN_TO_QUIT,
MSG_BLUETOOTH_PAIRING_REMOVED,
MSG_BLUETOOTH_SCAN_COMPLETE, MSG_BLUETOOTH_SCAN_COMPLETE,
MSG_WIFI_SCAN_COMPLETE, MSG_WIFI_SCAN_COMPLETE,
MSG_WIFI_CONNECTING_TO, MSG_WIFI_CONNECTING_TO,
@ -1123,6 +1124,9 @@ enum msg_hash_enums
MENU_LABEL(MENU_SHOW_LOAD_CONTENT), MENU_LABEL(MENU_SHOW_LOAD_CONTENT),
MENU_LABEL(MENU_SHOW_LOAD_DISC), MENU_LABEL(MENU_SHOW_LOAD_DISC),
MENU_LABEL(MENU_SHOW_DUMP_DISC), MENU_LABEL(MENU_SHOW_DUMP_DISC),
#ifdef HAVE_LAKKA
MENU_LABEL(MENU_SHOW_EJECT_DISC),
#endif
MENU_LABEL(MENU_SHOW_INFORMATION), MENU_LABEL(MENU_SHOW_INFORMATION),
MENU_LABEL(MENU_SHOW_CONFIGURATIONS), MENU_LABEL(MENU_SHOW_CONFIGURATIONS),
MENU_LABEL(MENU_SHOW_HELP), MENU_LABEL(MENU_SHOW_HELP),
@ -1466,6 +1470,9 @@ enum msg_hash_enums
MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_DETAIL_LIST, MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_DETAIL_LIST,
MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST, MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST,
MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST, MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST,
#ifdef HAVE_LAKKA
MENU_ENUM_LABEL_DEFERRED_EJECT_DISC,
#endif
MENU_ENUM_LABEL_DEFERRED_REMAPPINGS_PORT_LIST, MENU_ENUM_LABEL_DEFERRED_REMAPPINGS_PORT_LIST,
MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST, MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST,
MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SPECIAL, MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SPECIAL,
@ -2231,6 +2238,9 @@ enum msg_hash_enums
MENU_LABEL(LOAD_CONTENT_HISTORY), MENU_LABEL(LOAD_CONTENT_HISTORY),
MENU_LABEL(LOAD_DISC), MENU_LABEL(LOAD_DISC),
MENU_LABEL(DUMP_DISC), MENU_LABEL(DUMP_DISC),
#ifdef HAVE_LAKKA
MENU_LABEL(EJECT_DISC),
#endif
MENU_LABEL(NETWORK_INFORMATION), MENU_LABEL(NETWORK_INFORMATION),
MENU_LABEL(SYSTEM_INFORMATION), MENU_LABEL(SYSTEM_INFORMATION),
MENU_LABEL(ACHIEVEMENT_LIST), MENU_LABEL(ACHIEVEMENT_LIST),

View File

@ -3626,15 +3626,19 @@ static void runloop_pause_checks(void)
command_event(CMD_EVENT_DISCORD_UPDATE, &userdata); command_event(CMD_EVENT_DISCORD_UPDATE, &userdata);
#endif #endif
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_MENU); set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_MENU);
#endif #endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
} }
else else
{ {
#ifndef HAVE_LAKKA_SWITCH
#ifdef HAVE_LAKKA #ifdef HAVE_LAKKA
set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_CORE); set_cpu_scaling_signal(CPUSCALING_EVENT_FOCUS_CORE);
#endif #endif
#endif /* #ifndef HAVE_LAKKA_SWITCH */
} }
#if defined(HAVE_TRANSLATE) && defined(HAVE_GFX_WIDGETS) #if defined(HAVE_TRANSLATE) && defined(HAVE_GFX_WIDGETS)
@ -4727,8 +4731,12 @@ bool command_event(enum event_command cmd, void *data)
runloop_msg_queue_push(msg_hash_to_str(MSG_VALUE_SHUTTING_DOWN), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); runloop_msg_queue_push(msg_hash_to_str(MSG_VALUE_SHUTTING_DOWN), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL); command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL);
} }
#ifdef HAVE_LAKKA
system("(sleep 1 && shutdown -P now) & disown");
#else
command_event(CMD_EVENT_QUIT, NULL); command_event(CMD_EVENT_QUIT, NULL);
system("shutdown -P now"); system("shutdown -P now");
#endif /* HAVE_LAKKA */
#endif #endif
break; break;
case CMD_EVENT_REBOOT: case CMD_EVENT_REBOOT:
@ -4738,8 +4746,12 @@ bool command_event(enum event_command cmd, void *data)
runloop_msg_queue_push(msg_hash_to_str(MSG_VALUE_REBOOTING), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO); runloop_msg_queue_push(msg_hash_to_str(MSG_VALUE_REBOOTING), 1, 180, true, NULL, MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL); command_event(CMD_EVENT_MENU_SAVE_CURRENT_CONFIG, NULL);
} }
#ifdef HAVE_LAKKA
system("(sleep 1 && shutdown -r now) & disown");
#else
command_event(CMD_EVENT_QUIT, NULL); command_event(CMD_EVENT_QUIT, NULL);
system("shutdown -r now"); system("shutdown -r now");
#endif /* HAVE_LAKKA */
#endif #endif
break; break;
case CMD_EVENT_RESUME: case CMD_EVENT_RESUME:
@ -9965,6 +9977,14 @@ bool driver_bluetooth_connect_device(unsigned i)
return false; return false;
} }
bool driver_bluetooth_remove_device(unsigned i)
{
struct rarch_state *p_rarch = &rarch_st;
if (p_rarch->bluetooth_driver_active)
return p_rarch->bluetooth_driver->remove_device(p_rarch->bluetooth_data, i);
return false;
}
bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data) bool bluetooth_driver_ctl(enum rarch_bluetooth_ctl_state state, void *data)
{ {
struct rarch_state *p_rarch = &rarch_st; struct rarch_state *p_rarch = &rarch_st;