Skip to content

Commit

Permalink
Merge pull request #855 from mathuo/853-middle-button-click---closes-…
Browse files Browse the repository at this point in the history
…tabs-with-hideclose

conditional middle-btn tab close
  • Loading branch information
mathuo authored Feb 9, 2025
2 parents 8ed0fb5 + d8da2f2 commit 98cbe37
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 15 deletions.
12 changes: 4 additions & 8 deletions packages/dockview-core/src/dockview/components/tab/tab.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ export class Tab extends CompositeDisposable {
private readonly dropTarget: Droptarget;
private content: ITabRenderer | undefined = undefined;

private readonly _onChanged = new Emitter<MouseEvent>();
readonly onChanged: Event<MouseEvent> = this._onChanged.event;
private readonly _onPointDown = new Emitter<MouseEvent>();
readonly onPointerDown: Event<MouseEvent> = this._onPointDown.event;

private readonly _onDropped = new Emitter<DroptargetEvent>();
readonly onDrop: Event<DroptargetEvent> = this._onDropped.event;
Expand Down Expand Up @@ -117,19 +117,15 @@ export class Tab extends CompositeDisposable {
this.onWillShowOverlay = this.dropTarget.onWillShowOverlay;

this.addDisposables(
this._onChanged,
this._onPointDown,
this._onDropped,
this._onDragStart,
dragHandler.onDragStart((event) => {
this._onDragStart.fire(event);
}),
dragHandler,
addDisposableListener(this._element, 'pointerdown', (event) => {
if (event.defaultPrevented) {
return;
}

this._onChanged.fire(event);
this._onPointDown.fire(event);
}),
this.dropTarget.onDrop((event) => {
this._onDropped.fire(event);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,7 @@ export class TabsContainer
tab.onDragStart((event) => {
this._onTabDragStart.fire({ nativeEvent: event, panel });
}),
tab.onChanged((event) => {
tab.onPointerDown((event) => {
if (event.defaultPrevented) {
return;
}
Expand Down Expand Up @@ -356,9 +356,6 @@ export class TabsContainer
this.group.model.openPanel(panel);
}
break;
case 1: // middle click
panel.api.close();
break;
}
}),
tab.onDrop((event) => {
Expand Down
42 changes: 39 additions & 3 deletions packages/dockview/src/dockview/defaultTab.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,15 @@ export const DockviewDefaultTab: React.FunctionComponent<
params: _params,
hideClose,
closeActionOverride,
onPointerDown,
onPointerUp,
onPointerLeave,
...rest
}) => {
const title = useTitle(api);

const isMiddleMouseButton = React.useRef<boolean>(false);

const onClose = React.useCallback(
(event: React.MouseEvent<HTMLSpanElement>) => {
event.preventDefault();
Expand All @@ -49,21 +54,52 @@ export const DockviewDefaultTab: React.FunctionComponent<
[api, closeActionOverride]
);

const onPointerDown = React.useCallback((e: React.MouseEvent) => {
e.preventDefault();
const onBtnPointerDown = React.useCallback((event: React.MouseEvent) => {
event.preventDefault();
}, []);

const _onPointerDown = React.useCallback(
(event: React.PointerEvent<HTMLDivElement>) => {
isMiddleMouseButton.current = event.button === 1;
onPointerDown?.(event);
},
[onPointerDown]
);

const _onPointerUp = React.useCallback(
(event: React.PointerEvent<HTMLDivElement>) => {
if (isMiddleMouseButton && event.button === 1 && !hideClose) {
isMiddleMouseButton.current = false;
onClose(event);
}

onPointerUp?.(event);
},
[onPointerUp, onClose, hideClose]
);

const _onPointerLeave = React.useCallback(
(event: React.PointerEvent<HTMLDivElement>) => {
isMiddleMouseButton.current = false;
onPointerLeave?.(event);
},
[onPointerLeave]
);

return (
<div
data-testid="dockview-dv-default-tab"
{...rest}
onPointerDown={_onPointerDown}
onPointerUp={_onPointerUp}
onPointerLeave={_onPointerLeave}
className="dv-default-tab"
>
<span className="dv-default-tab-content">{title}</span>
{!hideClose && (
<div
className="dv-default-tab-action"
onPointerDown={onPointerDown}
onPointerDown={onBtnPointerDown}
onClick={onClose}
>
<CloseButton />
Expand Down

0 comments on commit 98cbe37

Please sign in to comment.