From 1a6998c49ccf08579451b817b5d5bdbd79b221cc Mon Sep 17 00:00:00 2001 From: Vladimir Ivakin Date: Wed, 26 Aug 2026 17:46:00 +0200 Subject: [PATCH] Close tab on middle click --- src/components/TabItem.tsx | 3 ++- src/session-tabs/SessionTabs.spec.tsx | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/components/TabItem.tsx b/src/components/TabItem.tsx index 2cbc6a4..70d5e9b 100644 --- a/src/components/TabItem.tsx +++ b/src/components/TabItem.tsx @@ -102,6 +102,7 @@ export function TabItem(props: TabItemProps) { backgroundColor={backgroundColor()} onMouseUp={(event) => { if (event.button === 0) props.onSelect(); + if (event.button === 1) props.onClose(); }} > @@ -150,7 +151,7 @@ export function TabItem(props: TabItemProps) { flexShrink={0} onMouseUp={(event) => { event.stopPropagation(); - if (event.button !== 0) return; + if (event.button !== 0 && event.button !== 1) return; props.onClose(); }} > diff --git a/src/session-tabs/SessionTabs.spec.tsx b/src/session-tabs/SessionTabs.spec.tsx index e09d791..bf6eaf6 100644 --- a/src/session-tabs/SessionTabs.spec.tsx +++ b/src/session-tabs/SessionTabs.spec.tsx @@ -194,10 +194,15 @@ describe("TabItem interaction", () => { expect(onClose).toHaveBeenCalledOnce(); expect(onSelect).toHaveBeenCalledOnce(); + await setup.mockMouse.click(1, 0, MouseButtons.MIDDLE); + await setup.mockMouse.click(closeX, 0, MouseButtons.MIDDLE); + expect(onClose).toHaveBeenCalledTimes(3); + expect(onSelect).toHaveBeenCalledOnce(); + await setup.mockMouse.click(1, 0, MouseButtons.RIGHT); await setup.mockMouse.click(closeX, 0, MouseButtons.RIGHT); expect(onSelect).toHaveBeenCalledOnce(); - expect(onClose).toHaveBeenCalledOnce(); + expect(onClose).toHaveBeenCalledTimes(3); } finally { setup.renderer.destroy(); }