mirror of
https://github.com/libretro/RetroArch.git
synced 2026-11-07 08:36:02 -10:00
* ui/companion: add shared toolkit-agnostic companion core (C89)
First step of the companion UI native-backend refactor: a pure-C89
model/command layer with no toolkit types, to be shared by the Qt,
Win32 and Cocoa desktop companions.
- opaque companion_core_t + callback table for model changes, status,
log and refresh notifications
- playlist file enumeration and accessors
- selected-playlist loading driven through playlist_parse_step() under
a microsecond budget from companion_core_iterate(), so parsing a
large playlist never stalls the runloop
- load requests routed through the existing
task_push_load_content_*_from_companion_ui paths
Passes tools/mingw_syntax_check.sh (mingw gnu99 + linux c89 pedantic).
Not yet wired into any build; the next commits add the consumers.
* ui: make the desktop companion a selectable driver (Settings -> Drivers -> Companion UI)
The companion layer now has two slots. The platform driver (win32 /
cocoa / cocoatouch) is unchanged and always active: it keeps owning the
message pump, message boxes, file browser and window glue, so the Qt
companion on Windows and macOS behaves exactly as before. The desktop
("WIMP") companion - the playlist / content browser window that used to
be hard-wired to Qt via qt_data - is now chosen from a driver table by
the new ui_companion_driver string setting, exposed as
Settings -> Drivers -> Companion UI. When a build carries more than one
desktop companion the user can switch between them.
- uico_driver_state_t: qt_data -> wimp + wimp_data,
UICO_ST_FLAG_QT_IS_INITED -> UICO_ST_FLAG_WIMP_IS_INITED
- HAVE_COMPANION_WIMP (ui_companion_driver.h): any desktop companion is
available (Qt, Cocoa, or desktop Win32); replaces the HAVE_QT /
HAVE_QT||HAVE_COCOA gates in retroarch.c, menu_displaylist.c,
menu_setting.c, menu_cbs_sublabel.c and settings_def_desktop_menu.h
- new iterate slot in ui_companion_driver_t (all initialiser tables
updated) and ui_companion_driver_wimp_iterate(), called from the main
loop in retroarch.c and from rarch_main in ui_cocoa.m, so native
companions that ride the platform pump still get per-frame time
- ui_companion_wimp_find_driver/_find_ident,
config_get_ui_companion_driver_options, config_get_default_ui_companion,
STRING_LIST_UI_COMPANION_DRIVERS, find_driver_nonempty case
- companion core wired into Makefile.common (once, for Qt / Win32 /
Cocoa) and griffin.c
- tools/settings_table.reference regenerated (no row changes; verified
with --check, unity and settings_migrate_selftest)
Verified: tools/mingw_syntax_check.sh --consumers-of
ui/ui_companion_driver.h ui/companion/companion_core.h (16 TUs clean).
* ui/drivers/qt: route status and log messages through the shared companion core
Phase 1 plumbing proof for the companion refactor: ui_companion_qt_t
now owns a companion_core_t; msg_queue_push and log_msg go
core -> callback -> MainWindow::showStatusMessage / appendLogMessage.
No behaviour change for Qt users; further subsystems (playlists, scan,
load requests, thumbnails) follow the same route one at a time.
* ui/drivers: add native Win32 desktop companion ("win32" companion UI driver)
Pure C89 (MSVC 2003 / Win9x baseline) desktop companion built on the
shared companion core and classic common controls only: LISTBOX for
playlists, SysListView32 report view for entries, msctls_statusbar32,
ANSI entry points, no static imports of post-9x APIs. Load Core / Load
Content reuse the platform driver's existing dialog flow through
win32_menu_loop(); Run / double-click loads through the core's task
path. The window is dispatched by ui_win32.c's existing thread pump;
the only per-frame work is a 2 ms-budgeted companion_core_iterate()
from the iterate slot, so the runloop is never blocked.
When this driver is selected the companion is Win32-only: Qt is not
touched. Wired into Makefile.common (Win32 targets) and griffin.c
(MSVC projects). Playlist browser / load only for now; scan, core
association, thumbnails and the parity checklist follow.
Verified with x86_64-w64-mingw32-gcc -fsyntax-only (gnu99, -Wall
-Wextra clean); no MSVC 2003 toolchain on this box.
* ui/drivers: add native Cocoa desktop companion ("cocoa" companion UI driver)
OS X 10.4-baseline AppKit shell over the shared companion core:
NSWindow, NSSplitView, two NSTableViews using the classic dataSource /
delegate protocols (no blocks, no view-based cells, no properties),
NSTextField status line and a "Companion" menu appended to the main
menu bar. Load Core / Load Content forward to the app delegate's
existing openCore: / openDocument: actions; Run / double-click loads
through the core's task path. Pumped by ui_cocoa.m's existing run loop;
per-frame work is a 2 ms-budgeted companion_core_iterate().
Objective-C is confined to the RACompanionController; all AppKit
objects are its ivars so both the MRC per-file Makefile build and the
ARC griffin_objc.m Xcode build own them correctly. The controller is
held from the C driver struct through CFBridgingRetain under ARC and
plain +1 under MRC. Uses the NSWindowStyleMask* compat names from
defines/cocoa_defines.h and a 10.4-SDK NSInteger fallback.
When this driver is selected the companion is Cocoa-only: Qt is not
touched. Wired into Makefile.common (HAVE_COCOA_COMMON) and
griffin_objc.m (TARGET_OS_OSX).
Not compiled here (no Apple toolchain on this box);
tools/apple_mrc_ownership_check.py reports nothing for the new file.
* ui: fix Win32 link (comctl32) and Xcode Metal link (HAVE_COCOA_METAL) of the native companions
Two CI link failures on the uicompanion branch:
- MSYS2 (CLANG64/MINGW32/MINGW64): undefined InitCommonControls. The
native Win32 companion uses comctl32 (list view, status bar) and
the Makefile never linked it - ui_win32.c only carried the MSVC
#pragma comment. Add -lcomctl32 to LIBS in the Companion UI block,
and the same pragma to ui_win32_companion.c for MSVC per-file builds.
- Xcode RetroArch_Metal (arm64): companion_core_* undefined. Xcode
defines HAVE_COCOA_METAL, not HAVE_COCOA, so HAVE_COMPANION_WIMP was
never set for griffin.c and companion_core.c was not compiled, while
griffin_objc.m (TARGET_OS_OSX) pulled in ui_cocoa_companion.m and its
references. HAVE_COMPANION_WIMP, the wimp driver table and the
desktop-menu settings_def guard now all include HAVE_COCOA_METAL, so
the three stay in sync as the header comment requires.
tools/settings_table.reference regenerated (unchanged).
* ui/companion: move load-request and core lifecycle logic out of the Qt companion
Phase 2, first subsystem. The tail of MainWindow::loadContent (core path
sanitising via core_info_find, caching it across CMD_EVENT_UNLOAD_CORE,
.lpl suffixing of db_name, the load task push and the pending quick
menu), LoadCoreWindow::loadCore's core-load sequence, the unload-core
paths and getPlaylistDefaultCore now live in companion_core:
- companion_core_request_load_content()
- companion_core_load_core() (HAVE_DYNAMIC)
- companion_core_unload_core()
- companion_core_current_core_path()
- companion_core_playlist_default_core()
companion_core_request_load_entry() now routes through
request_load_content too, so the native Win32/Cocoa companions get the
same core-path sanitising and quick-menu behaviour as Qt. Qt keeps only
the widget logic and the failure message boxes; it reaches the core via
ui_companion_qt_core() (ui_qt_widgets.cpp is a separate TU).
Behaviour is unchanged for Qt users. playlist_default_core still parses
the playlist synchronously when it is not the menu's cached one, exactly
as the Qt code did; moving that onto the budgeted parse is a follow-up.
Verified: ui_qt.cpp / ui_qt_widgets.cpp compile against Qt 6;
tools/mingw_syntax_check.sh on companion_core.c and the consumers of
companion_core.h (mingw gnu99 + linux c89 pedantic clean).
* ui/companion: move playlist editing out of the Qt companion
Phase 2, second subsystem. Every Qt playlist edit repeated the same
sequence: borrow the menu's cached playlist when it is the same file,
otherwise parse; mutate; write; free if owned. That now lives once in
the shared core:
- companion_core_playlist_open() / _release() (cache borrow, parse,
write, free)
- companion_core_playlist_update_entry()
- companion_core_playlist_delete_entry()
- companion_core_playlist_set_default_core() (core_info lookup,
"DETECT" fallback)
Qt callers reduced to string marshalling + one call:
MainWindow::updateCurrentPlaylistEntry, deleteCurrentPlaylistItem, the
"Associate core" context-menu action, and PlaylistModel::getPlaylistItems
(read path, still populating the Qt model itself).
companion_core_playlist_default_core() uses the same open/release.
The per-call playlist_config_t setup disappears from four Qt functions;
the config is built in one place in the core.
Behaviour unchanged for Qt users; the native Win32/Cocoa companions can
now offer entry editing and core association through the same calls.
Verified: ui_qt.cpp / ui_qt_widgets.cpp compile against Qt 6 (only the
two pre-existing warnings); companion_core.c and the consumers of
companion_core.h pass tools/mingw_syntax_check.sh.
* ui/drivers: playlist editing in the native Win32 and Cocoa companions
Wire the shared core's editing surface into both native companions so
they match the Qt companion's context menus:
- entries: right-click -> Run / Delete Entry (with confirmation); the
playlist is re-selected through the core's budgeted parse afterwards
- playlists: right-click -> Associate Core submenu (<Detect> plus every
installed core, rebuilt on open) / Refresh Playlists
companion_core gains read-only accessors for the installed core list
(companion_core_installed_core_count/_path/_name) so backends do not
include core_info.h.
Win32: WM_CONTEXTMENU on both controls, LB_ITEMFROMPOINT so the action
applies to the right-clicked playlist (a list box does not move its
selection on right-click), menu IDs 51000+ reserved for core entries.
Cocoa: per-table -setMenu:, NSMenuDelegate -menuNeedsUpdate: fills the
core submenu, actions use -clickedRow; NSAlert confirm (10.3+).
Verified: mingw gnu99 -Wall -Wextra and linux c89 pedantic clean on the
Win32 file and the core; tools/apple_mrc_ownership_check.py reports
nothing for the Cocoa file (no Apple toolchain here).
* ui/drivers/qt: populate the playlist model through the companion core's budgeted parse
Phase 2, third subsystem, and the first non-blocking win for Qt users:
PlaylistModel::getPlaylistItems parsed the whole playlist on the UI
thread (the "first touch of a large playlist is the grid view's hitch"
the code itself documented). It now asks the core to
companion_core_select_playlist_path(); the parse advances in 2 ms slices
from the runloop via the new ui_companion_qt_iterate() hook, and
on_playlist_changed lands in PlaylistModel::onCorePlaylistChanged(),
which deep-copies the entries and starts the next pending file. The
"all playlists" view chains through its list one completion at a time.
Entries are committed to the model in a single reset when the last
playlist is in, then playlistsLoaded() fires.
MainWindow::initContentTableWidget() no longer sorts / counts / scrolls
right after asking for the data; that moved to the new
onPlaylistModelLoaded() slot, which also refreshes the launch-with
actions (they read the current entry, which did not exist yet).
Restarting a load supersedes the one in flight: the core aborts the
pending parse on the new selection and partial entries are dropped.
Core additions: companion_core_select_playlist_path() (any .lpl path,
not just the playlist directory) and
companion_core_selected_playlist_path().
Verified: ui_qt.cpp, ui_qt_widgets.cpp and both moc TUs compile against
Qt 6 (only the two pre-existing warnings); companion_core.c and the
consumers of companion_core.h pass tools/mingw_syntax_check.sh. Not run
here (no display); the grid, list, history and all-playlists paths need
a manual pass on a desktop.
* ui/companion: move bulk playlist add out of the Qt companion
Phase 2, fourth subsystem. MainWindow::addFilesToPlaylist was the last
Qt code constructing a playlist_config_t and calling playlist_init /
playlist_push / playlist_write_file directly. The core now provides the
bulk-add surface:
- companion_core_playlist_open_private(): a fresh instance, never the
menu's cached playlist, so a cancelled add is discarded unwritten via
companion_core_playlist_release(core, pl, true, false) and committed
with (…, true, true)
- companion_core_resolve_content_path(): the "archive with exactly one
file -> archive#file" rule, previously duplicated in the add and the
update-entry paths
- companion_core_playlist_push(): DETECT defaults for core path / name,
the unknown-crc marker
Qt keeps the dialog, the file/directory gathering, the progress dialog
and the extension filter (which now applies to the resolved path from
the core). updateCurrentPlaylistEntry uses the same resolver. After
this no Qt source touches playlist_config_t, playlist_init(),
playlist_get_cached() or playlist_push(); all playlist model logic the
plan lists for extraction goes through ui/companion.
Verified: ui_qt_widgets.cpp compiles against Qt 6 (only the pre-existing
warning); companion_core.c and the consumers of companion_core.h pass
tools/mingw_syntax_check.sh.
* ui/companion: move directory scan out of the Qt companion; add it to the native companions
Phase 2, fifth subsystem. The scan was already task-based; the request
plumbing and the completion handling move into the core:
- companion_core_request_scan(path, directory, show_hidden): pushes
task_push_dbscan against the configured playlist directory and content
database; false when the build has no libretrodb or the push failed
- on_scan_finished callback: fired after the menu's horizontal list has
been reset (that reset was Qt's scan_finished_handler; it belongs to
RetroArch state, so it is the core's now). task_push_dbscan carries
no user data, so the requesting core is remembered in a static and
cleared in companion_core_free (one desktop companion is active at
a time).
Qt: onFileBrowserTreeContextMenuRequested calls the core; the
"scan finished" confirmation dialog stays in Qt as the callback.
Native companions gain File -> Scan Directory...: Win32 through
SHBrowseForFolderA (BIF_RETURNONLYFSDIRS, no new-style flag; shell32 /
ole32 added to LIBS and the MSVC pragmas), Cocoa through NSOpenPanel
using the same URL-or-objc_msgSend split as ui_cocoa.m so the 10.4
selectors do not appear as declarations to a modern SDK. Both refresh
the playlist list on completion.
Verified: ui_qt.cpp compiles against Qt 6; companion_core.c with and
without HAVE_LIBRETRODB, ui_win32_companion.c and the consumers of
companion_core.h pass tools/mingw_syntax_check.sh (mingw -Wall -Wextra
clean). apple_mrc_ownership_check.py reports the local
[NSOpenPanel openPanel], used within the pool exactly as ui_cocoa.m
does - a read-and-dismiss hit.
* ui/companion: move thumbnail path resolution out of the Qt companion
Phase 2, sixth subsystem. The thumbnail repository layout, the label
sanitising rule (& * / : ` < > ? \ | -> '_'), the extension probe order
(.png .jpg .jpeg .bmp .tga, .png as the save target) and the
"image content is its own thumbnail" rule were all Qt-side. They are
now C89 in the core:
- COMPANION_THUMB_BOXART / _SCREENSHOT / _TITLE / _LOGO subdirectory
names (ui_qt.h's THUMBNAIL_* macros alias them)
- companion_core_thumbnail_dir(db_name, subdir)
- companion_core_thumbnail_path(db_name, subdir, label, content_path)
PlaylistModel keeps three thin QString wrappers (getPlaylistThumbnailsDir,
getThumbnailPath, getRepositoryThumbnailPath - the last for the save
target and the sidebar images, where the content path must not short-
circuit the lookup); getSanitizedThumbnailName and the sanitiser
QRegularExpression are gone. changeThumbnail and the current-item
thumbnail loader use the wrappers.
The same calls are what the native companions' grid / list thumbnails
will resolve through.
Verified: ui_qt.cpp, ui_qt_widgets.cpp and moc_ui_qt compile against
Qt 6 (only the two pre-existing warnings); companion_core.c and the
consumers of companion_core.h pass tools/mingw_syntax_check.sh.
* ui/drivers/qt: define MainWindow::playlistModel()
The getter was declared in ui_qt.h but never defined - nothing used it
until the companion core's on_playlist_changed callback did, so the
MSYS2 Qt builds failed to link:
undefined reference to `MainWindow::playlistModel()'
Define it alongside the other trivial accessors. This box only ever
compiled ui_qt.o, never linked a Qt retroarch, which is how it slipped.
* ui/companion: move "launch with" core selection out of the Qt companion
Phase 2, seventh subsystem. MainWindow::setCoreActions built the
"Launch with" list itself: the running core, the entry's own core, the
playlist's default core, each de-duplicated against the others by path,
core name, display name and core_file_id prefix, spread over ~150 lines
of QVariantMap juggling (including a per-row loop that re-resolved the
same default core for the all-playlists view). The selection logic is
now C89:
- companion_core_launch_options(entry core, playlist name,
suggest_loaded_first, out[], max): the de-duplicated candidates in
menu order, each tagged companion_launch_selection
- companion_core_current_core_name() / _version() /
_supports_no_content(): the runloop system info Qt read directly
Qt's core_selection enum now aliases companion_launch_selection so the
combo box stores what the core hands back; setCoreActions fills the
combo from the array and appends its Ask / Load Core... entries;
setCurrentCoreLabel uses the accessors instead of runloop_state.
Verified: full Qt 6 retroarch links on Linux (the miss behind the
playlistModel() CI failure is now covered on this box) and starts
headless with desktop_menu_enable + the qt companion under
QT_QPA_PLATFORM=offscreen without faulting; companion_core.c and the
consumers of companion_core.h pass tools/mingw_syntax_check.sh.
* ui/companion: move thumbnail downloads out of the Qt companion
Phase 2, eighth subsystem. The single-thumbnail and thumbnail-pack
downloads - server URLs and per-component percent-encoding, the label
scrub the server expects, the .partial write + rename, the pack's
"delete or rename aside with .tmp" replacement pass, the decompress
task and its source cleanup, plus three retro_task callbacks and a
userdata struct - were ~430 lines of Qt. They are C89 in the core now:
- companion_core_thumbnail_download(db_name, label, subdir)
- companion_core_thumbnail_pack_download(db_name) (download + extract)
- companion_core_download_cancel() / _active()
- on_thumbnail_downloaded / on_thumbnail_pack_finished callbacks, the
latter carrying a companion_download_result the UI maps to its
messages (network / rename / delete / empty archive / extract)
One transfer is in flight at a time, as before. The task user data is
owned by the task chain; the core only points at it and clears the
back-pointer when the transfer is cancelled or the core is freed, so a
late callback frees the data and notifies nobody.
Qt keeps its queues (per-type list for one entry, per-playlist list),
counters and the three progress dialogs; downloadThumbnail,
downloadAllThumbnails and downloadNextPlaylistThumbnail are now a core
call plus the dialog. onExtractArchive, the cb_* callbacks,
qt_download_userdata_t, m_currentHttpTask, the extraction progress
dialog and scrub_qstring are gone. A cancelled transfer no longer
touches the UI at all.
Verified: full Qt 6 retroarch links on Linux and starts headless with
the qt companion; companion_core.c with and without HAVE_NETWORKING and
the consumers of companion_core.h pass tools/mingw_syntax_check.sh. The
actual transfers are not exercised here (no thumbnail server access
from this box).
* ui/drivers: Win32 companion keeps RetroArch running while dragged, gets a splitter; Qt gains Scan Directory / Quit
Win32 companion:
- Dragging or sizing the companion window (or browsing its menu bar)
froze RetroArch's video: DefWindowProc runs those loops modally on
the main thread, and only the main window's WndProc clocked the run
loop through them. win32_common.c's modal clock (win32_modal_enter /
_exit / _tick, the WM_RA_MODAL_TICK message and WIN32_MODAL_TIMER_ID)
is now exported, and the companion window routes WM_ENTERSIZEMOVE /
WM_ENTERMENULOOP / WM_EXITSIZEMOVE / WM_EXITMENULOOP and the ticks to
it exactly as the main window does; win32_modal_window_destroyed()
ends a session if the clocked window goes away mid-drag.
- The playlist pane was fixed at 200 px. A 5 px splitter between the
pane and the entry list now drags (IDC_SIZEWE, capture, clamped to
100 px from either edge, re-clamped on window resize).
Qt companion: File menu gains "Scan Directory" (QFileDialog directory
picker -> companion_core_request_scan) and "Quit RetroArch"
(CMD_EVENT_QUIT through the core), matching the native companions'
menus. Both use existing menu strings.
The two native callback tables spell out the new thumbnail callbacks as
NULL (they were relying on zero-initialisation; -Wextra flagged it).
Verified: ui_win32_companion.c and win32_common.c pass
tools/mingw_syntax_check.sh (the one consumer of win32_common.h that
fails, uwp_egl_ctx.c, fails identically on the branch tip); full Qt 6
retroarch links and starts headless with the qt companion.
* verbosity: mirror the log into any desktop companion, not just Qt
The companion log path in verbosity.c was Qt-specific twice over: it
was gated on HAVE_QT, and it replaced the platform sink - on a Qt build
the line was formatted into a buffer, written to the log file from
there and handed to ui_companion_driver_log_msg(), while the macOS
terminal/asl path and the plain vfprintf path were skipped entirely.
Now:
- verbosity.c includes ui_companion_driver.h (RARCH_INTERNAL) and gates
on HAVE_COMPANION_WIMP, so the native Win32 and Cocoa companions get
the log too
- the companion copy is orthogonal to the platform sink: it is formatted
from a va_copy of the arguments and the normal output below still
happens unchanged (macOS Qt builds regain their Terminal/asl output).
A va_copy fallback (__va_copy, or plain assignment) keeps the file
C89-clean; the linux-c89 job compiles it
- nothing is formatted unless someone is listening:
ui_companion_driver_log_active() (setting + inited + is_active +
log_msg present) is asked once per line, and
ui_companion_driver_log_msg() then delivers without repeating the
setting lookup and is_active() round trip - the previous code paid
both on every RARCH_LOG whenever Qt was compiled in, even with the
desktop menu disabled
- the __WINRT__ buffered path is unchanged, just no longer shared with Qt
The native companions gain the log view the plan asks for (View > Log
on Win32: a read-only multiline EDIT appended via EM_REPLACESEL at the
end, trimmed by half in one cut past 256 KiB so appends stay O(line);
Companion > Log on Cocoa: an NSTextView added under the split while
shown, same trim rule). The 10.4 NSInteger fallback grows NSUInteger.
Verified: verbosity.c and ui_companion_driver.c compile with the
linux-c89 flags; all 15 consumers of ui_companion_driver.h pass
tools/mingw_syntax_check.sh; ui_win32_companion.c is mingw -Wall
-Wextra clean; full Qt 6 retroarch links and runs headless with
--verbose (the mirror path exercised into Qt's log widget).
* ui/companion: move the core picker filter and the core-information rows out of the Qt companion
Phase 2, ninth subsystem: everything the Qt companion still computed
from core_info itself.
- LoadCoreWindow::initCoreList filtered the core list by gathering the
content's extension plus every archive member's extension into a
QStringList and matching it against each core's supported_extensions
string. That was a Qt re-implementation of core_info's own matcher;
companion_core_installed_cores_supporting(content_path) now calls
core_info_list_get_supported_cores() - the exact rule the menu uses,
directories included - and reports how many cores lead the list. The
table is built from the installed-core accessors (a _version accessor
is added; _name falls back to the core file's base name, as the table
did) and hides the rows past that count. MainWindow::loadContent's
CORE_SELECTION_ASK path no longer walks archives; it passes the path.
- The core-information collector (~240 lines: name / version / system /
authors / permissions / licences / extensions / firmware status with
per-row colouring / notes) was already toolkit-free C living in
ui_qt.cpp under a qt_ prefix. It moves verbatim into the core as
companion_core_core_info_rows() with companion_core_info_row_status;
MainWindow::getCoreInfo keeps only the HTML/CSS decoration of the
firmware rows.
Both are what the native companions' Load Core dialog and core-info
panel will consume.
Verified: full Qt 6 retroarch links and starts headless with the qt
companion; companion_core.c and the consumers of companion_core.h pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean).
* ui/companion: one window hand-off and one start-core path for all three companions
Two pieces of RetroArch-facing logic were still written three times,
once per backend, and once in Qt only:
- Raising the companion window meant "release the mouse grab, show the
cursor, leave fullscreen" in ui_qt.cpp, ui_win32_companion.c and
ui_cocoa_companion.m, each reading input_state / video_state /
settings itself. companion_core_prepare_show_window() is that
sequence; companion_core_video_started_fullscreen() answers Qt's
"stay behind the video window" question. The two native files drop
their video_driver.h / input_driver.h includes.
- Starting a contentless core: Qt cleared RARCH_PATH_BASENAME and
pushed task_push_start_current_core; the native companions had been
wired to companion_core_request_load(NULL, NULL), which is a different
task. companion_core_start_core() is the Qt sequence, and all three
use it (native ones report failure in the status bar).
getSelectedCorePath's CORE_SELECTION_CURRENT reads the core path from
the core accessor; the Win32 Quit item goes through
companion_core_event_command like the Qt one. ui_qt.cpp no longer
calls command_event, input_state_get_ptr or video_state_get_ptr.
Verified: full Qt 6 retroarch links and starts headless with the qt
companion; companion_core.c, ui_win32_companion.c (mingw -Wall -Wextra)
and the consumers of companion_core.h pass tools/mingw_syntax_check.sh.
* ui/drivers: Load Core window for the native Win32 and Cocoa companions
Parity with Qt's LoadCoreWindow: File -> Load Core... in both native
companions now opens the companion's own picker - a Name / Version list
of the installed cores from companion_core_installed_core_* - with
Load / Cancel buttons and double-click, and loads through
companion_core_load_core(). Previously the Win32 item forwarded to the
main window's file-open dialog and the Cocoa item to the app delegate's
openCore:, i.e. a raw .dll / .dylib chooser.
Win32: a second top-level window owned by the companion (stays above it,
hides with it, WS_EX_TOOLWINDOW), SysListView32 report view sorted by
name with the core index in lParam so a sorted row still maps back, and
the same modal-loop clocking as the companion window so dragging it
does not stall RetroArch. Cocoa: an NSWindow with an NSTableView fed by
the same controller (keyed on the table object), created on first use.
Load Content keeps using the platform driver's dialog.
Verified: ui_win32_companion.c passes tools/mingw_syntax_check.sh
(mingw -Wall -Wextra clean); apple_mrc_ownership_check.py reports only
the known local NSOpenPanel hit. Not run here (no Windows / macOS).
* ui/drivers: core-information pane for the native Win32 and Cocoa companions
Parity with Qt's core-info dock: View -> Core Information (Win32) /
Companion -> Core Information (Cocoa) shows the rows
companion_core_core_info_rows() produces for the running core - name,
version, system, authors, permissions, licences, extensions, firmware
status, notes - as a two-column key / value list beside the entries.
Win32: a SysListView32 pane on the right of the entry list; it yields
when the window is too narrow for three panes. Cocoa: a third pane that
joins the NSSplitView while shown, rows cached in two string_lists.
Only the shader commands are forwarded to companions, so a core load or
unload is not an event a companion sees; both panes instead follow the
running core from the per-frame iterate hook with one short strcmp
while shown, refilling only when the path changed.
Verified: ui_win32_companion.c passes tools/mingw_syntax_check.sh (mingw
-Wall -Wextra clean); apple_mrc_ownership_check.py reports only the
known local NSOpenPanel hit. Not run here (no Windows / macOS).
* ui/drivers: icon view with thumbnails for the native Win32 companion
Parity with Qt's grid view. View -> Icons switches the entry list to
LVS_ICON with 128 px boxart thumbnails; View -> List returns to the
report view. Thumbnails resolve through companion_core_thumbnail_path()
(the same rule as Qt: repository layout, sanitised label, extension
probe, image content as its own thumbnail) and decode through
image_texture_load(), whose ARGB8888 output is exactly the 32-bit BGRA
DIB order Windows wants, so a thumbnail is a nearest-neighbour
letterbox into a CreateDIBSection and an ImageList_Add.
Never blocks: the image list starts with a placeholder at index 0 for
every item, and the iterate hook decodes one pending thumbnail per frame
while the icon view is showing - one file decode per frame however long
the playlist. Decoding is sequential from the top for now; prioritising
the visible range is a follow-up.
Everything used exists on Windows 95 with comctl32 4.70 (ImageList_*,
LVS_ICON, LVM_SETICONSPACING); ILC_COLOR32 degrades to what the
installed comctl32 supports.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean, linux
c89 pass skipped for the Win32 path as the script does). Not run here.
* ui/companion: destroy the desktop companion window at quit, before the drivers go away
Quitting from RetroArch's own menu with the native Win32 companion open
left the process hung ("Not Responding") with an undestroyed window:
the companion window is a top-level window on the main thread, and the
only thing that destroyed it was ui_companion_driver_deinit(), which
main_exit() runs after driver_uninit(DRIVERS_CMD_ALL) has already torn
down the video driver - i.e. after the message pump that services the
window (ui_application_win32_process_events on the main thread, or the
video thread under threaded video) is gone. DestroyWindow() then has no
pump to run the window's WM_DESTROY through, and shutdown stalls.
Fix: close the companion window while its pump and the drivers are
still alive. ui_companion_driver_wimp_deinit() is split out of
ui_companion_driver_deinit() (which now calls it), made idempotent, and
invoked right after the run loop breaks - in retroarch.c's
retroarch_main_loop and in ui_cocoa.m's rarch_main - before main_exit().
main_exit()'s existing ui_companion_driver_deinit() still runs and is
now a harmless second call for the WIMP part while still tearing down
the platform driver.
This is the Qt companion's behaviour too (it lived inside the same
deinit), so no change there; it fixes the native Win32 and Cocoa
companions, whose windows previously outlived the pump.
Verified: retroarch.c, ui/ui_companion_driver.c and all 15 consumers of
ui_companion_driver.h pass tools/mingw_syntax_check.sh; full Linux
build links. The hang itself is Windows-only and not reproducible here.
* ui/drivers: icon (grid) view for the native Cocoa companion
Parity with Qt's grid and the Win32 icon view. Companion -> Icons swaps
the entries table in its scroll view for a thumbnail grid; Companion ->
List swaps it back.
NSCollectionView is 10.5+ and the baseline is 10.4, so the grid is a
hand-laid flipped NSView (RACompanionGrid): fixed 128 px cells flow-laid
to the width, each drawing a letterboxed boxart above a truncated label,
with mouse and arrow / Return selection and double-click to load. The
scroll view is reused, so no second data path.
Thumbnails resolve through companion_core_thumbnail_path() - the same
rule as everywhere else - and load as NSImage; like the Win32 icon
view, one is decoded per frame from the iterate hook while the grid is
showing, so a playlist of any size never costs more than one decode per
frame. One NSImage per row is cached and drawn as it arrives.
Verified: apple_mrc_ownership_check.py reports only local autoreleased
objects used within their pool (the drawRect: attributes dictionary and
the existing NSOpenPanel), neither stored past the pool. Not compiled
here (no Apple toolchain).
* ui: pick a core on Run when a playlist entry has none (native companions)
When a playlist entry's core is empty or "DETECT" and no core is
loaded, Run silently failed on the native companions (Qt shows its
core-selection combo / Load Core window). companion_core_entry_needs_core()
reports that case and hands back the content path; both native companions
then open their Load Core window filtered to the cores that can run that
content, and the pick launches the content with the chosen core through
companion_core_request_load_content().
Win32: cw_run_selected checks first and calls cw_cores_show(content); the
Load Core window carries the pending content, filters its list with
companion_core_installed_cores_supporting(), and its OK path runs the
content instead of just loading the core. Cocoa: runSelected and gridRun
do the same via -showCoresForContent:; the window build is split into
-buildCoresWindow so it is populated and raised once. Plain File -> Load
Core is unchanged (no content, full list, loads the core only).
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); the consumers of
companion_core.h pass; apple_mrc_ownership_check.py reports only the two
known local-autorelease hits. Not run here (no Windows / macOS).
* ui: file-system browser for the native Win32 and Cocoa companions
Parity with Qt's File Browser tab: File -> Browse Files (Win32) /
Companion -> Browse Files (Cocoa) turns the entry list into a filesystem
browser - directories first with a ".." parent link, a directory
descends, a file loads through the current core (or, when the file has
no usable core, opens the Load Core picker filtered to it). Picking a
playlist returns to playlist mode.
The listing and navigation are in the core, toolkit-free:
companion_core_browse_open() (dir_list_new + dir-first sort, defaulting
to the content directory), _browse_count/_name/_path/_is_dir with a
synthesised ".." entry, and _browse_activate() which descends, loads, or
reports needs-core with the content path for the picker - reusing
companion_core_request_load_content(), so the same core-path sanitising
and quick-menu behaviour as everywhere else.
Backends only present it: Win32 reuses the entries list view (trailing
slash marks directories), Cocoa the entries table; both branch their
rebuild / run on a browse_mode flag and leave it on playlist select.
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean, linux c89 pass);
the consumers of companion_core.h pass; apple_mrc_ownership_check.py
reports only the two known local-autorelease hits. Not run here.
* tools: companion backend feature-parity check (Phase 6)
The refactor's final phase requires the three desktop companions - Qt,
native Win32, native Cocoa - to stay interchangeable: "same actions
produce the same results". Nothing enforced that. A backend can omit a
whole feature (file browser, scan, core picker, core-info panel) and
still compile and run; the gap only surfaces when a user switches the
Companion UI driver and finds a menu entry gone.
companion_parity.py defines the feature set by the companion_core_*
entry point each feature needs and checks every backend references it -
the same source-level, zero-cost, Linux-only shape as
vfs_backend_parity.py. Qt's two presentation TUs are checked together;
where Qt implements a feature a toolkit-native way (playlist listing and
the file browser through its own QDir / QFileSystemModel, Run and the
core picker through the launch-with combo) the equivalent call is
recorded in QT_EQUIVALENT with a reason. A backend that genuinely should
not carry a feature goes in WAIVERS, so dropping one is a reviewed
choice, not an oversight. --list prints the matrix.
Wired into Linux-libretro-common-tests.yml beside the VFS parity check.
Confirmed it passes on the current three backends (19 features) and
fails when a feature call is removed from one.
This is Phase 6's parity gate as an enforced check rather than a static
checklist that would drift; the remaining visual / behavioural parity
pass stays manual.
* ui/drivers: Win32 companion opens at the Qt companion's startup size
The Qt companion opens at 1280x720 centred on the primary monitor,
clamped to it; the native Win32 companion opened at CW_USEDEFAULT with a
fixed 800x520 fallback - a much smaller window in a different place, so
the two look nothing alike on first F5. Match Qt: 1280x720, centred on
the work area (screen minus taskbar), clamped to it.
Made scalable for small displays, which the 9x baseline can hit (640x480
/ 800x600 CRTs): the size is clamped to the work area and only floored to
the window's own minimum when the work area is large enough for it, so it
never opens larger than the screen. SPI_GETWORKAREA falls back to the
full screen metrics when it fails, as it can on 9x.
The default view stays the report list, which matches the Qt companion's
own default (VIEW_TYPE_LIST); the grid in the reference screenshot was a
persisted user choice, not the startup state.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean). Not
run here (no Windows).
* ui/drivers: search box and Edit menu in the native Win32 companion
Visual/behavioural parity with the Qt companion, which has a Search box
and an Edit -> Search action. The Win32 companion gains an EDIT strip
above the entry list and an Edit menu with Search (Ctrl+F focuses the
box, matching Qt's shortcut). Typing filters the current content view -
playlist entries or the file browser - by case-insensitive substring,
the same field Qt's proxy model filters on.
Filtering makes list-view rows non-contiguous with entry indices, so the
entry index now rides in each row's lParam and the readers use it: a new
cw_selected_entry() resolves the selection through lParam (browse rows
are never filtered, so they stay row == index), and the lazy thumbnail
decode walks visible rows and reads each row's lParam. The image list is
sized to the full count and installed before items reference it; the
per-frame decode budget is unchanged.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean, linux
c89 pass for the shared paths). Not run here (no Windows).
* ui/drivers: boxart preview pane for the native Win32 and Cocoa companions
Parity with the Qt companion's Boxart dock. View -> Boxart (Win32) /
Companion -> Boxart (Cocoa) shows the selected playlist entry's boxart,
updated as the selection moves. It resolves through the same
companion_core_thumbnail_path() rule as the grid, so image content and
the repository layout behave identically.
Win32: a STATIC (SS_BITMAP) in the right column below the core-info pane
- the column appears when either is shown and splits between them. The
image is decoded on LVN_ITEMCHANGED, scaled to the pane preserving
aspect into a 32-bit DIB (image_texture_load's ARGB8888 is Windows' BGRA
order), and the previous HBITMAP is freed. Cocoa: an NSImageView on the
right edge (proportional scaling), refreshed from the entries table's
selection-changed delegate.
Nothing decodes while the pane is hidden or in file-browser mode, and
only the selected entry is decoded, so there is no per-frame cost.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean);
companion_parity.py green; apple_mrc_ownership_check.py reports only the
two known local-autorelease hits. Not run here (no Windows / macOS).
* ui/companion: lead the playlist list with the special playlists
The Qt companion's left pane starts with Favorites, History, Images,
Music and Videos above the system playlists; the native companions,
which build their list from companion_core_playlist_count/_name/_path,
only saw the .lpl files in the playlist directory - so History and
Favorites were unreachable there.
The core now returns those five as leading playlist entries, in the Qt
order, each a real .lpl at its configured path
(path_content_favorites / _history / _image_history / _music_history /
_video_history); a path left empty in the config is skipped, so the
lead count is not always five. Names come from the existing *_TAB label
strings. Selection, delete and core-association already key off the
public index / path, which now map through the specials, so they follow
without change; select_playlist_path matches against the public paths
too.
Qt is unaffected: it builds its own special-playlist items (including
the synthetic "All Playlists", which is not a file and stays a
presentation concern) and does not enumerate through these accessors.
Verified: companion_core.c and the consumers of companion_core.h pass
tools/mingw_syntax_check.sh; companion_parity.py green.
* ui/drivers: Win32 companion puts the search box in the left column
The Qt companion's search field sits at the top of the left content
column, above the playlist list; the native Win32 companion had it above
the entry list on the right. Move it to match: the left column is now
the search box on top and the playlist list below it, and the entry list
spans the full height on the right, so the two windows line up.
Layout only - the EDIT still filters the current content view the same
way, and the splitter, browse, info and boxart panes are unchanged.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean);
companion_parity.py green. Not run here (no Windows).
* ui/drivers: lay the Win32 companion out like the Qt companion
The Qt companion is the reference look; the native Win32 window had the
same features behind a different shape. This makes its structure match
the Qt startup layout, using classic controls only (all on Windows 95
with comctl32 4.70) and the same msg_hash strings Qt shows:
Left column, as Qt's docks:
Search [edit][Clear]
Content Browser
[Playlists | File Browser] (a tab control; the second tab enters
the file browser, the first returns)
[playlist list] (a list view with the shell folder icon
per row, like Qt's, replacing the LISTBOX)
Core
[launch-with combo][Info][Run]
The Core section is Qt's launch-with combo: companion_core_launch_options
for the selected entry (running / entry's own / playlist default core),
plus "Ask" and "Load Core..."; Run launches with the chosen core, Ask and
Load Core open the picker. This was the last Qt behaviour the natives
lacked - they previously always asked.
Centre: the entry list over Qt's footer ("N items" from
QT_ITEMS_COUNT on the left, a View: List / Icons combo on the right).
Right column: "Core Info" and "Boxart" captions over their panes, both
shown by default as Qt does. Menubar: File / Edit / View / Help with
Qt's titles; Help gains Documentation (docs.libretro.com) and About.
Status bar defaults to "<version> - <core or No Core>" and follows the
running core.
Every control is set to DEFAULT_GUI_FONT - the bold bitmapped System
font the controls default to was most of why the window looked nothing
like Qt.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean);
companion_parity.py green. Not run here (no Windows) - the pixel pass
against the Qt screenshot needs a real box.
* ui/drivers: Win32 companion scales with the display DPI like Qt
The side-by-side on a 200% display showed the Win32 companion at half
the Qt companion's size with captions overlapping their controls and
text truncated everywhere. Cause: Qt sizes in logical (96-dpi) pixels
and renders them at the monitor's DPI - its 1280x720 fills a 2560x1440
screen - while the native window used the same numbers as raw pixels,
and its DEFAULT_GUI_FONT is a fixed 8pt bitmap that does not scale, so
the rows sized for it could not hold the text the display wanted.
Now everything scales the way Qt does:
- LOGPIXELSY is read once and every logical size (startup 1280x720,
minimums, pane and column widths, splitter, boxart height, icon size,
icon-view spacing, padding) goes through MulDiv against 96
- the font is the system message font from NONCLIENTMETRICS, which is
the DPI-scaled UI font (Segoe UI at the display's size on modern
Windows, MS Sans Serif on 9x), created once and freed on deinit; the
stock font remains the fallback
- row heights derive from that font's TEXTMETRIC (caption = one line,
control = line + chrome) instead of fixed 18/24
- list columns are sized to their panes on every layout (playlist
column to the pane, Name/Core 2:1 across the entry list, info key
column narrow with the value taking the rest), so nothing truncates;
the info list drops its column header as Qt has none
- the left pane defaults to 280 logical px, Qt's dock width
All APIs used date from Windows 95 (GetDeviceCaps, CreateFontIndirect,
SPI_GETNONCLIENTMETRICS, MulDiv).
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean);
companion_parity.py green. Not run here (no Windows).
* ui/drivers: fix the zero-size Win32 companion window and the Xcode build
Win32: the DPI-scaling commit read w->dpi before it was set. The DPI /
font block sat after the main window's size was computed and the window
created, so CW_S() ran MulDiv(x, 0, 96) = 0 for the startup size and the
WM_GETMINMAXINFO minimums - a zero-size window, the near-invisible strip
in the report. Move the DPI / font setup to the top of cw_create_window,
before anything is sized.
Cocoa: the Xcode (ARC) build failed on the core-info pane's construction
- "passing address of non-local object to __autoreleasing parameter for
write-back": an ivar (infoScroll) was used as the scroll-view
out-parameter of -makeTable:scroll:twoColumns:. Under ARC such a
parameter is __autoreleasing and must be a local; go through one and
assign it to the ivar (ARC retains the strong ivar, KEEP_IVAR adds the
retain under MRC). The other three callers already used locals.
Also declare the controller's protocols (NSTableViewDataSource /
Delegate, NSWindowDelegate, NSMenuDelegate) when the SDK is 10.6+, so
the four setDataSource: / setDelegate:self "incompatible type" warnings
in that build go away; older SDKs use the informal protocols and keep
the plain declaration.
Verified: ui_win32_companion.c passes tools/mingw_syntax_check.sh (mingw
-Wall -Wextra clean); companion_parity.py green;
apple_mrc_ownership_check.py unchanged (the two known local hits).
* ui: playlist icons, single-column core info, 50/50 right column on Win32 (Qt parity)
Second side-by-side pass at 200% DPI, Qt leading. The window now opens
at the same size with legible controls; the remaining differences were:
- Playlist icons. Qt shows the XMB dot-art asset for each system
(<assets>/xmb/dot-art/png/<playlist>.png, folder.png as fallback) at a
large row height; Win32 showed a 16 px shell folder on every row. The
asset rule moves into the core (companion_core_playlist_icon_path, so
Cocoa gets the same icons) and the Win32 list decodes each icon into a
32 px image list through the existing scaler, which also gives the
rows Qt's height. The shell folder stays at index 0 as the fallback
when the asset set is not installed. Icons are rebuilt with the list,
i.e. on playlist-directory changes only, not per frame.
- Core Info. It was a two-column key / value list, so the no-core text
(a key with no value) truncated at the key column, and long firmware
lines were cut. Qt renders "Key: value" as one text line per row; do
the same in a single wide column that scrolls horizontally instead.
- The right column splits 50/50 between Core Info and Boxart, as Qt's
two docks do, rather than a fixed boxart height.
- Entry columns titled "Name" / "Core" (QT_NAME / QT_CORE) rather than
the entry-dialog labels with their colons; the footer drops the
separate "View" caption Qt does not have.
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); consumers of
companion_core.h pass; companion_parity.py green. Not run here.
* ui: the main loops and the Win32 window stop hard-coding Qt as "the" companion
Sweep of HAVE_QT / HAVE_QT6 outside the Qt driver itself. Most sites are
legitimately Qt-specific (griffin_cpp's TU list, the feature-list
strings, the griffin HAVE_MAIN hack, config.features.h, Qt's own entry
in the companion driver table, and ui_cocoa.m choosing rarch_main over
the draw observer because of Qt's event loop) and stay. Five were
companion-generic behaviour wired to Qt alone:
- retroarch.c main loop: `ui_companion_qt.application->exiting` and
`->quit()` under HAVE_QT. That is "the active desktop companion asked
to exit / tell it to quit", whichever driver is selected. New
ui_companion_driver_wimp_exiting() / _wimp_quit() route it through
uico_st->wimp; ui_cocoa.m's rarch_main and cocoa_common.m's draw
observer use the same two calls (the observer path also gains the
wimp deinit before main_exit, the ordering fix the Win32 quit hang
needed, which it had missed).
- ui_win32.c: the main window's "Toggle Desktop Menu" item (and its
label lookup) existed only #ifdef HAVE_QT, so a native-companion
build had no menu entry to open its companion. Now HAVE_COMPANION_WIMP.
- configuration.c: the ui_companion_toggle SETTING_BOOL was gated on
HAVE_QT || HAVE_COCOA - the pre-refactor condition, missing desktop
Win32 and HAVE_COCOA_METAL. Now HAVE_COMPANION_WIMP.
- settings_def_menu_main_lists_2.h: the SHOW_WIMP ("Show Desktop Menu")
action row was HAVE_QT only, so the main menu had no way to open a
native companion. Guard widened to the HAVE_COMPANION_WIMP condition,
spelled out as settings_def cannot include the header.
tools/settings_table.reference regenerated (unchanged - the desktop
profile already defines HAVE_QT).
Behaviour for Qt builds is identical (same calls, through the driver
slot). Verified: settings table --check, unity (3 profiles) and
migrate selftest pass; all 15 consumers of ui_companion_driver.h,
configuration.c, ui_win32.c and retroarch.c pass
tools/mingw_syntax_check.sh; full Qt 6 retroarch links and starts
headless; companion_parity.py green.
* ui/companion: native companions read and write retroarch_qt.cfg
The Qt companion keeps its own settings in retroarch_qt.cfg beside
retroarch.cfg (QSettings, INI form); the native Win32 and Cocoa
companions ignored it, so a view type, thumbnail type, start playlist or
"suggest loaded core first" set in one did not carry to the others. All
three now share that file.
RetroArch's config_file cannot read it: its key scan takes every graph
character as part of the key, so QSettings' unspaced `key=value` becomes
a key with no '=' and the line is dropped - confirmed with a harness, it
parsed zero entries from a real retroarch_qt.cfg. Rather than touch that
hot parser, the core gets a small dedicated reader/writer for the
dialect: "[section]" and comment lines skipped, split at the first '=',
values verbatim, written back in QSettings' own shape so Qt reads it.
Unknown keys (Qt's @ByteArray geometry, theme...) survive a rewrite.
Verified with the harness: every key read, a set-and-reread round trip,
and the geometry blob preserved.
companion_core_setting_get / _get_bool / _get_int / _set / _set_bool
Both native companions honour the keys Qt writes:
view_type list / icons at startup; persisted on switch
icon_view_thumbnail_type boxart / screenshot / title / logo for the
icon view and the boxart pane
initial_playlist opened at startup, History as the fallback
(Qt's default), applied once
suggest_loaded_core_first launch-with combo ordering
show_hidden_files directory scan
save_last_tab / last_tab restore the Playlists / File Browser tab;
persisted on change when save_last_tab is on
Reads are a file load per call: only at startup and on user actions,
never per frame.
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); consumers of
companion_core.h pass; full Qt 6 retroarch links; companion_parity.py
green; apple_mrc_ownership_check.py unchanged. Not run here.
* ui: companion settings move from retroarch_qt.cfg into retroarch.cfg; Qt-isms dropped
The Qt companion kept its presentation settings in a private QSettings
INI, retroarch_qt.cfg, and the previous commit taught the natives to
read that file. One config is cleaner: the values become real RetroArch
settings in retroarch.cfg, saved with everything else, visible in the
Settings menu, and read by all three companions through settings_t. The
retroarch_qt.cfg reader/writer added last commit is removed again.
New settings (settings_def_desktop_menu.h, same HAVE_COMPANION_WIMP
guard; menu placement beside desktop_menu_enable; tools/
settings_table.reference regenerated, 19 rows):
desktop_menu_view_type uint 0 list / 1 icons
desktop_menu_thumbnail_type uint boxart/screenshot/title/logo
desktop_menu_suggest_loaded_core_first bool
desktop_menu_save_last_tab / _last_tab bool / uint
desktop_menu_save_geometry bool
desktop_menu_window_x/_y/_width/_height uint - the window geometry as
plain ints, replacing Qt's
QByteArray saveGeometry() blob
desktop_menu_show_welcome_screen bool
desktop_menu_scan_finish_confirm bool
desktop_menu_thumbnail_cache_limit / _max_size / _quality uint
desktop_menu_icon_view_zoom uint
desktop_menu_all_playlists_list_max_count / _grid_max_count uint
desktop_menu_theme uint system/dark/custom
desktop_menu_initial_playlist, desktop_menu_custom_theme (SETTING_PATH)
desktop_menu_hidden_playlists (comma list), desktop_menu_highlight_color
("#rrggbb") (SETTING_ARRAY)
Qt's private copy of show_hidden_files is dropped for RetroArch's own
show_hidden_files.
Qt-isms removed rather than carried: the QByteArray blobs for dock
positions (and its View Options checkbox), the file-browser table
header state and the options-dialog geometry are gone; window geometry
restores from the four ints. QSettings is no longer used anywhere: the
member, its construction, MainWindow::settings() and the two widget
copies are deleted, and every read/write goes through settings_t (the
View Options dialog included). Writes take effect immediately and reach
disk when RetroArch saves its config.
The companion core exposes the shared values to the backends as typed
accessors (companion_core_pref_*), including the thumbnail-type ->
repository-subdir mapping in one place; both native companions use them.
Verified: settings table --check, unity (3 profiles) and migrate
selftest pass; label strings regenerated (gen_lbl_str.py); consumers of
companion_core.h, ui_win32_companion.c, configuration.c,
menu_displaylist.c and menu_setting.c pass tools/mingw_syntax_check.sh
(mingw -Wall -Wextra clean); full Qt 6 retroarch links and starts
headless; companion_parity.py green; apple_mrc_ownership_check.py
unchanged.
* ui/companion: retroarch_qt.cfg is gone - one-time import into retroarch.cfg, then deleted
The previous commit moved the companion settings into retroarch.cfg; this
one makes sure the old file actually disappears. On the first companion
start that still finds retroarch_qt.cfg beside retroarch.cfg, the core
imports the values that have a home into settings_t and deletes the
file, so it does not linger as dead configuration after an upgrade.
Runs once per process at most.
Imported (with the same value mapping the Qt companion used):
view_type, icon_view_thumbnail_type, initial_playlist,
suggest_loaded_core_first, show_hidden_files, save_last_tab / last_tab,
save_geometry, show_welcome_screen, scan_finish_confirm,
thumbnail_cache_limit / _max_size / _quality, icon_view_zoom,
all_playlists_list/grid_max_count, theme, custom_theme, highlight_color,
hidden_playlists (QStringList's ", " separators normalised to ",").
Dropped with the file: the Qt blobs (geometry, dock_positions,
options_dialog_geometry, file_browser_table_headers).
Stale comments naming retroarch_qt.cfg in the natives, config.def.h,
settings_def_desktop_menu.h and menu_displaylist.c are updated; no
source mentions the file any more except this migration.
Verified with a harness against a real QSettings-shaped file: every key
lands as the right typed value, blobs are skipped, the file is removed
(a whole-process run confirmed the import log line and the deletion;
the exit-time config save could not be exercised headless).
companion_core.c passes tools/mingw_syntax_check.sh; consumers of
companion_core.h pass; full Qt 6 retroarch links; companion_parity.py
green.
* ui/drivers: Win32 companion - core combo and Core Info work, icon alpha, zoom, Boxart tabs
Five defects from the side-by-side, all in the Win32 companion:
- The Core combo dropped down to nothing. A COMBOBOX's window height is
the height of its *dropped list*, and the layout sized both combos to
one closed row, so the list had no room. They are now given list room
(the closed control stays one row tall regardless). The combo was in
fact populated; it just could not show its items.
- Core Info always read "No Core Information Available". The pane
followed the running core; Qt shows the core picked in the Core combo
(the entry's own or the playlist default). It now does the same:
cw_combo_core_path() resolves the combo's selection and the pane
refreshes on entry selection, on combo change, and when that core
changes.
- Playlist icons sat on black. The scaler forced alpha to opaque, so
transparent XMB PNGs kept whatever was under them. It now composites
the source alpha over the control colour, giving an opaque result
every comctl32 draws identically (v6 alpha and 9x mask-less alike).
- No thumbnail zoom and a fixed thumbnail size. The icon-view edge now
comes from desktop_menu_icon_view_zoom (0..100 -> 64..320 logical px,
DPI-scaled), with Qt's Zoom slider (msctls_trackbar32) and Thumbnail
type combo in the footer; a change rebuilds the image list and
redecodes. New companion_core_pref_icon_view_zoom / _thumbnail_type
accessors (and setters) back both.
- No way to switch the boxart pane's type. It gets Qt's four tabs
(Boxart / Title Screen / Screenshot / Logo) under its caption; the pane
keeps its own type, independent of the grid's Thumbnail combo, as Qt's
dock does.
Also: the status bar returns to "<version> - <core>" once a playlist has
loaded instead of staying on "Loading playlist...".
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); consumers of
companion_core.h pass; full Qt 6 retroarch links; companion_parity.py
green. Not run here (no Windows).
* ui/drivers: fix the Win32 icon view's cell spacing (grid came up scrambled)
After the zoom change the icon view laid items out in cells a few pixels
wide: labels wrapped to three characters and items piled on top of each
other. The cell spacing was computed from w->thumb_px, which is only set
when the thumbnail image list is (re)built - but at startup the view
type is applied before the first playlist builds it, so the spacing was
0 + 24 by 0 + 40 px. A zoom or thumbnail-type rebuild then resized the
image list without ever reapplying the spacing either.
The spacing now comes from the live thumbnail edge whenever it is
applied (cw_icon_spacing_apply), is reapplied every time the image list
is rebuilt at a new size, and the grid is re-arranged (LVM_ARRANGE)
after a rebuild or a view switch so existing items take the new cells.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean);
companion_parity.py green. Not run here (no Windows).
* ui: "All Playlists" for every companion, and it is where all three start
Qt's playlist list begins with All Playlists - the union of every
playlist - and that is the view it opens on. The native companions had
neither, so the two windows came up on different pages and the natives
could not show the combined library at all.
The aggregate is in the core so every backend shares it. Public playlist
index 0 is now All Playlists (name from QT_ALL_PLAYLISTS, path the token
"|||ALL|||" Qt has always used, so desktop_menu_initial_playlist can
name it and the setting means the same thing everywhere); the specials
and files follow. Selecting it parses every playlist file in turn under
the same per-frame budget as a single playlist - one file's parse
finishes, the next begins, the view updates once at the end - and the
entries are referenced through a (list, index) table rather than copied,
then sorted by label (strcasecmp) as Qt sorts, and capped by the larger
of desktop_menu_all_playlists_list/grid_max_count (0 = no cap).
Edits under the aggregate go to the entry's own file: new
companion_core_entry_playlist_path() / _entry_index_in_playlist()
resolve an aggregate row to the file it came from and its index there;
the Win32 and Cocoa delete actions use them, and playlist_open() rejects
the token so nothing can ever try to write "|||ALL|||.lpl".
Startup: with desktop_menu_initial_playlist empty, Qt, Win32 and Cocoa
all open All Playlists (Qt's History fallback goes too, so the three
agree). The All slot shows the folder icon like the specials.
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); consumers of
companion_core.h pass; full Qt 6 retroarch links; companion_parity.py
green; apple_mrc_ownership_check.py unchanged. The aggregate itself
needs a run with real playlists (it cannot be driven headless here).
* ui: select the first entry on load, and All Playlists is uncapped by default
Two more from the side-by-side, Qt leading:
- Qt selects the first entry of a freshly loaded playlist, so the boxart
pane and the Core section have content immediately; the natives left
nothing selected and the panes empty. Win32 now selects row 0 after the
entry list is rebuilt (LVN_ITEMCHANGED drives boxart, core combo and
core info from there); Cocoa selects row 0 in the table and the grid.
- All Playlists showed "1000 items" against Qt's 42116. The cap I gave
it took the larger of the list / grid max counts, and I had invented a
grid default of 1000. Qt in fact never applies either count (the
setters are set-only and their spin boxes are commented out), which is
why it shows everything. The grid default is now 0, and a cap applies
only when both counts are set (0 = no cap on that side), then the
larger - so the default is uncapped like Qt, while a user who sets
both still gets a bound. tools/settings_table.reference updated for
the default.
Verified: settings table --check, unity (3 profiles) and migrate
selftest pass; companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); full Qt 6
retroarch links; companion_parity.py green; apple_mrc_ownership_check.py
unchanged.
* ui: align companion guards with master's HAVE_COCOA; unretained grid back-pointer
* ui/drivers: bring the Cocoa companion up to the Qt / Win32 layout and feature set
The native Cocoa companion had fallen well behind: two bare tables in a
split view, no launch-with core, no zoom, no thumbnail or boxart type
switches, no search, no playlist icons, Core Info following the running
core, and its own status text. This puts it on the same footing as the
Win32 companion, Qt leading:
Layout (explicit frames recomputed in -layoutViews on resize; 10.4-safe,
no autolayout; points, so the display scales it as it does Qt):
Left column, as Qt's docks: Search [field][Clear]; Content Browser
with a Playlists | File Browser NSTabView (the second tab enters the
file browser, the first returns); the playlist table with an icon
column (XMB dot-art per system via companion_core_playlist_icon_path,
the Finder folder as fallback) at Qt's row height; Core: launch-with
NSPopUpButton + Info + Run.
Centre: the entries table or grid over Qt's footer - "N items", Zoom
slider, Thumbnail type popup, View (List / Icons) popup.
Right column: Core Info caption + single-column "Key: value" list,
Boxart caption + NSSegmentedControl for the four types + image view;
both shown by default, 50/50, like Qt's docks.
Window opens at 1280x720 centred, clamped to the screen; status bar
reads "<version> - <core or No Core>" and follows the core.
Behaviour, all through the shared core and its pref accessors:
- launch-with popup from companion_core_launch_options plus Ask and
Load Core...; Run launches with the choice, Ask / Load Core open the
picker; Core Info follows the popup's core as Qt's does, refreshed on
entry / grid selection and popup change
- zoom slider drives the grid's thumbnail edge (64..320 pt) and
persists desktop_menu_icon_view_zoom; thumbnail popup switches the
grid's type and redecodes; boxart segments switch the pane's own type
- search field filters the entry table (case-insensitive substring)
through a row -> entry map, so run / delete / boxart / popup resolve
the right entry under a filter; Clear resets it; Cmd-F focuses it
- view popup and menu items stay in sync; last tab persisted when
desktop_menu_save_last_tab is on; shared settings applied at start
- grid selection now drives boxart / popup / info like table selection
- Companion menu uses Qt's strings and gains Documentation
The split view and the toggles that added panes to it are gone; Core Info
/ Boxart toggles show or hide within the fixed layout.
Verified: apple_mrc_ownership_check.py unchanged (the two known local
autoreleased objects); bracket / brace / paren balance checked by a
character-level scan; every declared selector has an implementation;
companion_parity.py green. Not compiled here (no Apple toolchain) - the
Xcode build and a run are the real test for this one.
* ui/drivers: fix the Cocoa companion build (undeclared -wimp, Carbon icon constant)
CI on the Cocoa layout commit (95dee5f) fails the three Apple jobs -
macOS (Xcode, clang/ARC) and macOS PowerPC cross 10.4 / 10.5 (GCC 14,
10.5 SDK, MRC) - while every Windows, MSVC, MXE, c89 and Linux job is
green, so the breakage is confined to ui_cocoa_companion.m. Two errors,
found by auditing the file against those toolchains (the job logs are
not readable without a login from here):
- RACompanionGrid's -drawRect: calls [owner wimp] to reach the core,
but the controller never declared or defined a -wimp accessor. GCC
rejects the unknown selector on a typed receiver; clang under ARC
rejects the resulting id -> ui_companion_cocoa_wimp_t* conversion
outright ("implicit conversion of an Objective-C pointer to a C
pointer is disallowed with ARC"). Declared and defined.
- The playlist folder fallback used kGenericFolderIcon, a Carbon
constant from Icons.h that AppKit alone does not declare. The generic
folder's HFS type is 'fldr'; pass the literal to
NSFileTypeForHFSTypeCode (10.0), which the 10.4u import audit accepts.
Re-checked: every selector sent to self / owner is now declared and
implemented; all top-level C functions are static (the build carries
-Werror=missing-declarations); bracket balance by character scan;
apple_mrc_ownership_check.py unchanged; companion_parity.py green.
* ui/drivers: fix the Cocoa companion build (Xcode log: shadowed grid edge, BOOL receiver)
From the CI Xcode log on c2e0e39:
- error: passing 'NSRect' to parameter of incompatible type 'CGFloat'
(and five "invalid operands" errors following it) in
RACompanionGrid -drawRect:. When the grid's fixed CC_GRID_THUMB
became the zoomable `thumb` ivar, the rename collided with the
method's existing local `NSRect thumb` (the thumbnail's box), so the
edge and the box became one identifier. The box is now `trect`; the
edge stays `thumb`.
- error: bad receiver type 'BOOL': [[window makeFirstResponder:grid]
self] messaged the BOOL that -makeFirstResponder: returns. Dropped the
outer message.
Also cleared the warnings the log shows in the same method:
-setFlipped: (deprecated 10.6) is now only used below the 10.6 SDK; on
10.6+ the draw call takes respectFlipped:YES instead, which is the
replacement Apple's notes describe. NSCompositeSourceOver goes through
the compat name the defines header already provides, and the two
NSTextAlignment* names are mapped to their pre-10.12 spellings under an
SDK check so the 10.5-SDK PowerPC build sees them too.
Re-checked: bracket balance by character scan; every selector sent to
self / owner declared; apple_mrc_ownership_check.py unchanged.
* ui/drivers: Win32 companion entry list goes virtual - grid builds instantly
Building the icon view took minutes on a large library where Qt is
instant. Three costs, all structural: the entry list was a retained
list view, so populating it was one LVM_INSERTITEM (plus a sub-item
set) per entry - 42k round trips through the control; LVM_ARRANGE then
laid out 42k icon cells; and thumbnails were decoded top-to-bottom at
one per frame regardless of what was on screen, so the visible screen
only filled in once everything above it had (42k entries: twelve
minutes). Qt's view is virtual: its model reports a count, cells are
drawn on demand, thumbnails load for the cells actually shown.
The entry list is now the Win32 equivalent, LVS_OWNERDATA (comctl32
4.70, Windows 95):
- populating is a filtered row map (rows[]: visible row -> entry index)
and one LVM_SETITEMCOUNT, whatever the size; no inserts, no arrange.
The search filter builds the same map, so run / delete / boxart / core
combo resolve through rows[] instead of a per-item lParam.
- the control asks for each row's text and image as it draws
(LVN_GETDISPINFOA - the ANSI notification, matching the ANSI control
even under a UNICODE build); the browse view is served the same way,
with the trailing backslash on directories.
- thumbnails are decoded only for rows the control has asked to draw:
GETDISPINFO queues a row that has no image yet, and the iterate hook
drains the queue newest-first (the rows most likely still on screen)
within a 4 ms budget, redrawing each row as its image lands. Nothing
is decoded for rows never scrolled to.
- memory is bounded: decoded thumbnails live in a ring of 512
image-list slots, recycled round-robin; an evicted row falls back to
the placeholder and re-queues if it comes into view again. Previously
the image list grew by one bitmap per entry (42k x 128 x 128 x 4 =
2.7 GB for a full pass).
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean), plus
a -DUNICODE syntax pass; companion_parity.py green. Not run here.
* ui/drivers: Win32 companion decodes thumbnails on a thread pool
Still slower than Qt after the virtual list. The remaining gap is where
the decode runs: Qt's ThumbnailLoader is a dedicated thread that runs
image_texture_load (the same decoder) with no per-frame budget, and its
UI thread only receives finished images. The Win32 companion decoded on
the UI thread under a 4 ms/frame budget - a boxart PNG takes 5-20 ms,
so about one thumbnail per frame, sharing that frame with emulation.
Now the decode is off the UI thread, and arranged to come out ahead of
Qt rather than level with it:
- a pool of decode threads (cores - 1, at least one, at most four;
libretro-common rthreads, so it builds wherever HAVE_THREADS does,
9x included) takes jobs newest-first - the rows most likely still on
screen - and decodes in parallel. Qt has one thread.
- each worker scales to thumbnail size itself and hands the UI thread a
T x T ARGB buffer; the UI thread's per-frame work is a DIB and an
image-list replace per finished thumbnail (~0.2 ms), never a decode.
Qt caches the full-size pixmap and rescales it on every paint.
- the request path resolves the file on the UI thread (the companion
core is single-threaded), so a job needs nothing from the core.
- a generation counter, bumped when the list, filter, zoom or thumbnail
type changes, makes in-flight results stale; they are dropped when
they land rather than blitted into the wrong row or size.
- all cross-thread state (queues, row map, thumb_idx, thumb_px) is read
and written under one lock; workers park on a condition and are woken
by requests and by ring space; shutdown joins them.
- without HAVE_THREADS the UI thread decodes under the old budget, so
the driver still builds and works.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean) with
and without HAVE_THREADS; companion_parity.py green. The pipeline
itself (queue, ready ring, worker loop, generation handling, shutdown)
was extracted into a Linux harness against the real rthreads and run
under ThreadSanitizer: no races, every decode installed exactly once,
stale results dropped, nothing leaked. The decode / GDI halves need a
Windows run.
* ui/drivers: Win32 companion - fix the quit hang; thumbnails cached across playlists
Two reports after the thread-pool commit: RetroArch hangs at close, and
the grid, while faster, is still not "instant" the way Qt's is.
The hang. ui_companion_win32_wimp_deinit freed the row map, thumb_idx
and the image list and only then called DestroyWindow. A virtual
(LVS_OWNERDATA) list view can ask for rows (LVN_GETDISPINFO) while it
is being torn down, so the handler read freed memory and a destroyed
image list during DestroyWindow - a fault inside the modal-clocked
teardown, which presents as a hang. Deinit now empties the list
(LVM_SETITEMCOUNT 0, image list detached) and destroys the windows
first, and frees the data after; the hwnd/entries pointers are cleared
so a late iterate or log call is a no-op. The pool shutdown is also
made hang-proof on its own: workers wait with a 100 ms timeout so a
lost wake-up on the Windows condition variable can never keep one
parked past quit, and stop broadcasts rather than signalling per
worker. (A TSan harness of the real pipeline code with four workers,
mid-decode and ring-blocked at quit, stops in 0 ms with no races.)
The "instant". The Qt companion keeps decoded pixmaps in a QCache keyed
by file path that survives switching playlists, so revisiting one draws
thumbnails with no decode at all. The Win32 slots were per row and
reset on every rebuild. They are now keyed by thumbnail path in an
open-addressed hash table and kept across list changes: only a new
thumbnail size or type drops them. A row whose file is already a slot
gets it on the spot, no decode. The slot budget follows the size to
stay near 64 MiB (a few hundred at 320 px, thousands at 64 px). Rows
whose thumbnail file does not exist are marked once (-2) so the
filesystem is not probed for them on every paint.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean) with
and without HAVE_THREADS; companion_parity.py green; the pipeline
harness under ThreadSanitizer (shutdown stress, 5 trials). GDI / window
teardown needs the Windows run.
* ui: Win32 File Browser laid out like Qt's; drive list on Windows
The File Browser tab on Win32 came up empty and did not work the way
Qt's does.
Empty: with no content directory configured, the core refused to open
a top level on Windows (I had ruled out a "bogus root"), so there was
nothing to list. On Windows the top level is the drive list: the core
now lists GetLogicalDrives() as directory entries ("C:\") for an empty
browse_dir, a drive root's ".." goes back to it, and the status bar
calls that level "Computer".
Layout: Qt's File Browser keeps the folder tree in the left pane and
shows the selected folder's files in the content view. Win32 had turned
the content view into a combined folder + file listing and left the
playlists in the left pane. Now, in the browser: the left list shows
the current folder's subfolders (".." first, folder icon), the content
view - list or grid - shows its files, a folder descends on double-
click / Enter, and a file loads (or opens the core picker) as before.
Leaving the tab, or picking a playlist, puts the playlists back in the
left pane; a playlist refresh that lands while browsing is deferred to
then. The core exposes the split (companion_core_browse_dir_count: the
listing is sorted folders first, so [0, dc) are folders and [dc, n)
files) for any backend that wants the same two-pane shape.
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); consumers of
companion_core.h pass; companion_core.o builds; companion_parity.py
green. Not run here (no Windows).
* ui: Win32 file browser - drive names shown, folder icon opaque
Two defects in the drive list the previous commit added:
- No names. companion_core_browse_name() took path_basename() of each
entry; a drive root "C:\" has no basename, so every row was blank.
When the basename is empty the name is the path itself.
- Black squares behind the folder icons. The fallback icon went into
the playlist image list raw (ImageList_AddIcon) and the list was
created with ILC_MASK; a masked list draws an alpha icon's transparent
pixels as black. The list is now unmasked and every image in it is an
opaque bitmap composited on the window colour: index 0 is the XMB
folder.png asset (what Qt shows) through the same compositing scaler
the playlist icons use, and only if the asset set is missing is the
shell folder icon used - drawn with DrawIconEx onto a window-coloured
bitmap, so it too is opaque. companion_core_folder_icon_path() gives
backends the asset's path.
Verified: companion_core.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean); consumers of
companion_core.h pass; companion_parity.py green. Not run here.
* ui/companion: shared thumbnail engine for every companion, with a regression test
Thumbnails in the Win32 grid only appeared for entries that were
clicked. Reading the Qt companion's pipeline end to end
(ThumbnailLoader, PlaylistModel::loadThumbnail, MainWindow::
updateVisibleItems, GridView::visibleIndexes) gives the model and, by
contrast, the bug:
Qt requests decodes for the rows its grid reports as visible, on a
50 ms scroll debounce, and never for anything else. Win32 requested
from LVN_GETDISPINFO - and comctl32 sends that for every item of a
virtual icon view while laying it out, so a 42k-entry list flooded
the 512-job queue, the oldest (the visible top) were dropped, the
workers decoded the bottom of the list, and a visible row was only
requested again when something repainted it: a click.
Rather than patch that in place, the whole pipeline moves into the
core as one engine every companion uses, ui/companion/companion_thumbs:
- cache of decoded, already-scaled thumbnails keyed by (path, edge),
byte budget (64 MiB default) with LRU eviction; survives switching
playlists, so a revisit draws with no decode (Qt's QCache behaviour)
- decode thread pool (cores - 1, 1..4; Qt has one), scaling on the
worker so the UI thread only ever copies finished pixels; a budgeted
UI-thread fallback without HAVE_THREADS
- two-lane request queue: urgent jobs newest-first (the rows on
screen, topmost first), then a prefetch lane oldest-first; keys are
de-duplicated against the cache and the queues
- cancel() empties the queues and keeps the cache; results in flight
still land and are cached; delivery carries the backend's tag, which
encodes its own row generation, so a stale result is dropped by the
backend, never blitted into the wrong list
- pixels are opaque ARGB8888: Windows' DIB order, a byte swap for Cocoa
Both natives now drive it the way Qt drives its loader:
Win32: each frame, the rows on screen are found from the list view's
own item rects (monotonic in row order, so a binary search), requested
urgently topmost-first, a screen either side prefetched; finished
pixels go into a recycled image-list slot ring; LVN_GETDISPINFO only
reads a row's slot. The local thread pool, hash table and rings are
gone.
Cocoa: the grid reports its visible rows from its visibleRect; the
same request / prefetch / poll cycle runs from iconTick; finished
pixels become an NSImage through an NSBitmapImageRep. The per-frame
synchronous NSImage load is gone.
Regression test: ui/companion/test/companion_thumbs_test.c, run by
tools/companion_thumbs_test.sh plain, under ThreadSanitizer and under
ASan+UBSan, against the real decoder (image_texture_load) with TGA
fixtures it writes itself. It checks a decode lands with the right
scaled / letterboxed pixels, cache hits without decode, LRU eviction
under budget, cancel keeping the cache and allowing re-requests, an
undecodable file delivered as NULL and forgotten, 300 keys over four
threads delivered exactly once, and free() with work in flight. The
engine is also compiled once as C89 (-ansi -pedantic, no threads).
Wired into Linux-libretro-common-tests.yml beside the parity check.
The test found one engine bug before it ever reached a backend
(re-request of a key whose decode was in flight across cancel()).
Verified: the test passes plain, TSan and ASan; companion_thumbs.c,
ui_win32_companion.c and the consumers of companion_thumbs.h pass
tools/mingw_syntax_check.sh (also with HAVE_THREADS off); full Qt 6
retroarch builds with the engine in and starts headless;
companion_parity.py green; apple_mrc_ownership_check.py unchanged.
Not run on Windows / macOS here.
* ui/companion: boxart panes on the engine; Cocoa two-pane browser; engine takes w x h
Follow-ups to the shared thumbnail engine, so both natives are on it
for everything and nothing decodes on a UI thread any more:
- The engine keys and scales by (path, w, h) rather than a square
edge, so the boxart pane can ask for its own rectangle and get an
aspect-fit, letterboxed image instead of a square. Grid cells pass
edge x edge. The test gains a rectangular case (20x80 into 60x30:
centre column image, corners letterbox).
- Boxart panes (Win32 and Cocoa) come from the engine: cached at once,
otherwise an urgent request tagged with the entry and a boxart bit,
delivered through the same per-frame poll, which now also runs in
list view so the pane fills in there too. The pane is cleared while
it waits, so a stale cover never sits under a new selection. Both
panes decoded synchronously per click before; Cocoa's per-frame
NSImage loader (cc_thumb_image) is gone.
- Cocoa File Browser is now two-pane like Qt's and Win32's: the left
table shows the folders (companion_core_browse_dir_count, ".." first,
XMB folder.png or the Finder folder) and the content table the files;
double-click a folder to descend, a file loads; leaving the tab or
picking a playlist restores the playlist pane. The row map serves the
browser too, so run / boxart / popup resolve files correctly.
- companion_parity.py requires the engine's request and poll calls and
the folder/file split on every backend (Qt waived: its own
ThumbnailLoader / QFileSystemModel), so a backend cannot quietly go
back to synchronous loading. 22 features, all three agree.
Verified: companion_thumbs_test.sh plain, TSan and ASan pass (ASan
caught a test-side index bug in the new rectangular case, fixed);
companion_thumbs.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (also with HAVE_THREADS off); consumers of
companion_thumbs.h pass; full Qt 6 retroarch builds and starts
headless; apple_mrc_ownership_check.py unchanged. Not run on Windows /
macOS here.
* ui: Qt on the shared thumbnail engine; Win32 / Cocoa file browser like Qt's
Qt joins the engine, so all three companions decode through one path:
- PlaylistModel drops ThumbnailLoader (its own QThread) and the QCache
of full-size pixmaps; it owns a companion_thumbs instance instead.
loadThumbnail() requests at the grid's cell size (fed from the zoom
slider), data(THUMBNAIL) converts the engine's pixels to a QPixmap
once per (path, size) into a small conversion cache, and a 16 ms
timer polls while anything is pending; thumbnailReady(path) is
emitted for the row's dataChanged and for other consumers. The
thumbnail-cache-limit setting becomes the engine's byte budget.
- The sidebar's four thumbnail widgets and the file-browser image
preview go through the same engine (imageAt / requestImage at the
widget's size), replacing the second loader thread and two
synchronous full-size decodes on the UI thread. ThumbnailLoader and
pixmapFromPathRA are gone; the previewLoader / m_thumbnailPixmaps
state with them.
- The engine gains set_budget(), forget(path) (a downloaded thumbnail
replaces its cached sizes) and pending() (queued + decoding + not
yet polled, so a poll timer never stops early). All three are in the
regression test.
The File Browser on Win32 now matches Qt's (screenshots side by side):
drive entries named "<label> (C:)" from GetVolumeInformation (the core
does it, so Cocoa would too); Up / Start Directory / Downloads buttons
under the tabs (Qt's toolbar); the content view is the folder's whole
listing as a table with Name / Size / Type / Date Modified, drawn with
the shell's own small image list so drives, folders and file types
have Explorer's icons (system image list: nothing of ours to
composite); size and date from FindFirstFile (Windows 95); the browser
is always a table like Qt's, and the playlist view type returns on
leaving. The boxart pane is cleared in the browser - Qt shows none for
a file selection - which the screenshot showed still holding the
previous playlist entry's cover. companion_core_browse_up() is the
"Up" action for any backend.
Cocoa gets the same: the three buttons, the whole listing with a Type
column, boxart cleared, Up / Start / Downloads.
companion_parity.py: Qt's engine waiver is gone - all three backends
reference the engine's request and poll for real.
Verified: companion_thumbs_test.sh plain, TSan, ASan pass with the
new cases; companion_core.c, ui_win32_companion.c and the consumers of
companion_core.h / companion_thumbs.h pass tools/mingw_syntax_check.sh;
full Qt 6 retroarch builds with the model on the engine and starts
headless with the qt companion; companion_parity.py green;
apple_mrc_ownership_check.py unchanged. Not run on Windows / macOS.
* ui/companion: regression test for the companion core; two bugs it found
A second regression test, this one for the toolkit-free model every
desktop companion drives (companion_core.c). It links the real core
and playlist.c against libretro-common with RetroArch's state replaced
by fixtures (companion_core_stubs.c: settings, runloop, path slots, an
empty core-info world, recording stand-ins for the load / scan tasks),
writes real .lpl files, and checks:
- the playlist listing: All Playlists first with the token path, the
configured specials next, then the files in order, with their paths
- selecting a playlist through the budgeted iterate and reading its
entries; each row's own file and index within it
- All Playlists: every file merged, sorted by label case-
insensitively, rows mapped back to their file and index
- the thumbnail path rule: the repository layout, label sanitising
(& * / : ` < > ? \ | -> _), the extension probe, the default path
for a missing file, image content as its own thumbnail
- the file browser: folders first with "..", the folder / file split,
descending, going up to the root, up refused at the root
- Run: a DETECT entry with nothing loaded asks for a core with its
path; an entry with a core pushes the load task with that core
- launch options: the entry's own core is offered, nothing duplicated
Run by tools/companion_core_test.sh, plain and under ASan+UBSan; wired
into Linux-libretro-common-tests.yml. On its first run it found two
bugs in the browser that no screenshot had shown:
- a use-after-free when descending into a folder: browse_open() was
handed a pointer into the current listing, freed that listing, then
copied the path from it. The path is copied before anything is
freed.
- "Up" could never reach the root on Unix: path_parent_dir() turns "/"
into "", which browse_open() took as "use the default directory", so
going up from the content directory looped back into it. The parent
step now maps "" to "/" and keeps browse_dir canonical (no trailing
separator below the root), so it compares and terminates.
tools/mingw_syntax_check.sh --consumers-of skips */test/ harnesses:
they are Linux-only by design and have their own scripts.
Verified: companion_core_test.sh plain and ASan pass;
companion_thumbs_test.sh passes; companion_core.c passes
tools/mingw_syntax_check.sh (mingw -Wall -Wextra + linux c89 pedantic)
and its consumers pass; companion_parity.py green.
* ui: abortable decodes (no exit hang), browser previews, no disk I/O on paint
Three reports: a thumbnail preview in the File Browser can take a very
long time to show, RetroArch can still hang on exit, and the Win32 /
Cocoa companions never preview in the browser at all. Traced, and the
traversal audited while at it:
Directory traversal is not the problem: dir_list_new gets each entry's
type from the enumeration itself (FindFirstFile attributes on Windows,
d_type elsewhere) - no per-file stat. The bottlenecks were these:
1. A decode could not be interrupted. image_texture_load runs both of
its stages incrementally (one chunk / one pass per step) but never
looked up between steps, so a worker decoding a large image ran to
completion whatever happened. On exit, free() joined that worker:
the hang. In the browser, clicking through large images queued
full decodes behind each other on the worker.
libretro-common gains image_texture_load_ex() with an abort hook
asked between chunks and between passes (image_texture_load is now
that with no hook). The engine's workers decode through it and
abort when the engine is shutting down or when their job's epoch is
stale - i.e. a cancel() happened since it was queued. Aborted jobs
are not delivered and their entries are dropped, so a later request
decodes again. Two new tests: cancel() during 8 x 16 MiB decodes
lets the re-requested key land first; free() with the same in
flight returns in well under a second.
2. Win32 did disk I/O while painting the browser table: FindFirstFile
per row per sub-item on every repaint, and SHGetFileInfo hitting
the shell and disk for every directory. Metadata (size, date, icon)
is now resolved once per row - one FindFirstFile, and the icon by
attributes alone (SHGFI_USEFILEATTRIBUTES; a drive keeps its real
icon) - and paints read the cache.
3. Qt's QFileSystemModel asks the shell for every folder's own icon
(a disk lookup per folder) and starts a QFileSystemWatcher on every
directory it has shown. Both are off now
(DontUseCustomDirectoryIcons, DontWatchForChanges): the generic
folder icon is what the natives show too, and the table is rebuilt
on navigation. Selecting an image in Qt's browser abandons the
decode of the previous one (abandonPending -> engine cancel).
4. Previews in the natives: Qt previews an image file selected in the
browser in its sidebar; Win32 and Cocoa cleared the pane in browse
mode. Both now show the selected image file through the engine
(cw_boxart_update_path / refreshBoxart's browse branch), cleared for
non-images. Since abandoned decodes leave grid rows marked
"requested", both natives re-ask for empty on-screen cells when the
engine goes idle.
Verified: companion_thumbs_test.sh plain, TSan and ASan pass with the
abort tests; companion_core_test.sh passes; image_texture.c and its
consumers, ui_win32_companion.c pass tools/mingw_syntax_check.sh;
full Qt 6 retroarch builds and starts headless; companion_parity.py
green; apple_mrc_ownership_check.py unchanged. Not run on Windows /
macOS.
* ui/companion: directory listings enumerate off the UI thread, for every backend
Going up into a large directory froze the Qt companion's File Browser
for seconds; the natives enumerated on the UI thread too. Nothing in
the browser may block, so the listing moves into the core as one
asynchronous, shared implementation, and each backend only paints it:
- companion_core_browse_open() now enumerates on a worker (rthreads;
synchronous fallback without HAVE_THREADS): dir_list_new, the
folders-first sort, and one stat per entry for size and mtime - all
off the UI thread. The result lands in companion_core_iterate() and
the new on_browse_changed callback fires (added last in the callback
table, so existing positional tables stay valid). The previous
listing stays readable until then. A newer open supersedes the one
running: it stops between entries, its result is discarded, and no
second thread is ever spawned alongside it. browse_busy() says when
"Loading..." applies.
- Size / Type / Date Modified are formatted by the core
(browse_size_str / _type_str / _date_str) from what it gathered, so
the three backends show the same strings and none of them touches
the disk to paint. The Win32 FindFirstFile-per-row cache is gone;
only the shell icon index stays local (by attributes, no lookup).
Qt: the file table drops QFileSystemModel + the sort/filter proxy.
That pair was the stall: the model kept every visited directory
loaded, the gatherer inserted rows in batches with the proxy
re-filtering and re-sorting on each one (O(n^2/100) on the UI
thread), and header sorting re-sorted the whole directory on every
navigation. BrowseTableModel paints the core's listing (Name / Size /
Type / Date, three stock icons resolved once, the search filter as a
row map) and resets when the listing lands. The directory tree keeps
QFileSystemModel (folders only) with its watcher and custom icons off.
Win32 / Cocoa: open / up / descend show "Loading..." and rebuild when
the listing lands, instead of right after open() (which would show the
old listing now).
companion_core_test covers the async path: the listing lands through
iterate(), busy() clears, size / type / date strings, supersession
(open A then B: only B delivers, once), Up to the root; run plain,
ASan and now TSan. companion_parity.py requires on_browse_changed on
every backend (Qt's two-pane waiver becomes its BrowseTableModel).
Verified: companion_core_test.sh plain / ASan / TSan and
companion_thumbs_test.sh pass; companion_core.c, ui_win32_companion.c
and the consumers of companion_core.h pass tools/mingw_syntax_check.sh;
full Qt 6 retroarch builds and starts headless; companion_parity.py
green; apple_mrc_ownership_check.py unchanged. Not run on Windows /
macOS.
* ui/drivers: clear the boxart pane the moment the File Browser is entered
Switching to the File Browser tab still left the previous playlist
entry's cover in the boxart pane on Win32. Two reasons:
- the clear had moved to the listing's landing (cw_browse_rebuild),
which is now asynchronous; until then the old cover stayed
- a static control does not repaint on STM_SETIMAGE with NULL: it
keeps drawing the image it had until something invalidates it, so
even once the clear ran, the cover remained on screen
Now cw_browse_enter clears the pane at once (and resets the core popup
and Core Info to the no-entry state, as Qt shows for the browser), and
the clear invalidates the control. Cocoa does the same on entry
(refreshBoxart sets nil, popup and info reset) so both natives match.
Verified: ui_win32_companion.c passes tools/mingw_syntax_check.sh
(mingw -Wall -Wextra clean); companion_parity.py green;
apple_mrc_ownership_check.py unchanged. Not run on Windows / macOS.
* ui/companion: header-click sorting in the file browser, once, for every backend
Clicking Name / Size / Type / Date Modified in the browser did nothing
(Win32, Cocoa) or nothing useful (Qt: the core-backed table had sorting
off). The sort lives in the core, so the three companions order the
listing identically:
- companion_core_browse_sort(column, ascending): folders always first
(".." first of all), then the files by name (case-insensitive), size,
type (extension) or modification time, ties broken by name. One qsort
over the already gathered arrays - no I/O. It applies to the current
listing at once (on_browse_changed fires) and is remembered, so every
listing that lands afterwards comes in the chosen order.
- Qt: BrowseTableModel::sort() forwards the header click; sorting is
on again, with the indicator on Name.
- Win32: LVN_COLUMNCLICK forwards it; the same column again flips the
direction, a new one starts ascending, as Qt's header does.
- Cocoa: the entries table gets sort descriptor prototypes (Name / Type
/ Size / Date; the Size and Date columns show only under the
browser) and sortDescriptorsDidChange: forwards them.
companion_core_test covers each column both ways, the folders-first
invariant, tie-breaking by name, and the order persisting across a
re-enumeration. companion_parity.py requires the sort call on every
backend (24 features).
Verified: companion_core_test.sh plain and ASan pass; companion_core.c,
ui_win32_companion.c and the consumers of companion_core.h pass
tools/mingw_syntax_check.sh; full Qt 6 retroarch builds and starts
headless; companion_parity.py green; apple_mrc_ownership_check.py
unchanged. Not run on Windows / macOS.
* ui/companion: fix the crash on the drive list after a sort; scenario regression tests
Clicking a drive in the File Browser crashed on Windows once the
browser had been sorted by Date (or Size). The drive-list branch of the
listing worker returned without allocating the size / mtime arrays
(only the Windows path did that), and the sort comparator indexed
mtime[] for the Date column unconditionally: NULL dereference in
companion_core_browse_cmp the moment the drive list landed and the
remembered sort was applied to it.
Both ends fixed: the drive list now goes through the same metadata
allocation as every other listing (a drive root is simply not stat'ed),
so there is one job path; and the comparator never indexes an array it
does not have.
Tests, in the shape that catches this class before it reaches a
Windows box:
- test_sort_without_metadata builds the drive-list shape directly (a
folders-only listing with no metadata arrays, via a COMPANION_CORE_
TESTING hook) and sorts it by every column both ways. On the old
comparator this SEGVs under ASan at the exact line; on the fix it
passes - verified both ways.
- test_sort_then_folders_only runs the real job path: every sort
setting, then open a folders-only directory, then sort the landed
listing by every column again.
- test_backend_scenario replays the click sequences the backends send
to the core in a user's order: enter the browser, click every header
both ways, select every row (name / path / size / type / date /
is-dir, as the panes and tables resolve them), descend, activate a
file, Up, Start Directory, rapid navigation without waiting, sort
again, back to a playlist. Any fault on the core side of any
companion trips it. Runs plain, ASan and TSan.
Verified: companion_core_test.sh plain / ASan / TSan pass;
companion_core.c passes tools/mingw_syntax_check.sh (mingw -Wall
-Wextra + linux c89 pedantic) and builds; companion_parity.py green.
* ui/companion: stop the reset -> sort -> changed -> reset recursion (Qt stack overflow)
Clicking a drive in the Qt File Browser blew the stack: the backtrace
is ui_companion_qt_core_on_browse_changed -> Qt -> the same, twelve
thousand frames deep. The loop:
the listing lands -> onBrowseChanged -> the model resets ->
QTableView re-applies its header sort on a reset -> model sort() ->
companion_core_browse_sort() -> on_browse_changed -> ...
companion_core_browse_sort() fired the callback even when the requested
order was the one already in place, so a view that re-applies its sort
on "changed" - which Qt's table does on every model reset - never
converged.
Fixed once in the core: a sort that changes nothing does nothing and
fires nothing. The Qt model's sort() is idempotent too, and
onBrowseChanged has a re-entrancy guard. companion_core_set_ud() is
added (a backend can create the core before the object its callbacks
act on).
Regression test: test_sort_callback_reentrancy registers a listener
that does what Qt's table does - re-applies the current sort on every
"changed" - with a depth counter that stops it at 3, so a loop is
reported rather than crashed in. On the previous core it reports depth
4 in every case; on this one, one callback per real change and none
for a repeat. Verified both ways.
Verified: companion_core_test.sh plain / ASan / TSan pass;
companion_core.c and the consumers of companion_core.h pass
tools/mingw_syntax_check.sh; full Qt 6 retroarch builds and starts
headless; companion_parity.py green.
* ui: browser header clicks sort, and stay sorted, on Qt / Win32; Date and Type proven
Header clicks in the Qt browser appeared to do nothing: every column
sorted the same. The core sorted correctly; the Qt window then undid
it. onBrowseChanged() restored the header state saved before the last
navigation - and that state carries a sort indicator (Name ascending),
so after each click's reload the view snapped its indicator back to
Name and re-sorted by it. Now the saved state (column widths) is
restored once, after a navigation, and the indicator is always set from
the core's actual order (signals blocked, so it never re-sorts by
itself).
Win32: the clicked column shows a sort arrow (HDF_SORTUP / SORTDOWN;
ignored by older comctl32), and a rebuild no longer resets the column
widths the user set (the browser rebuilds on every landing and every
sort). Cocoa's descriptor path re-read and left as is: it already
forwards the clicked column and direction.
The core test now proves each column orders differently, not just
Name and Size: Date with explicit, distinct mtimes (newest first
descending, oldest first ascending), Type across six extensions
(grouped and ordered by extension, names within a group, reversed when
descending), and an explicit check that the four sorts produce four
different first files.
Verified: companion_core_test.sh plain / ASan / TSan pass;
ui_win32_companion.c passes tools/mingw_syntax_check.sh; full Qt 6
retroarch builds and starts headless; companion_parity.py green;
apple_mrc_ownership_check.py unchanged. Not clicked on Windows / macOS.
* ui/drivers: browser header shows the sort direction on Win32 without comctl32 v6
The Win32 companion showed no arrow on the sorted column: it used
HDF_SORTUP / HDF_SORTDOWN, which only a themed (v6) comctl32 draws, and
this build carries no common-controls v6 manifest - the header is the
classic one, which ignores those bits.
The classic header shows a picture instead: the sorted column now gets
HDF_IMAGE with an image on the right of its caption, from a two-entry
image list (up, down) drawn with GDI on the button colour at creation.
The v6 bits are still set for a themed header, so either kind shows
the direction; leaving the browser clears the arrow off the playlist
columns. Qt explicitly turns its header's indicator on.
Verified: ui_win32_companion.c passes tools/mingw_syntax_check.sh
(mingw -Wall -Wextra clean); full Qt 6 retroarch builds;
companion_parity.py green. Not run on Windows.
* ui/drivers: Qt and Cocoa browser headers follow the core's sort like Win32's
One rule for the browser header on all three companions: a new column
starts ascending, the same column again flips, and the header's
highlighted column and arrow always show the order the core's listing
is actually in - whether it came from a click on this backend or was
remembered from before (a re-opened directory lands already sorted).
Cocoa: after every reload the table's sort descriptors, highlighted
column and indicator image are set from the core (syncSortIndicator;
the programmatic set is flagged so sortDescriptorsDidChange: does not
treat it as a click). Leaving the browser clears the highlight and
arrows off the playlist table. Qt: the initial indicator is taken from
the core rather than hard-coded to Name ascending; the per-landing sync
was already in place. Win32 already did both.
Verified: full Qt 6 retroarch builds; companion_parity.py green;
apple_mrc_ownership_check.py reports one new local autoreleased object
(the descriptor, retained by setSortDescriptors: within the call).
Not run on macOS.
* ui/drivers: Win32 browser header showed a document, not the sort arrow
A report-view list view hands its small image list to its header when
LVM_SETIMAGELIST(LVSIL_SMALL) is sent, replacing whatever the header
had. cw_browse_rebuild set the header's arrow image list first and the
rows' shell image list after, so the header's image 0 / 1 became the
shell's first two icons - a document. The arrow image list is now set
after the rows' one, every rebuild.
Verified: tools/mingw_syntax_check.sh (mingw -Wall -Wextra clean). Not
run on Windows.
* ui/companion: thumbnail engine use-after-free on a doubly-recorded key; test races
CI's TSan run of companion_thumbs_test failed at "re-requested decoded"
while the plain run passed. Two test defects and one engine bug behind
it:
- The waits were counting deliveries, not the delivery they meant. A
job popped before a cancel() still lands with its old epoch; with one
worker that stale delivery satisfied drain(1) before the re-requested
key had landed, and the following get() saw nothing. TSan's
scheduling made it hit. The tests now wait for the specific tag
(drain_tag) wherever a re-request is checked.
- strdup was implicitly declared under the script's -ansi pass (the
warning in the log); on a 64-bit host an implicit int return would
truncate the pointer. Replaced with strldup(path, strlen(path) + 1) -
and note the + 1: strldup(s, n) copies n - 1 characters, strlcpy
style. My first attempt passed strlen(path) and silently truncated
every path by one character, which made every decode fail and, with
the next point, exposed the engine bug.
- Engine: an entry could be freed while another finished record still
pointed at it. A failed decode's record freed the entry in poll()
("undecodable: forget it"); a second record for the same key - a job
taken before a cancel() and a re-request after it - then dereferenced
it (ct_find walked a freed chain link). Entries are now reference-
counted by the jobs and records that point at them (request +1, ring
drop / cancel pop / polled record -1) and freed only at zero.
Regression test: test_double_failure_no_uaf builds that shape twenty
times (request an undecodable file, cancel, request again, poll, look
it up). On the branch-tip engine it is a heap-use-after-free under
ASan five runs out of five; on this engine it passes, plain, TSan and
ASan, repeatedly.
Verified: companion_thumbs_test.sh plain / TSan / ASan pass (ASan x5);
companion_core_test.sh passes; companion_thumbs.c passes
tools/mingw_syntax_check.sh (mingw -Wall -Wextra + c89 pedantic) and
builds.
* ui/companion: animated previews (APNG, WEBP, WEBM, MP4) in every companion's pane
The File Browser preview showed only the first frame of an animated
file. RetroArch's own File Browser (gfx_thumbnail) plays the selected
thumbnail through libretro-common's animation stream API -
image_transfer_anim_stream_* over APNG (rpng_apng), animated WEBP, WEBM
and MP4, frames on the container's clock, no audio. The companions now
do the same, through the shared engine, once for all three:
- companion_thumbs_animate(path, w, h, tag, bg): one animation at a
time (the selected file). Its own thread reads the file, probes it
the way gfx_thumbnail does (a cheap type gate, then rpng_is_apng_ex
over the head of the buffer for PNG - an ordinary PNG costs one
4 KiB probe and nothing else), opens the stream, and loops: next
frame (honouring the loop count, rewinding at the end of a pass),
ARGB from the stream where it can supply it or a swizzle where it
cannot, scaled and letterboxed exactly like a still, pushed as a
delivery for (path, w x h, tag), then sleeps the frame's duration.
A still produces nothing. animate_stop(), a newer animate(), or
free() ends it within one frame duration; frames of a superseded
animation are dropped at poll. Files over 256 MiB are not animated.
Frames land through companion_thumbs_poll like any other delivery,
so a backend's existing "blit these bits into the pane" path draws
them; pending() and animating() keep its polling alive.
- Win32 / Cocoa: the boxart pane starts the animation for the selected
file after showing its still, and stops it when the selection moves.
Qt: the sidebar's four widgets play frames for a browser selection
(frameReady from the model, QT_TAG_ANIM_FRAME deliveries), stopped on
the next selection. Any previous animation stops first.
Regression test: test_animation writes a two-frame APNG by hand (IHDR,
acTL, fcTL, IDAT, fdAT - zlib + CRC), checks it decodes as a still
(frame 0, red), then that animate() delivers at least six frames in
four seconds with both colours seen, that animating() reports it, that
stop() ends it, that a still animates nothing, and that free() with an
animation running returns. Plain, TSan and ASan. The script's C89 pass
gains _GNU_SOURCE (as the real C89 gate has) for the POSIX types
libretro-common's headers use, and HAVE_RPNG for the APNG probe.
companion_parity.py requires the animate call on every backend (25
features).
Verified: companion_thumbs_test.sh plain / TSan / ASan and
companion_core_test.sh pass; companion_thumbs.c, ui_win32_companion.c
and the consumers of companion_thumbs.h pass tools/mingw_syntax_check.sh;
full Qt 6 retroarch builds and starts headless; companion_parity.py
green; apple_mrc_ownership_check.py unchanged. Not run on Windows /
macOS.
* ui/drivers: remove stale companion_preview references from the Win32 companion
The animated-previews commit left the Win32 companion with an include
of, and calls into, a companion_preview module from a direction I had
abandoned in the same session (the Qt and Cocoa files had been reset;
this one had not). The header does not exist: the Windows build failed
at the include. All of it is gone; the pane's animation goes through
companion_thumbs_animate like the other two backends.
The syntax gate should have caught it and did not: it forgave every
"No such file" error so that optional platform headers this box lacks
(d3dkmthk.h) do not fail unrelated files - which also forgave a missing
project header. It now forgives only a missing header named without a
path; one with a path component (../companion/x.h) fails the gate.
Probed both ways.
Verified: ui_win32_companion.c compiles to an object with mingw
(-Wall -Wextra, no warnings), and passes the fixed gate along with
companion_thumbs.c, companion_core.c and the 15 consumers of
ui_companion_driver.h; companion_parity.py green.
* gfx: share the File Browser's animated preview with the companions (gfx_anim_preview)
The companions' previews of an animated file were slow to start and
silent, while RetroArch's own File Browser thumbnail plays the same
file at once and with sound. The reason was that the companion engine
had its own playback path: read the whole file, open the stream, no
audio. The menu's path (gfx_thumbnail.c) does it right - a sliding-
window progressive open so frames start from the first resident bytes
and a tail-moov MP4 opens from a few MiB, memory admission that scales
with the heap, the container's audio track through the mixer over its
own window - so that is what everyone uses now.
gfx/gfx_anim_preview.{c,h}: the session that machinery becomes, moved
out of gfx_thumbnail.c with its reasoning comments - open (type gate,
APNG head probe, windowed progressive open with the moov-island jump
and the media-floor prime, admission), feed (keep the window
straddling the decoder's frontier under the per-tick I/O budget and
raise the demuxer's bound to what is resident), next / rewind with
the container's duration rules, and the preview audio (the second
window, moov head sizing, mixer stream, its feeder, stop). Nothing in
it knows about a thumbnail, a video driver or a toolkit.
gfx_thumbnail.c keeps its threaded upload path and now drives the
open, both feeders and the audio through a session it wraps around the
stream and mapping it owns (gfx_anim_preview_wrap / _release, non-
owning); ~430 lines of inline copies are gone. Both of its sample
suites pass on the result: gfx_thumbnail_anim (plain, ASan+UBSan,
TSan sweep) and gfx_thumbnail_preview (make check: windowed opens over
sparse tail-moov fixtures, audio-window islands, decode budgets).
The companion engine's animation thread is that session too: open,
feed, next, rewind, close; the UI thread starts the preview audio once
the session is published and feeds its window every poll (mixer calls
stay on the UI thread), stop() silences at once. A video's still is
now its first frame through the same windowed open instead of
image_texture_load reading the whole file - the other half of the
startup latency. So the companions get the menu's startup time and its
sound (honouring menu_thumbnail_preview_audio) from the same code.
One bug found by the engine test while doing this, in the shared code:
image_transfer_anim_stream_set_argb is honoured only before the first
frame, and APNG reports false to a repeat request afterwards although
the order stands. Asking per frame and trusting the answer swapped R
and B from the second frame on (a blue-tinted preview after the first
loop). The session decides the order once at open and remembers it.
The animation test now checks every frame is one of the fixture's two
colours over ten frames, which is what caught it.
Verified: companion_thumbs_test.sh plain / TSan / ASan pass (the module
linked in); companion_core_test.sh passes; both gfx_thumbnail sample
suites pass; gfx_anim_preview.c, gfx_thumbnail.c, companion_thumbs.c,
ui_win32_companion.c and the consumers of gfx_thumbnail.h pass
tools/mingw_syntax_check.sh; full Qt 6 retroarch builds and starts
headless; companion_parity.py green; apple_mrc_ownership_check.py
unchanged. Xcode and MSVC build through griffin, which includes the
new file. Not run on Windows / macOS.
* ui/companion: per-frame preview cost - fold the byte swap into the sampler, 4-tap downscale, no GDI churn
Measured per frame at pane size (320 x 400), -O2:
nearest full-canvas swizzle folded swizzle 4-tap (+swizzle)
3840x2160 source 0.35 ms 11.8 ms 0.22 ms 0.98 ms
1920x1080 0.13 ms 1.5 ms 0.16 ms 0.91 ms
640x480 0.09 ms 0.29 ms 0.12 ms 0.93 ms
So the scale to pane size was never the cost. What was: for a stream
that will not emit ARGB words (animated WEBP), the whole canvas was
byte-swapped into a fresh malloc before sampling - 12 ms a frame at
4K, a third of a 30 fps budget - to feed a sampler that reads a few
hundred thousand of those pixels. companion_thumbs_scale_ex takes the
source order as a flag and swaps the sampled pixels only: 0.2 ms, no
allocation. The animation thread and the video-still path use it.
(Handing the raw canvas to the toolkit and letting it scale would be
worse, not better: every toolkit here would copy the full canvas into
its own image per frame - 33 MB at 4K - and scale on the CPU anyway.)
Quality, the actual weakness: nearest-neighbour downscaling a video to
a pane aliases and shimmers on motion. When shrinking by two or more
in both directions the sampler now averages four taps per output
pixel, placed a third in from each edge of the source cell so they
always fall on rows and columns of different parity (a 1-px
checkerboard, the worst case, averages to grey instead of picking one
colour - the test caught the quarter-point placement getting that
wrong). Under 1 ms at any source size. Enlarging stays nearest.
UI-thread side, per frame: Win32 created and destroyed a DIB section
and re-set the static control's image every frame; it now keeps one
DIB for the pane, copies the frame into its pixels (after GdiFlush)
and invalidates. Cocoa allocated an NSBitmapImageRep and an NSImage
per frame; it keeps one rep and writes into its bitmapData. Qt did
img.copy() before QPixmap::fromImage(), which copies again; the copy
is gone.
test_scaler covers the R,G,B,A-order path (red in, ARGB red out; the
same words read as ARGB are blue), the 4-tap average on a checkerboard
and nearest on enlargement.
Verified: companion_thumbs_test.sh plain / TSan / ASan pass;
companion_thumbs.c and ui_win32_companion.c pass
tools/mingw_syntax_check.sh (the Win32 TU also compiled to an object
with mingw, no warnings); consumers of companion_thumbs.h pass; full
Qt 6 retroarch builds and starts headless; companion_parity.py green;
apple_mrc_ownership_check.py unchanged. Not run on Windows / macOS.
* ui/drivers: Cocoa - folders pane under the File Browser tab, grid layout on attach, focus back on close
Three reports from running the Cocoa companion:
- The File Browser was empty. The playlists table was tab item 0's
view, and tab item 1 (File Browser) had no view at all, so selecting
that tab showed an empty pane and hid the very table that lists the
folders in browse mode. The tab view is now only the strip; the table
sits under it in both modes and layoutViews places it.
- The grid view showed nothing. RACompanionGrid computed its column
count from its own bounds, which are zero until its first relayout
inside the scroll view, and it only relaid out when explicitly told
to; a zero-width layout stayed. It now takes the width from the clip
view when it has one and relays out on viewDidMoveToSuperview, so
becoming the document view lays it out on its own.
- Closing the companion (or loading content from it) left the keyboard
with no window: RetroArch's window is now made key when the companion
hides, on every path that hides it (close button, entry run, load
with the popup's core, load through the core picker).
Verified: static checks (bracket balance by character scan, every
selector sent to self declared and implemented,
apple_mrc_ownership_check.py unchanged); companion_parity.py green.
Not compiled here (no Apple toolchain): the Xcode CI build is the gate.
* ui/drivers: Cocoa - keyboard back to RetroArch's real window; grid paints visible rows; diagnostics
Focus. Closing the companion still left RetroArch without keyboard
control. hideAndFocusRetroArch made key the window of [CocoaView get]
- but on a Metal build the render view is not a CocoaView and that
object sits in no window, so the call went to nil. It now asks the
platform: the window hosting the render view (RetroArch_OSX
-hostWindow), activates the app, makes that window key and makes the
render view its first responder - without which key events reach the
window and nothing in it.
Grid. drawRect walked every entry of the list on every paint (42k
rectForRow calls per repaint); it now paints only the rows the dirty
rect covers. And, since the grid still shows nothing on a real Mac and
I have no Mac, it logs its first paint - count, frame, dirty rect,
thumbnail edge, columns, owner and wimp pointers - so a --verbose run
says which of those is wrong.
Folder pane. Names are missing while icons show; the data-source path
reads correctly, so it logs the first name it hands the table and
whether it is valid UTF-8 (a non-UTF-8 name makes stringWithUTF8String
return nil, i.e. an empty cell).
Verified: static checks (bracket balance, MRC lint unchanged);
companion_parity.py green. Not compiled here: the Xcode CI build is
the gate, and the two log lines are what I need from the next run.
* ui/companion: Cocoa regression harness on Linux (GNUstep AppKit, headless); focus hand-back after AppKit's close
Until now the Cocoa companion had never been compiled, let alone run,
anywhere I could observe; every change to it was made blind and judged
by static checks. GNUstep provides a real Foundation + AppKit on
Linux, so it can be:
tools/companion_cocoa_test.sh compiles the real
ui/drivers/ui_cocoa_companion.m against GNUstep's AppKit (Apple-only
headers - AvailabilityMacros.h, TargetConditionals.h, QuartzCore.h -
shimmed in GNUstep's own version scale), links it with the real
companion core, the core test's stubs and fixtures and a stub platform
(a window with a render view that takes first responder, as CocoaView
does), and runs it under Xvfb. companion_cocoa_test.m drives the
driver the way RetroArch and a user do - init, iterate until the
playlist lands, select Icons in the view popup, click the File Browser
tab, close the window through the delegate and through AppKit's own
performClose - and asserts on the AppKit objects: the grid is the
scroll view's document with a frame and the playlist's count and
paints; the folder table stays visible under the File Browser tab and
hands back names; the content table has the listing's rows; after
closing, RetroArch's window is key and main with the render view first
responder. Wired into CI beside the other two suites (apt-get in the
job).
What the harness found while being brought up: the core-test stub's
msg_hash returned one placeholder for every message, and a popup drops
a second item with the same title - the stub now returns a distinct
string per message; the driver's 10.4 open-panel branch calls
objc_msgSend, which the GNU runtime does not have (guarded, since that
runtime never lacks -URL).
What it did not reproduce, stated plainly: the grid and the focus
hand-back both pass under GNUstep on the previous driver too, so the
empty grid and the lost keyboard seen on a real Mac are AppKit-on-Mac
behaviour this harness does not model. For focus, the difference most
likely to matter is that AppKit re-arbitrates the key window as part of
closing the one that was key, after windowShouldClose: has returned -
so the hand-back (key, main, first responder on the render view) is
now repeated from windowWillClose: and once more on the next run-loop
pass, to win over that arbitration. The grid's first-paint log from
the previous patch remains the way to pin the grid.
Verified: companion_cocoa_test.sh passes; companion_core_test.sh
passes; companion_parity.py green; apple_mrc_ownership_check.py
unchanged. The Xcode CI build remains the Mac compile gate.
* tools: companion gap audit vs Qt; Cocoa harness action audit mode
Two audits, to answer "what does the Cocoa (and Win32) companion still
lack against Qt's":
- COMPANION_AUDIT=1 tools/companion_cocoa_test.sh: after the regression
checks, the harness fires every user action the Cocoa controller
implements (view switches, zoom, thumbnail and boxart types, the
three dock toggles, search focus / edit / clear, the browser's tab
and three buttons, folder double-click, core popup, picker Load /
Cancel) on the real AppKit objects under GNUstep and reports each as
implemented / missing and whether it ran. Actions that launch
content, open modal panels or delete are listed but not fired.
Result on this tip: every action implemented, none faults.
- tools/companion_gap_audit.py: a feature-by-feature table of what
Qt's window offers against evidence in the Cocoa and Win32 sources,
and the resulting gap lists.
Verified: companion_cocoa_test.sh passes (with and without the audit).
* ui/drivers: Qt parity wiring - Stop, Unload Core, Exit, About, Contributors, Load Custom Core, search Enter
From the gap audit, the items that are pure wiring of native widgets
to core calls Qt already uses:
Cocoa: a Stop button beside Run (companion_core_unload_core, like
Qt's), File > Unload Core and File > Exit RetroArch (CMD_EVENT_QUIT),
Help > About (version alert) and Help > About Contributors (the
AUTHORS list in a scrolling text window).
Win32: the same Stop button and Unload Core item; Help > About
Contributors (the list in a read-only edit); File > Load Custom Core
(a file picker for a core library, into companion_core_load_core);
and Enter in the search box runs the focused entry as Qt's
onSearchEnterPressed does (the EDIT is subclassed for the key).
AUTHORS.h is a C++11 raw string, which Qt can read and C / Objective-C
cannot: tools/gen_authors_c.py writes AUTHORS_c.h, the same list as a
plain C literal, and CI checks the two agree.
companion_parity.py now requires unload core, exit and the
contributors list on every backend (28 features). The gap audit's
Win32 patterns are corrected (Load Core, Exit and About were already
there; they were regex misses) - Cocoa's remaining gaps are 10 and
Win32's 8, all dialogs, drag-and-drop, rename, progress and theme.
The Cocoa harness checks the new wiring on a real AppKit: Stop reaches
the core (command_event observed by the stub), the contributors
window opens with the text, and the remaining selectors exist; its
audit mode lists them.
Verified: companion_cocoa_test.sh passes; ui_win32_companion.c
compiles to an object with mingw (no warnings) and passes
tools/mingw_syntax_check.sh; full Qt 6 retroarch builds;
companion_parity.py green; apple_mrc_ownership_check.py unchanged.
Not run on Windows / macOS.
* ui/companion: playlist rename, add files / file drop, thumbnail drop - in the core, on every backend
Three more of Qt's features, implemented once in the C89 core and bound
on both natives (Qt's rename now goes through the core too):
- companion_core_playlist_rename(): Qt's rules - only inside the
playlists directory (history / favorites refused), no path
separators, never over an existing name - then the move and a list
refresh.
- companion_core_playlist_add_files(): Qt's drop / "Add Files" for
paths - a file is pushed with label = name without extension and
db_name = the playlist, a directory is walked recursively, DETECT or
a given core; All Playlists refused; the shown playlist reloads.
- companion_core_thumbnail_install(): Qt's changeThumbnail for a
dropped image file - decoded, downscaled to
desktop_menu_thumbnail_max_size, written as PNG at the repository
path with the directory created.
Win32: Rename (in-place label edit on the playlist list, applied on
LVN_ENDLABELEDIT through the core), Add Files (multi-select picker),
WM_DROPFILES - an image over the boxart pane installs the thumbnail
of the pane's type, anything else goes into the selected playlist.
Cocoa: Rename (a sheet with a field), Add Files (open panel), file
drops on the entries table (data-source validate / accept) and an
image drop on the boxart pane (RACompanionBoxart). Both forget the
changed thumbnail in the engine and show it again.
Qt: renamePlaylistItem is the core's rename (72 lines -> 30); its Add
Files dialog (extension filter, names, core choice, progress) and its
QImage-based thumbnail drop stay, as waived in companion_parity.py.
Tests: companion_core_test covers the three (refusals, the move, the
list refresh; a file plus a walked directory with the label / db_name
/ DETECT of each entry; a PNG at the repository path downscaled to the
setting), plain and ASan. The Cocoa harness drives the controller: a
dropped file and directory add two entries, a dropped image installs
at the repository path, a rename shows in the reloaded table.
companion_parity.py: 31 features. The gap audit drops "status bar
progress": Qt's QProgressBar there is created, hidden and never driven.
Remaining gaps: the Core Options, Shader Params and Options dialogs,
and the dark theme on Cocoa.
Verified: companion_core_test.sh plain / ASan pass;
companion_cocoa_test.sh passes; ui_win32_companion.c compiles to an
object with mingw (no warnings) and passes tools/mingw_syntax_check.sh
with companion_core.c and the consumers of companion_core.h; full Qt 6
retroarch builds and starts headless; companion_parity.py green;
apple_mrc_ownership_check.py: one new local autoreleased object (the
rename field). Not run on Windows / macOS.
* ui/companion: Core Options, Shader Parameters and Options dialogs on both natives; Cocoa dark theme
The last of Qt's features the natives lacked, each as a flat table the
core exposes toolkit-free and a table window per backend:
- Core Options (companion_core_option_*): the running core's options
with description, info, value labels, current value; set, reset,
reset all - over runloop's core_option_manager, written when the
core flushes as the menu's are. Win32 / Cocoa: option | value,
double-click cycles, Reset / Reset All.
- Shader Parameters (companion_core_shader_param_*): the menu shader's
parameters with description (id when there is none), range, step,
current; set (clamped), reset to initial, apply
(CMD_EVENT_SHADERS_APPLY_CHANGES). Win32: parameter | value | range
with a field and Apply / Reset; Cocoa: the same with the Value column
editable in place.
- Options (companion_core_setting_*): the desktop-menu settings Qt's
View > Options edits, as typed rows (bool / uint / string / choice)
read and set from text with type checks. Win32: setting | value,
double-click toggles a bool or cycles a choice, a field and Apply
for the rest; Cocoa: editable Value column, double-click likewise.
- Cocoa dark theme: the Theme setting is honoured on 10.14+ by giving
the companion window the dark appearance (system default follows the
system).
Tests: companion_core_test builds a real core_option_manager from v2
definitions and a stub menu shader and checks every accessor, set /
reset / clamp / out-of-range, apply, and the settings table's read-back
and type refusals - plain and ASan. The Cocoa harness opens all three
windows on a real AppKit and drives them: rows and values, cycling and
reset, editing a shader value in the cell and applying, toggling a bool
and editing a number and the theme in the Options table.
companion_parity.py: 34 features (Qt's own three dialogs, which predate
the core, are waived with reasons). tools/companion_gap_audit.py now
reports zero gaps vs Qt for both Cocoa and Win32.
Verified: companion_core_test.sh plain / ASan pass;
companion_cocoa_test.sh passes; ui_win32_companion.c compiles to an
object with mingw (no warnings) and passes tools/mingw_syntax_check.sh
with companion_core.c and the consumers of companion_core.h; full Qt 6
retroarch builds and starts headless; companion_parity.py green;
apple_mrc_ownership_check.py: one more local autoreleased object. Not
run on Windows / macOS.
* ui/companion: Win32 regression harness on Linux (mingw + Wine, headless)
The Win32 companion gets the same net the Cocoa one has: the real
ui/drivers/ui_win32_companion.c, built with mingw and linked with the
real companion core, the core test's stubs and fixtures and a stub for
RetroArch's main window and modal helpers, runs under Wine on Xvfb
(tools/companion_win32_test.sh). Wine's comctl32 is not Microsoft's,
but the object graph, the messages and their side effects are the same
- which is where every Win32 bug so far has been.
companion_win32_test.c drives the driver as RetroArch and a user do -
init, iterate until the playlist lands, then the messages the widgets
send (the View combo's CBN_SELCHANGE and the menu's WM_COMMAND ids, the
tab's TCN_SELCHANGE, the header's LVN_COLUMNCLICK, list selections,
WM_CLOSE) - and checks the real controls: the playlist list's rows and
text; the entries list's count, its view style after switching to
Icons and back; the search filter and Clear; the File Browser - the
async listing landing, the folder pane's rows and "..", the content
list's rows and its four columns and the Type text, the empty boxart
pane, a header click sorting by Type and the same click flipping it,
Up and Start Directory; Stop reaching the core; the Core Options,
Shader Parameters and Options windows opening with the right rows,
value labels, a double-click cycling an option; the window hiding on
close. 33 checks, all green; with the browse-landed rebuild removed it
reports the four panes that go stale, so it catches the class of bug
it exists for.
The driver's control and menu ids move to ui_win32_companion_ids.h so
the harness sends exactly the commands the widgets send (its first
draft carried a copy of the enum, which had drifted). The core test's
fixtures gain the two Windows spellings they needed (mkdir, utime,
sleeping). Wired into CI beside the other suites.
Verified: companion_win32_test.sh passes; companion_cocoa_test.sh and
companion_core_test.sh pass; ui_win32_companion.c and the consumers of
the new header pass tools/mingw_syntax_check.sh; companion_parity.py
green.
* ui/drivers: fix the Xcode (ARC) build and the overlap-copy finding
Xcode, which builds the Cocoa companion with -fobjc-arc: the grid's
first-paint log cast an object pointer to void* without a bridge
(BRIDGE, as the rest of the file does), and the three table windows
passed the address of an ivar as the makeTableWindow out-parameter,
which ARC treats as an __autoreleasing write-back and refuses for a
non-local; each now goes through a local and assigns the ivar.
tools/overlap_copy_check.py: the Win32 Options list read buf[0] in the
source expression of a strlcpy into buf; the value is now read into a
bool before either literal is copied.
Verified: overlap_copy_check.py clean; companion_cocoa_test.sh and
companion_win32_test.sh pass; ui_win32_companion.c passes
tools/mingw_syntax_check.sh; apple_mrc_ownership_check.py unchanged.
The deprecated NSTitledWindowMask names in the log are the pre-10.12
spellings the file uses throughout for the 10.4 SDK; warnings only.
* ui/drivers: the Mac main loop never iterated the companion - "Loading playlist..." for ever
The screenshot says it: "Loading playlist..." in the status bar, the
entries pane empty in both views, the File Browser empty. Every one of
those is an asynchronous result that lands through
ui_companion_driver_wimp_iterate() - the playlist parse, the browser's
listing, decoded thumbnails, animation frames, status - and on a real
Mac that hook was never called.
The only call was in the Qt-era -rarch_main loop in ui_cocoa.m, which
is under #ifdef HAVE_QT. The Xcode build has no Qt: its whole main loop
is the CFRunLoop observer rarch_draw_observer in cocoa_common.m, which
called runloop_iterate() and task_queue_check() and nothing else. So
the Cocoa companion built its window, kicked off its work, and nothing
ever arrived. The observer now calls the hook each frame, as the
generic loop in retroarch.c does for the other platforms.
Why the harness did not catch it: it calls the driver's iterate itself,
standing in for the platform loop. companion_parity.py now also checks
that the platforms' real main loops call ui_companion_driver_wimp_
iterate() (rarch_draw_observer today; the generic loop covers Win32 and
Qt) - it fails on the previous cocoa_common.m and passes on this one.
This is also the most likely cause of the earlier "grid shows nothing"
and "browser is empty" reports, which the GNUstep harness could never
reproduce: it iterates.
Verified: companion_parity.py green (with the new check);
cocoa_common.m compiles under GNUstep's syntax check. Not run on macOS:
the Xcode CI build and your next run are the gate.
* ui/drivers: Cocoa - hand the keyboard back in every run-loop mode, and when the window resigns key
After closing the companion the mouse controls RetroArch again but the
keyboard does not. On macOS the mouse goes to the window under it,
while key events go to the key window through RAWindow -sendEvent:, so
this is the picture of RetroArch's window being main but not key after
the close.
Two things about the previous hand-back could let that happen. Its
deferred re-assert was a default-mode timer, and the close button's
click is dispatched in the event-tracking mode, so the re-assert could
wait until the mode changed; and it ran only from the delegate's close
methods, whereas AppKit's own choice of the next key window - made
while the close is in progress - is what has to be beaten.
Now: the re-assert is scheduled in the default, event-tracking and
modal-panel modes, three times over 40 ms (the arbitration can run
late); it also runs when the companion window resigns key while not
visible (the moment the close takes the key status away); and it does
nothing if the window has been shown again meanwhile. Each attempt
logs whether the host ended up key and main and what NSApp's key
window is, so a --verbose run says exactly where it lands if this is
still not it.
Verified: GNUstep compile; companion_cocoa_test.sh passes;
companion_parity.py green; MRC lint unchanged. Not run on macOS.
* ui/drivers: Cocoa - let the companion window actually close; the keyboard comes back
The keyboard stayed with a window that no longer existed on screen.
windowShouldClose: hid the companion itself and returned NO - so AppKit
was told the window was not closing. It stayed open in AppKit's eyes,
hidden but still the key window, and key events kept going to it while
mouse events went to the window under the pointer: exactly "mouse works,
keyboard does not". And since no close ever happened, windowWillClose:
and windowDidResignKey: - where every hand-back attempt of the last
three patches lived - never fired.
windowShouldClose: now returns YES. AppKit closes the window (kept
alive by setReleasedWhenClosed:NO; the driver's toggle orders it back),
resigns its key status, and the hand-back runs from the delegate
methods that now fire. The programmatic hide on loading content keeps
its own hand-back.
The harness asserts the delegate returns YES and closes the window
through AppKit, then shows it again through the driver's toggle and
checks it still lists the playlists.
Verified: companion_cocoa_test.sh passes; MRC lint unchanged. Not run
on macOS.
* ui/companion: run the Cocoa harness on Apple's AppKit in CI; assert a keystroke after the close
The keyboard still does not return to RetroArch after the companion
closes on a real Mac, and the GNUstep harness keeps passing: whatever
this is, it is in Apple's AppKit - key-window arbitration, activation -
which GNUstep only approximates. There is no Mac here to debug on; the
macOS CI runner has a window server and can run AppKit, so the harness
runs there now, built with Apple's clang against the real Cocoa
framework (tools/companion_cocoa_test_macos.sh, no shims), as a step of
the macOS workflow ahead of the Xcode build.
The harness also asks the actual question now. RetroArch reads the
keyboard in RAWindow -sendEvent:, which AppKit calls on the key window
for key events; the harness's stand-in for RetroArch's window counts
the key events reaching its -sendEvent:. After closing the companion
through AppKit (performClose:), it posts a keystroke through NSApp and
asserts it arrived - and prints which window NSApp holds as key if not.
The harness also becomes a regular, activatable app first, since
Apple's AppKit gives no key window to a background process.
Under GNUstep the new checks pass (NSApp's key window is RetroArch's;
the posted keystroke reaches -sendEvent:). The macOS job's log is the
answer for Apple's AppKit.
* ui/companion: Cocoa harness - report faults and exceptions with a backtrace
The first run on Apple's AppKit got through init, the playlist, the
grid (a real frame, painted), the File Browser, Stop, Contributors and
the menu items, then died with "Trace/BPT trap: 5" right after
"addPaths: implemented" - a SIGTRAP with no message. The harness now
installs handlers for SIGTRAP / SIGSEGV / SIGBUS / SIGABRT / SIGILL that
print a backtrace, and an uncaught-exception handler that prints the
exception's name, reason and call stack, so the next log names the
place. Methods returning size_t / BOOL are invoked through NSInvocation
rather than performSelector: (which is for id returns and undefined for
these on Apple's runtime), in case that was the trap.
Under GNUstep the harness still passes.
* ui/companion: overlapping strlcpy on a playlist reload (trapped on macOS); test builds trap it too
The harness on Apple's AppKit got through everything up to adding files
to the shown playlist, then trapped in __strlcpy_chk -> __chk_fail_
overlap inside companion_core_begin_playlist. The path: a backend adds
files to the playlist it is showing and hands the core the pointer it
got from companion_core_selected_playlist_path() - the core's own
selected_path buffer. add_files reloads that playlist through
select_playlist_path -> begin_playlist, which strlcpy'd the path into
selected_path: source and destination the same buffer. Undefined, and
macOS's fortified libc aborts on it; Linux's strlcpy (libretro-common's
own) silently did the copy, which is why every Linux suite passed.
begin_playlist now takes a copy of @path before it clears state or
writes selected_path.
So the Linux suites catch this class from now on: under
LIBRETRO_STRL_CHECK_OVERLAP, libretro-common's strlcpy aborts on an
overlapping copy exactly as Apple's does, and the four companion test
scripts build with it. companion_core_test adds the aliasing call the
backends make (add files through the selected-path pointer, reload,
count) - on the previous core it aborts with "strlcpy: overlapping copy";
on this one it passes. All four suites pass with the check on.
Verified: companion_core_test.sh plain / ASan, companion_thumbs_test.sh,
companion_cocoa_test.sh, companion_win32_test.sh pass;
companion_core.c and compat_strl.c pass tools/mingw_syntax_check.sh
and build; overlap_copy_check.py clean.
* ui/drivers: Cocoa - forget held keys when another window takes the keyboard (the dead keyboard)
The harness on Apple's AppKit settled the key-window question: after
the companion closes, RetroArch's window is key and main and a posted
keystroke reaches RAWindow -sendEvent:. So the keyboard was arriving,
and RetroArch was ignoring it.
The mechanism is RetroArch's own held-key state. The companion is
opened with a key (its hotkey, or Enter in the menu). The moment its
window becomes key, that key is still down; its release is delivered to
the companion window, so RetroArch's window never sees the key-up and
apple_key_state keeps the key "held". The menu's flush-and-wait-for-
release (menu_st->input_driver_flushing_input ->
INP_FLAG_WAIT_INPUT_RELEASE) then waits for that release - for ever.
Keyboard dead, mouse (which does not go through that gate) fine, and
closing the companion changes nothing because the key is still "down".
Deactivating the app clears it, which is why RetroArch already calls
apple_input_keyboard_reset() from applicationWillResignActive.
Same treatment for losing the keyboard to another window of our own:
RetroArch_OSX (RAWindow's delegate) resets the keyboard state in
windowDidResignKey:, and the companion's toggle resets it right after
taking the keyboard, covering a show from a non-key state. The harness
stubs apple_input_keyboard_reset and asserts the companion's show calls
it.
Verified: companion_cocoa_test.sh passes under GNUstep; MRC lint
unchanged. Apple's AppKit run of the harness (previous commit) is what
established the key-window half. Not run in the real app on macOS.
* ui/companion: keep the playlist config off the stack; guard the selected_path self-copy by pointer
companion_core_begin_playlist() no longer takes a PATH_MAX_LENGTH copy
of @path to survive being handed core->selected_path: the copy is
skipped when the pointer already is that buffer, the way path_set()
does it, and the buffer already holds the path. The playlist_config_t
that begin_playlist, all_next, playlist_open and playlist_open_private
each built on the stack now lives in companion_core_t; playlist_init()
and playlist_parse_begin() copy it, and all four run on the UI thread,
so one is enough. begin_playlist drops from 5184 to 32 bytes of frame
and the other three from ~3 KiB to under 64 bytes, within the 4 KiB
ceiling CODING-GUIDELINES sets.
* ui/drivers: Cocoa - the icon grid's prefetch read past the thumbnail marks (the crash)
Guard Malloc named it exactly: a byte read one past the end of a
MALLOC_TINY block in -[RACompanionController thumbWant:urgent:]. (The
earlier crash in MoltenVK was the same corruption, noticed later by an
unrelated allocation - the usual way an overrun surfaces.)
iconTick prefetches a screen either side of the visible rows, so it
calls thumbWant: with rows that do not exist. hasImageForRow: answers
NO for those - it means "no image", not "no row" - so thumbWant: went
on to read thumbNone[row], and thumbNone is only as long as the list.
Reading one byte past a heap block: harmless on glibc, fatal under
Apple's allocator.
thumbNone now carries its length (thumbNoneCount) and every access is
bounded by it: thumbWant: returns for a row outside the list, the idle
re-scan clamps, the delivery callback checks the array's length as well
as the current entry count (a delivery for the previous list), and the
two memsets use the array's own length rather than a count that may
have moved on since it was allocated.
Regression test, in the harness: drive iconTick repeatedly and call
thumbWant: with rows either side of the range, and run the whole
harness under ASan (tools/companion_cocoa_test.sh asan, wired into CI
beside the plain run). On the previous driver ASan reports
heap-buffer-overflow at ui_cocoa_companion.m:976 in thumbWant: and the
script exits 5; on this one both passes are clean. The script also
propagates the run's exit status now - the pipe through the log filter
was swallowing it, so a sanitizer abort would have looked like a pass.
Verified: companion_cocoa_test.sh plain and ASan pass (and fail as
described on the previous driver); companion_core_test.sh,
companion_thumbs_test.sh, companion_win32_test.sh pass;
companion_parity.py green; MRC lint unchanged.
---------
Co-authored-by: LibretroAdmin <[email protected]>
1718 lines
126 KiB
C
1718 lines
126 KiB
C
#ifndef MSG_HASH_LBL_STR_H__
|
|
#define MSG_HASH_LBL_STR_H__
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#define MENU_ENUM_LABEL_ACCOUNTS_CHEEVOS_USERNAME_STR "accounts_cheevos_username"
|
|
#define MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_CANCEL_STR "achievement_pause_cancel"
|
|
#define MENU_ENUM_LABEL_ACHIEVEMENT_RESUME_CANCEL_STR "achievement_resume_cancel"
|
|
#define MENU_ENUM_LABEL_ACHIEVEMENT_PAUSE_STR "achievement_pause"
|
|
#define MENU_ENUM_LABEL_ACHIEVEMENT_RESUME_STR "achievement_resume"
|
|
#define MENU_ENUM_LABEL_ACHIEVEMENT_LIST_STR "achievement_list"
|
|
#define MENU_ENUM_LABEL_EXPLORE_TAB_STR "explore_tab"
|
|
#define MENU_ENUM_LABEL_EXPLORE_ITEM_STR "explore_item"
|
|
#define MENU_ENUM_LABEL_EXPLORE_INITIALISING_LIST_STR "explore_initialising_list"
|
|
#define MENU_ENUM_LABEL_CONTENTLESS_CORES_TAB_STR "contentless_cores_tab"
|
|
#define MENU_ENUM_LABEL_CONTENTLESS_CORE_STR "contentless_core"
|
|
#define MENU_ENUM_LABEL_ADD_TAB_STR "add_tab"
|
|
#define MENU_ENUM_LABEL_NETPLAY_TAB_STR "netplay_tab"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_STR "audio_driver"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_RSOUND_STR "rsound"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_AUDIOIO_STR "audioio"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_OSS_STR "oss"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_ALSA_STR "alsa"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_ALSATHREAD_STR "alsathread"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_TINYALSA_STR "tinyalsa"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_ROAR_STR "roar"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_COREAUDIO_STR "coreaudio"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_AL_STR "openal"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_SL_STR "opensl"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_SDL_STR "sdl"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_SDL2_STR "sdl2"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_DSOUND_STR "dsound"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_WASAPI_STR "wasapi"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_XAUDIO_STR "xaudio"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_PULSE_STR "pulse"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_PIPEWIRE_STR "pipewire"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_EXT_STR "ext"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_XENON360_STR "xenon360"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_PS3_STR "ps3"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_WII_STR "gx"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_WIIU_STR "AX"
|
|
#if defined(VITA)
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_PSP_STR "vita"
|
|
#elif defined(ORBIS)
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_PSP_STR "orbis"
|
|
#else
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_PSP_STR "psp"
|
|
#endif
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_PS2_STR "ps2"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_CTR_STR "dsp"
|
|
#if defined(HAVE_LIBNX)
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_SWITCH_STR "switch_audren"
|
|
#else
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_SWITCH_STR "switch"
|
|
#endif
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_RWEBAUDIO_STR "rwebaudio"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_AUDIOWORKLET_STR "audioworklet"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_JACK_STR "jack"
|
|
#define MENU_ENUM_LABEL_AUDIO_DRIVER_NULL_STR "null"
|
|
#define MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN_REMOVE_STR "audio_dsp_plugin_remove"
|
|
#define MENU_ENUM_LABEL_AUDIO_LATENCY_STR "audio_latency"
|
|
#define MENU_ENUM_LABEL_AUDIO_MUTE_STR "audio_mute_enable"
|
|
#define MENU_ENUM_LABEL_AUDIO_RATE_CONTROL_DELTA_STR "audio_rate_control_delta"
|
|
#define MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_STR "audio_resampler_driver"
|
|
#define MENU_ENUM_LABEL_AUDIO_WASAPI_FLOAT_FORMAT_STR "audio_wasapi_float_format"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_RESAMPLER_DRIVER_STR "microphone_resampler_driver"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_DRIVER_STR "microphone_driver"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_LATENCY_STR "microphone_latency"
|
|
#define MENU_ENUM_LABEL_AUTO_OVERRIDES_ENABLE_STR "auto_overrides_enable"
|
|
#define MENU_ENUM_LABEL_AUTO_REMAPS_ENABLE_STR "auto_remaps_enable"
|
|
#define MENU_ENUM_LABEL_INITIAL_DISK_CHANGE_ENABLE_STR "initial_disk_change_enable"
|
|
#define MENU_ENUM_LABEL_GLOBAL_CORE_OPTIONS_STR "global_core_options"
|
|
#define MENU_ENUM_LABEL_AUTO_SHADERS_ENABLE_STR "auto_shaders_enable"
|
|
#define MENU_ENUM_LABEL_BLOCK_SRAM_OVERWRITE_STR "block_sram_overwrite"
|
|
#define MENU_ENUM_LABEL_BLUETOOTH_ENABLE_STR "bluetooth_enable"
|
|
#define MENU_ENUM_LABEL_TIMEZONE_STR "timezone"
|
|
#define MENU_ENUM_LABEL_BUILDBOT_ASSETS_URL_STR "buildbot_assets_url"
|
|
#define MENU_ENUM_LABEL_CAMERA_DRIVER_STR "camera_driver"
|
|
#define MENU_ENUM_LABEL_BLUETOOTH_DRIVER_STR "bluetooth_driver"
|
|
#define MENU_ENUM_LABEL_CB_CORE_CONTENT_DIRS_LIST_STR "cb_core_content_dirs_list"
|
|
#define MENU_ENUM_LABEL_CB_CORE_CONTENT_DOWNLOAD_STR "cb_core_content_download"
|
|
#define MENU_ENUM_LABEL_CB_CORE_CONTENT_LIST_STR "cb_core_content_list"
|
|
#define MENU_ENUM_LABEL_CB_CORE_SYSTEM_FILES_DOWNLOAD_STR "cb_core_system_files_download"
|
|
#define MENU_ENUM_LABEL_CB_CORE_SYSTEM_FILES_LIST_STR "cb_core_system_files_list"
|
|
#define MENU_ENUM_LABEL_CB_CORE_THUMBNAILS_DOWNLOAD_STR "cb_core_thumbnails_download"
|
|
#define MENU_ENUM_LABEL_CB_CORE_UPDATER_DOWNLOAD_STR "cb_core_updater_download"
|
|
#define MENU_ENUM_LABEL_CB_CORE_UPDATER_LIST_STR "cb_core_updater_list"
|
|
#define MENU_ENUM_LABEL_CB_DOWNLOAD_URL_STR "cb_download_url"
|
|
#define MENU_ENUM_LABEL_CB_LAKKA_DOWNLOAD_STR "cb_lakka_download"
|
|
#define MENU_ENUM_LABEL_CB_LAKKA_LIST_STR "cb_lakka_list"
|
|
#define MENU_ENUM_LABEL_CB_MENU_THUMBNAIL_STR "cb_menu_thumbnail"
|
|
#define MENU_ENUM_LABEL_CB_MENU_WALLPAPER_STR "cb_menu_wallpaper"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_ASSETS_STR "cb_update_assets"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_AUTOCONFIG_PROFILES_STR "cb_update_autoconfig_profiles"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_CHEATS_STR "cb_update_cheats"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_CORE_INFO_FILES_STR "cb_update_core_info_files"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_DATABASES_STR "cb_update_databases"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_OVERLAYS_STR "cb_update_overlays"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_SHADERS_CG_STR "cb_update_shaders_cg"
|
|
#define MENU_ENUM_LABEL_CB_UPDATE_SHADERS_GLSL_STR "cb_update_shaders_glsl"
|
|
#define MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES_STR "cheat_apply_changes"
|
|
#define MENU_ENUM_LABEL_CHEAT_FILE_LOAD_STR "cheat_file_load"
|
|
#define MENU_ENUM_LABEL_CHEAT_FILE_LOAD_APPEND_STR "cheat_file_load_append"
|
|
#define MENU_ENUM_LABEL_CHEAT_FILE_SAVE_AS_STR "cheat_file_save_as"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_DESCRIPTION_STR "cheevos_description"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_ENABLE_STR "cheevos_enable"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_HARDCORE_MODE_ENABLE_STR "cheevos_hardcore_mode_enable"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_LOCKED_ENTRY_STR "cheevos_locked_entry"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_STR "cheevos_unlocked_entry"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_UNLOCKED_ENTRY_HARDCORE_STR "cheevos_unlocked_entry_hardcore"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_APPEARANCE_ANCHOR_STR "cheevos_appearance_anchor"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_APPEARANCE_PADDING_AUTO_STR "cheevos_appearance_padding_auto"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_TRACKERS_STR "cheevos_visibility_lboard_trackers"
|
|
#define MENU_ENUM_LABEL_CLOSE_CONTENT_STR "close_content"
|
|
#define MENU_ENUM_LABEL_COLLECTION_STR "collection"
|
|
#define MENU_ENUM_LABEL_CONFIG_SAVE_ON_EXIT_STR "config_save_on_exit"
|
|
#define MENU_ENUM_LABEL_REMAP_SAVE_ON_EXIT_STR "remap_save_on_exit"
|
|
#define MENU_ENUM_LABEL_CONNECT_WIFI_STR "connect_wifi"
|
|
#define MENU_ENUM_LABEL_WIFI_NETWORKS_STR "wifi_list_networks"
|
|
#define MENU_ENUM_LABEL_CONNECT_NETPLAY_ROOM_STR "connect_room"
|
|
#define MENU_ENUM_LABEL_CONTENT_ACTIONS_STR "content_actions"
|
|
#define MENU_ENUM_LABEL_BROWSE_URL_LIST_STR "browse_url_list"
|
|
#define MENU_ENUM_LABEL_CORE_CHEAT_OPTIONS_STR "core_cheat_options"
|
|
#define MENU_ENUM_LABEL_CORE_COUNTERS_STR "core_counters"
|
|
#define MENU_ENUM_LABEL_CORE_INFORMATION_STR "core_information"
|
|
#define MENU_ENUM_LABEL_CORE_CREATE_BACKUP_STR "core_create_backup"
|
|
#define MENU_ENUM_LABEL_CORE_RESTORE_BACKUP_LIST_STR "core_restore_backup_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_RESTORE_BACKUP_LIST_STR "deferred_core_restore_backup_list"
|
|
#define MENU_ENUM_LABEL_CORE_DELETE_BACKUP_LIST_STR "core_delete_backup_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_DELETE_BACKUP_LIST_STR "deferred_core_delete_backup_list"
|
|
#define MENU_ENUM_LABEL_DISC_INFORMATION_STR "disc_information"
|
|
#define MENU_ENUM_LABEL_CORE_INFO_ENTRY_STR "core_info_entry"
|
|
#define MENU_ENUM_LABEL_CORE_INPUT_REMAPPING_OPTIONS_STR "core_input_remapping_options"
|
|
#define MENU_ENUM_LABEL_INPUT_SPLIT_JOYCON_STR "input_split_joycon"
|
|
#define MENU_ENUM_LABEL_CORE_LIST_STR "load_core"
|
|
#define MENU_ENUM_LABEL_SIDELOAD_CORE_LIST_STR "sideload_core"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_LIST_STR "savestate_list"
|
|
#define MENU_ENUM_LABEL_STATE_SLOT_RUN_STR "state_slot_run"
|
|
#define MENU_ENUM_LABEL_CORE_OPTIONS_STR "core_options"
|
|
#define MENU_ENUM_LABEL_CORE_OPTION_ENTRY_STR "core_option_entry"
|
|
#define MENU_ENUM_LABEL_CORE_SET_SUPPORTS_NO_CONTENT_ENABLE_STR "core_set_supports_no_content_enable"
|
|
#define MENU_ENUM_LABEL_CORE_UPDATER_AUTO_BACKUP_HISTORY_SIZE_STR "core_updater_auto_backup_history_size"
|
|
#define MENU_ENUM_LABEL_CORE_UPDATER_BUILDBOT_URL_STR "core_updater_buildbot_url"
|
|
#define MENU_ENUM_LABEL_CORE_UPDATER_LIST_STR "core_updater_list"
|
|
#define MENU_ENUM_LABEL_CORE_MANAGER_LIST_STR "core_manager_list"
|
|
#define MENU_ENUM_LABEL_CORE_STEAM_INSTALL_STR "core_steam_install"
|
|
#define MENU_ENUM_LABEL_CORE_STEAM_UNINSTALL_STR "core_steam_uninstall"
|
|
#define MENU_ENUM_LABEL_CPU_ARCHITECTURE_STR "system_information_cpu_architecture"
|
|
#define MENU_ENUM_LABEL_CPU_CORES_STR "system_information_cpu_cores"
|
|
#define MENU_ENUM_LABEL_CUSTOM_BIND_STR "custom_bind"
|
|
#define MENU_ENUM_LABEL_CUSTOM_BIND_ALL_STR "custom_bind_all"
|
|
#define MENU_ENUM_LABEL_DATABASE_MANAGER_STR "database_manager"
|
|
#define MENU_ENUM_LABEL_DATABASE_MANAGER_LIST_STR "database_manager_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_FRAME_TIME_COUNTER_SETTINGS_LIST_STR "deferred_frame_time_counter_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_SHADER_PRESET_MANAGER_LIST_STR "deferred_video_shader_preset_manager_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_LIST_STR "deferred_cdrom_info_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CDROM_INFO_DETAIL_LIST_STR "deferred_cdrom_info_detail_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_REMAPPINGS_PORT_LIST_STR "deferred_remappings_port_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_STR "deferred_dropdown_box_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SPECIAL_STR "deferred_dropdown_box_list_special"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_RESOLUTION_STR "deferred_dropdown_box_list_resolution"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_VIDEO_SHADER_PARAMETER_STR "deferred_dropdown_box_list_video_shader_parameter"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_VIDEO_SHADER_PRESET_PARAMETER_STR "deferred_dropdown_box_list_video_shader_preset_parameter"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_VIDEO_SHADER_NUM_PASSES_STR "deferred_dropdown_box_list_video_shader_num_passes"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_DEFAULT_CORE_STR "deferred_dropdown_box_list_playlist_default_core"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LABEL_DISPLAY_MODE_STR "deferred_dropdown_box_list_playlist_label_display_mode"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_RIGHT_THUMBNAIL_MODE_STR "deferred_dropdown_box_list_playlist_right_thumbnail_mode"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_LEFT_THUMBNAIL_MODE_STR "deferred_dropdown_box_list_playlist_left_thumbnail_mode"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_PLAYLIST_SORT_MODE_STR "deferred_dropdown_box_list_playlist_sort_mode"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_DISK_INDEX_STR "deferred_dropdown_box_list_disk_index"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_INPUT_RETROPAD_BIND_STR "deferred_dropdown_box_list_input_retropad_bind"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_INPUT_DEVICE_TYPE_STR "deferred_dropdown_box_list_input_device_type"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_INPUT_SELECT_RESERVED_DEVICE_STR "deferred_dropdown_box_list_input_select_reserved_device"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_INPUT_SELECT_PHYSICAL_KEYBOARD_STR "deferred_dropdown_box_list_input_select_physical_keyboard"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_INPUT_DESCRIPTION_STR "deferred_dropdown_box_list_input_description"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_INPUT_DESCRIPTION_KBD_STR "deferred_dropdown_box_list_input_description_kbd"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_NETPLAY_MITM_SERVER_STR "deferred_dropdown_box_list_netplay_mitm_server"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_AUDIO_DEVICE_STR "deferred_dropdown_box_list_audio_device"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_MIDI_DEVICE_STR "deferred_dropdown_box_list_midi_device"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_MICROPHONE_DEVICE_STR "deferred_dropdown_box_list_microphone_device"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MICROPHONE_SETTINGS_LIST_STR "deferred_microphone_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CONFIGURATIONS_LIST_STR "deferred_configurations_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_PLAYLIST_LIST_STR "deferred_playlist_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_FAVORITES_LIST_STR "deferred_favorites_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_IMAGES_LIST_STR "deferred_images_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MUSIC_LIST_STR "deferred_music_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_LIST_STR "deferred_video_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_EXPLORE_LIST_STR "deferred_explore_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CONTENTLESS_CORES_LIST_STR "deferred_contentless_cores_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_NETPLAY_STR "deferred_netplay"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MUSIC_STR "deferred_music"
|
|
#define MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_START_STR "deferred_browse_url_start"
|
|
#define MENU_ENUM_LABEL_DEFERRED_BROWSE_URL_LIST_STR "deferred_browse_url_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_CHEEVOS_LIST_STR "deferred_accounts_cheevos_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_TWITCH_LIST_STR "deferred_accounts_twitch_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_YOUTUBE_LIST_STR "deferred_accounts_youtube_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_FACEBOOK_LIST_STR "deferred_accounts_facebook_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_KICK_LIST_STR "deferred_accounts_kick_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACCOUNTS_LIST_STR "deferred_accounts_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION_STR "deferred_archive_action"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ARCHIVE_ACTION_DETECT_CORE_STR "deferred_archive_action_detect_core"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN_STR "deferred_archive_open"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ARCHIVE_OPEN_DETECT_CORE_STR "deferred_archive_open_detect_core"
|
|
#define MENU_ENUM_LABEL_DEFERRED_AUDIO_SETTINGS_LIST_STR "deferred_audio_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_AUDIO_MIXER_SETTINGS_LIST_STR "deferred_audio_mixer_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MENU_SOUNDS_LIST_STR "deferred_menu_sounds_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CONFIGURATION_SETTINGS_LIST_STR "deferred_configuration_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_DIRS_LIST_STR "deferred_core_content_dirs_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_CONTENT_LIST_STR "deferred_core_content_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_SYSTEM_FILES_LIST_STR "deferred_core_system_files_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_LIST_STR "deferred_core_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_LIST_SET_STR "deferred_core_list_set"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_SETTINGS_LIST_STR "deferred_core_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_INFORMATION_LIST_STR "deferred_core_information_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_INFORMATION_STEAM_LIST_STR "deferred_core_information_steam_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_UPDATER_LIST_STR "deferred_core_updater_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_MANAGER_LIST_STR "deferred_core_manager_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_STEAM_SETTINGS_LIST_STR "deferred_steam_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_MANAGER_STEAM_LIST_STR "deferred_core_manager_steam_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DATABASE_MANAGER_LIST_STR "deferred_database_manager_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DIRECTORY_SETTINGS_LIST_STR "deferred_directory_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DRIVER_SETTINGS_LIST_STR "deferred_driver_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_FRAME_THROTTLE_SETTINGS_LIST_STR "deferred_frame_throttle_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INPUT_RETROPAD_BINDS_LIST_STR "deferred_input_retropad_binds"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INPUT_HOTKEY_BINDS_LIST_STR "deferred_input_hotkey_binds"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INPUT_SETTINGS_LIST_STR "deferred_input_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INPUT_TURBO_FIRE_SETTINGS_LIST_STR "deferred_input_turbo_fire_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INPUT_HAPTIC_FEEDBACK_SETTINGS_LIST_STR "deferred_input_haptic_feedback_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INPUT_SENSOR_SETTINGS_LIST_STR "deferred_input_sensor_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INPUT_MENU_SETTINGS_LIST_STR "deferred_input_menu_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_LATENCY_SETTINGS_LIST_STR "deferred_latency_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_AI_SERVICE_SETTINGS_LIST_STR "deferred_ai_service_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACCESSIBILITY_SETTINGS_LIST_STR "deferred_accessibility_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_POWER_MANAGEMENT_SETTINGS_LIST_STR "deferred_power_management_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CPU_PERFPOWER_LIST_STR "deferred_cpu_perfpower_list"
|
|
#define MENU_ENUM_LABEL_CPU_PERF_MODE_STR "cpu_perf_mode"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CPU_POLICY_ENTRY_STR "deferred_cpu_policy_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_LAKKA_LIST_STR "deferred_lakka_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_LAKKA_SERVICES_LIST_STR "deferred_lakka_services_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_LOGGING_SETTINGS_LIST_STR "deferred_logging_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MENU_FILE_BROWSER_SETTINGS_LIST_STR "deferred_menu_file_browser_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MENU_SETTINGS_LIST_STR "deferred_menu_settings_list"
|
|
#define MENU_ENUM_LABEL_APPICON_SETTINGS_STR "appicon_settings"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MENU_BOTTOM_SETTINGS_LIST_STR "deferred_menu_bottom_settings"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MENU_VIEWS_SETTINGS_LIST_STR "deferred_menu_views_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_QUICK_MENU_VIEWS_SETTINGS_LIST_STR "deferred_quick_menu_views_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_SETTINGS_VIEWS_SETTINGS_LIST_STR "deferred_settings_views_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_SUBSYSTEM_SETTINGS_LIST_STR "deferred_subsystem_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_NETWORK_HOSTING_SETTINGS_LIST_STR "deferred_network_hosting_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_NETWORK_SETTINGS_LIST_STR "deferred_network_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_NETPLAY_KICK_LIST_STR "deferred_netplay_kick_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_NETPLAY_BAN_LIST_STR "deferred_netplay_ban_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_NETPLAY_LOBBY_FILTERS_LIST_STR "deferred_netplay_lobby_filters_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ONSCREEN_DISPLAY_SETTINGS_LIST_STR "deferred_onscreen_display_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ONSCREEN_OVERLAY_SETTINGS_LIST_STR "deferred_onscreen_overlay_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_OSK_OVERLAY_SETTINGS_LIST_STR "deferred_osk_overlay_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_OVERLAY_LIGHTGUN_SETTINGS_LIST_STR "deferred_overlay_lightgun_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_OVERLAY_MOUSE_SETTINGS_LIST_STR "deferred_overlay_mouse_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ONSCREEN_VIDEO_LAYOUT_SETTINGS_LIST_STR "deferred_onscreen_video_layout_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_SETTINGS_LIST_STR "deferred_onscreen_notifications_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ONSCREEN_NOTIFICATIONS_VIEWS_SETTINGS_LIST_STR "deferred_onscreen_notifications_views_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_PLAYLIST_SETTINGS_LIST_STR "deferred_playlist_settings"
|
|
#define MENU_ENUM_LABEL_DEFERRED_PLAYLIST_MANAGER_LIST_STR "deferred_playlist_manager_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_PLAYLIST_MANAGER_SETTINGS_STR "deferred_playlist_manager_settings"
|
|
#define MENU_ENUM_LABEL_DEFERRED_PRIVACY_SETTINGS_LIST_STR "deferred_privacy_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MIDI_SETTINGS_LIST_STR "deferred_midi_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_RDB_ENTRY_DETAIL_STR "deferred_rdb_entry_detail"
|
|
#define MENU_ENUM_LABEL_DEFERRED_RECORDING_SETTINGS_LIST_STR "deferred_recording_settings"
|
|
#define MENU_ENUM_LABEL_DEFERRED_RETRO_ACHIEVEMENTS_SETTINGS_LIST_STR "deferred_retro_achievements_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CHEEVOS_APPEARANCE_SETTINGS_LIST_STR "deferred_cheevos_appearance_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST_STR "deferred_cheevos_visibility_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CHEEVOS_VISIBILITY_SETTINGS_LIST_STR "deferred_cheevos_visibility_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ACHIEVEMENTS_SUBMENU_LIST_STR "deferred_achievements_submenu"
|
|
#define MENU_ENUM_LABEL_DEFERRED_REWIND_SETTINGS_LIST_STR "deferred_rewind_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CHEAT_DETAILS_SETTINGS_LIST_STR "deferred_cheat_details_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CHEAT_SEARCH_SETTINGS_LIST_STR "deferred_cheat_search_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_SAVING_SETTINGS_LIST_STR "deferred_saving_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CLOUD_SYNC_SETTINGS_LIST_STR "deferred_cloud_sync_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_PL_THUMBNAILS_UPDATER_LIST_STR "deferred_pl_thumbnails_updater_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_UPDATER_SETTINGS_LIST_STR "deferred_updater_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_USER_BINDS_LIST_STR "deferred_user_binds_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_USER_INTERFACE_SETTINGS_LIST_STR "deferred_user_interface_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_USER_SETTINGS_LIST_STR "deferred_user_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_FILTER_STR "deferred_video_filter"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_SETTINGS_LIST_STR "deferred_video_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_WINDOWED_MODE_SETTINGS_LIST_STR "deferred_video_windowed_mode_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_FULLSCREEN_MODE_SETTINGS_LIST_STR "deferred_video_fullscreen_mode_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_OUTPUT_SETTINGS_LIST_STR "deferred_video_output_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_SCALING_SETTINGS_LIST_STR "deferred_video_scaling_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_HDR_SETTINGS_LIST_STR "deferred_video_hdr_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_VIDEO_SYNCHRONIZATION_SETTINGS_LIST_STR "deferred_video_synchronization_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CRT_SWITCHRES_SETTINGS_LIST_STR "deferred_crt_switchres_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_BLUETOOTH_SETTINGS_LIST_STR "deferred_bluetooth_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_WIFI_SETTINGS_LIST_STR "deferred_wifi_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_WIFI_NETWORKS_LIST_STR "deferred_wifi_networks_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_INFORMATION_STR "deferred_information"
|
|
#define MENU_ENUM_LABEL_DELETE_ENTRY_STR "delete_entry"
|
|
#define MENU_ENUM_LABEL_FAVORITES_STR "favorites"
|
|
#define MENU_ENUM_LABEL_DISK_TRAY_EJECT_STR "disk_tray_eject"
|
|
#define MENU_ENUM_LABEL_DISK_TRAY_INSERT_STR "disk_tray_insert"
|
|
#define MENU_ENUM_LABEL_DISK_IMAGE_APPEND_STR "disk_image_append"
|
|
#define MENU_ENUM_LABEL_SUBSYSTEM_ADD_STR "subsystem_add"
|
|
#define MENU_ENUM_LABEL_SUBSYSTEM_LOAD_STR "subsystem_load"
|
|
#define MENU_ENUM_LABEL_DISK_OPTIONS_STR "core_disk_options"
|
|
#define MENU_ENUM_LABEL_DISK_INDEX_STR "core_disk_index"
|
|
#define MENU_ENUM_LABEL_DOWNLOADED_FILE_DETECT_CORE_LIST_STR "downloaded_file_detect_core_list"
|
|
#define MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_STR "download_core_content"
|
|
#define MENU_ENUM_LABEL_DOWNLOAD_CORE_CONTENT_DIRS_STR "download_core_content_dirs"
|
|
#define MENU_ENUM_LABEL_DOWNLOAD_CORE_SYSTEM_FILES_STR "download_core_system_files"
|
|
#define MENU_ENUM_LABEL_UPDATE_INSTALLED_CORES_STR "update_installed_cores"
|
|
#define MENU_ENUM_LABEL_SWITCH_INSTALLED_CORES_PFD_STR "switch_installed_cores_pfd"
|
|
#define MENU_ENUM_LABEL_CORE_OPTION_CATEGORY_ENABLE_STR "core_option_category_enable"
|
|
#define MENU_ENUM_LABEL_CORE_INFO_CACHE_ENABLE_STR "core_info_cache_enable"
|
|
#define MENU_ENUM_LABEL_CORE_INFO_SAVESTATE_BYPASS_STR "core_info_savestate_bypass"
|
|
#define MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN_STR "dummy_on_core_shutdown"
|
|
#define MENU_ENUM_LABEL_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT_STR "always_reload_core_on_run_content"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_CORE_STR "file_browser_core"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_CORE_DETECTED_STR "file_browser_core_detected"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION_STR "file_browser_core_select_from_collection"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_CORE_SELECT_FROM_COLLECTION_CURRENT_CORE_STR "file_browser_core_select_from_collection_current_core"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_DIRECTORY_STR "file_browser_directory"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_IMAGE_STR "file_browser_image"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_IMAGE_OPEN_WITH_VIEWER_STR "file_browser_image_open_with_viewer"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_MOVIE_OPEN_STR "file_browser_movie_open"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_MUSIC_OPEN_STR "file_browser_music_open"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_PLAIN_FILE_STR "file_browser_plain_file"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_REMAP_STR "file_browser_remap"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_SHADER_STR "file_browser_shader"
|
|
#define MENU_ENUM_LABEL_FILE_BROWSER_SHADER_PRESET_STR "file_browser_shader_preset"
|
|
#define MENU_ENUM_LABEL_FAVORITES_TAB_STR "favorites_tab"
|
|
#define MENU_ENUM_LABEL_FRONTEND_COUNTERS_STR "frontend_counters"
|
|
#define MENU_ENUM_LABEL_GAME_SPECIFIC_OPTIONS_STR "game_specific_options"
|
|
#define MENU_ENUM_LABEL_CORE_OPTION_OVERRIDE_LIST_STR "core_option_override_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_CORE_OPTION_OVERRIDE_LIST_STR "deferred_core_option_override_list"
|
|
#define MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_CREATE_STR "game_specific_core_options_create"
|
|
#define MENU_ENUM_LABEL_GAME_SPECIFIC_CORE_OPTIONS_REMOVE_STR "game_specific_core_options_remove"
|
|
#define MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_CREATE_STR "folder_specific_core_options_create"
|
|
#define MENU_ENUM_LABEL_FOLDER_SPECIFIC_CORE_OPTIONS_REMOVE_STR "folder_specific_core_options_remove"
|
|
#define MENU_ENUM_LABEL_CORE_OPTION_OVERRIDE_INFO_STR "core_option_override_info"
|
|
#define MENU_ENUM_LABEL_CORE_OPTIONS_RESET_STR "core_options_reset"
|
|
#define MENU_ENUM_LABEL_CORE_OPTIONS_FLUSH_STR "core_options_flush"
|
|
#define MENU_ENUM_LABEL_HELP_STR "help"
|
|
#define MENU_ENUM_LABEL_HISTORY_TAB_STR "history_tab"
|
|
#define MENU_ENUM_LABEL_HORIZONTAL_MENU_STR "horizontal_menu"
|
|
#define MENU_ENUM_LABEL_IMAGES_TAB_STR "images_tab"
|
|
#define MENU_ENUM_LABEL_INFORMATION_STR "information"
|
|
#define MENU_ENUM_LABEL_INFO_SCREEN_STR "info_screen"
|
|
#define MENU_ENUM_LABEL_INPUT_SELECT_PHYSICAL_KEYBOARD_STR "input_android_physical_keyboard"
|
|
#define MENU_ENUM_LABEL_INPUT_ANDROID_SYSTEM_KEYBOARD_STR "input_android_system_keyboard"
|
|
#define MENU_ENUM_LABEL_INPUT_SENSOR_ORIENTATION_STR "input_sensor_orientation"
|
|
#define MENU_ENUM_LABEL_INPUT_DESCRIPTOR_HIDE_UNBOUND_STR "input_descriptor_hide_unbound"
|
|
#define MENU_ENUM_LABEL_INPUT_DESCRIPTOR_LABEL_SHOW_STR "input_descriptor_label_show"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_STR "input_driver"
|
|
#define MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS_BEGIN_STR "input_hotkey_binds_begin"
|
|
#define MENU_ENUM_LABEL_INPUT_LIBRETRO_DEVICE_STR "input_libretro_device_p%u"
|
|
#define MENU_ENUM_LABEL_INPUT_PLAYER_ANALOG_DPAD_MODE_STR "input_player%u_analog_dpad_mode"
|
|
#define MENU_ENUM_LABEL_INPUT_DEVICE_INDEX_STR "input_device_p%u"
|
|
#define MENU_ENUM_LABEL_INPUT_DEVICE_RESERVED_DEVICE_NAME_STR "input_device_reserved_device_p%u"
|
|
#define MENU_ENUM_LABEL_INPUT_DEVICE_RESERVATION_TYPE_STR "input_device_reservation_type_p%u"
|
|
#define MENU_ENUM_LABEL_INPUT_MOUSE_INDEX_STR "input_player%u_mouse_index"
|
|
#define MENU_ENUM_LABEL_INPUT_JOYPAD_INDEX_STR "input_player%u_joypad_index"
|
|
#define MENU_ENUM_LABEL_INPUT_BIND_ALL_INDEX_STR "input_player%u_bind_all"
|
|
#define MENU_ENUM_LABEL_INPUT_SAVE_AUTOCONFIG_INDEX_STR "input_player%u_bind_all_save_autoconfig"
|
|
#define MENU_ENUM_LABEL_INPUT_BIND_DEFAULTS_INDEX_STR "input_player%u_bind_all_bind_defaults"
|
|
#define MENU_ENUM_LABEL_INPUT_REMAP_PORT_STR "input_remap_port_p%u"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_STR "input_overlay"
|
|
#define MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_STR "input_osk_overlay"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_ENABLE_STR "input_overlay_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_IN_MENU_STR "overlay_hide_in_menu"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_HIDE_WHEN_GAMEPAD_CONNECTED_STR "overlay_hide_when_gamepad_connected"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_INPUTS_STR "input_overlay_show_inputs"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_INPUTS_PORT_STR "input_overlay_show_inputs_port"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_SHOW_MOUSE_CURSOR_STR "overlay_show_mouse_cursor"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_ROTATE_STR "input_overlay_auto_rotate"
|
|
#define MENU_ENUM_LABEL_INPUT_OSK_OVERLAY_AUTO_SCALE_STR "input_osk_overlay_auto_scale"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_DPAD_DIAGONAL_SENSITIVITY_STR "input_overlay_dpad_diagonal_sensitivity"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_ABXY_DIAGONAL_SENSITIVITY_STR "input_overlay_abxy_diagonal_sensitivity"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_ANALOG_RECENTER_ZONE_STR "input_overlay_analog_recenter_zone"
|
|
#define MENU_ENUM_LABEL_INPUT_SETTINGS_BEGIN_STR "input_settings_begin"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_10_BINDS_STR "10_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_11_BINDS_STR "11_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_12_BINDS_STR "12_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_13_BINDS_STR "13_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_14_BINDS_STR "14_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_15_BINDS_STR "15_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_16_BINDS_STR "16_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_1_BINDS_STR "1_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_2_BINDS_STR "2_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_3_BINDS_STR "3_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_4_BINDS_STR "4_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_5_BINDS_STR "5_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_6_BINDS_STR "6_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_7_BINDS_STR "7_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_8_BINDS_STR "8_input_binds_list"
|
|
#define MENU_ENUM_LABEL_INPUT_USER_9_BINDS_STR "9_input_binds_list"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_STR "input_joypad_driver"
|
|
#define MENU_ENUM_LABEL_FRONTEND_LOG_LEVEL_STR "frontend_log_level"
|
|
#define MENU_ENUM_LABEL_LOAD_ARCHIVE_STR "load_archive"
|
|
#define MENU_ENUM_LABEL_LOAD_ARCHIVE_DETECT_CORE_STR "load_archive_detect_core"
|
|
#define MENU_ENUM_LABEL_LOAD_CONTENT_SPECIAL_STR "load_special"
|
|
#define MENU_ENUM_LABEL_LOAD_STATE_STR "load_state"
|
|
#define MENU_ENUM_LABEL_LOCATION_DRIVER_STR "location_driver"
|
|
#define MENU_ENUM_LABEL_LOG_VERBOSITY_STR "log_verbosity"
|
|
#define MENU_ENUM_LABEL_MAIN_MENU_STR "main_menu"
|
|
#define MENU_ENUM_LABEL_MENU_DRIVER_STR "menu_driver"
|
|
#define MENU_ENUM_LABEL_MENU_DRIVER_RGUI_STR "rgui"
|
|
#define MENU_ENUM_LABEL_MENU_DRIVER_OZONE_STR "ozone"
|
|
#define MENU_ENUM_LABEL_MENU_DRIVER_MATERIALUI_STR "glui"
|
|
#define MENU_ENUM_LABEL_MENU_DRIVER_XMB_STR "xmb"
|
|
#define MENU_ENUM_LABEL_MUSIC_TAB_STR "music_tab"
|
|
#define MENU_ENUM_LABEL_NETPLAY_REQUEST_DEVICE_I_STR "netplay_request_device_%u"
|
|
#define MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_MIN_STR "netplay_input_latency_frames_min"
|
|
#define MENU_ENUM_LABEL_NETPLAY_INPUT_LATENCY_FRAMES_RANGE_STR "netplay_input_latency_frames_range"
|
|
#define MENU_ENUM_LABEL_NETPLAY_DISCONNECT_STR "menu_netplay_disconnect"
|
|
#define MENU_ENUM_LABEL_NETPLAY_ENABLE_CLIENT_STR "menu_netplay_enable_client"
|
|
#define MENU_ENUM_LABEL_NETPLAY_ENABLE_HOST_STR "menu_netplay_enable_host"
|
|
#define MENU_ENUM_LABEL_NETPLAY_KICK_STR "menu_netplay_kick"
|
|
#define MENU_ENUM_LABEL_NETPLAY_BAN_STR "menu_netplay_ban"
|
|
#define MENU_ENUM_LABEL_NETWORK_CMD_PORT_STR "network_cmd_port"
|
|
#define MENU_ENUM_LABEL_NETWORK_INFORMATION_STR "network_information"
|
|
#define MENU_ENUM_LABEL_NETWORK_INFO_ENTRY_STR "network_info_entry"
|
|
#define MENU_ENUM_LABEL_NETWORK_REMOTE_PORT_STR "network_remote_base_port"
|
|
#define MENU_ENUM_LABEL_NETWORK_REMOTE_USER_1_ENABLE_STR "network_remote_user_1_enable"
|
|
#define MENU_ENUM_LABEL_NETWORK_REMOTE_USER_LAST_ENABLE_STR "network_remote_user_last_enable"
|
|
#define MENU_ENUM_LABEL_NETWORK_HOSTING_SETTINGS_STR "network_hosting_settings"
|
|
#define MENU_ENUM_LABEL_NETPLAY_LOBBY_FILTERS_STR "netplay_lobby_filters"
|
|
#define MENU_ENUM_LABEL_NO_ACHIEVEMENTS_TO_DISPLAY_STR "no_achievements_to_display"
|
|
#define MENU_ENUM_LABEL_NO_CORES_AVAILABLE_STR "no_cores_available"
|
|
#define MENU_ENUM_LABEL_NO_CORE_INFORMATION_AVAILABLE_STR "no_core_information_available"
|
|
#define MENU_ENUM_LABEL_NO_CORE_BACKUPS_AVAILABLE_STR "no_core_backups_available"
|
|
#define MENU_ENUM_LABEL_NO_CORE_OPTIONS_AVAILABLE_STR "no_core_options_available"
|
|
#define MENU_ENUM_LABEL_NO_ENTRIES_TO_DISPLAY_STR "no_entries_to_display"
|
|
#define MENU_ENUM_LABEL_NO_HISTORY_AVAILABLE_STR "no_history"
|
|
#define MENU_ENUM_LABEL_NO_ITEMS_STR "no_items"
|
|
#define MENU_ENUM_LABEL_NO_NETPLAY_HOSTS_FOUND_STR "no_netplay_hosts_found"
|
|
#define MENU_ENUM_LABEL_NO_NETPLAY_CLIENTS_FOUND_STR "no_netplay_clients_found"
|
|
#define MENU_ENUM_LABEL_NO_BT_DEVICES_FOUND_STR "no_bt_devices_found"
|
|
#define MENU_ENUM_LABEL_NO_NETWORKS_FOUND_STR "no_networks_found"
|
|
#define MENU_ENUM_LABEL_NO_PERFORMANCE_COUNTERS_STR "no_performance_counters"
|
|
#define MENU_ENUM_LABEL_NO_PLAYLISTS_STR "no_playlists"
|
|
#define MENU_ENUM_LABEL_NO_PLAYLIST_ENTRIES_AVAILABLE_STR "no_playlist_entries_available"
|
|
#define MENU_ENUM_LABEL_NO_SETTINGS_FOUND_STR "menu_label_no_settings_found"
|
|
#define MENU_ENUM_LABEL_NO_PRESETS_FOUND_STR "menu_label_no_presets_found"
|
|
#define MENU_ENUM_LABEL_NO_SHADER_PARAMETERS_STR "no_shader_parameters."
|
|
#define MENU_ENUM_LABEL_ONLINE_STR "online"
|
|
#define MENU_ENUM_LABEL_ONSCREEN_VIDEO_LAYOUT_SETTINGS_STR "onscreen_video_layout_settings"
|
|
#define MENU_ENUM_LABEL_OPEN_ARCHIVE_STR "open_archive"
|
|
#define MENU_ENUM_LABEL_OPEN_ARCHIVE_DETECT_CORE_STR "open_archive_detect_core"
|
|
#define MENU_ENUM_LABEL_OVERLAY_AUTOLOAD_PREFERRED_STR "overlay_autoload_preferred"
|
|
#define MENU_ENUM_LABEL_VIDEO_LAYOUT_DIRECTORY_STR "video_layout_directory"
|
|
#define MENU_ENUM_LABEL_OSK_OVERLAY_OPACITY_STR "input_osk_overlay_opacity"
|
|
#define MENU_ENUM_LABEL_OSK_OVERLAY_PRESET_STR "input_osk_overlay"
|
|
#define MENU_ENUM_LABEL_PAL60_ENABLE_STR "pal60_enable"
|
|
#define MENU_ENUM_LABEL_PARENT_DIRECTORY_STR "parent_directory"
|
|
#define MENU_ENUM_LABEL_PERFCNT_ENABLE_STR "perfcnt_enable"
|
|
#define MENU_ENUM_LABEL_PLAYLISTS_TAB_STR "playlists_tab"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_COLLECTION_ENTRY_STR "playlist_collection_entry"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_ENTRY_STR "playlist_entry"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_LIST_STR "playlist_manager_list"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_SETTINGS_STR "playlist_manager_settings"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_DEFAULT_CORE_STR "playlist_manager_default_core"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_RESET_CORES_STR "playlist_manager_reset_cores"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_LABEL_DISPLAY_MODE_STR "playlist_manager_label_display_mode"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_RIGHT_THUMBNAIL_MODE_STR "playlist_manager_right_thumbnail_mode"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_LEFT_THUMBNAIL_MODE_STR "playlist_manager_left_thumbnail_mode"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_SORT_MODE_STR "playlist_manager_sort_mode"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_CLEAN_PLAYLIST_STR "playlist_manager_clean_playlist"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_MANAGER_REFRESH_PLAYLIST_STR "playlist_manager_refresh_playlist"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SETTINGS_BEGIN_STR "playlist_settings_begin"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_STR "rdb_entry"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_DETAIL_STR "rdb_entry_detail"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_ANALOG_STR "rdb_entry_analog"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_BBFC_RATING_STR "rdb_entry_bbfc_rating"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_CERO_RATING_STR "rdb_entry_cero_rating"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_CRC32_STR "rdb_entry_crc32"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_DESCRIPTION_STR "rdb_entry_description"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DUMP_DISC_LIST_STR "deferred_dump_disc_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_LOAD_DISC_LIST_STR "deferred_load_disc_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_EJECT_DISC_STR "deferred_eject_disc"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_DEVELOPER_STR "rdb_entry_developer"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_ISSUE_STR "rdb_entry_edge_magazine_issue"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_RATING_STR "rdb_entry_edge_magazine_rating"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_EDGE_MAGAZINE_REVIEW_STR "rdb_entry_edge_magazine_review"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_ELSPA_RATING_STR "rdb_entry_elspa_rating"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_ENHANCEMENT_HW_STR "rdb_entry_enhancement_hw"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_ESRB_RATING_STR "rdb_entry_esrb_rating"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_FAMITSU_MAGAZINE_RATING_STR "rdb_entry_famitsu_magazine_rating"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_FRANCHISE_STR "rdb_entry_franchise"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_GENRE_STR "rdb_entry_genre"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_ACHIEVEMENTS_STR "rdb_entry_achievements"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_CATEGORY_STR "rdb_entry_category"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_LANGUAGE_STR "rdb_entry_language"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_REGION_STR "rdb_entry_region"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_CONSOLE_EXCLUSIVE_STR "rdb_entry_console_exclusive"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_PLATFORM_EXCLUSIVE_STR "rdb_entry_platform_exclusive"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_RUMBLE_STR "rdb_entry_rumble"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_SCORE_STR "rdb_entry_score"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_MEDIA_STR "rdb_entry_media"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_CONTROLS_STR "rdb_entry_controls"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_ARTSTYLE_STR "rdb_entry_artstyle"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_GAMEPLAY_STR "rdb_entry_gameplay"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_NARRATIVE_STR "rdb_entry_narrative"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_PACING_STR "rdb_entry_pacing"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_PERSPECTIVE_STR "rdb_entry_perspective"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_SETTING_STR "rdb_entry_setting"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_VISUAL_STR "rdb_entry_visual"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_VEHICULAR_STR "rdb_entry_vehicular"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_MAX_USERS_STR "rdb_entry_max_users"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_MD5_STR "rdb_entry_md5"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_NAME_STR "rdb_entry_name"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_ORIGIN_STR "rdb_entry_origin"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_PEGI_RATING_STR "rdb_entry_pegi_rating"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_PUBLISHER_STR "rdb_entry_publisher"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_MONTH_STR "rdb_entry_releasemonth"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_RELEASE_YEAR_STR "rdb_entry_releaseyear"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_SERIAL_STR "rdb_entry_serial"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_SHA1_STR "rdb_entry_sha1"
|
|
#define MENU_ENUM_LABEL_RDB_ENTRY_TGDB_RATING_STR "rdb_entry_tgdb_rating"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_STR "content_info"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_LABEL_STR "content_info_label"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_PATH_STR "content_info_path"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_CORE_NAME_STR "content_info_core_name"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_DATABASE_STR "content_info_database"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_RUNTIME_STR "content_info_runtime"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_LAST_PLAYED_STR "content_info_last_played"
|
|
#define MENU_ENUM_LABEL_CONTENT_INFO_PLAY_COUNT_STR "content_info_play_count"
|
|
#define MENU_ENUM_LABEL_RECORDING_CONFIG_DIRECTORY_STR "recording_config_directory"
|
|
#define MENU_ENUM_LABEL_RECORDING_OUTPUT_DIRECTORY_STR "recording_output_directory"
|
|
#define MENU_ENUM_LABEL_RECORD_DRIVER_STR "record_driver"
|
|
#define MENU_ENUM_LABEL_MIDI_DRIVER_STR "midi_driver"
|
|
#define MENU_ENUM_LABEL_UI_COMPANION_DRIVER_STR "ui_companion_driver"
|
|
#define MENU_ENUM_LABEL_DEFERRED_REMAP_FILE_MANAGER_LIST_STR "deferred_remap_file_manager_list"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_MANAGER_LIST_STR "remap_file_manager_list"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_INFO_STR "remap_file_info"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_LOAD_STR "remap_file_load"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_SAVE_AS_STR "remap_file_save_as"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_SAVE_CORE_STR "remap_file_save_core"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_SAVE_CONTENT_DIR_STR "remap_file_save_content_dir"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_SAVE_GAME_STR "remap_file_save_game"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CONTENT_DIR_STR "remap_file_remove_content_dir"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_REMOVE_CORE_STR "remap_file_remove_core"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_REMOVE_GAME_STR "remap_file_remove_game"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_RESET_STR "remap_file_reset"
|
|
#define MENU_ENUM_LABEL_REMAP_FILE_FLUSH_STR "remap_file_flush"
|
|
#define MENU_ENUM_LABEL_RESTART_CONTENT_STR "restart_content"
|
|
#define MENU_ENUM_LABEL_RESUME_CONTENT_STR "resume_content"
|
|
#define MENU_ENUM_LABEL_CHEAT_SETTINGS_STR "cheat_settings"
|
|
#define MENU_ENUM_LABEL_REWIND_BUFFER_SIZE_STR "rewind_buffer_size"
|
|
#define MENU_ENUM_LABEL_MENU_ENUM_THROTTLE_FRAMERATE_STR "menu_throttle_framerate"
|
|
#define MENU_ENUM_LABEL_ADD_TO_FAVORITES_STR "favorites_add"
|
|
#define MENU_ENUM_LABEL_ADD_TO_FAVORITES_PLAYLIST_STR "favorites_add_playlist"
|
|
#define MENU_ENUM_LABEL_ADD_TO_PLAYLIST_STR "playlist_add"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ADD_TO_PLAYLIST_LIST_STR "deferred_add_to_playlist_list"
|
|
#define MENU_ENUM_LABEL_ADD_ENTRY_TO_PLAYLIST_STR "add_entry_to_playlist"
|
|
#define MENU_ENUM_LABEL_CREATE_NEW_PLAYLIST_STR "playlist_create"
|
|
#define MENU_ENUM_LABEL_ADD_TO_PLAYLIST_QUICKMENU_STR "playlist_add_quickmenu"
|
|
#define MENU_ENUM_LABEL_DEFERRED_ADD_TO_PLAYLIST_QUICKMENU_STR "deferred_add_to_playlist_quickmenu"
|
|
#define MENU_ENUM_LABEL_ADD_ENTRY_TO_PLAYLIST_QUICKMENU_STR "add_entry_to_playlist_quickmenu"
|
|
#define MENU_ENUM_LABEL_CREATE_NEW_PLAYLIST_QUICKMENU_STR "playlist_create_quickmenu"
|
|
#define MENU_ENUM_LABEL_SET_CORE_ASSOCIATION_STR "set_core_association"
|
|
#define MENU_ENUM_LABEL_RESET_CORE_ASSOCIATION_STR "reset_core_association"
|
|
#define MENU_ENUM_LABEL_DOWNLOAD_PL_ENTRY_THUMBNAILS_STR "download_pl_entry_thumbnails"
|
|
#define MENU_ENUM_LABEL_RUN_STR "collection"
|
|
#define MENU_ENUM_LABEL_RUN_MUSIC_STR "collection_music"
|
|
#define MENU_ENUM_LABEL_SAMBA_ENABLE_STR "samba_enable"
|
|
#define MENU_ENUM_LABEL_SAVEFILE_DIRECTORY_STR "savefile_directory"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_AUTO_LOAD_STR "savestate_auto_load"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_THUMBNAIL_ENABLE_STR "savestate_thumbnails"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_AUTO_SAVE_STR "savestate_auto_save"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_DIRECTORY_STR "savestate_directory"
|
|
#define MENU_ENUM_LABEL_OVERRIDE_FILE_LOAD_STR "override_file_load"
|
|
#define MENU_ENUM_LABEL_OVERRIDE_FILE_SAVE_AS_STR "override_file_save_as"
|
|
#define MENU_ENUM_LABEL_OVERRIDE_UNLOAD_STR "override_unload"
|
|
#define MENU_ENUM_LABEL_SAVE_AS_CONFIG_STR "save_as_config"
|
|
#define MENU_ENUM_LABEL_SAVE_MAIN_CONFIG_STR "save_main_config"
|
|
#define MENU_ENUM_LABEL_SAVE_STATE_STR "save_state"
|
|
#define MENU_ENUM_LABEL_RECORD_REPLAY_STR "record_replay"
|
|
#define MENU_ENUM_LABEL_PLAY_REPLAY_STR "play_replay"
|
|
#define MENU_ENUM_LABEL_HALT_REPLAY_STR "halt_replay"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_MODE_AUTOMATIC_STR "cloud_sync_sync_mode_automatic"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_MODE_MANUAL_STR "cloud_sync_sync_mode_manual"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_DRIVER_STR "cloud_sync_driver"
|
|
#define MENU_ENUM_LABEL_SCAN_DIRECTORY_STR "scan_directory"
|
|
#define MENU_ENUM_LABEL_SCAN_FILE_STR "scan_file"
|
|
#define MENU_ENUM_LABEL_SCAN_TARGET_PLAYLIST_STR "scan_target_playlist"
|
|
#define MENU_ENUM_LABEL_SCAN_SINGLE_FILE_STR "scan_single_file"
|
|
#define MENU_ENUM_LABEL_SCAN_OMIT_DB_REF_STR "scan_omit_db_ref"
|
|
#define MENU_ENUM_LABEL_NETPLAY_REFRESH_ROOMS_STR "refresh_rooms"
|
|
#define MENU_ENUM_LABEL_NETPLAY_REFRESH_LAN_STR "refresh_lan"
|
|
#define MENU_ENUM_LABEL_SCAN_THIS_DIRECTORY_STR "scan_this_directory"
|
|
#define MENU_ENUM_LABEL_SETTINGS_TAB_STR "settings_tab"
|
|
#define MENU_ENUM_LABEL_SHOW_HIDDEN_FILES_STR "show_hidden_files"
|
|
#define MENU_ENUM_LABEL_RUN_AHEAD_UNSUPPORTED_STR "run_ahead_unsupported"
|
|
#define MENU_ENUM_LABEL_RUNAHEAD_MODE_STR "run_ahead_mode"
|
|
#define MENU_ENUM_LABEL_RUN_AHEAD_FRAMES_STR "run_ahead_frames"
|
|
#define MENU_ENUM_LABEL_PREEMPT_FRAMES_STR "preemptive_frames"
|
|
#define MENU_ENUM_LABEL_SORT_SAVEFILES_ENABLE_STR "sort_savefiles_enable"
|
|
#define MENU_ENUM_LABEL_SORT_SAVESTATES_ENABLE_STR "sort_savestates_enable"
|
|
#define MENU_ENUM_LABEL_SORT_SAVEFILES_BY_CONTENT_ENABLE_STR "sort_savefiles_by_content_enable"
|
|
#define MENU_ENUM_LABEL_SORT_SAVESTATES_BY_CONTENT_ENABLE_STR "sort_savestates_by_content_enable"
|
|
#define MENU_ENUM_LABEL_SORT_SCREENSHOTS_BY_CONTENT_ENABLE_STR "sort_screenshots_by_content_enable"
|
|
#define MENU_ENUM_LABEL_SAVEFILES_IN_CONTENT_DIR_ENABLE_STR "savefiles_in_content_dir_enable"
|
|
#define MENU_ENUM_LABEL_SAVESTATES_IN_CONTENT_DIR_ENABLE_STR "savestates_in_content_dir_enable"
|
|
#define MENU_ENUM_LABEL_SYSTEMFILES_IN_CONTENT_DIR_ENABLE_STR "systemfiles_in_content_dir_enable"
|
|
#define MENU_ENUM_LABEL_SCREENSHOTS_IN_CONTENT_DIR_ENABLE_STR "screenshots_in_content_dir_enable"
|
|
#define MENU_ENUM_LABEL_SSH_ENABLE_STR "ssh_enable"
|
|
#define MENU_ENUM_LABEL_SAFESHUTDOWN_ENABLE_STR "safeshutdown_enable"
|
|
#define MENU_ENUM_LABEL_DEFERRED_LAKKA_SWITCH_OPTIONS_LIST_STR "deferred_lakka_switch_options_list"
|
|
#define MENU_ENUM_LABEL_SWITCH_OC_ENABLE_STR "Switch_OC_enable"
|
|
#define MENU_ENUM_LABEL_SWITCH_CEC_ENABLE_STR "Switch_CEC_enable"
|
|
#define MENU_ENUM_LABEL_BLUETOOTH_ERTM_DISABLE_STR "Switch_ERTM_Disable"
|
|
#define MENU_ENUM_LABEL_SYSTEM_BGM_ENABLE_STR "system_bgm_enable"
|
|
#define MENU_ENUM_LABEL_SYSTEM_INFORMATION_STR "system_information"
|
|
#define MENU_ENUM_LABEL_SYSTEM_INFO_ENTRY_STR "system_info_entry"
|
|
#define MENU_ENUM_LABEL_TAKE_SCREENSHOT_STR "take_screenshot"
|
|
#define MENU_ENUM_LABEL_THUMBNAILS_STR "thumbnails"
|
|
#define MENU_ENUM_LABEL_LEFT_THUMBNAILS_STR "left thumbnails"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_THUMBNAIL_SCALE_FACTOR_STR "menu_xmb_thumbnail_scale_factor"
|
|
#define MENU_ENUM_LABEL_PL_THUMBNAILS_UPDATER_LIST_STR "pl_thumbnails_updater_list"
|
|
#define MENU_ENUM_LABEL_PL_THUMBNAILS_UPDATER_ENTRY_STR "pl_thumbnails_updater_entry"
|
|
#define MENU_ENUM_LABEL_UNDO_LOAD_STATE_STR "undo_load_state"
|
|
#define MENU_ENUM_LABEL_UNDO_SAVE_STATE_STR "undo_save_state"
|
|
#define MENU_ENUM_LABEL_UPDATE_ASSETS_STR "update_assets"
|
|
#define MENU_ENUM_LABEL_UPDATE_AUTOCONFIG_PROFILES_STR "update_autoconfig_profiles"
|
|
#define MENU_ENUM_LABEL_UPDATE_CG_SHADERS_STR "update_cg_shaders"
|
|
#define MENU_ENUM_LABEL_UPDATE_CHEATS_STR "update_cheats"
|
|
#define MENU_ENUM_LABEL_UPDATE_CORE_INFO_FILES_STR "update_core_info_files"
|
|
#define MENU_ENUM_LABEL_UPDATE_DATABASES_STR "update_databases"
|
|
#define MENU_ENUM_LABEL_UPDATE_GLSL_SHADERS_STR "update_glsl_shaders"
|
|
#define MENU_ENUM_LABEL_UPDATE_LAKKA_STR "update_lakka"
|
|
#define MENU_ENUM_LABEL_UPDATE_OVERLAYS_STR "update_overlays"
|
|
#define MENU_ENUM_LABEL_UPDATE_SLANG_SHADERS_STR "update_slang_shaders"
|
|
#define MENU_ENUM_LABEL_URL_ENTRY_STR "url_entry"
|
|
#define MENU_ENUM_LABEL_USER_LANGUAGE_STR "user_language"
|
|
#define MENU_ENUM_LABEL_USE_THIS_DIRECTORY_STR "use_this_directory"
|
|
#define MENU_ENUM_LABEL_VIDEO_ALLOW_ROTATE_STR "video_allow_rotate"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_STR "video_driver"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_GL_STR "gl"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_GL1_STR "gl1"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_GL_CORE_STR "glcore"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_VULKAN_STR "vulkan"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_METAL_STR "metal"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_DRM_STR "drm"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_WII_STR "gx"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_WIIU_STR "gx2"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_XENON360_STR "xenon360"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_D3D8_STR "d3d8"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_D3D9_CG_STR "d3d9_cg"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_D3D9_HLSL_STR "d3d9_hlsl"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_D3D10_STR "d3d10"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_D3D11_STR "d3d11"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_D3D12_STR "d3d12"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_PSP1_STR "psp1"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_PS2_STR "ps2"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_VITA2D_STR "vita2d"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_CTR_STR "ctr"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_SWITCH_STR "switch"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_XVIDEO_STR "xvideo"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_SDL_DINGUX_STR "sdl_dingux"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_SDL_RS90_STR "sdl_rs90"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_SDL1_STR "sdl"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_SDL2_STR "sdl2"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_EXT_STR "ext"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_VG_STR "vg"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_OMAP_STR "omap"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_EXYNOS_STR "exynos"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_DISPMANX_STR "dispmanx"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_SUNXI_STR "sunxi"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_CACA_STR "caca"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_GDI_STR "gdi"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_VGA_STR "vga"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_FPGA_STR "fpga"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_RSX_STR "rsx"
|
|
#define MENU_ENUM_LABEL_VIDEO_DRIVER_NULL_STR "null"
|
|
#define MENU_ENUM_LABEL_VIDEO_FILTER_REMOVE_STR "video_filter_remove"
|
|
#define MENU_ENUM_LABEL_VIDEO_FILTER_FLICKER_STR "video_filter_flicker"
|
|
#define MENU_ENUM_LABEL_VIDEO_FRAME_TIME_SAMPLE_GATED_STR "video_frame_time_sample_gated"
|
|
#define MENU_ENUM_LABEL_VIDEO_GAMMA_STR "video_gamma"
|
|
#define MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_POLLED_STR "video_refresh_rate_polled"
|
|
#define MENU_ENUM_LABEL_VIDEO_USE_METAL_ARG_BUFFERS_STR "video_use_metal_arg_buffers"
|
|
#define MENU_ENUM_LABEL_SHADER_APPLY_CHANGES_STR "shader_apply_changes"
|
|
#define MENU_ENUM_LABEL_SHADER_OPTIONS_STR "shader_options"
|
|
#define MENU_ENUM_LABEL_SHADER_PARAMETERS_ENTRY_STR "shader_parameters_entry"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_FILTER_PASS_STR "video_shader_filter_pass"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_NUM_PASSES_STR "video_shader_num_passes"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PARAMETERS_STR "video_shader_parameters"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PASS_STR "video_shader_pass"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_STR "video_shader_preset"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PREPEND_STR "video_shader_preset_prepend"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_APPEND_STR "video_shader_preset_append"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_PARAMETERS_STR "video_shader_preset_parameters"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_MANAGER_STR "video_shader_preset_manager"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_REMOVE_GLOBAL_STR "video_shader_preset_remove_global"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_REMOVE_CORE_STR "video_shader_preset_remove_core"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_REMOVE_PARENT_STR "video_shader_preset_remove_parent"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_REMOVE_GAME_STR "video_shader_preset_remove_game"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CURRENT_STR "video_shader_preset_save_current"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_AS_STR "video_shader_preset_save_as"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GLOBAL_STR "video_shader_preset_save_global"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_CORE_STR "video_shader_preset_save_core"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_PARENT_STR "video_shader_preset_save_parent"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_GAME_STR "video_shader_preset_save_game"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_SCALE_PASS_STR "video_shader_scale_pass"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHARED_CONTEXT_STR "video_shared_context"
|
|
#define MENU_ENUM_LABEL_VIDEO_SOFT_FILTER_STR "soft_filter"
|
|
#define MENU_ENUM_LABEL_VIDEO_TAB_STR "video_tab"
|
|
#define MENU_ENUM_LABEL_VIDEO_THREADED_STR "video_threaded"
|
|
#define MENU_ENUM_LABEL_VIDEO_FORCE_RESOLUTION_STR "video_force_resolution"
|
|
#define MENU_ENUM_LABEL_WIFI_DRIVER_STR "wifi_driver"
|
|
#define MSG_BRINGING_UP_COMMAND_INTERFACE_ON_PORT_STR "bringing_up_command_interface_at_port"
|
|
#define MSG_CONNECT_DEVICE_FROM_A_VALID_PORT_STR "connect_device_from_a_valid_port"
|
|
#define MSG_DISCONNECT_DEVICE_FROM_A_VALID_PORT_STR "disconnect_device_from_a_valid_port"
|
|
#define MSG_FAILED_TO_START_AUDIO_DRIVER_STR "failed_to_start_audio_driver"
|
|
#define MSG_FOUND_LAST_STATE_SLOT_STR "found_last_state_slot"
|
|
#define MENU_ENUM_LABEL_DETECT_CORE_LIST_OK_STR "detect_core_list_ok"
|
|
#define MENU_ENUM_LABEL_DETECT_CORE_LIST_OK_CURRENT_CORE_STR "detect_core_list_ok_current_core"
|
|
#define MENU_ENUM_LABEL_NO_DISK_STR "no_disk"
|
|
#define MENU_ENUM_LABEL_DEFERRED_RPL_ENTRY_ACTIONS_STR "deferred_rpl_entry_actions"
|
|
#define MENU_ENUM_LABEL_OVERLAY_SETTINGS_STR "overlay_settings"
|
|
#define MENU_ENUM_LABEL_SHADER_PIPELINE_RIBBON_STR "shader_pipeline_ribbon"
|
|
#define MENU_ENUM_LABEL_SHADER_PIPELINE_RIBBON_SIMPLIFIED_STR "shader_pipeline_ribbon_simplified"
|
|
#define MENU_ENUM_LABEL_SHADER_PIPELINE_SIMPLE_SNOW_STR "shader_pipeline_simple_snow"
|
|
#define MENU_ENUM_LABEL_SHADER_PIPELINE_SNOW_STR "shader_pipeline_snow"
|
|
#define MENU_ENUM_LABEL_FILE_DETECT_CORE_LIST_PUSH_DIR_STR "detect_core_list_push_dir"
|
|
#define MENU_ENUM_LABEL_BROWSE_START_STR "browse_start"
|
|
#define MENU_ENUM_LABEL_SHADER_PIPELINE_BOKEH_STR "shader_pipeline_bokeh"
|
|
#define MENU_ENUM_LABEL_NETPLAY_MITM_SERVER_STR "netplay_mitm_server"
|
|
#define MENU_ENUM_LABEL_ADD_TO_MIXER_STR "audio_add_to_mixer"
|
|
#define MENU_ENUM_LABEL_ADD_TO_MIXER_AND_PLAY_STR "audio_add_to_mixer_and_play"
|
|
#define MENU_ENUM_LABEL_ADD_TO_MIXER_AND_COLLECTION_STR "audio_add_to_mixer_and_collection"
|
|
#define MENU_ENUM_LABEL_ADD_TO_MIXER_AND_COLLECTION_AND_PLAY_STR "audio_add_to_mixer_and_collection_and_play"
|
|
#define MENU_ENUM_LABEL_AUDIO_MIXER_MUTE_STR "audio_mixer_mute_enable"
|
|
#define MENU_ENUM_LABEL_MENU_SCROLL_FAST_STR "menu_scroll_fast"
|
|
#define MENU_ENUM_LABEL_CORE_LOCK_STR "core_lock"
|
|
#define MENU_ENUM_LABEL_CORE_SET_STANDALONE_EXEMPT_STR "core_set_standalone_exempt"
|
|
#define MENU_ENUM_LABEL_CORE_DELETE_STR "core_delete"
|
|
#define MENU_ENUM_LABEL_GOTO_FAVORITES_STR "goto_favorites"
|
|
#define MENU_ENUM_LABEL_GOTO_MUSIC_STR "goto_music"
|
|
#define MENU_ENUM_LABEL_GOTO_IMAGES_STR "goto_images"
|
|
#define MENU_ENUM_LABEL_GOTO_VIDEO_STR "goto_video"
|
|
#define MENU_ENUM_LABEL_GOTO_EXPLORE_STR "goto_explore"
|
|
#define MENU_ENUM_LABEL_GOTO_CONTENTLESS_CORES_STR "goto_contentless_cores"
|
|
#define MENU_ENUM_LABEL_RENAME_ENTRY_STR "rename_entry"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_START_RECORDING_STR "quick_menu_start_recording"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_START_STREAMING_STR "quick_menu_start_streaming"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_STOP_RECORDING_STR "quick_menu_stop_recording"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_STOP_STREAMING_STR "quick_menu_stop_streaming"
|
|
#define MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_SINC_STR "sinc"
|
|
#define MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_CC_STR "CC"
|
|
#define MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_NEAREST_STR "nearest"
|
|
#define MENU_ENUM_LABEL_AUDIO_RESAMPLER_DRIVER_NULL_STR "null"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_ANDROID_STR "android"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_PS4_STR "ps4"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_PS3_STR "ps3"
|
|
#ifdef VITA
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_PSP_STR "vita"
|
|
#else
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_PSP_STR "psp"
|
|
#endif
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_PS2_STR "ps2"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_CTR_STR "ctr"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_SWITCH_STR "switch"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_SDL_STR "sdl"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_SDL2_STR "sdl2"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_SDL_DINGUX_STR "sdl_dingux"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_DINPUT_STR "dinput"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_WINRAW_STR "raw"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_X_STR "x"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_WAYLAND_STR "wayland"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_XENON360_STR "xenon360"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_XINPUT_STR "xinput"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_UWP_STR "uwp"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_WII_STR "gx"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_WIIU_STR "wiiu"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_UDEV_STR "udev"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_LINUXRAW_STR "linuxraw"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_COCOA_STR "cocoa"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_QNX_STR "qnx_input"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_RWEBINPUT_STR "rwebinput"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_DOS_STR "dos"
|
|
#define MENU_ENUM_LABEL_INPUT_DRIVER_NULL_STR "null"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_ANDROID_STR "android"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_CTR_STR "ctr"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_DINPUT_STR "dinput"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_DOS_STR "dos"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_GX_STR "gx"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_HID_STR "hid"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_LINUXRAW_STR "linuxraw"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_PARPORT_STR "parport"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_PS2_STR "ps2"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_PS3_STR "ps3"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_PS4_STR "ps4"
|
|
#ifdef VITA
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_PSP_STR "vita"
|
|
#else
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_PSP_STR "psp"
|
|
#endif
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_QNX_STR "qnx"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_RWEBPAD_STR "rwebpad"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_SDL_DINGUX_STR "sdl_dingux"
|
|
#ifdef HAVE_SDL2
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_SDL_STR "sdl2"
|
|
#else
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_SDL_STR "sdl"
|
|
#endif
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_SWITCH_STR "switch"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_UDEV_STR "udev"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_WIIU_STR "wiiu"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_XDK_STR "xdk"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_XINPUT_STR "xinput"
|
|
#define MENU_ENUM_LABEL_JOYPAD_DRIVER_NULL_STR "null"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_VIDEO_LAYOUT_STR "menu_show_video_layout_settings"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MIXER_STREAM_SETTINGS_LIST_STR "deferred_mixer_stream_settings_list"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_OVERRIDE_OPTIONS_STR "quick_menu_override_options"
|
|
#define MENU_ENUM_LABEL_DEFERRED_QUICK_MENU_OVERRIDE_OPTIONS_STR "deferred_quick_menu_override_options"
|
|
#define MENU_ENUM_LABEL_DISCORD_IN_MENU_STR "discord_in_menu"
|
|
#define MENU_ENUM_LABEL_DISCORD_IN_GAME_STR "discord_in_game"
|
|
#define MENU_ENUM_LABEL_DISCORD_IN_GAME_PAUSED_STR "discord_in_game_paused"
|
|
#define MENU_ENUM_LABEL_DISCORD_STATUS_PLAYING_STR "discord_status_playing"
|
|
#define MENU_ENUM_LABEL_DISCORD_STATUS_PAUSED_STR "discord_status_paused"
|
|
#define MENU_ENUM_LABEL_MIDI_INPUT_STR "midi_input"
|
|
#define MENU_ENUM_LABEL_MIDI_OUTPUT_STR "midi_output"
|
|
#define MENU_ENUM_LABEL_CHEAT_IDX_STR "cheat_idx"
|
|
#define MENU_ENUM_LABEL_CHEAT_DESC_STR "cheat_desc"
|
|
#define MENU_ENUM_LABEL_CHEAT_STATE_STR "cheat_state"
|
|
#define MENU_ENUM_LABEL_CHEAT_CODE_STR "cheat_code"
|
|
#define MENU_ENUM_LABEL_CHEAT_HANDLER_STR "cheat_handler"
|
|
#define MENU_ENUM_LABEL_CHEAT_MEMORY_SEARCH_SIZE_STR "cheat_memory_search_size"
|
|
#define MENU_ENUM_LABEL_CHEAT_TYPE_STR "cheat_type"
|
|
#define MENU_ENUM_LABEL_CHEAT_VALUE_STR "cheat_value"
|
|
#define MENU_ENUM_LABEL_CHEAT_REPEAT_COUNT_STR "cheat_repeat_count"
|
|
#define MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_VALUE_STR "cheat_repeat_add_to_value"
|
|
#define MENU_ENUM_LABEL_CHEAT_REPEAT_ADD_TO_ADDRESS_STR "cheat_repeat_add_to_address"
|
|
#define MENU_ENUM_LABEL_CHEAT_ADDRESS_STR "cheat_address"
|
|
#define MENU_ENUM_LABEL_CHEAT_ADDRESS_BIT_POSITION_STR "cheat_address_bit_position"
|
|
#define MENU_ENUM_LABEL_CHEAT_RUMBLE_TYPE_STR "cheat_rumble_type"
|
|
#define MENU_ENUM_LABEL_CHEAT_RUMBLE_VALUE_STR "cheat_rumble_value"
|
|
#define MENU_ENUM_LABEL_CHEAT_RUMBLE_PORT_STR "cheat_rumble_port"
|
|
#define MENU_ENUM_LABEL_CHEAT_RUMBLE_PRIMARY_STRENGTH_STR "cheat_rumble_primary_strength"
|
|
#define MENU_ENUM_LABEL_CHEAT_RUMBLE_PRIMARY_DURATION_STR "cheat_rumble_primary_duration"
|
|
#define MENU_ENUM_LABEL_CHEAT_RUMBLE_SECONDARY_STRENGTH_STR "cheat_rumble_secondary_strength"
|
|
#define MENU_ENUM_LABEL_CHEAT_RUMBLE_SECONDARY_DURATION_STR "cheat_rumble_secondary_duration"
|
|
#define MENU_ENUM_LABEL_CHEAT_ADD_NEW_AFTER_STR "cheat_add_new_after"
|
|
#define MENU_ENUM_LABEL_CHEAT_ADD_NEW_BEFORE_STR "cheat_add_new_before"
|
|
#define MENU_ENUM_LABEL_CHEAT_COPY_AFTER_STR "cheat_copy_after"
|
|
#define MENU_ENUM_LABEL_CHEAT_COPY_BEFORE_STR "cheat_copy_before"
|
|
#define MENU_ENUM_LABEL_CHEAT_DELETE_STR "cheat_delete"
|
|
#define MENU_ENUM_LABEL_CHEAT_START_OR_CONT_STR "cheat_start_or_cont"
|
|
#define MENU_ENUM_LABEL_CHEAT_START_OR_RESTART_STR "cheat_start_or_restart"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_EXACT_STR "cheat_search_exact"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_LT_STR "cheat_search_lt"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_GT_STR "cheat_search_gt"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_LTE_STR "cheat_search_lte"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_GTE_STR "cheat_search_gte"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_EQ_STR "cheat_search_eq"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_NEQ_STR "cheat_search_neq"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_EQPLUS_STR "cheat_search_eqplus"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_EQMINUS_STR "cheat_search_eqminus"
|
|
#define MENU_ENUM_LABEL_CHEAT_ADD_MATCHES_STR "cheat_add_matches"
|
|
#define MENU_ENUM_LABEL_CHEAT_ADD_NEW_TOP_STR "cheat_add_new_top"
|
|
#define MENU_ENUM_LABEL_CHEAT_ADD_NEW_BOTTOM_STR "cheat_add_new_bottom"
|
|
#define MENU_ENUM_LABEL_CHEAT_DELETE_ALL_STR "cheat_delete_all"
|
|
#define MENU_ENUM_LABEL_CHEAT_RELOAD_CHEATS_STR "cheat_reload_cheats"
|
|
#define MENU_ENUM_LABEL_CHEAT_BIG_ENDIAN_STR "cheat_big_endian"
|
|
#define MENU_ENUM_LABEL_CHEAT_MATCH_STR "cheat_match"
|
|
#define MENU_ENUM_LABEL_CHEAT_BROWSE_MEMORY_STR "cheat_browse_memory"
|
|
#define MENU_ENUM_LABEL_CHEAT_COPY_MATCH_STR "cheat_copy_match"
|
|
#define MENU_ENUM_LABEL_CHEAT_DELETE_MATCH_STR "cheat_delete_match"
|
|
#define MENU_ENUM_LABEL_UDP_STREAM_PORT_STR "udp_stream_port"
|
|
#define MENU_ENUM_LABEL_TWITCH_STREAM_KEY_STR "twitch_stream_key"
|
|
#define MENU_ENUM_LABEL_YOUTUBE_STREAM_KEY_STR "youtube_stream_key"
|
|
#define MENU_ENUM_LABEL_FACEBOOK_STREAM_KEY_STR "facebook_stream_key"
|
|
#define MENU_ENUM_LABEL_KICK_STREAM_KEY_STR "kick_stream_key"
|
|
#define MENU_ENUM_LABEL_STREAMING_MODE_STR "streaming_mode"
|
|
#define MENU_ENUM_LABEL_NO_MUSIC_AVAILABLE_STR "no_music"
|
|
#define MENU_ENUM_LABEL_NO_VIDEOS_AVAILABLE_STR "no_videos"
|
|
#define MENU_ENUM_LABEL_NO_IMAGES_AVAILABLE_STR "no_images"
|
|
#define MENU_ENUM_LABEL_NO_FAVORITES_AVAILABLE_STR "no_favorites"
|
|
#define MENU_ENUM_LABEL_NEW3DS_SPEEDUP_ENABLE_STR "new3ds_speedup_enable"
|
|
#define MENU_ENUM_LABEL_VIDEO_3DS_DISPLAY_MODE_STR "video_3ds_display_mode"
|
|
#define MENU_ENUM_LABEL_BOTTOM_ASSETS_DIRECTORY_STR "bottom_assets_directory"
|
|
#define MENU_ENUM_LABEL_AI_SERVICE_URL_STR "ai_service_url"
|
|
#define MENU_ENUM_LABEL_DELETE_PLAYLIST_STR "delete_playlist"
|
|
#define MENU_ENUM_LABEL_LOCALAP_ENABLE_STR "localap_enable"
|
|
#define MENU_ENUM_LABEL_DRIVER_SWITCH_ENABLE_STR "driver_switch_enable"
|
|
#define MENU_ENUM_LABEL_DEFERRED_MANUAL_CONTENT_SCAN_LIST_STR "deferred_manual_content_scan_list"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_LIST_STR "manual_content_scan_list"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_DIR_STR "manual_content_scan_dir"
|
|
#define MENU_ENUM_LABEL_SCAN_METHOD_STR "scan_method"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SCAN_METHOD_STR "deferred_dropdown_box_list_scan_method"
|
|
#define MENU_ENUM_LABEL_SCAN_USE_DB_STR "scan_use_db"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SCAN_USE_DB_STR "deferred_dropdown_box_list_scan_use_db"
|
|
#define MENU_ENUM_LABEL_SCAN_DB_SELECT_STR "scan_db_select"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_SCAN_DB_SELECT_STR "deferred_dropdown_box_list_scan_db_select"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_SYSTEM_NAME_STR "manual_content_scan_system_name"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_MANUAL_CONTENT_SCAN_SYSTEM_NAME_STR "deferred_dropdown_box_list_manual_content_scan_system_name"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_SYSTEM_NAME_CUSTOM_STR "manual_content_scan_system_name_custom"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_CORE_NAME_STR "manual_content_scan_core_name"
|
|
#define MENU_ENUM_LABEL_DEFERRED_DROPDOWN_BOX_LIST_MANUAL_CONTENT_SCAN_CORE_NAME_STR "deferred_dropdown_box_list_manual_content_scan_core_name"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_FILE_EXTS_STR "manual_content_scan_file_exts"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_SEARCH_RECURSIVELY_STR "manual_content_scan_search_recursively"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_SEARCH_ARCHIVES_STR "manual_content_scan_search_archives"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_DAT_FILE_STR "manual_content_scan_dat_file"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_DAT_FILE_FILTER_STR "manual_content_scan_dat_file_filter"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_OVERWRITE_STR "manual_content_scan_overwrite"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_VALIDATE_ENTRIES_STR "manual_content_scan_validate_entries"
|
|
#define MENU_ENUM_LABEL_MANUAL_CONTENT_SCAN_START_STR "manual_content_scan_start"
|
|
#define MENU_ENUM_LABEL_DEFERRED_AUDIO_OUTPUT_SETTINGS_LIST_STR "deferred_audio_output_settings_list"
|
|
#define MENU_ENUM_LABEL_DEFERRED_AUDIO_SYNCHRONIZATION_SETTINGS_LIST_STR "deferred_audio_synchronization_settings_list"
|
|
#define MENU_ENUM_LABEL_MIXER_ACTION_PLAY_STR "mixer_action_play"
|
|
#define MENU_ENUM_LABEL_MIXER_ACTION_PLAY_LOOPED_STR "mixer_action_play_looped"
|
|
#define MENU_ENUM_LABEL_MIXER_ACTION_PLAY_SEQUENTIAL_STR "mixer_action_play_sequential"
|
|
#define MENU_ENUM_LABEL_MIXER_ACTION_STOP_STR "mixer_action_stop"
|
|
#define MENU_ENUM_LABEL_MIXER_ACTION_REMOVE_STR "mixer_action_remove"
|
|
#define MENU_ENUM_LABEL_MIXER_ACTION_VOLUME_STR "mixer_action_volume"
|
|
#define MENU_ENUM_LABEL_CORE_GAME_AI_OPTIONS_STR "core_game_ai_options"
|
|
#define MENU_ENUM_LABEL_DEFERRED_SMB_CLIENT_SETTINGS_LIST_STR "deferred_smb_client_settings_list"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_SERVER_STR "smb_client_server"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_SHARE_STR "smb_client_share"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_SUBDIR_STR "smb_client_subdir"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_USERNAME_STR "smb_client_username"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_PASSWORD_STR "smb_client_password"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_WORKGROUP_STR "smb_client_workgroup"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_BROWSE_STR "smb_client_browse"
|
|
|
|
/* GENERATED REGION BEGIN: settings-definition label strings
|
|
*
|
|
* Produced by tools/gen_lbl_str.py from
|
|
* settings/settings_def_*.h. Do not edit by hand; rerun the
|
|
* script after adding or renaming a row there. */
|
|
#define MENU_ENUM_LABEL_ACCESSIBILITY_ENABLED_STR "accessibility_enabled"
|
|
#define MENU_ENUM_LABEL_ACCESSIBILITY_NARRATOR_ENGINE_STR "accessibility_narrator_engine"
|
|
#define MENU_ENUM_LABEL_ACCESSIBILITY_NARRATOR_SPEECH_SPEED_STR "accessibility_narrator_speech_speed"
|
|
#define MENU_ENUM_LABEL_ACCESSIBILITY_SETTINGS_STR "accessibility_settings"
|
|
#define MENU_ENUM_LABEL_ACCOUNTS_FACEBOOK_STR "facebook"
|
|
#define MENU_ENUM_LABEL_ACCOUNTS_KICK_STR "kick"
|
|
#define MENU_ENUM_LABEL_ACCOUNTS_LIST_STR "accounts_list"
|
|
#define MENU_ENUM_LABEL_ACCOUNTS_RETRO_ACHIEVEMENTS_STR "retro_achievements"
|
|
#define MENU_ENUM_LABEL_ACCOUNTS_TWITCH_STR "twitch"
|
|
#define MENU_ENUM_LABEL_ACCOUNTS_YOUTUBE_STR "youtube"
|
|
#define MENU_ENUM_LABEL_ADD_CONTENT_LIST_STR "add_content"
|
|
#define MENU_ENUM_LABEL_AI_SERVICE_ENABLE_STR "ai_service_enable"
|
|
#define MENU_ENUM_LABEL_AI_SERVICE_MODE_STR "ai_service_mode"
|
|
#define MENU_ENUM_LABEL_AI_SERVICE_PAUSE_STR "ai_service_pause"
|
|
#define MENU_ENUM_LABEL_AI_SERVICE_SETTINGS_STR "ai_service_settings"
|
|
#define MENU_ENUM_LABEL_AI_SERVICE_SOURCE_LANG_STR "ai_service_source_lang"
|
|
#define MENU_ENUM_LABEL_AI_SERVICE_TARGET_LANG_STR "ai_service_target_lang"
|
|
#define MENU_ENUM_LABEL_ANDROID_INPUT_DISCONNECT_WORKAROUND_STR "android_input_disconnect_workaround"
|
|
#define MENU_ENUM_LABEL_ASSETS_DIRECTORY_STR "assets_directory"
|
|
#define MENU_ENUM_LABEL_AUDIO_ASIO_CONTROL_PANEL_STR "audio_asio_control_panel"
|
|
#define MENU_ENUM_LABEL_AUDIO_ASIO_OUTPUT_CHANNEL_STR "audio_asio_output_channel"
|
|
#define MENU_ENUM_LABEL_AUDIO_BLOCK_FRAMES_STR "audio_block_frames"
|
|
#define MENU_ENUM_LABEL_AUDIO_DEVICE_STR "audio_device"
|
|
#define MENU_ENUM_LABEL_AUDIO_DSP_PLUGIN_STR "audio_dsp_plugin"
|
|
#define MENU_ENUM_LABEL_AUDIO_ENABLE_STR "audio_enable"
|
|
#define MENU_ENUM_LABEL_AUDIO_ENABLE_MENU_STR "audio_enable_menu"
|
|
#define MENU_ENUM_LABEL_AUDIO_FASTFORWARD_MUTE_STR "audio_fastforward_mute"
|
|
#define MENU_ENUM_LABEL_AUDIO_FASTFORWARD_SPEEDUP_STR "audio_fastforward_speedup"
|
|
#define MENU_ENUM_LABEL_AUDIO_FASTPATH_S16_STR "audio_fastpath_s16"
|
|
#define MENU_ENUM_LABEL_AUDIO_FILTER_DIR_STR "audio_filter_dir"
|
|
#define MENU_ENUM_LABEL_AUDIO_FORMAT_NEGOTIATION_STR "audio_format_negotiation"
|
|
#define MENU_ENUM_LABEL_AUDIO_MAX_TIMING_SKEW_STR "audio_max_timing_skew"
|
|
#define MENU_ENUM_LABEL_AUDIO_MIXER_SETTINGS_STR "audio_mixer_settings"
|
|
#define MENU_ENUM_LABEL_AUDIO_MIXER_VOLUME_STR "audio_mixer_volume"
|
|
#define MENU_ENUM_LABEL_AUDIO_OUTPUT_RATE_STR "audio_output_rate"
|
|
#define MENU_ENUM_LABEL_AUDIO_OUTPUT_SETTINGS_STR "audio_output_settings"
|
|
#define MENU_ENUM_LABEL_AUDIO_RESAMPLER_QUALITY_STR "audio_resampler_quality"
|
|
#define MENU_ENUM_LABEL_AUDIO_RESPECT_SILENT_MODE_STR "audio_respect_silent_mode"
|
|
#define MENU_ENUM_LABEL_AUDIO_REWIND_MUTE_STR "audio_rewind_mute"
|
|
#define MENU_ENUM_LABEL_AUDIO_SETTINGS_STR "audio_settings"
|
|
#define MENU_ENUM_LABEL_AUDIO_SINK_RATE_ESTIMATION_STR "audio_sink_rate_estimation"
|
|
#define MENU_ENUM_LABEL_AUDIO_SYNC_STR "audio_sync"
|
|
#define MENU_ENUM_LABEL_AUDIO_SYNCHRONIZATION_SETTINGS_STR "audio_synchronization_settings"
|
|
#define MENU_ENUM_LABEL_AUDIO_THREADED_PIPELINE_STR "audio_threaded_pipeline"
|
|
#define MENU_ENUM_LABEL_AUDIO_THREAD_PRIORITY_STR "audio_thread_priority"
|
|
#define MENU_ENUM_LABEL_AUDIO_VOLUME_STR "audio_volume"
|
|
#define MENU_ENUM_LABEL_AUDIO_WASAPI_EXCLUSIVE_MODE_STR "audio_wasapi_exclusive_mode"
|
|
#define MENU_ENUM_LABEL_AUDIO_WASAPI_SH_BUFFER_LENGTH_STR "audio_wasapi_sh_buffer_length"
|
|
#define MENU_ENUM_LABEL_AUTOSAVE_INTERVAL_STR "autosave_interval"
|
|
#define MENU_ENUM_LABEL_BATTERY_LEVEL_ENABLE_STR "menu_battery_level_enable"
|
|
#define MENU_ENUM_LABEL_BLUETOOTH_SETTINGS_STR "bluetooth_settings"
|
|
#define MENU_ENUM_LABEL_BOTTOM_FONT_COLOR_BLUE_STR "bottom_font_color_blue"
|
|
#define MENU_ENUM_LABEL_BOTTOM_FONT_COLOR_GREEN_STR "bottom_font_color_green"
|
|
#define MENU_ENUM_LABEL_BOTTOM_FONT_COLOR_OPACITY_STR "bottom_font_color_opacity"
|
|
#define MENU_ENUM_LABEL_BOTTOM_FONT_COLOR_RED_STR "bottom_font_color_red"
|
|
#define MENU_ENUM_LABEL_BOTTOM_FONT_ENABLE_STR "bottom_font_enable"
|
|
#define MENU_ENUM_LABEL_BOTTOM_FONT_SCALE_STR "bottom_font_scale"
|
|
#define MENU_ENUM_LABEL_BRIGHTNESS_CONTROL_STR "screen_brightness"
|
|
#define MENU_ENUM_LABEL_BROWSE_URL_STR "browse_url"
|
|
#define MENU_ENUM_LABEL_CACHE_DIRECTORY_STR "cache_directory"
|
|
#define MENU_ENUM_LABEL_CAMERA_ALLOW_STR "camera_allow"
|
|
#define MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD_STR "cheat_apply_after_load"
|
|
#define MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE_STR "cheat_apply_after_toggle"
|
|
#define MENU_ENUM_LABEL_CHEAT_DATABASE_PATH_STR "cheat_database_path"
|
|
#define MENU_ENUM_LABEL_CHEAT_DETAILS_SETTINGS_STR "cheat_details_settings"
|
|
#define MENU_ENUM_LABEL_CHEAT_SEARCH_SETTINGS_STR "cheat_search_settings"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_APPEARANCE_SETTINGS_STR "cheevos_appearance_settings"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_AUTO_SCREENSHOT_STR "cheevos_auto_screenshot"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_BADGES_ENABLE_STR "cheevos_badges_enable"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_CHALLENGE_INDICATORS_STR "cheevos_challenge_indicators"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_RICHPRESENCE_ENABLE_STR "cheevos_richpresence_enable"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_START_ACTIVE_STR "cheevos_start_active"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_MENU_SUBMENU_STR "cheevos_menu_submenu"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_TEST_UNOFFICIAL_STR "cheevos_test_unofficial"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_UNLOCK_SOUND_ENABLE_STR "cheevos_unlock_sound_enable"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VERBOSE_ENABLE_STR "cheevos_verbose_enable"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_ACCOUNT_STR "cheevos_visibility_account"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_CANCEL_STR "cheevos_visibility_lboard_cancel"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_START_STR "cheevos_visibility_lboard_start"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_LBOARD_SUBMIT_STR "cheevos_visibility_lboard_submit"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_MASTERY_STR "cheevos_visibility_mastery"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_PROGRESS_TRACKER_STR "cheevos_visibility_progress_tracker"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SETTINGS_STR "cheevos_visibility_settings"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_SUMMARY_STR "cheevos_visibility_summary"
|
|
#define MENU_ENUM_LABEL_CHEEVOS_VISIBILITY_UNLOCK_STR "cheevos_visibility_unlock"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_ACCESS_KEY_ID_STR "cloud_sync_access_key_id"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_DESTRUCTIVE_STR "cloud_sync_destructive"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_ENABLE_STR "cloud_sync_enable"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_PASSWORD_STR "cloud_sync_password"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_RESOLVE_KEEP_LOCAL_STR "cloud_sync_resolve_keep_local"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_RESOLVE_KEEP_SERVER_STR "cloud_sync_resolve_keep_server"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_S3_URL_STR "cloud_sync_s3_url"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SECRET_ACCESS_KEY_STR "cloud_sync_secret_access_key"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SETTINGS_STR "cloud_sync_settings"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_CONFIGS_STR "cloud_sync_sync_configs"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_MODE_STR "cloud_sync_sync_mode"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_NOW_STR "cloud_sync_sync_now"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SAVES_STR "cloud_sync_sync_saves"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_SYSTEM_STR "cloud_sync_sync_system"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_SYNC_THUMBS_STR "cloud_sync_sync_thumbs"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_URL_STR "cloud_sync_url"
|
|
#define MENU_ENUM_LABEL_CLOUD_SYNC_USERNAME_STR "cloud_sync_username"
|
|
#define MENU_ENUM_LABEL_CONFIGURATIONS_STR "configurations"
|
|
#define MENU_ENUM_LABEL_CONFIGURATIONS_LIST_STR "configurations_list"
|
|
#define MENU_ENUM_LABEL_CONFIGURATION_SETTINGS_STR "configuration_settings"
|
|
#define MENU_ENUM_LABEL_CONFIRM_CLOSE_STR "confirm_close"
|
|
#define MENU_ENUM_LABEL_CONFIRM_QUIT_STR "confirm_quit"
|
|
#define MENU_ENUM_LABEL_CONFIRM_RESET_STR "confirm_reset"
|
|
#define MENU_ENUM_LABEL_CONTENT_DATABASE_DIRECTORY_STR "content_database_path"
|
|
#define MENU_ENUM_LABEL_CONTENT_FAVORITES_DIRECTORY_STR "content_favorites_directory"
|
|
#define MENU_ENUM_LABEL_CONTENT_FAVORITES_SIZE_STR "content_favorites_size"
|
|
#define MENU_ENUM_LABEL_CONTENT_HISTORY_DIRECTORY_STR "content_history_directory"
|
|
#define MENU_ENUM_LABEL_CONTENT_HISTORY_SIZE_STR "content_history_size"
|
|
#define MENU_ENUM_LABEL_CONTENT_IMAGE_HISTORY_DIRECTORY_STR "content_image_history_directory"
|
|
#define MENU_ENUM_LABEL_CONTENT_MUSIC_HISTORY_DIRECTORY_STR "content_music_history_directory"
|
|
#define MENU_ENUM_LABEL_CONTENT_RUNTIME_LOG_STR "content_runtime_log"
|
|
#define MENU_ENUM_LABEL_CONTENT_RUNTIME_LOG_AGGREGATE_STR "content_runtime_log_aggregate"
|
|
#define MENU_ENUM_LABEL_CONTENT_SETTINGS_STR "quick_menu"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_ADD_ENTRY_STR "content_show_add_entry"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_CONTENTLESS_CORES_STR "content_show_contentless_cores"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_EXPLORE_STR "content_show_explore"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_FAVORITES_STR "content_show_favorites"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_FAVORITES_FIRST_STR "content_show_favorites_first"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_HISTORY_STR "content_show_history"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_IMAGES_STR "content_show_images"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_LATENCY_STR "menu_show_latency_settings"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_MUSIC_STR "content_show_music"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_NETPLAY_STR "content_show_netplay"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_OVERLAYS_STR "menu_show_overlay_settings"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_PLAYLISTS_STR "content_show_playlists"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_PLAYLIST_TABS_STR "content_show_playlist_tabs"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_REWIND_STR "menu_show_rewind_settings"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_SETTINGS_STR "content_show_settings"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_SETTINGS_PASSWORD_STR "content_show_settings_password"
|
|
#define MENU_ENUM_LABEL_CONTENT_SHOW_VIDEO_STR "content_show_video"
|
|
#define MENU_ENUM_LABEL_CONTENT_VIDEO_HISTORY_DIRECTORY_STR "content_video_history_directory"
|
|
#define MENU_ENUM_LABEL_CORE_ASSETS_DIRECTORY_STR "core_assets_directory"
|
|
#define MENU_ENUM_LABEL_CORE_ENABLE_STR "menu_core_enable"
|
|
#define MENU_ENUM_LABEL_CORE_LIST_UNLOAD_STR "unload_core"
|
|
#define MENU_ENUM_LABEL_CORE_MANAGER_STEAM_LIST_STR "core_manager_steam_list"
|
|
#define MENU_ENUM_LABEL_CORE_SETTINGS_STR "core_settings"
|
|
#define MENU_ENUM_LABEL_CORE_SUGGEST_ALWAYS_STR "core_suggest_always"
|
|
#define MENU_ENUM_LABEL_CORE_UPDATER_AUTO_BACKUP_STR "core_updater_auto_backup"
|
|
#define MENU_ENUM_LABEL_CORE_UPDATER_AUTO_EXTRACT_ARCHIVE_STR "core_updater_auto_extract_archive"
|
|
#define MENU_ENUM_LABEL_CORE_UPDATER_SHOW_EXPERIMENTAL_CORES_STR "core_updater_show_experimental_cores"
|
|
#define MENU_ENUM_LABEL_CPU_PERFPOWER_STR "cpu_perfpower_list"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCHRES_SETTINGS_STR "crt_switchres_settings"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_HIRES_MENU_STR "crt_switch_hires_menu"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_PORCH_ADJUST_STR "crt_switch_horizontal_size"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_RESOLUTION_STR "crt_switch_resolution"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_RESOLUTION_SUPER_STR "crt_switch_resolution_super"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_RESOLUTION_USE_CUSTOM_REFRESH_RATE_STR "crt_switch_resolution_use_custom_refresh_rate"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_VERTICAL_ADJUST_STR "crt_switch_vertical_size"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_WRITE_EDID_STR "crt_switch_write_edid"
|
|
#define MENU_ENUM_LABEL_CRT_SWITCH_X_AXIS_CENTERING_STR "crt_switch_horizontal_shift"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_ALL_PLAYLISTS_GRID_MAX_COUNT_STR "desktop_menu_all_playlists_grid_max_count"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_ALL_PLAYLISTS_LIST_MAX_COUNT_STR "desktop_menu_all_playlists_list_max_count"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_ENABLE_STR "desktop_menu_enable"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_ICON_VIEW_ZOOM_STR "desktop_menu_icon_view_zoom"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_LAST_TAB_STR "desktop_menu_last_tab"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_SAVE_GEOMETRY_STR "desktop_menu_save_geometry"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_SAVE_LAST_TAB_STR "desktop_menu_save_last_tab"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_SCAN_FINISH_CONFIRM_STR "desktop_menu_scan_finish_confirm"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_SHOW_WELCOME_SCREEN_STR "desktop_menu_show_welcome_screen"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_SUGGEST_LOADED_CORE_FIRST_STR "desktop_menu_suggest_loaded_core_first"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_THEME_STR "desktop_menu_theme"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_THUMBNAIL_CACHE_LIMIT_STR "desktop_menu_thumbnail_cache_limit"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_THUMBNAIL_MAX_SIZE_STR "desktop_menu_thumbnail_max_size"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_THUMBNAIL_QUALITY_STR "desktop_menu_thumbnail_quality"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_THUMBNAIL_TYPE_STR "desktop_menu_thumbnail_type"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_VIEW_TYPE_STR "desktop_menu_view_type"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_WINDOW_HEIGHT_STR "desktop_menu_window_height"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_WINDOW_WIDTH_STR "desktop_menu_window_width"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_WINDOW_X_STR "desktop_menu_window_x"
|
|
#define MENU_ENUM_LABEL_DESKTOP_MENU_WINDOW_Y_STR "desktop_menu_window_y"
|
|
#define MENU_ENUM_LABEL_DIRECTORY_SETTINGS_STR "directory_settings"
|
|
#define MENU_ENUM_LABEL_DISCORD_ALLOW_STR "discord_allow"
|
|
#define MENU_ENUM_LABEL_DRIVER_SETTINGS_STR "driver_settings"
|
|
#define MENU_ENUM_LABEL_DUMP_DISC_STR "dump_disc"
|
|
#define MENU_ENUM_LABEL_DYNAMIC_WALLPAPER_STR "menu_dynamic_wallpaper_enable"
|
|
#define MENU_ENUM_LABEL_DYNAMIC_WALLPAPERS_DIRECTORY_STR "dynamic_wallpapers_directory"
|
|
#define MENU_ENUM_LABEL_EJECT_DISC_STR "eject_disc"
|
|
#define MENU_ENUM_LABEL_ENABLE_DEVICE_VIBRATION_STR "enable_device_vibration"
|
|
#define MENU_ENUM_LABEL_FASTFORWARD_FRAMESKIP_STR "fastforward_frameskip"
|
|
#define MENU_ENUM_LABEL_FASTFORWARD_RATIO_STR "fastforward_ratio"
|
|
#define MENU_ENUM_LABEL_FILTER_BY_CURRENT_CORE_STR "filter_by_current_Core"
|
|
#define MENU_ENUM_LABEL_FPS_SHOW_STR "fps_show"
|
|
#define MENU_ENUM_LABEL_FPS_UPDATE_INTERVAL_STR "fps_update_interval"
|
|
#define MENU_ENUM_LABEL_FRAMECOUNT_SHOW_STR "framecount_show"
|
|
#define MENU_ENUM_LABEL_FRAME_THROTTLE_SETTINGS_STR "frame_throttle_settings"
|
|
#define MENU_ENUM_LABEL_FRAME_TIME_COUNTER_AUTO_RESET_STR "frame_time_counter_auto_reset"
|
|
#define MENU_ENUM_LABEL_FRAME_TIME_COUNTER_SETTINGS_STR "frame_time_counter_settings"
|
|
#define MENU_ENUM_LABEL_GAMEMODE_ENABLE_STR "game_mode_enable"
|
|
#define MENU_ENUM_LABEL_GAME_AI_OVERRIDE_P1_STR "game_ai_override_p1"
|
|
#define MENU_ENUM_LABEL_GAME_AI_OVERRIDE_P2_STR "game_ai_override_p2"
|
|
#define MENU_ENUM_LABEL_GAME_AI_SHOW_DEBUG_STR "game_ai_show_debug"
|
|
#define MENU_ENUM_LABEL_HELP_LIST_STR "help_list"
|
|
#define MENU_ENUM_LABEL_HISTORY_LIST_ENABLE_STR "history_list_enable"
|
|
#define MENU_ENUM_LABEL_ICON_THUMBNAILS_STR "icon_thumbnails"
|
|
#define MENU_ENUM_LABEL_INFORMATION_LIST_STR "information_list"
|
|
#define MENU_ENUM_LABEL_INPUT_ALL_USERS_CONTROL_MENU_STR "all_users_control_menu"
|
|
#define MENU_ENUM_LABEL_INPUT_ANALOG_DEADZONE_STR "input_analog_deadzone"
|
|
#define MENU_ENUM_LABEL_INPUT_ANALOG_SENSITIVITY_STR "input_analog_sensitivity"
|
|
#define MENU_ENUM_LABEL_INPUT_AUTODETECT_ENABLE_STR "input_autodetect_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_AUTO_GAME_FOCUS_STR "input_auto_game_focus"
|
|
#define MENU_ENUM_LABEL_INPUT_AUTO_MOUSE_GRAB_STR "input_auto_mouse_grab"
|
|
#define MENU_ENUM_LABEL_INPUT_BIND_HOLD_STR "input_bind_hold"
|
|
#define MENU_ENUM_LABEL_INPUT_BIND_TIMEOUT_STR "input_bind_timeout"
|
|
#define MENU_ENUM_LABEL_INPUT_BLOCK_TIMEOUT_STR "input_block_timeout"
|
|
#define MENU_ENUM_LABEL_INPUT_BUTTON_AXIS_THRESHOLD_STR "input_axis_threshold"
|
|
#define MENU_ENUM_LABEL_INPUT_DISABLE_INFO_BUTTON_STR "disable_info_button"
|
|
#define MENU_ENUM_LABEL_INPUT_DISABLE_LEFT_ANALOG_IN_MENU_STR "disable_left_analog_in_menu"
|
|
#define MENU_ENUM_LABEL_INPUT_DISABLE_RIGHT_ANALOG_IN_MENU_STR "disable_right_analog_in_menu"
|
|
#define MENU_ENUM_LABEL_INPUT_DISABLE_SEARCH_BUTTON_STR "disable_search_button"
|
|
#define MENU_ENUM_LABEL_INPUT_HAPTIC_FEEDBACK_SETTINGS_STR "input_haptic_feedback_settings"
|
|
#define MENU_ENUM_LABEL_INPUT_HOTKEY_BINDS_STR "input_hotkey_binds"
|
|
#define MENU_ENUM_LABEL_INPUT_HOTKEY_BLOCK_DELAY_STR "input_hotkey_block_delay"
|
|
#define MENU_ENUM_LABEL_INPUT_HOTKEY_DEVICE_MERGE_STR "input_hotkey_device_merge"
|
|
#define MENU_ENUM_LABEL_INPUT_HOTKEY_FOLLOWS_PLAYER1_STR "input_hotkey_follows_player1"
|
|
#define MENU_ENUM_LABEL_INPUT_ICADE_ENABLE_STR "input_icade_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_KEYBOARD_GAMEPAD_MAPPING_TYPE_STR "keyboard_gamepad_mapping_type"
|
|
#define MENU_ENUM_LABEL_INPUT_MAX_USERS_STR "input_max_users"
|
|
#define MENU_ENUM_LABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO_STR "input_menu_toggle_gamepad_combo"
|
|
#define MENU_ENUM_LABEL_INPUT_MENU_SETTINGS_STR "input_menu_settings"
|
|
#define MENU_ENUM_LABEL_INPUT_MOUSE_SCALE_STR "input_mouse_scale"
|
|
#define MENU_ENUM_LABEL_INPUT_NOWINKEY_ENABLE_STR "input_nowinkey_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_AUTO_SCALE_STR "input_overlay_auto_scale"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_BEHIND_MENU_STR "overlay_behind_menu"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_LIGHTGUN_ALLOW_OFFSCREEN_STR "input_overlay_lightgun_allow_offscreen"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_LIGHTGUN_FOUR_TOUCH_INPUT_STR "input_overlay_lightgun_four_touch_input"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_LIGHTGUN_PORT_STR "input_overlay_lightgun_port"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_LIGHTGUN_THREE_TOUCH_INPUT_STR "input_overlay_lightgun_three_touch_input"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_LIGHTGUN_TRIGGER_DELAY_STR "input_overlay_lightgun_trigger_delay"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_LIGHTGUN_TRIGGER_ON_TOUCH_STR "input_overlay_lightgun_trigger_on_touch"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_LIGHTGUN_TWO_TOUCH_INPUT_STR "input_overlay_lightgun_two_touch_input"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_MOUSE_ALT_TWO_TOUCH_INPUT_STR "input_overlay_mouse_alt_two_touch_input"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_MOUSE_DTAP_MSEC_STR "input_overlay_mouse_dtap_msec"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_MOUSE_DTAP_TO_DRAG_STR "input_overlay_mouse_dtap_to_drag"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_MOUSE_HOLD_MSEC_STR "input_overlay_mouse_hold_msec"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_MOUSE_HOLD_TO_DRAG_STR "input_overlay_mouse_hold_to_drag"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_MOUSE_SPEED_STR "input_overlay_mouse_speed"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_MOUSE_SWIPE_THRESHOLD_STR "input_overlay_mouse_swipe_threshold"
|
|
#define MENU_ENUM_LABEL_INPUT_OVERLAY_POINTER_ENABLE_STR "input_overlay_pointer_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_POLL_TYPE_BEHAVIOR_STR "input_poll_type_behavior"
|
|
#define MENU_ENUM_LABEL_INPUT_PREFER_FRONT_TOUCH_STR "input_prefer_front_touch"
|
|
#define MENU_ENUM_LABEL_INPUT_QUIT_GAMEPAD_COMBO_STR "input_quit_gamepad_combo"
|
|
#define MENU_ENUM_LABEL_INPUT_REMAPPING_DIRECTORY_STR "input_remapping_directory"
|
|
#define MENU_ENUM_LABEL_INPUT_REMAP_BINDS_ENABLE_STR "input_remap_binds_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_REMAP_SORT_BY_CONTROLLER_ENABLE_STR "input_remap_sort_by_controller_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_RETROPAD_BINDS_STR "input_retropad_binds"
|
|
#define MENU_ENUM_LABEL_INPUT_RUMBLE_GAIN_STR "input_rumble_gain"
|
|
#define MENU_ENUM_LABEL_INPUT_SENSORS_ENABLE_STR "input_sensors_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_SENSOR_ACCELEROMETER_SENSITIVITY_STR "input_sensor_accelerometer_sensitivity"
|
|
#define MENU_ENUM_LABEL_INPUT_SENSOR_GYROSCOPE_SENSITIVITY_STR "input_sensor_gyroscope_sensitivity"
|
|
#define MENU_ENUM_LABEL_INPUT_SENSOR_SETTINGS_STR "input_sensor_settings"
|
|
#define MENU_ENUM_LABEL_INPUT_SETTINGS_STR "input_settings"
|
|
#define MENU_ENUM_LABEL_INPUT_SMALL_KEYBOARD_ENABLE_STR "input_small_keyboard_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_TOUCH_ENABLE_STR "input_touch_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_TOUCH_SCALE_STR "input_touch_scale"
|
|
#define MENU_ENUM_LABEL_INPUT_TOUCH_VMOUSE_GESTURE_STR "input_touch_vmouse_gesture"
|
|
#define MENU_ENUM_LABEL_INPUT_TOUCH_VMOUSE_MOUSE_STR "input_touch_vmouse_mouse"
|
|
#define MENU_ENUM_LABEL_INPUT_TOUCH_VMOUSE_POINTER_STR "input_touch_vmouse_pointer"
|
|
#define MENU_ENUM_LABEL_INPUT_TOUCH_VMOUSE_TOUCHPAD_STR "input_touch_vmouse_touchpad"
|
|
#define MENU_ENUM_LABEL_INPUT_TOUCH_VMOUSE_TRACKBALL_STR "input_touch_vmouse_trackball"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_ALLOW_DPAD_STR "input_turbo_allow_dpad"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_BIND_STR "input_turbo_bind"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_BUTTON_STR "input_turbo_button"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_DUTY_CYCLE_STR "input_turbo_duty_cycle"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_ENABLE_STR "input_turbo_enable"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_FIRE_SETTINGS_STR "input_turbo_fire_settings"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_MODE_STR "input_turbo_mode"
|
|
#define MENU_ENUM_LABEL_INPUT_TURBO_PERIOD_STR "input_turbo_period"
|
|
#define MENU_ENUM_LABEL_INPUT_UNIFIED_MENU_CONTROLS_STR "unified_menu_controls"
|
|
#define MENU_ENUM_LABEL_JOYPAD_AUTOCONFIG_DIR_STR "joypad_autoconfig_dir"
|
|
#define MENU_ENUM_LABEL_LAKKA_SERVICES_STR "lakka_services"
|
|
#define MENU_ENUM_LABEL_LAKKA_SWITCH_OPTIONS_STR "Switch_Options"
|
|
#define MENU_ENUM_LABEL_LATENCY_SETTINGS_STR "latency_settings"
|
|
#define MENU_ENUM_LABEL_LIBRETRO_DIR_PATH_STR "libretro_dir_path"
|
|
#define MENU_ENUM_LABEL_LIBRETRO_INFO_PATH_STR "libretro_info_path"
|
|
#define MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL_STR "libretro_log_level"
|
|
#define MENU_ENUM_LABEL_LOAD_CONTENT_HISTORY_STR "load_recent"
|
|
#define MENU_ENUM_LABEL_LOAD_CONTENT_LIST_STR "load_content"
|
|
#define MENU_ENUM_LABEL_LOAD_DISC_STR "load_disc"
|
|
#define MENU_ENUM_LABEL_LOCATION_ALLOW_STR "location_allow"
|
|
#define MENU_ENUM_LABEL_LOGGING_SETTINGS_STR "logging_settings"
|
|
#define MENU_ENUM_LABEL_LOG_DIR_STR "log_dir"
|
|
#define MENU_ENUM_LABEL_LOG_TO_FILE_STR "log_to_file"
|
|
#define MENU_ENUM_LABEL_LOG_TO_FILE_TIMESTAMP_STR "log_to_file_timestamp"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_AUTO_ROTATE_NAV_BAR_STR "materialui_auto_rotate_nav_bar"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_DUAL_THUMBNAIL_LIST_VIEW_ENABLE_STR "materialui_dual_thumbnail_list_view_enable"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE_STR "materialui_icons_enable"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_LANDSCAPE_LAYOUT_OPTIMIZATION_STR "materialui_landscape_layout_optimization"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME_STR "materialui_menu_color_theme"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_MENU_THUMBNAIL_VIEW_LANDSCAPE_STR "materialui_thumbnail_view_landscape"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_MENU_THUMBNAIL_VIEW_PORTRAIT_STR "materialui_thumbnail_view_portrait"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_MENU_TRANSITION_ANIMATION_STR "materialui_menu_transition_animation"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_PLAYLIST_ICONS_ENABLE_STR "materialui_playlist_icons_enable"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_SHOW_NAV_BAR_STR "materialui_show_nav_bar"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_SWITCH_ICONS_STR "materialui_switch_icons"
|
|
#define MENU_ENUM_LABEL_MATERIALUI_THUMBNAIL_BACKGROUND_ENABLE_STR "materialui_thumbnail_background_enable"
|
|
#define MENU_ENUM_LABEL_MEMORY_SHOW_STR "memory_show"
|
|
#define MENU_ENUM_LABEL_MEMORY_UPDATE_INTERVAL_STR "memory_update_interval"
|
|
#define MENU_ENUM_LABEL_MENU_ALLOW_TABS_BACK_STR "menu_allow_tabs_back"
|
|
#define MENU_ENUM_LABEL_MENU_BOTTOM_SETTINGS_STR "menu_bottom_settings"
|
|
#define MENU_ENUM_LABEL_MENU_DISABLE_KIOSK_MODE_STR "menu_disable_kiosk_mode"
|
|
#define MENU_ENUM_LABEL_MENU_ENABLE_KIOSK_MODE_STR "menu_enable_kiosk_mode"
|
|
#define MENU_ENUM_LABEL_MENU_FILE_BROWSER_SETTINGS_STR "menu_file_browser_settings"
|
|
#define MENU_ENUM_LABEL_MENU_FONT_COLOR_BLUE_STR "menu_font_color_blue"
|
|
#define MENU_ENUM_LABEL_MENU_FONT_COLOR_GREEN_STR "menu_font_color_green"
|
|
#define MENU_ENUM_LABEL_MENU_FONT_COLOR_RED_STR "menu_font_color_red"
|
|
#define MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY_STR "menu_framebuffer_opacity"
|
|
#define MENU_ENUM_LABEL_MENU_HDR_BRIGHTNESS_NITS_STR "video_hdr_menu_nits"
|
|
#define MENU_ENUM_LABEL_MENU_HORIZONTAL_ANIMATION_STR "menu_horizontal_animation"
|
|
#define MENU_ENUM_LABEL_MENU_INPUT_SWAP_OK_CANCEL_STR "menu_swap_ok_cancel"
|
|
#define MENU_ENUM_LABEL_MENU_INPUT_SWAP_SCROLL_STR "menu_swap_scroll"
|
|
#define MENU_ENUM_LABEL_MENU_INSERT_DISK_RESUME_STR "menu_insert_disk_resume"
|
|
#define MENU_ENUM_LABEL_MENU_KIOSK_MODE_PASSWORD_STR "menu_disable_kiosk_mode_password"
|
|
#define MENU_ENUM_LABEL_MENU_LINEAR_FILTER_STR "menu_linear_filter"
|
|
#define MENU_ENUM_LABEL_MENU_REMEMBER_SELECTION_STR "menu_remember_selection"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_ASPECT_RATIO_STR "rgui_aspect_ratio"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_ASPECT_RATIO_LOCK_STR "rgui_aspect_ratio_lock"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_BACKGROUND_FILLER_THICKNESS_ENABLE_STR "menu_rgui_background_filler_thickness_enable"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_BORDER_FILLER_ENABLE_STR "menu_rgui_border_filler_enable"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_BORDER_FILLER_THICKNESS_ENABLE_STR "menu_rgui_border_filler_thickness_enable"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_EXTENDED_ASCII_STR "rgui_extended_ascii"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_FULL_WIDTH_LAYOUT_STR "menu_rgui_full_width_layout"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_INLINE_THUMBNAILS_STR "rgui_inline_thumbnails"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_INTERNAL_UPSCALE_LEVEL_STR "rgui_internal_upscale_level"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_PARTICLE_EFFECT_STR "rgui_particle_effect"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_PARTICLE_EFFECT_SCREENSAVER_STR "rgui_particle_effect_screensaver"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_PARTICLE_EFFECT_SPEED_STR "rgui_particle_effect_speed"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_SHADOWS_STR "menu_rgui_shadows"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_SWAP_THUMBNAILS_STR "rgui_swap_thumbnails"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_SWITCH_ICONS_STR "rgui_switch_icons"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DELAY_STR "rgui_thumbnail_delay"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DITHER_STR "rgui_thumbnail_dither"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DOWNSCALER_STR "rgui_thumbnail_downscaler"
|
|
#define MENU_ENUM_LABEL_MENU_RGUI_TRANSPARENCY_STR "menu_rgui_transparency"
|
|
#define MENU_ENUM_LABEL_MENU_SAVESTATE_RESUME_STR "menu_savestate_resume"
|
|
#define MENU_ENUM_LABEL_MENU_SCALE_FACTOR_STR "menu_scale_factor"
|
|
#define MENU_ENUM_LABEL_MENU_SCREENSAVER_ANIMATION_STR "menu_screensaver_animation"
|
|
#define MENU_ENUM_LABEL_MENU_SCREENSAVER_ANIMATION_SPEED_STR "menu_screensaver_animation_speed"
|
|
#define MENU_ENUM_LABEL_MENU_SCREENSAVER_TIMEOUT_STR "menu_screensaver_timeout"
|
|
#define MENU_ENUM_LABEL_MENU_SCROLL_DELAY_STR "menu_scroll_delay"
|
|
#define MENU_ENUM_LABEL_MENU_SETTINGS_STR "menu_settings"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_CONFIGURATIONS_STR "menu_show_configurations"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_CONFIRM_STR "menu_show_confirm"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_CORE_MANAGER_STEAM_STR "menu_show_core_manager_steam"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_CORE_UPDATER_STR "menu_show_core_updater"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_DUMP_DISC_STR "menu_show_dump_disc"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_EJECT_DISC_STR "menu_show_eject_disc"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_FULL_PATHS_STR "menu_show_full_paths"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_HELP_STR "menu_show_help"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_INFORMATION_STR "menu_show_information"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT_STR "menu_show_load_content"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_LOAD_CONTENT_ANIMATION_STR "menu_show_load_content_animation"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_LOAD_CORE_STR "menu_show_load_core"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_LOAD_DISC_STR "menu_show_load_disc"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_ONLINE_UPDATER_STR "menu_show_online_updater"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_REBOOT_STR "menu_show_reboot"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_RESTART_RETROARCH_STR "menu_show_restart_retroarch"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_SHUTDOWN_STR "menu_show_shutdown"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_SUBLABELS_STR "menu_show_sublabels"
|
|
#define MENU_ENUM_LABEL_MENU_SHOW_SUBLABELS_CURRENT_SELECTION_ONLY_STR "menu_show_sublabels_current_selection_only"
|
|
#define MENU_ENUM_LABEL_MENU_SINGLECLICK_PLAYLISTS_STR "menu_singleclick_playlists"
|
|
#define MENU_ENUM_LABEL_MENU_SOUNDS_STR "menu_sounds"
|
|
#define MENU_ENUM_LABEL_MENU_SOUND_BGM_STR "menu_sound_bgm"
|
|
#define MENU_ENUM_LABEL_MENU_SOUND_CANCEL_STR "menu_sound_cancel"
|
|
#define MENU_ENUM_LABEL_MENU_SOUND_NOTICE_STR "menu_sound_notice"
|
|
#define MENU_ENUM_LABEL_MENU_SOUND_OK_STR "menu_sound_ok"
|
|
#define MENU_ENUM_LABEL_MENU_SOUND_SCROLL_STR "menu_sound_scroll"
|
|
#define MENU_ENUM_LABEL_MENU_STARTUP_PAGE_STR "menu_startup_page"
|
|
#define MENU_ENUM_LABEL_MENU_TEXTURE_MIPMAPPING_STR "menu_texture_mipmapping"
|
|
#define MENU_ENUM_LABEL_MENU_THUMBNAIL_BACKGROUND_ENABLE_STR "menu_thumbnail_background_enable"
|
|
#define MENU_ENUM_LABEL_MENU_THUMBNAIL_PREVIEW_AUDIO_STR "menu_thumbnail_preview_audio"
|
|
#define MENU_ENUM_LABEL_MENU_THUMBNAIL_UPSCALE_THRESHOLD_STR "menu_thumbnail_upscale_threshold"
|
|
#define MENU_ENUM_LABEL_MENU_TICKER_SMOOTH_STR "menu_ticker_smooth"
|
|
#define MENU_ENUM_LABEL_MENU_TICKER_SPEED_STR "menu_ticker_speed"
|
|
#define MENU_ENUM_LABEL_MENU_TICKER_TYPE_STR "menu_ticker_type"
|
|
#define MENU_ENUM_LABEL_MENU_USE_PREFERRED_SYSTEM_COLOR_THEME_STR "menu_use_preferred_system_color_theme"
|
|
#define MENU_ENUM_LABEL_MENU_VIEWS_SETTINGS_STR "menu_views_settings"
|
|
#define MENU_ENUM_LABEL_MENU_WALLPAPER_STR "menu_wallpaper"
|
|
#define MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY_STR "menu_wallpaper_opacity"
|
|
#define MENU_ENUM_LABEL_MENU_WIDGETS_ENABLE_STR "menu_widgets_enable"
|
|
#define MENU_ENUM_LABEL_MENU_WIDGET_SCALE_AUTO_STR "menu_widget_scale_auto"
|
|
#define MENU_ENUM_LABEL_MENU_WIDGET_SCALE_FACTOR_STR "menu_widget_scale_factor"
|
|
#define MENU_ENUM_LABEL_MENU_WIDGET_SCALE_FACTOR_WINDOWED_STR "menu_widget_scale_factor_windowed"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_ANIMATION_HORIZONTAL_HIGHLIGHT_STR "xmb_menu_animation_horizontal_highlight"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_ANIMATION_MOVE_UP_DOWN_STR "xmb_menu_animation_move_up_down"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_ANIMATION_OPENING_MAIN_MENU_STR "xmb_menu_animation_opening_main_menu"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_SHOW_HORIZONTAL_LIST_STR "menu_xmb_show_horizontal_list"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_SHOW_TITLE_HEADER_STR "menu_xmb_show_title_header"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_TITLE_MARGIN_STR "menu_xmb_title_margin"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_TITLE_MARGIN_HORIZONTAL_OFFSET_STR "menu_xmb_title_margin_horizontal_offset"
|
|
#define MENU_ENUM_LABEL_MENU_XMB_VERTICAL_FADE_FACTOR_STR "menu_xmb_vertical_fade_factor"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_BLOCK_FRAMES_STR "microphone_block_frames"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_DEVICE_STR "microphone_device"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_ENABLE_STR "microphone_enable"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_INPUT_RATE_STR "microphone_input_rate"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_RESAMPLER_QUALITY_STR "microphone_resampler_quality"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_SETTINGS_STR "microphone_settings"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_WASAPI_EXCLUSIVE_MODE_STR "microphone_wasapi_exclusive_mode"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_WASAPI_FLOAT_FORMAT_STR "microphone_wasapi_float_format"
|
|
#define MENU_ENUM_LABEL_MICROPHONE_WASAPI_SH_BUFFER_LENGTH_STR "microphone_wasapi_sh_buffer_length"
|
|
#define MENU_ENUM_LABEL_MIDI_SETTINGS_STR "midi_settings"
|
|
#define MENU_ENUM_LABEL_MIDI_VOLUME_STR "midi_volume"
|
|
#define MENU_ENUM_LABEL_MOUSE_ENABLE_STR "menu_mouse_enable"
|
|
#define MENU_ENUM_LABEL_NAVIGATION_BROWSER_FILTER_SUPPORTED_EXTENSIONS_ENABLE_STR "menu_navigation_browser_filter_supported_extensions_enable"
|
|
#define MENU_ENUM_LABEL_NAVIGATION_WRAPAROUND_STR "menu_navigation_wraparound_enable"
|
|
#define MENU_ENUM_LABEL_NETPLAY_STR "netplay"
|
|
#define MENU_ENUM_LABEL_NETPLAY_ALLOW_PAUSING_STR "netplay_allow_pausing"
|
|
#define MENU_ENUM_LABEL_NETPLAY_ALLOW_SLAVES_STR "netplay_allow_slaves"
|
|
#define MENU_ENUM_LABEL_NETPLAY_CHAT_COLOR_MSG_STR "netplay_chat_color_msg"
|
|
#define MENU_ENUM_LABEL_NETPLAY_CHAT_COLOR_NAME_STR "netplay_chat_color_name"
|
|
#define MENU_ENUM_LABEL_NETPLAY_CHECK_FRAMES_STR "netplay_check_frames"
|
|
#define MENU_ENUM_LABEL_NETPLAY_CUSTOM_MITM_SERVER_STR "netplay_custom_mitm_server"
|
|
#define MENU_ENUM_LABEL_NETPLAY_FADE_CHAT_STR "netplay_fade_chat"
|
|
#define MENU_ENUM_LABEL_NETPLAY_IP_ADDRESS_STR "netplay_ip_address"
|
|
#define MENU_ENUM_LABEL_NETPLAY_MAX_CONNECTIONS_STR "netplay_max_connections"
|
|
#define MENU_ENUM_LABEL_NETPLAY_MAX_PING_STR "netplay_max_ping"
|
|
#define MENU_ENUM_LABEL_NETPLAY_NAT_TRAVERSAL_STR "netplay_nat_traversal"
|
|
#define MENU_ENUM_LABEL_NETPLAY_NICKNAME_STR "netplay_nickname"
|
|
#define MENU_ENUM_LABEL_NETPLAY_PASSWORD_STR "netplay_password"
|
|
#define MENU_ENUM_LABEL_NETPLAY_PING_SHOW_STR "netplay_ping_show"
|
|
#define MENU_ENUM_LABEL_NETPLAY_PUBLIC_ANNOUNCE_STR "netplay_public_announce"
|
|
#define MENU_ENUM_LABEL_NETPLAY_REQUIRE_SLAVES_STR "netplay_require_slaves"
|
|
#define MENU_ENUM_LABEL_NETPLAY_SHARE_ANALOG_STR "netplay_share_analog"
|
|
#define MENU_ENUM_LABEL_NETPLAY_SHARE_DIGITAL_STR "netplay_share_digital"
|
|
#define MENU_ENUM_LABEL_NETPLAY_SHOW_ONLY_CONNECTABLE_STR "netplay_show_only_connectable"
|
|
#define MENU_ENUM_LABEL_NETPLAY_SHOW_ONLY_INSTALLED_CORES_STR "netplay_show_only_installed_cores"
|
|
#define MENU_ENUM_LABEL_NETPLAY_SHOW_PASSWORDED_STR "netplay_show_passworded"
|
|
#define MENU_ENUM_LABEL_NETPLAY_SPECTATE_PASSWORD_STR "netplay_spectate_password"
|
|
#define MENU_ENUM_LABEL_NETPLAY_START_AS_SPECTATOR_STR "netplay_start_as_spectator"
|
|
#define MENU_ENUM_LABEL_NETPLAY_TCP_UDP_PORT_STR "netplay_tcp_udp_port"
|
|
#define MENU_ENUM_LABEL_NETPLAY_USE_MITM_SERVER_STR "netplay_use_mitm_server"
|
|
#define MENU_ENUM_LABEL_NETWORK_CMD_ENABLE_STR "network_cmd_enable"
|
|
#define MENU_ENUM_LABEL_NETWORK_ON_DEMAND_THUMBNAILS_STR "network_on_demand_thumbnails"
|
|
#define MENU_ENUM_LABEL_NETWORK_REMOTE_ENABLE_STR "network_remote_enable"
|
|
#define MENU_ENUM_LABEL_NETWORK_SETTINGS_STR "network_settings"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_AUTOCONFIG_STR "notification_show_autoconfig"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_AUTOCONFIG_FAILS_STR "notification_show_autoconfig_fails"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_CHEATS_APPLIED_STR "notification_show_cheats_applied"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_CONFIG_OVERRIDE_LOAD_STR "notification_show_config_override_load"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_DISK_CONTROL_STR "notification_show_disk_control"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_FAST_FORWARD_STR "notification_show_fast_forward"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_NETPLAY_EXTRA_STR "notification_show_netplay_extra"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_PATCH_APPLIED_STR "notification_show_patch_applied"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_REFRESH_RATE_STR "notification_show_refresh_rate"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_REMAP_LOAD_STR "notification_show_remap_load"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_SAVE_STATE_STR "notification_show_save_state"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_SCREENSHOT_STR "notification_show_screenshot"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_SCREENSHOT_DURATION_STR "notification_show_screenshot_duration"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_SCREENSHOT_FLASH_STR "notification_show_screenshot_flash"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_SET_INITIAL_DISK_STR "notification_show_set_initial_disk"
|
|
#define MENU_ENUM_LABEL_NOTIFICATION_SHOW_WHEN_MENU_IS_ALIVE_STR "notification_show_when_menu_is_alive"
|
|
#define MENU_ENUM_LABEL_ONLINE_UPDATER_STR "online_updater"
|
|
#define MENU_ENUM_LABEL_ONSCREEN_DISPLAY_SETTINGS_STR "onscreen_display_settings"
|
|
#define MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_SETTINGS_STR "onscreen_notifications_settings"
|
|
#define MENU_ENUM_LABEL_ONSCREEN_NOTIFICATIONS_VIEWS_SETTINGS_STR "onscreen_notifications_views_settings"
|
|
#define MENU_ENUM_LABEL_ONSCREEN_OVERLAY_SETTINGS_STR "onscreen_overlay_settings"
|
|
#define MENU_ENUM_LABEL_OSK_OVERLAY_DIRECTORY_STR "osk_overlay_directory"
|
|
#define MENU_ENUM_LABEL_OSK_OVERLAY_SETTINGS_STR "osk_overlay_settings"
|
|
#define MENU_ENUM_LABEL_OVERLAY_ASPECT_ADJUST_LANDSCAPE_STR "input_overlay_aspect_adjust_landscape"
|
|
#define MENU_ENUM_LABEL_OVERLAY_ASPECT_ADJUST_PORTRAIT_STR "input_overlay_aspect_adjust_portrait"
|
|
#define MENU_ENUM_LABEL_OVERLAY_DIRECTORY_STR "overlay_directory"
|
|
#define MENU_ENUM_LABEL_OVERLAY_LIGHTGUN_SETTINGS_STR "overlay_lightgun_settings"
|
|
#define MENU_ENUM_LABEL_OVERLAY_MOUSE_SETTINGS_STR "overlay_mouse_settings"
|
|
#define MENU_ENUM_LABEL_OVERLAY_OPACITY_STR "input_overlay_opacity"
|
|
#define MENU_ENUM_LABEL_OVERLAY_PRESET_STR "input_overlay"
|
|
#define MENU_ENUM_LABEL_OVERLAY_SCALE_LANDSCAPE_STR "input_overlay_scale_landscape"
|
|
#define MENU_ENUM_LABEL_OVERLAY_SCALE_PORTRAIT_STR "input_overlay_scale_portrait"
|
|
#define MENU_ENUM_LABEL_OVERLAY_X_OFFSET_LANDSCAPE_STR "input_overlay_x_offset_landscape"
|
|
#define MENU_ENUM_LABEL_OVERLAY_X_OFFSET_PORTRAIT_STR "input_overlay_x_offset_portrait"
|
|
#define MENU_ENUM_LABEL_OVERLAY_X_SEPARATION_LANDSCAPE_STR "input_overlay_x_separation_landscape"
|
|
#define MENU_ENUM_LABEL_OVERLAY_X_SEPARATION_PORTRAIT_STR "input_overlay_x_separation_portrait"
|
|
#define MENU_ENUM_LABEL_OVERLAY_Y_OFFSET_LANDSCAPE_STR "input_overlay_y_offset_landscape"
|
|
#define MENU_ENUM_LABEL_OVERLAY_Y_OFFSET_PORTRAIT_STR "input_overlay_y_offset_portrait"
|
|
#define MENU_ENUM_LABEL_OVERLAY_Y_SEPARATION_LANDSCAPE_STR "input_overlay_y_separation_landscape"
|
|
#define MENU_ENUM_LABEL_OVERLAY_Y_SEPARATION_PORTRAIT_STR "input_overlay_y_separation_portrait"
|
|
#define MENU_ENUM_LABEL_OZONE_COLLAPSE_SIDEBAR_STR "ozone_collapse_sidebar"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_STR "ozone_font"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_STR "ozone_font_scale"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_FACTOR_FOOTER_STR "ozone_font_scale_factor_footer"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_FACTOR_GLOBAL_STR "ozone_font_scale_factor_global"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_FACTOR_LABEL_STR "ozone_font_scale_factor_label"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_FACTOR_SIDEBAR_STR "ozone_font_scale_factor_sidebar"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_FACTOR_SUBLABEL_STR "ozone_font_scale_factor_sublabel"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_FACTOR_TIME_STR "ozone_font_scale_factor_time"
|
|
#define MENU_ENUM_LABEL_OZONE_FONT_SCALE_FACTOR_TITLE_STR "ozone_font_scale_factor_title"
|
|
#define MENU_ENUM_LABEL_OZONE_HEADER_ICON_STR "ozone_header_icon"
|
|
#define MENU_ENUM_LABEL_OZONE_HEADER_SEPARATOR_STR "ozone_header_separator"
|
|
#define MENU_ENUM_LABEL_OZONE_MENU_COLOR_THEME_STR "ozone_menu_color_theme"
|
|
#define MENU_ENUM_LABEL_OZONE_PADDING_FACTOR_STR "ozone_padding_factor"
|
|
#define MENU_ENUM_LABEL_OZONE_SCROLL_CONTENT_METADATA_STR "ozone_scroll_content_metadata"
|
|
#define MENU_ENUM_LABEL_OZONE_SHOW_SIDEBAR_STR "ozone_show_sidebar"
|
|
#define MENU_ENUM_LABEL_OZONE_SORT_AFTER_TRUNCATE_PLAYLIST_NAME_STR "ozone_sort_after_truncate_playlist_name"
|
|
#define MENU_ENUM_LABEL_OZONE_THUMBNAIL_SCALE_FACTOR_STR "ozone_menu_thumbnail_scale_factor"
|
|
#define MENU_ENUM_LABEL_OZONE_TRUNCATE_PLAYLIST_NAME_STR "ozone_truncate_playlist_name"
|
|
#define MENU_ENUM_LABEL_PAUSE_LIBRETRO_STR "menu_pause_libretro"
|
|
#define MENU_ENUM_LABEL_PAUSE_NONACTIVE_STR "pause_nonactive"
|
|
#define MENU_ENUM_LABEL_PAUSE_ON_DISCONNECT_STR "pause_on_disconnect"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_ALLOW_NON_PNG_STR "playlist_allow_non_png"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_COMPRESSION_STR "playlist_compression"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_DIRECTORY_STR "playlist_directory"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_ENTRY_REMOVE_STR "playlist_entry_remove_enable"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_ENTRY_RENAME_STR "playlist_entry_rename"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_FUZZY_ARCHIVE_MATCH_STR "playlist_fuzzy_archive_match"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_PORTABLE_PATHS_STR "playlist_portable_paths"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SETTINGS_STR "playlist_settings"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SHOW_ENTRY_IDX_STR "playlist_show_entry_idx"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SHOW_HISTORY_ICONS_STR "playlist_show_history_icons"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SHOW_INLINE_CORE_NAME_STR "playlist_show_inline_core_name"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SHOW_SUBLABELS_STR "playlist_show_sublabels"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SORT_ALPHABETICAL_STR "playlist_sort_alphabetical"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SUBLABEL_LAST_PLAYED_STYLE_STR "playlist_sublabel_last_played_style"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_SUBLABEL_RUNTIME_TYPE_STR "playlist_sublabel_runtime_type"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_USE_FILENAME_STR "playlist_use_filename"
|
|
#define MENU_ENUM_LABEL_PLAYLIST_USE_OLD_FORMAT_STR "playlist_use_old_format"
|
|
#define MENU_ENUM_LABEL_POINTER_ENABLE_STR "menu_pointer_enable"
|
|
#define MENU_ENUM_LABEL_POWER_MANAGEMENT_SETTINGS_STR "power_management_settings"
|
|
#define MENU_ENUM_LABEL_PRIVACY_SETTINGS_STR "privacy_settings"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_ADD_TO_FAVORITES_STR "quick_menu_show_add_to_favorites"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_ADD_TO_PLAYLIST_STR "quick_menu_show_add_to_playlist"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_CHEATS_STR "quick_menu_show_cheats"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_CLOSE_CONTENT_STR "quick_menu_show_close_content"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_CONTROLS_STR "quick_menu_show_controls"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_CORE_OPTIONS_FLUSH_STR "quick_menu_show_core_options_flush"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_DOWNLOAD_THUMBNAILS_STR "quick_menu_show_download_thumbnails"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_GAME_AI_STR "quick_menu_show_game_ai"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_INFORMATION_STR "quick_menu_show_information"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_OPTIONS_STR "quick_menu_show_options"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_REPLAY_STR "quick_menu_show_replay"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_RESET_CORE_ASSOCIATION_STR "quick_menu_show_reset_core_association"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_RESTART_CONTENT_STR "quick_menu_show_restart_content"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_RESUME_CONTENT_STR "quick_menu_show_resume_content"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVESTATE_SUBMENU_STR "quick_menu_show_savestate_submenu"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVE_CONTENT_DIR_OVERRIDES_STR "quick_menu_show_save_content_dir_overrides"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVE_CORE_OVERRIDES_STR "quick_menu_show_save_core_overrides"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVE_GAME_OVERRIDES_STR "quick_menu_show_save_game_overrides"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_SAVE_LOAD_STATE_STR "quick_menu_show_save_load_state"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_SET_CORE_ASSOCIATION_STR "quick_menu_show_set_core_association"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_SHADERS_STR "quick_menu_show_shaders"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_START_RECORDING_STR "quick_menu_show_start_recording"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_START_STREAMING_STR "quick_menu_show_start_streaming"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_TAKE_SCREENSHOT_STR "quick_menu_show_take_screenshot"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_SHOW_UNDO_SAVE_LOAD_STATE_STR "quick_menu_show_undo_save_load_state"
|
|
#define MENU_ENUM_LABEL_QUICK_MENU_VIEWS_SETTINGS_STR "quick_menu_views_settings"
|
|
#define MENU_ENUM_LABEL_QUIT_ON_CLOSE_CONTENT_STR "quit_on_close_content"
|
|
#define MENU_ENUM_LABEL_QUIT_RETROARCH_STR "quit_retroarch"
|
|
#define MENU_ENUM_LABEL_REBOOT_STR "reboot"
|
|
#define MENU_ENUM_LABEL_RECORDING_SETTINGS_STR "recording_settings"
|
|
#define MENU_ENUM_LABEL_RECORD_CONFIG_STR "record_config"
|
|
#define MENU_ENUM_LABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR_STR "remove_current_config_override_content_dir"
|
|
#define MENU_ENUM_LABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_CORE_STR "remove_current_config_override_core"
|
|
#define MENU_ENUM_LABEL_REMOVE_CURRENT_CONFIG_OVERRIDE_GAME_STR "remove_current_config_override_game"
|
|
#define MENU_ENUM_LABEL_REPLAY_AUTO_INDEX_STR "replay_auto_index"
|
|
#define MENU_ENUM_LABEL_REPLAY_CHECKPOINT_DESERIALIZE_STR "replay_checkpoint_deserialize"
|
|
#define MENU_ENUM_LABEL_REPLAY_CHECKPOINT_INTERVAL_STR "replay_checkpoint_interval"
|
|
#define MENU_ENUM_LABEL_REPLAY_MAX_KEEP_STR "replay_max_keep"
|
|
#define MENU_ENUM_LABEL_REPLAY_SLOT_STR "replay_slot"
|
|
#define MENU_ENUM_LABEL_RESET_TO_DEFAULT_CONFIG_STR "reset_to_default_config"
|
|
#define MENU_ENUM_LABEL_RESTART_RETROARCH_STR "restart_retroarch"
|
|
#define MENU_ENUM_LABEL_RETRO_ACHIEVEMENTS_SETTINGS_STR "retro_achievements_settings"
|
|
#define MENU_ENUM_LABEL_REWIND_BUFFER_SIZE_STEP_STR "rewind_buffer_size_step"
|
|
#define MENU_ENUM_LABEL_REWIND_ENABLE_STR "rewind_enable"
|
|
#define MENU_ENUM_LABEL_REWIND_GRANULARITY_STR "rewind_granularity"
|
|
#define MENU_ENUM_LABEL_REWIND_SETTINGS_STR "rewind_settings"
|
|
#define MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY_STR "rgui_browser_directory"
|
|
#define MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY_STR "rgui_config_directory"
|
|
#define MENU_ENUM_LABEL_RGUI_MENU_COLOR_THEME_STR "rgui_menu_color_theme"
|
|
#define MENU_ENUM_LABEL_RGUI_MENU_THEME_PRESET_STR "rgui_menu_theme_preset"
|
|
#define MENU_ENUM_LABEL_RGUI_SHOW_START_SCREEN_STR "rgui_show_start_screen"
|
|
#define MENU_ENUM_LABEL_RUNTIME_LOG_DIRECTORY_STR "runtime_log_directory"
|
|
#define MENU_ENUM_LABEL_RUN_AHEAD_HIDE_WARNINGS_STR "run_ahead_hide_warnings"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_AUTOMATIC_INTERVAL_STR "savestate_automatic_interval"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_AUTO_INDEX_STR "savestate_auto_index"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_FILE_COMPRESSION_STR "savestate_file_compression"
|
|
#define MENU_ENUM_LABEL_SAVESTATE_MAX_KEEP_STR "savestate_max_keep"
|
|
#define MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_STR "save_current_config"
|
|
#define MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CONTENT_DIR_STR "save_current_config_override_content_dir"
|
|
#define MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_CORE_STR "save_current_config_override_core"
|
|
#define MENU_ENUM_LABEL_SAVE_CURRENT_CONFIG_OVERRIDE_GAME_STR "save_current_config_override_game"
|
|
#define MENU_ENUM_LABEL_SAVE_FILE_COMPRESSION_STR "save_file_compression"
|
|
#define MENU_ENUM_LABEL_SAVE_NEW_CONFIG_STR "save_new_config"
|
|
#define MENU_ENUM_LABEL_SAVING_SETTINGS_STR "saving_settings"
|
|
#define MENU_ENUM_LABEL_SCAN_SERIAL_AND_CRC_STR "scan_serial_and_crc"
|
|
#define MENU_ENUM_LABEL_SCAN_WITHOUT_CORE_MATCH_STR "scan_without_core_match"
|
|
#define MENU_ENUM_LABEL_SCREENSHOT_DIRECTORY_STR "screenshot_directory"
|
|
#define MENU_ENUM_LABEL_SCREEN_ORIENTATION_STR "screen_orientation"
|
|
#define MENU_ENUM_LABEL_SCREEN_RESOLUTION_STR "screen_resolution"
|
|
#define MENU_ENUM_LABEL_SETTINGS_STR "settings"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_ACCESSIBILITY_STR "settings_show_accessibility"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_ACHIEVEMENTS_STR "settings_show_achievements"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_AI_SERVICE_STR "settings_show_ai_service"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_AUDIO_STR "settings_show_audio"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_CONFIGURATION_STR "settings_show_configuration"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_CORE_STR "settings_show_core"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_DIRECTORY_STR "settings_show_directory"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_DRIVERS_STR "settings_show_drivers"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_FILE_BROWSER_STR "settings_show_file_browser"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_FRAME_THROTTLE_STR "settings_show_frame_throttle"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_INPUT_STR "settings_show_input"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_LATENCY_STR "settings_show_latency"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_LOGGING_STR "settings_show_logging"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_NETWORK_STR "settings_show_network"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_ONSCREEN_DISPLAY_STR "settings_show_onscreen_display"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_PLAYLISTS_STR "settings_show_playlists"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_POWER_MANAGEMENT_STR "settings_show_power_management"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_RECORDING_STR "settings_show_recording"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_SAVING_STR "settings_show_saving"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_SMB_CLIENT_STR "settings_show_smb_client"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_STEAM_STR "settings_show_steam"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_USER_STR "settings_show_user"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_USER_INTERFACE_STR "settings_show_user_interface"
|
|
#define MENU_ENUM_LABEL_SETTINGS_SHOW_VIDEO_STR "settings_show_video"
|
|
#define MENU_ENUM_LABEL_SETTINGS_VIEWS_SETTINGS_STR "settings_views_settings"
|
|
#define MENU_ENUM_LABEL_SHADER_WATCH_FOR_CHANGES_STR "video_shader_watch_files"
|
|
#define MENU_ENUM_LABEL_SHOW_ADVANCED_SETTINGS_STR "menu_show_advanced_settings"
|
|
#define MENU_ENUM_LABEL_SHOW_WIMP_STR "show_wimp"
|
|
#define MENU_ENUM_LABEL_SHUTDOWN_STR "shutdown"
|
|
#define MENU_ENUM_LABEL_SLOWMOTION_RATIO_STR "slowmotion_ratio"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_AUTH_MODE_STR "smb_client_auth_mode"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_ENABLE_STR "smb_client_enable"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_NUM_CONTEXTS_STR "smb_client_num_contexts"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_SETTINGS_STR "smb_client_settings"
|
|
#define MENU_ENUM_LABEL_SMB_CLIENT_TIMEOUT_STR "smb_client_timeout"
|
|
#define MENU_ENUM_LABEL_START_CORE_STR "start_core"
|
|
#define MENU_ENUM_LABEL_START_NET_RETROPAD_STR "menu_start_net_retropad"
|
|
#define MENU_ENUM_LABEL_START_VIDEO_PROCESSOR_STR "menu_start_video_processor"
|
|
#define MENU_ENUM_LABEL_STATE_SLOT_STR "state_slot"
|
|
#define MENU_ENUM_LABEL_STATISTICS_SHOW_STR "statistics_show"
|
|
#define MENU_ENUM_LABEL_STDIN_CMD_ENABLE_STR "stdin_commands"
|
|
#define MENU_ENUM_LABEL_STEAM_RICH_PRESENCE_ENABLE_STR "steam_rich_presence_enable"
|
|
#define MENU_ENUM_LABEL_STEAM_RICH_PRESENCE_FORMAT_STR "steam_rich_presence_format"
|
|
#define MENU_ENUM_LABEL_STEAM_SETTINGS_STR "steam_settings"
|
|
#define MENU_ENUM_LABEL_STREAMING_TITLE_STR "streaming_title"
|
|
#define MENU_ENUM_LABEL_STREAMING_URL_STR "streaming_url"
|
|
#define MENU_ENUM_LABEL_STREAM_CONFIG_STR "stream_config"
|
|
#define MENU_ENUM_LABEL_SUBSYSTEM_SETTINGS_STR "subsystem_settings"
|
|
#define MENU_ENUM_LABEL_SUSPEND_SCREENSAVER_ENABLE_STR "suspend_screensaver_enable"
|
|
#define MENU_ENUM_LABEL_SUSTAINED_PERFORMANCE_MODE_STR "sustained_performance_mode"
|
|
#define MENU_ENUM_LABEL_SWITCH_CPU_PROFILE_STR "switch_cpu_profile"
|
|
#define MENU_ENUM_LABEL_SYSTEM_DIRECTORY_STR "system_directory"
|
|
#define MENU_ENUM_LABEL_THREADED_DATA_RUNLOOP_ENABLE_STR "threaded_data_runloop_enable"
|
|
#define MENU_ENUM_LABEL_THREAD_PREFER_FAST_CORES_STR "thread_prefer_fast_cores"
|
|
#define MENU_ENUM_LABEL_THUMBNAILS_DIRECTORY_STR "thumbnails_directory"
|
|
#define MENU_ENUM_LABEL_TIMEDATE_DATE_SEPARATOR_STR "menu_timedate_date_separator"
|
|
#define MENU_ENUM_LABEL_TIMEDATE_ENABLE_STR "menu_timedate_enable"
|
|
#define MENU_ENUM_LABEL_TIMEDATE_STYLE_STR "menu_timedate_style"
|
|
#define MENU_ENUM_LABEL_TIME_SHOW_STR "time_show"
|
|
#define MENU_ENUM_LABEL_UI_COMPANION_ENABLE_STR "ui_companion_enable"
|
|
#define MENU_ENUM_LABEL_UI_COMPANION_START_ON_BOOT_STR "ui_companion_start_on_boot"
|
|
#define MENU_ENUM_LABEL_UI_COMPANION_TOGGLE_STR "ui_companion_toggle"
|
|
#define MENU_ENUM_LABEL_UI_MENUBAR_ENABLE_STR "ui_menubar_enable"
|
|
#define MENU_ENUM_LABEL_UPDATER_SETTINGS_STR "updater_settings"
|
|
#define MENU_ENUM_LABEL_USER_INTERFACE_SETTINGS_STR "user_interface_settings"
|
|
#define MENU_ENUM_LABEL_USER_SETTINGS_STR "user_settings"
|
|
#define MENU_ENUM_LABEL_USE_BUILTIN_IMAGE_VIEWER_STR "use_builtin_image_viewer"
|
|
#define MENU_ENUM_LABEL_USE_BUILTIN_PLAYER_STR "use_builtin_player"
|
|
#define MENU_ENUM_LABEL_USE_LAST_START_DIRECTORY_STR "use_last_start_directory"
|
|
#define MENU_ENUM_LABEL_VIBRATE_ON_KEYPRESS_STR "vibrate_on_keypress"
|
|
#define MENU_ENUM_LABEL_VIDEO_3DS_LCD_BOTTOM_STR "video_3ds_lcd_bottom"
|
|
#define MENU_ENUM_LABEL_VIDEO_ADAPTIVE_VSYNC_STR "video_adaptive_vsync"
|
|
#define MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_STR "video_aspect_ratio"
|
|
#define MENU_ENUM_LABEL_VIDEO_ASPECT_RATIO_INDEX_STR "aspect_ratio_index"
|
|
#define MENU_ENUM_LABEL_VIDEO_AUTOSWITCH_PAL_THRESHOLD_STR "video_autoswitch_pal_threshold"
|
|
#define MENU_ENUM_LABEL_VIDEO_AUTOSWITCH_REFRESH_RATE_STR "video_autoswitch_refresh_rate"
|
|
#define MENU_ENUM_LABEL_VIDEO_BFI_DARK_FRAMES_STR "video_bfi_dark_frames"
|
|
#define MENU_ENUM_LABEL_VIDEO_BLACK_FRAME_INSERTION_STR "video_black_frame_insertion"
|
|
#define MENU_ENUM_LABEL_VIDEO_CROP_OVERSCAN_STR "video_crop_overscan"
|
|
#define MENU_ENUM_LABEL_VIDEO_DINGUX_IPU_FILTER_TYPE_STR "video_dingux_ipu_filter_type"
|
|
#define MENU_ENUM_LABEL_VIDEO_DINGUX_IPU_KEEP_ASPECT_STR "video_dingux_ipu_keep_aspect"
|
|
#define MENU_ENUM_LABEL_VIDEO_DINGUX_REFRESH_RATE_STR "video_dingux_refresh_rate"
|
|
#define MENU_ENUM_LABEL_VIDEO_DINGUX_RS90_SOFTFILTER_TYPE_STR "video_dingux_rs90_softfilter_type"
|
|
#define MENU_ENUM_LABEL_VIDEO_DISABLE_COMPOSITION_STR "video_disable_composition"
|
|
#define MENU_ENUM_LABEL_VIDEO_FILTER_STR "video_filter"
|
|
#define MENU_ENUM_LABEL_VIDEO_FILTER_DIR_STR "video_filter_dir"
|
|
#define MENU_ENUM_LABEL_VIDEO_FILTER_ENABLE_STR "filter_enable"
|
|
#define MENU_ENUM_LABEL_VIDEO_FONT_ENABLE_STR "video_font_enable"
|
|
#define MENU_ENUM_LABEL_VIDEO_FONT_PATH_STR "video_font_path"
|
|
#define MENU_ENUM_LABEL_VIDEO_FONT_SIZE_STR "video_font_size"
|
|
#define MENU_ENUM_LABEL_VIDEO_FORCE_SRGB_DISABLE_STR "video_force_srgb_disable"
|
|
#define MENU_ENUM_LABEL_VIDEO_FRAME_DELAY_STR "video_frame_delay"
|
|
#define MENU_ENUM_LABEL_VIDEO_FRAME_DELAY_AUTO_STR "video_frame_delay_auto"
|
|
#define MENU_ENUM_LABEL_VIDEO_FSE_NEGOTIATION_STR "video_fse_negotiation"
|
|
#define MENU_ENUM_LABEL_VIDEO_FULLSCREEN_STR "video_fullscreen"
|
|
#define MENU_ENUM_LABEL_VIDEO_FULLSCREEN_MODE_SETTINGS_STR "video_fullscreen_mode_settings"
|
|
#define MENU_ENUM_LABEL_VIDEO_FULLSCREEN_X_STR "video_fullscreen_x"
|
|
#define MENU_ENUM_LABEL_VIDEO_FULLSCREEN_Y_STR "video_fullscreen_y"
|
|
#define MENU_ENUM_LABEL_VIDEO_GL_DIRECT_SPIRV_STR "video_gl_direct_spirv"
|
|
#define MENU_ENUM_LABEL_VIDEO_GPU_INDEX_STR "gpu_index"
|
|
#define MENU_ENUM_LABEL_VIDEO_GPU_RECORD_STR "video_gpu_record"
|
|
#define MENU_ENUM_LABEL_VIDEO_GPU_SCREENSHOT_STR "video_gpu_screenshot"
|
|
#define MENU_ENUM_LABEL_VIDEO_HARD_SYNC_STR "video_hard_sync"
|
|
#define MENU_ENUM_LABEL_VIDEO_HARD_SYNC_FRAMES_STR "video_hard_sync_frames"
|
|
#define MENU_ENUM_LABEL_VIDEO_HDR_EXPAND_GAMUT_STR "video_hdr_expand_gamut"
|
|
#define MENU_ENUM_LABEL_VIDEO_HDR_MAX_NITS_STR "video_hdr_max_nits"
|
|
#define MENU_ENUM_LABEL_VIDEO_HDR_PAPER_WHITE_NITS_STR "video_hdr_paper_white_nits"
|
|
#define MENU_ENUM_LABEL_VIDEO_HDR_SCANLINES_STR "video_hdr_scanlines"
|
|
#define MENU_ENUM_LABEL_VIDEO_HDR_SETTINGS_STR "video_hdr_settings"
|
|
#define MENU_ENUM_LABEL_VIDEO_HDR_SUBPIXEL_LAYOUT_STR "video_hdr_subpixel_layout"
|
|
#define MENU_ENUM_LABEL_VIDEO_MAX_FRAME_LATENCY_STR "video_max_frame_latency"
|
|
#define MENU_ENUM_LABEL_VIDEO_MAX_SWAPCHAIN_IMAGES_STR "video_max_swapchain_images"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_BLUE_STR "video_msg_bgcolor_blue"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_ENABLE_STR "video_msg_bgcolor_enable"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_GREEN_STR "video_msg_bgcolor_green"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_OPACITY_STR "video_msg_bgcolor_opacity"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_BGCOLOR_RED_STR "video_msg_bgcolor_red"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_BLUE_STR "video_msg_color_blue"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_GREEN_STR "video_msg_color_green"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_COLOR_RED_STR "video_msg_color_red"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_X_STR "video_message_pos_x"
|
|
#define MENU_ENUM_LABEL_VIDEO_MESSAGE_POS_Y_STR "video_message_pos_y"
|
|
#define MENU_ENUM_LABEL_VIDEO_MONITOR_INDEX_STR "video_monitor_index"
|
|
#define MENU_ENUM_LABEL_VIDEO_NOTCH_WRITE_OVER_STR "video_notch_write_over"
|
|
#define MENU_ENUM_LABEL_VIDEO_OUTPUT_SETTINGS_STR "video_output_settings"
|
|
#define MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_BOTTOM_STR "video_overscan_correction_bottom"
|
|
#define MENU_ENUM_LABEL_VIDEO_OVERSCAN_CORRECTION_TOP_STR "video_overscan_correction_top"
|
|
#define MENU_ENUM_LABEL_VIDEO_POST_FILTER_RECORD_STR "video_post_filter_record"
|
|
#define MENU_ENUM_LABEL_VIDEO_RECORD_QUALITY_STR "video_record_quality"
|
|
#define MENU_ENUM_LABEL_VIDEO_RECORD_THREADS_STR "video_record_threads"
|
|
#define MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_STR "video_refresh_rate"
|
|
#define MENU_ENUM_LABEL_VIDEO_REFRESH_RATE_AUTO_STR "video_refresh_rate_auto"
|
|
#define MENU_ENUM_LABEL_VIDEO_ROTATION_STR "video_rotation"
|
|
#define MENU_ENUM_LABEL_VIDEO_SCALE_STR "video_scale"
|
|
#define MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER_STR "video_scale_integer"
|
|
#define MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER_AXIS_STR "video_scale_integer_axis"
|
|
#define MENU_ENUM_LABEL_VIDEO_SCALE_INTEGER_SCALING_STR "video_scale_integer_scaling"
|
|
#define MENU_ENUM_LABEL_VIDEO_SCALING_SETTINGS_STR "video_scaling_settings"
|
|
#define MENU_ENUM_LABEL_VIDEO_SCAN_SUBFRAMES_STR "video_scan_subframes"
|
|
#define MENU_ENUM_LABEL_VIDEO_SDL_DISPLAY_SERVER_STR "video_sdl_display_server"
|
|
#define MENU_ENUM_LABEL_VIDEO_SETTINGS_STR "video_settings"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADERS_ENABLE_STR "video_shader_enable"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_DELAY_STR "video_shader_delay"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_DIR_STR "video_shader_dir"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_PRESET_SAVE_REFERENCE_STR "video_shader_preset_save_reference"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_REMEMBER_LAST_DIR_STR "video_shader_remember_last_dir"
|
|
#define MENU_ENUM_LABEL_VIDEO_SHADER_SUBFRAMES_STR "video_shader_subframes"
|
|
#define MENU_ENUM_LABEL_VIDEO_SMOOTH_STR "video_smooth"
|
|
#define MENU_ENUM_LABEL_VIDEO_STREAM_QUALITY_STR "video_stream_quality"
|
|
#define MENU_ENUM_LABEL_VIDEO_SWAP_INTERVAL_STR "video_swap_interval"
|
|
#define MENU_ENUM_LABEL_VIDEO_SYNCHRONIZATION_SETTINGS_STR "video_synchronization_settings"
|
|
#define MENU_ENUM_LABEL_VIDEO_VFILTER_STR "video_vfilter"
|
|
#define MENU_ENUM_LABEL_VIDEO_VIEWPORT_BIAS_PORTRAIT_X_STR "video_viewport_bias_portrait_x"
|
|
#define MENU_ENUM_LABEL_VIDEO_VIEWPORT_BIAS_PORTRAIT_Y_STR "video_viewport_bias_portrait_y"
|
|
#define MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_HEIGHT_STR "video_viewport_custom_height"
|
|
#define MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_WIDTH_STR "video_viewport_custom_width"
|
|
#define MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_X_STR "video_viewport_custom_x"
|
|
#define MENU_ENUM_LABEL_VIDEO_VIEWPORT_CUSTOM_Y_STR "video_viewport_custom_y"
|
|
#define MENU_ENUM_LABEL_VIDEO_VI_WIDTH_STR "video_vi_width"
|
|
#define MENU_ENUM_LABEL_VIDEO_VSYNC_STR "video_vsync"
|
|
#define MENU_ENUM_LABEL_VIDEO_WAITABLE_SWAPCHAINS_STR "video_waitable_swapchains"
|
|
#define MENU_ENUM_LABEL_VIDEO_WIIU_PREFER_DRC_STR "video_wiiu_prefer_drc"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOWED_FULLSCREEN_STR "video_windowed_fullscreen"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOWED_MODE_SETTINGS_STR "video_windowed_mode_settings"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_AUTO_HEIGHT_MAX_STR "video_window_auto_height_max"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_AUTO_WIDTH_MAX_STR "video_window_auto_width_max"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_CUSTOM_SIZE_ENABLE_STR "video_window_custom_size_enable"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_HEIGHT_STR "video_window_height"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_OFFSET_X_STR "video_window_offset_x"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_OFFSET_Y_STR "video_window_offset_y"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_OPACITY_STR "video_window_opacity"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_SAVE_POSITION_STR "video_window_save_position"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_SHOW_DECORATIONS_STR "video_window_show_decorations"
|
|
#define MENU_ENUM_LABEL_VIDEO_WINDOW_WIDTH_STR "video_window_width"
|
|
#define MENU_ENUM_LABEL_VRR_RUNLOOP_ENABLE_STR "vrr_runloop_enable"
|
|
#define MENU_ENUM_LABEL_WIFI_DISCONNECT_STR "disconnect_wifi"
|
|
#define MENU_ENUM_LABEL_WIFI_ENABLED_STR "wifi_enabled"
|
|
#define MENU_ENUM_LABEL_WIFI_NETWORK_SCAN_STR "wifi_network_scan"
|
|
#define MENU_ENUM_LABEL_WIFI_SETTINGS_STR "wifi_settings"
|
|
#define MENU_ENUM_LABEL_XMB_ALPHA_FACTOR_STR "xmb_alpha_factor"
|
|
#define MENU_ENUM_LABEL_XMB_CURRENT_MENU_ICON_STR "xmb_current_menu_icon"
|
|
#define MENU_ENUM_LABEL_XMB_ENTRY_ICONS_STR "xmb_entry_icons"
|
|
#define MENU_ENUM_LABEL_XMB_FONT_STR "xmb_font"
|
|
#define MENU_ENUM_LABEL_XMB_LAYOUT_STR "xmb_layout"
|
|
#define MENU_ENUM_LABEL_XMB_MAIN_MENU_ENABLE_SETTINGS_STR "xmb_main_menu_enable_settings"
|
|
#define MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME_STR "xmb_menu_color_theme"
|
|
#define MENU_ENUM_LABEL_XMB_RIBBON_ENABLE_STR "xmb_ribbon_enable"
|
|
#define MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE_STR "xmb_shadows_enable"
|
|
#define MENU_ENUM_LABEL_XMB_SWITCH_ICONS_STR "xmb_switch_icons"
|
|
#define MENU_ENUM_LABEL_XMB_THEME_STR "xmb_theme"
|
|
#define MENU_ENUM_LABEL_XMB_VERTICAL_THUMBNAILS_STR "xmb_vertical_thumbnails"
|
|
/* GENERATED REGION END: settings-definition label strings */
|
|
|
|
#endif /* MSG_HASH_LBL_STR_H__ */
|