mirror of
https://github.com/zed-industries/zed.git
synced 2026-04-18 07:47:53 +00:00
e613b2c9d3
## Context Closes #53252 When using `ToggleAll` to open the tab switcher and then closing the last tab in the currently active pane via `CloseSelectedItem`, the tab switcher would unexpectedly dismiss. Closing tabs from an inactive pane worked correctly. **Root cause:** `force_remove_pane` in `Workspace` unconditionally calls `window.focus(fallback_pane)` when the active pane is removed. This focus change causes the tab switcher picker's editor to receive a `Blurred` event, which triggers `Picker::cancel` → `delegate.dismissed` → `DismissEvent`, dismissing the modal. **Fix:** When a modal is active, skip the `window.focus` call and instead call `set_active_pane` directly. This keeps the active pane pointer up to date without stealing focus from the modal. Video of manual test after fix : [Screencast from 2026-04-07 00-24-56.webm](https://github.com/user-attachments/assets/eeb74313-1713-48db-8421-db740ef7a7b2) ## How to Review - `crates/workspace/src/workspace.rs` : In `force_remove_pane`, when the removed pane was the active pane, the fallback pane now only receives focus if no modal is currently open. Otherwise, `set_active_pane` is called directly, which updates `active_pane`, `last_active_center_pane`, and the status bar without touching window focus. - `crates/tab_switcher/src/tab_switcher_tests.rs` : New test `test_toggle_all_stays_open_after_closing_last_tab_in_active_pane` reproduces the issue: two panes each with one file, the active pane's tab is closed via `CloseSelectedItem`, and the test asserts the tab switcher remains open with the other file still listed. ## Self-Review Checklist - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the UI/UX checklist - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes - Fixed tab switcher dismissing when closing the last tab in the active pane