Commit Graph
8 Commits
Author SHA1 Message Date
MarcZX10 8a3e44bbcf feat(libSceIme): let a dialog belong to one library
A request carries an owner id (message dialog, error dialog, or none). Poll,
Close and Reset take the id of the caller and only see or act on a session of
that owner, so one library terminating or polling no longer finishes or
answers the dialog another library is showing. Callers that pass no owner keep
acting on whatever session exists.
2026-10-29 14:06:18 +00:00
MarcZX10 aa6ed48a91 feat(libSceIme): give up on a dialog that no flip ever drew
A session that stays Showing without its view being read for three seconds
becomes Unshown: it no longer captures input or accepts answers, and a caller
that polls it falls back to its own automatic answer. A session whose view was
read once keeps waiting for the player. The bound is checked whenever the
session is touched, so it needs no timer, and ModalDialogSetShowTimeout changes
it.
2026-10-29 14:06:17 +00:00
MarcZX10 94b1065426 feat(libSceIme): add a modal dialog session for the host overlay
A common dialog that needs an answer from the player opens a ModalDialogRequest
(message, one to three buttons, the focused one and the button a cancel input
selects). The session is Showing until a Confirm or Cancel input answers it or
the title closes it, and the answer stays readable until the next open or a
reset. Opening is refused while no presenter is registered, so a caller keeps
its own answer when no window can show the dialog.

Input comes through ModalDialogPublishInput (previous, next, confirm, cancel)
and ModalDialogPublishPad, which maps the D-pad and the left stick to focus
changes and Cross and Circle to confirm and cancel once both were seen released
since the dialog opened. An active IME keyboard or pad capture has priority: the
view is not read and the input is ignored until the IME releases it.
2026-10-29 14:06:12 +00:00
Yunus Shaikh 57d3669f11 feat(libSceIme): route a captured pad to the dialog
An open dialog can now take the pad the way it takes host text: a pad
sink it sets, ImePublishPad_nid_postfix forwarding each pad sample to
it, and ImeCapturesPad_nid_postfix telling the pad's owner that the
dialog has it. A keyboard view provider lets the presentation thread
read the text, caret and key grid it draws. Each is modelled on the
host-text sink: an atomic pointer the dialog sets and clears.
2026-10-27 05:19:41 +01:00
boykopovar f38d29fd08 refactor(sdk): add canonical headers for remaining libraries 2026-10-24 23:17:42 +03:00
Yuri Olive aabbd10e36 feat(libSceIme): implement sceImeFilterText
Port the firmware filter for every text type, with the two codepage sets derived from the firmware converters, and declare sceImeCheckFilterText as unimplemented.
2026-10-19 15:14:45 -03:00
RickandClaude Opus 5.5 6c5686d7ea feat(libSceImeDialog): take the dialog's text from the host keyboard
sceImeDialogInit wrote "Slayer" into an empty text buffer and the
dialog finished on the second status poll, so a title never got text
from the user: ProsperoRadio's search typed "Slayer" by itself and
found no station.

The dialog now runs until the user answers on the host keyboard, the
way #4756 made sceImeOpen's panel-less IME take it. While no IME panel
is open, libSceIme hands the game window's text and editing keys to
a sink that the dialog registers. Typing edits the text up to
maxTextLength without splitting a surrogate pair, Enter writes it to
the title's buffer and finishes with end status 0, and Escape finishes
with 1. Abort still finishes with 2. A second Init reports busy, and a
null parameter or buffer or a maximum length outside 1 to 2048 is
refused, as in shadPS4.

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
2026-10-15 19:52:28 +02:00
p3nicillinandClaude Opus 5.5 435be9905d feat(libSceIme): open a panel-less IME fed by the host keyboard
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-14 08:49:04 +01:00