pane: 'Close others' now closes relative to right-clicked tab (#34355)

Closes #33445

Fixed the "Close others" context menu action to close tabs relative to
the right-clicked tab instead of the currently active tab. Previously,
when right-clicking on an inactive tab and selecting "Close others", it
would keep the active tab open rather than the right-clicked tab.

## Before/After

https://github.com/user-attachments/assets/d76854c3-c490-4a41-8166-309dec26ba8a



## Changes

- Modified `close_inactive_items()` method to accept an optional
`target_item_id` parameter
- Updated context menu handler to pass the right-clicked tab's ID as the
target
- Maintained backward compatibility by defaulting to active tab when no
target is specified
- Updated all existing call sites to pass `None` for the new parameter

Release Notes:

- Fixed: "Close others" context menu action now correctly keeps the
right-clicked tab open instead of the active tab
This commit is contained in:
vipex 2025-07-14 13:06:40 +02:00 committed by GitHub
parent 84124c60db
commit 00ec243771
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 15 additions and 5 deletions

View file

@ -1013,7 +1013,7 @@ async fn test_peers_following_each_other(cx_a: &mut TestAppContext, cx_b: &mut T
// and some of which were originally opened by client B. // and some of which were originally opened by client B.
workspace_b.update_in(cx_b, |workspace, window, cx| { workspace_b.update_in(cx_b, |workspace, window, cx| {
workspace.active_pane().update(cx, |pane, cx| { workspace.active_pane().update(cx, |pane, cx| {
pane.close_inactive_items(&Default::default(), window, cx) pane.close_inactive_items(&Default::default(), None, window, cx)
.detach(); .detach();
}); });
}); });

View file

@ -21465,7 +21465,7 @@ println!("5");
.unwrap(); .unwrap();
pane_1 pane_1
.update_in(cx, |pane, window, cx| { .update_in(cx, |pane, window, cx| {
pane.close_inactive_items(&CloseInactiveItems::default(), window, cx) pane.close_inactive_items(&CloseInactiveItems::default(), None, window, cx)
}) })
.await .await
.unwrap(); .unwrap();
@ -21501,7 +21501,7 @@ println!("5");
.unwrap(); .unwrap();
pane_2 pane_2
.update_in(cx, |pane, window, cx| { .update_in(cx, |pane, window, cx| {
pane.close_inactive_items(&CloseInactiveItems::default(), window, cx) pane.close_inactive_items(&CloseInactiveItems::default(), None, window, cx)
}) })
.await .await
.unwrap(); .unwrap();

View file

@ -1346,6 +1346,7 @@ impl Pane {
pub fn close_inactive_items( pub fn close_inactive_items(
&mut self, &mut self,
action: &CloseInactiveItems, action: &CloseInactiveItems,
target_item_id: Option<EntityId>,
window: &mut Window, window: &mut Window,
cx: &mut Context<Self>, cx: &mut Context<Self>,
) -> Task<Result<()>> { ) -> Task<Result<()>> {
@ -1353,7 +1354,11 @@ impl Pane {
return Task::ready(Ok(())); return Task::ready(Ok(()));
} }
let active_item_id = self.active_item_id(); let active_item_id = match target_item_id {
Some(result) => result,
None => self.active_item_id(),
};
let pinned_item_ids = self.pinned_item_ids(); let pinned_item_ids = self.pinned_item_ids();
self.close_items( self.close_items(
@ -2596,6 +2601,7 @@ impl Pane {
.handler(window.handler_for(&pane, move |pane, window, cx| { .handler(window.handler_for(&pane, move |pane, window, cx| {
pane.close_inactive_items( pane.close_inactive_items(
&close_inactive_items_action, &close_inactive_items_action,
Some(item_id),
window, window,
cx, cx,
) )
@ -3505,7 +3511,7 @@ impl Render for Pane {
) )
.on_action( .on_action(
cx.listener(|pane: &mut Self, action: &CloseInactiveItems, window, cx| { cx.listener(|pane: &mut Self, action: &CloseInactiveItems, window, cx| {
pane.close_inactive_items(action, window, cx) pane.close_inactive_items(action, None, window, cx)
.detach_and_log_err(cx); .detach_and_log_err(cx);
}), }),
) )
@ -5841,6 +5847,7 @@ mod tests {
save_intent: None, save_intent: None,
close_pinned: false, close_pinned: false,
}, },
None,
window, window,
cx, cx,
) )
@ -6206,6 +6213,7 @@ mod tests {
save_intent: None, save_intent: None,
close_pinned: false, close_pinned: false,
}, },
None,
window, window,
cx, cx,
) )

View file

@ -2777,6 +2777,7 @@ impl Workspace {
save_intent: None, save_intent: None,
close_pinned: false, close_pinned: false,
}, },
None,
window, window,
cx, cx,
) )
@ -9452,6 +9453,7 @@ mod tests {
save_intent: Some(SaveIntent::Save), save_intent: Some(SaveIntent::Save),
close_pinned: true, close_pinned: true,
}, },
None,
window, window,
cx, cx,
) )