The `draw()` method was calling `.pop()` on `next_frame.input_handlers` to extract the active input handler for the platform window. This reduced the Vec length, making cached `paint_range` indices stale. On the next frame, when a cached view called `reuse_paint()`, it would index into `rendered_frame.input_handlers` with out-of-bounds indices, causing a panic: `range start index 1 out of range for slice of length 0`. **Fix:** Use `.last_mut().and_then(|h| h.take())` instead of `.pop()` to extract the handler without changing the Vec length. The slot becomes `None`, which is already handled by `reuse_paint`'s `.take()` logic. Closes #50456 ### Testing - All 83 existing GPUI unit tests pass - Manually verified with [longbridge/gpui-component](https://github.com/longbridge/gpui-component) `cargo run --example dock`: - Switch to Input panel → type text → no crash ✅ - Before fix: crash immediately on first keystroke --- Before you mark this PR as ready for review, make sure that you have: - [x] Added a solid test coverage and/or screenshots from doing manual testing - [x] Done a self-review taking into account security and performance aspects - [ ] Aligned any UI changes with the [UI checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) *(N/A — no UI changes)* Release Notes: - Fixed a crash in GPUI when typing into an Input widget inside a cached view ([#50456](https://github.com/zed-industries/zed/issues/50456)) Co-authored-by: Mikayla Maki <mikayla@zed.dev>
1 file changedLine totals unavailable