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:
parent
84124c60db
commit
00ec243771
4 changed files with 15 additions and 5 deletions
|
@ -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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue