Skip to content

Commit 9e9ce8a

Browse files
committed
feat: close tab with middle btn
1 parent bb93c9e commit 9e9ce8a

File tree

3 files changed

+13
-30
lines changed

3 files changed

+13
-30
lines changed

packages/dockview-core/src/dockview/components/tab/defaultTab.ts

-6
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,6 @@ export class DefaultTab extends CompositeDisposable implements ITabRenderer {
2929
this._element.appendChild(this._content);
3030
this._element.appendChild(this.action);
3131

32-
this.addDisposables(
33-
addDisposableListener(this.action, 'pointerdown', (ev) => {
34-
ev.preventDefault();
35-
})
36-
);
37-
3832
this.render();
3933
}
4034

packages/dockview-core/src/dockview/components/titlebar/tabsContainer.ts

+13-8
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,10 @@ export class TabsContainer
314314
this._onTabDragStart.fire({ nativeEvent: event, panel });
315315
}),
316316
tab.onChanged((event) => {
317+
if (event.defaultPrevented) {
318+
return;
319+
}
320+
317321
const isFloatingGroupsEnabled =
318322
!this.accessor.options.disableFloatingGroups;
319323

@@ -342,14 +346,15 @@ export class TabsContainer
342346
return;
343347
}
344348

345-
const isLeftClick = event.button === 0;
346-
347-
if (!isLeftClick || event.defaultPrevented) {
348-
return;
349-
}
350-
351-
if (this.group.activePanel !== panel) {
352-
this.group.model.openPanel(panel);
349+
switch (event.button) {
350+
case 0: // left click or touch
351+
if (this.group.activePanel !== panel) {
352+
this.group.model.openPanel(panel);
353+
}
354+
break;
355+
case 1: // middle click
356+
panel.api.close();
357+
break;
353358
}
354359
}),
355360
tab.onDrop((event) => {

packages/dockview/src/dockview/defaultTab.tsx

-16
Original file line numberDiff line numberDiff line change
@@ -53,26 +53,10 @@ export const DockviewDefaultTab: React.FunctionComponent<
5353
e.preventDefault();
5454
}, []);
5555

56-
const onClick = React.useCallback(
57-
(event: React.MouseEvent<HTMLDivElement>) => {
58-
if (event.defaultPrevented) {
59-
return;
60-
}
61-
62-
api.setActive();
63-
64-
if (rest.onClick) {
65-
rest.onClick(event);
66-
}
67-
},
68-
[api, rest.onClick]
69-
);
70-
7156
return (
7257
<div
7358
data-testid="dockview-dv-default-tab"
7459
{...rest}
75-
onClick={onClick}
7660
className="dv-default-tab"
7761
>
7862
<span className="dv-default-tab-content">{title}</span>

0 commit comments

Comments
 (0)