fix(web): keep settings inputs focused during IME composition - #10262
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — The PR adds a single localized IME guard to the shared settings input hook, preserving focus and the draft during composition while leaving normal Enter and blur commits unchanged. Its runtime impact is narrow and readily accounted for, with no product-default or static-analysis changes. You can add or adjust custom eligibility rules. Learn more. |
✅ Action performedReview finished.
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan provides up to 10 included reviews per hour; 8 remain after this review. 📝 WalkthroughWalkthroughThe ChangesIME commit handling
Estimated code review effort: 2 (Simple) | ~5 minutes Merge Risk: ⚪ Minimal · up to IME candidate confirmation no longer prematurely commits or blurs settings inputs, while normal Enter and blur commits remain intact. No current merge-blocking risk is identified. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
…tgg#10262) Co-authored-by: Simone <185146821+Lucenx9@users.noreply.github.com>
## What's Changed * fix(clients): show feedback results in composer banners by @juliusmarminge in pingdotgg/t3code#10398 * fix(server): stop Windows terminal polling from spiking CPU by @UtkarshUsername in pingdotgg/t3code#9476 * fix(web): onboarding installs agents without needing Node or npm by @t3dotgg in pingdotgg/t3code#10402 * fix(server): allow settling threads with unanswered async questions by @t3dotgg in pingdotgg/t3code#10400 * feat(ci): ship stable releases from the latest nightly commit by @t3dotgg in pingdotgg/t3code#10410 * feat(marketing): add a nightly channel to the download page by @t3dotgg in pingdotgg/t3code#10408 * fix(web): keep settings inputs focused during IME composition by @Lucenx9 in pingdotgg/t3code#10262 * fix(server): preserve Codex reset credits during usage updates by @yashranaway in pingdotgg/t3code#10308 * docs: link the repository security reporting policy by @yashranaway in pingdotgg/t3code#10303 * fix(web): only show auto balance errors after failed checks by @maria-rcks in pingdotgg/t3code#10407 * fix(web): improve preview recording frame delivery by @maria-rcks in pingdotgg/t3code#10403 * fix(server): preserve inline provider secrets on redacted saves by @maxwellyoung in pingdotgg/t3code#10054 * fix(web, mobile): replace Apple desktop machine labels by @extoci in pingdotgg/t3code#10396 * fix(web): hide browser when the right panel starts closing by @Neel2107 in pingdotgg/t3code#10385 * fix(web): keep settings section headings description-free by @maria-rcks in pingdotgg/t3code#10415 * fix(usage): read and redeem hub reset credits through CLIProxyAPI by @juliusmarminge in pingdotgg/t3code#10395 * fix(web): deduplicate expanded tool labels and keep errors expandable by @Yash-Singh1 in pingdotgg/t3code#10420 * fix(server): skip git status scans while the index is locked by @Gigioxx in pingdotgg/t3code#9845 * fix(mcp): allow text-only preview snapshots by @juliusmarminge in pingdotgg/t3code#10232 * fix(claude): name the expired login or usage limit instead of a generic API error by @vitalyiegorov in pingdotgg/t3code#10321 * feat(mobile): queue a message while its attachment is still uploading by @juliusmarminge in pingdotgg/t3code#10404 * feat(mobile): show when an existing thread has a message waiting in the outbox by @juliusmarminge in pingdotgg/t3code#10405 * fix(codex): accept misalignment policy errors on thread resume by @realbakari in pingdotgg/t3code#10373 * fix(server): skip disabled settlement lookups by @t3dotgg in pingdotgg/t3code#10424 * fix(server): run OpenCode CLI commands sequentially by @t3dotgg in pingdotgg/t3code#10427 * feat(web): name the drop action while dragging sidebar threads by @SunkenInTime in pingdotgg/t3code#10378 * perf(web): keep the sidebar responsive during bulk thread updates by @t3dotgg in pingdotgg/t3code#10413 * fix(web): onboarding wizard now supports light mode by @t3dotgg in pingdotgg/t3code#10432 * feat(threads): dismiss async questions without replying by @t3dotgg in pingdotgg/t3code#10431 * fix(web): stop collapsing the composer when it loses focus by @t3dotgg in pingdotgg/t3code#10437 * fix(server): keep interrupted threads resumable after restarts by @maria-rcks in pingdotgg/t3code#10421 ## New Contributors * @Neel2107 made their first contribution in pingdotgg/t3code#10385 * @realbakari made their first contribution in pingdotgg/t3code#10373 **Full Changelog**: pingdotgg/t3code@v0.0.39-nightly.20260906.1316...v0.0.39-nightly.20260907.1325 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.39-nightly.20260907.1325
What changed
Ignore IME keydowns in
useCommitOnBlurusing the sameisComposing/keyCode === 229guard already used by thread rename in #6281. Normal Enter and blur still commit changed values.Why
Pressing Enter to confirm an IME candidate in a settings
DraftInputcurrently blurs the field and saves an unfinished value. Further typing no longer reaches the input. This affects fields such as provider display names.The shared hook covers web and desktop settings. Mobile uses separate inputs. No provider adapters, contracts, product defaults, or diagnostic settings change.
flowchart LR A[Enter in DraftInput] --> B{IME composition?} B -->|Yes| C[Keep focus and draft] B -->|No| D[Blur] D --> E[Commit changed value]Verification
Tested the running app in local Chromium with synthetic IME keydown events on Settings → Providers → Display name. This does not claim a native OS IME or Safari test.
isComposing=trueandisComposing=false, keyCode=229blur and save prematurely.UI changes
PNG captures at 2×, immediately after the same synthetic composing Enter.
Before: focus is lost and the partial name has already replaced the provider label.
After: the input keeps focus and the provider label remains unchanged until a normal commit.
Before video, typing
teamafter the composing Enter is lost:settings-ime-before.webm
After video, typing continues and a normal Enter saves the full name:
settings-ime-after.webm
Checklist
Model: GPT-5. Harness: Codex in T3 Code.
Note
Fix
useCommitOnBlurhook to ignore Enter during IME compositionAdds an early return in useCommitOnBlur.ts when the keyboard event is part of IME composition or uses the IME composition key code. This prevents the hook from committing and blurring the input while users are mid-composition with input methods like CJK keyboards. Non-composition Enter handling is unchanged.
Macroscope summarized 8f7adcf.
Summary by CodeRabbit