fixes cursor being at 0 position even when text is present, especially annoying for handheld devices with kde virtual keyboard, which is pretty bad, with no way to move the cursor or delete text backward
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/25
This PR is the first in a batch of structural changes to Ryujinx.
**Changes**
- Added `ProcessIdentity` and `ProcessKind` to describe loaded programs by:
- PID, program ID, application ID, program index, display version, process kind
- Stored identity metadata on `ProcessResult`.
- Added PID-based process lookup helpers to `ProcessLoader`.
- Updated HLE services to resolve application metadata through the caller PID instead of `Processes.ActiveApplication`.
- Added PTC/JIT disk cache initialization logging with PID, title ID, display version, selector, and enabled state.
- Added `ClientProcessId` property to ServiceCtx (/src/Ryujinx.HLE/HOS/ServiceCtx.cs) that uses the handle descriptor PId when available, falling back to `Process.Pid`.
- Updated 15 HLE service files to use `context.ClientProcessId` instead of `context.Process.Pid` for client process access, ensuring services correctly identify the calling process even when invoked via IPC with handle descriptors.
These changes make service metadata resolution more explicit and prepare the emulator for other structural changes later on.
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/100
Ayyyy, welcome to the UI: Actions Menu → General Improvements PR!
We are soooo back boys and girls.
This is the first PR in a series aimed at delivering the largest overhaul and set of improvements to the Actions menu yet.
This initial PR introduces smaller visual and navigation improvements as part of the broader Actions menu refresh, while also serving as the starting point for locale fracturing across the entirety of Ryujinx. As this is a series of progressive PRs, bug fixes and additional refinements will continue to be rolled out throughout the series.
### GENERAL:
* **Fractured:** A bunch of locales. The following new files, and their designations, were created:
* `MenuBar_Actions.json` - all UI-related locales for the `Actions` menu
* `MenuBar_File.json` - all UI-related locales for the `File` menu
* `Dialog_Firmware.json` - all firmware-related dialog locales
* `Dialog_Keys.json` - all keys-related dialogs locales
* `Error.json` - all error-related locales
* `StatusBar.json` - all UI-related locales for the Status Bar
**NOTE:** To keep this PR manageable, `MenuBar_File.json`, `Error.json`, and `StatusBar.json` were NOT populated with their locales. Additionally, `RenderDoc.json` was deleted and all of its locales were moved to `MenuBar_Actions.json` because all RenderDoc locales are present only in the `Actions` menu.
* **Fixed:** Some typos in `Locales.md`.
### **DEFAULT ACTIONS:**
* **Added:** File picker dialog titles for `Install Firmware` and `Install Keys`.
* `Install Firmware`: "Select an XCI file or a ZIP archive to install firmware from" and "Select a folder to install firmware from".
* `Install Keys`: "Select a KEYS file to install keys from" and "Select a folder to install keys from".
* **Improved:** `Install Firmware` and `Install Keys` submenus.
* Submenus no longer have periods before file extensions; this avoids visual issues in right‑to‑left languages matches other emulators using uppercase extensions (e.g. `Install Firmware` → `Install Firmware (.XCI or .ZIP)` is now `Install Firmware` → `Install Firmware (XCI or ZIP)`).
* Submenus no longer repeat the main menu title; they now show only the specific option, making navigation cleaner (e.g. `Install Firmware` → `Install Firmware (XCI or ZIP)` is now `Install Firmware` → `XCI or ZIP`).
* Submenus now end with an ellipsis; this follows UI conventions that signal additional user input is required (e.g. `Install Firmware` → `XCI or ZIP...`).
* **Moved:** `Manage File Types` menu and submenu.
* These menus let Windows and Linux users associate formats like .xci and .nsp with the emulator so they can be opened by double‑clicking. macOS already handles this automatically when an app supports the format.
* Since this PR focuses on the `Actions` menu, this menu and its submenus have been moved under `File`, with their locales relocated to the new `MenuBar_File.json`.
* This menu is useful but currently too vague about its purpose. A later PR will refine and clarify it.
* **Improved:** `Mii Editor`
* Removed the `Mii Editor` tooltip, as the menu was already self‑explanatory.
* The loading text for the `Mii Editor` is now locale-dynamic, instead of the previously static "miiEdit".
### **IN-GAME ACTIONS:**
* **Updated:** Menu grouping with separators (see images below)
* **Renamed:** `Resume` to `Resume Emulation` and `Pause` to `Pause Emulation`, ensuring consistency with the other options.
* **Fixed:** `Pause Emulation`/`Resume Emulation` UI Bug
* Previously, if a user paused emulation and then exited the game without closing the emulator, the next game launch would incorrectly show `Resume Emulation`, as though the new game were paused.
* **Updated:** `Scan Amiibo` and `Scan Skylander` icons to a chess rook and dragon, making them clearer and more fun than the previous cubes.
* **Added:** Shortcut for `Simulate Wake-up Message`
* Few games support it, but an in‑game shortcut still helps players who use it often.
* **Removed:** `Manage Cheats` from the menu
* `Manage Cheats` doesn't properly work in-game right now, and is removed in this PR. It will be returned to later in Part 4.
Please see the image comparisons below.
_If there are any features or changes that you wish to be implemented, please comment down below and I'll be happy to accommodate!_
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/42
Did you know that the garbage collector's default settings are designed for single-threaded applications and quick start-up times? We don't care about either of these.
Configured:
- Concurrent GC (default is true) (set for clarity)
- RetainVM: segments that should be deleted are put on a standby list for future use (default is false)
- QuickJit: enabling quick JIT decreases startup time but can produce code with degraded performance characteristics; for example, the code may use more stack space, allocate more memory, and run slower. (default is true) (disabled)
- ReadyToRun: configures whether the .NET runtime uses pre-compiled code for images with available ReadyToRun data; disabling this option forces the runtime to JIT-compile framework code. (default is true) (set to false, we dont publish with this option anyway)
- TieredPGO: this setting enables dynamic (tiered) profile-guided optimization (PGO) in .NET 6 and later versions. If quick JIT is disabled but tiered compilation is enabled, only pre-compiled code participates in tiered compilation. If a method is not pre-compiled with ReadyToRun, the JIT behavior is the same as if tiered compilation were disabled.
Features:
- Set ``GCLatencyMode.Interactive`` when in-menu and emulator is paused, otherwise uses ``GCLatencyMode.LowLatency``.
- Added a new UI option in the Settings > CPU menu to toggle ``GCLatencyMode.LowLatency`` during guest runtime.

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/88
This PR adresses the following issue : `ProcessLoader.ActiveApplication` could return invalid results when `_latestPid` pointed to a process that no longer existed in the kernel's process table. The original exception path was commented out and bypassed (by sh0inx?) with `GetValueOrDefault` to prevent UI lockups, but this only resolved the symptoms without fixing the root cause.
This was due to sevral factors :
- `_latestPid` was never reset or validated against the actual process state
- ProcessLoader maintained its own `_processesByPid` dictionary separate from the kernel's `KernelContext.Processes`
- No cleanups happened when processes exited or were terminated
- ProcessLoader state could drift out of sync with the kernel process table
**Solution/Fixes**
- Validate` _latestPid` against the kernel process table before returning `ActiveApplication`
- Check process state (Exited/Exiting) and automatically clear stale references
- Add thread-safe cleanup methods (`ClearProcess`, `ClearAllProcesses`)
- Integrate `ClearAllProcesses` into Switch.Dispose for proper shutdown cleanup
- Add warning logs when stale PID is detected and cleared for debugging
**Code Changes**:
- `ProcessLoader.cs`: Add `_pidLock`, update `ActiveApplication` with validation, add cleanup methods
- `Switch.cs`: Call `Processes.ClearAllProcesses()` in Dispose()
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/102
## Description
~~Fixes a fatal CLR crash when `caps` screenshot saving receives an input buffer larger than `0x384000`.~~
~~Resolves a crash in Tomodachi Life: Living the Dream where saving the pictures to the system's album crashes with 0x80131506.~~
Follow up to #18. This PR adjusts the validation and copy behavior to better match real hardware, and adds logging to make invalid screenshot buffer cases easier to diagnose.
Real hardware accepts screenshot buffers with a size greater than or equal to `0x384000`, but only `0x384000` bytes are needed for the 1280x720 RGBA image.
This changes screenshot saving to:
- reject buffers smaller than `0x384000`
- accept buffers equal to or larger than `0x384000`
- copy only the first `0x384000` bytes into the 1280x720 bitmap
## Testing
Tested with a real Switch NRO using `capssuSaveScreenShotEx0`, `capssuSaveScreenShotEx1`, and `capssuSaveScreenShotEx2`.
Observed hardware behavior:
```text
0x384000 => OK
0x384000 - 1 => NullInputBuffer
0x384000 + 1 => OK
0x3C0000 => OK // Tomo life picture size
```
Co-authored-by: yell0wsuit <5692900+yell0wsuit@users.noreply.github.com>
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/44
Should allow Ring Fit and other games that rely heavily on the notification system to get in-game (?), needs testing.
if you're wondering what happened to the first branch -- no you're not. (duplicated history somehow??)
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/6
Implemented a new debug log type called NetLog and added more verbose logging to the LDN service.
I'd like some feedback on what all should be logged under this category -- I'm likely going to be adding logs for sockets as well, but I want to know specifically if the logging should be more or less verbose and what would be the most helpful things to log.

Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/5
no way this was working before, and if it did, just pure luck, unsafe blind copy of bytes as is and zero checks.
i only tested tomodachi, but should fix all games that were crashing on saving screenshots
the crash was happening because the screenshot buffer was bigger than the bitmap buffer, so marshall.copy() was raising an unhandhled expection crashing the emu.
on top of this, because the data was just copied as is, the result image was garbled.
[fixes#304](https://github.com/Ryubing/Issues/issues/304)
Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/18
- log a more clear error message as to what 2002-4604 means for the user
- and return the result from the FileSystemProxy IStorage to pass the invalid data handling to the game instead of stopping emulation there and then.
- this may be changed. i'm pretty sure this error is only thrown when you actually have integrity checking enabled in settings, so maybe it crashing with a friendler message is more desired than potentially continuing execution. we will see
Previously, sockets were only ever closed when the game specifically requested it.
Thanks @comex on GitHub for the patch submitted via the issues page.
Co-Authored-By: comex <47517+comex@users.noreply.github.com>