From c2c53a241094367c1cdf76db8b92361db4e824a4 Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Fri, 28 Jul 2023 10:26:54 -0400 Subject: [PATCH 1/9] handling middle click event --- packages/core/src/browser/tree/tree-widget.tsx | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index c242c3f4e220f..49766db09732e 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -243,6 +243,11 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { }), ]); } + this.node.addEventListener('mousedown', (event: MouseEvent) => { + if (event.button === 1) { + event.preventDefault(); + } + }); this.toDispose.pushAll([ this.model, this.model.onChanged(() => this.updateRows()), @@ -924,6 +929,7 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { style, onClick: event => this.handleClickEvent(node, event), onDoubleClick: event => this.handleDblClickEvent(node, event), + onAuxClick: event => this.handleAuxClickEvent(node, event), onContextMenu: event => this.handleContextMenuEvent(node, event), }; } @@ -1238,6 +1244,17 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { event.stopPropagation(); } + /** + * Handle the middle-click mouse event. + * @param node the tree node if available. + * @param event the middle-click mouse event. + */ + protected handleAuxClickEvent(node: TreeNode | undefined, event: React.MouseEvent): void { + this.model.openNode(node); + this.tapNode(node); + event.stopPropagation(); + } + /** * Handle the context menu click event. * - The context menu click event is triggered by the right-click. From 68cb3eb10cc61e4a353da54789f6a015d4da3753 Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Mon, 31 Jul 2023 07:58:55 -0400 Subject: [PATCH 2/9] fix toggling node issue --- packages/core/src/browser/tree/tree-widget.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 49766db09732e..48e9dff51601f 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -1251,7 +1251,9 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { */ protected handleAuxClickEvent(node: TreeNode | undefined, event: React.MouseEvent): void { this.model.openNode(node); - this.tapNode(node); + if (SelectableTreeNode.is(node)) { + this.model.selectNode(node); + } event.stopPropagation(); } From 11e312428f01fe10257f408991671bf15c047e40 Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Mon, 31 Jul 2023 12:56:28 -0400 Subject: [PATCH 3/9] fix clipboard pasting bug --- packages/core/src/browser/tree/tree-widget.tsx | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 48e9dff51601f..e67dcbd8f5d5f 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -29,7 +29,7 @@ import { ExpandableTreeNode } from './tree-expansion'; import { SelectableTreeNode, TreeSelection } from './tree-selection'; import { TreeDecoratorService, TreeDecoration, DecoratedTreeNode } from './tree-decorator'; import { notEmpty } from '../../common/objects'; -import { isOSX } from '../../common/os'; +import { isOSX, isWindows } from '../../common/os'; import { ReactWidget } from '../widgets/react-widget'; import * as React from 'react'; import { Virtuoso, VirtuosoHandle } from 'react-virtuoso'; @@ -243,11 +243,13 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { }), ]); } - this.node.addEventListener('mousedown', (event: MouseEvent) => { - if (event.button === 1) { - event.preventDefault(); - } - }); + if (isWindows) { + this.node.addEventListener('mousedown', (event: MouseEvent) => { + if (event.button === 1) { + event.preventDefault(); + } + }); + } this.toDispose.pushAll([ this.model, this.model.onChanged(() => this.updateRows()), From 3ed25d7c49112bc11c42e0d42f1a1c8b645ab3f1 Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Mon, 31 Jul 2023 14:38:58 -0400 Subject: [PATCH 4/9] fix auto-scrolling separately --- packages/core/src/browser/tree/tree-widget.tsx | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index e67dcbd8f5d5f..8c44e62a4e520 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -243,13 +243,6 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { }), ]); } - if (isWindows) { - this.node.addEventListener('mousedown', (event: MouseEvent) => { - if (event.button === 1) { - event.preventDefault(); - } - }); - } this.toDispose.pushAll([ this.model, this.model.onChanged(() => this.updateRows()), From 5d0c8cfaafe79ca39b56a47df816c39e97534782 Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Mon, 31 Jul 2023 14:40:12 -0400 Subject: [PATCH 5/9] remove isWindows import --- packages/core/src/browser/tree/tree-widget.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 8c44e62a4e520..1d2980dd68777 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -29,7 +29,7 @@ import { ExpandableTreeNode } from './tree-expansion'; import { SelectableTreeNode, TreeSelection } from './tree-selection'; import { TreeDecoratorService, TreeDecoration, DecoratedTreeNode } from './tree-decorator'; import { notEmpty } from '../../common/objects'; -import { isOSX, isWindows } from '../../common/os'; +import { isOSX } from '../../common/os'; import { ReactWidget } from '../widgets/react-widget'; import * as React from 'react'; import { Virtuoso, VirtuosoHandle } from 'react-virtuoso'; From ea85b9ae5a7e87e559371603aeaccb3a66baa3c1 Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Tue, 1 Aug 2023 10:11:15 -0400 Subject: [PATCH 6/9] fix auto-scrolling in trees --- packages/core/src/browser/tree/tree-widget.tsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 1d2980dd68777..519aab663a5af 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -243,6 +243,8 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { }), ]); } + this.node.addEventListener('mousedown', this.handleMiddleClickEvent.bind(this)); + this.node.addEventListener('mouseup', this.handleMiddleClickEvent.bind(this)); this.toDispose.pushAll([ this.model, this.model.onChanged(() => this.updateRows()), @@ -1252,6 +1254,16 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { event.stopPropagation(); } + /** + * Handle the middle-click mouse event. + * @param event the middle-click mouse event. + */ + protected handleMiddleClickEvent(event: MouseEvent): void { + if (event.button === 1) { + event.preventDefault(); + } + } + /** * Handle the context menu click event. * - The context menu click event is triggered by the right-click. From ab0613eaef8f8be4b003893cf95a97125e10879d Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Wed, 2 Aug 2023 08:08:38 -0400 Subject: [PATCH 7/9] fix firefox clipboard pasting bug --- packages/core/src/browser/tree/tree-widget.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 519aab663a5af..80ba634add932 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -245,6 +245,7 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { } this.node.addEventListener('mousedown', this.handleMiddleClickEvent.bind(this)); this.node.addEventListener('mouseup', this.handleMiddleClickEvent.bind(this)); + this.node.addEventListener('auxclick', this.handleMiddleClickEvent.bind(this)); this.toDispose.pushAll([ this.model, this.model.onChanged(() => this.updateRows()), From 4f35c4981f944d64b2c11dbfe4b1f22b6fcf41e6 Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Wed, 2 Aug 2023 09:17:44 -0400 Subject: [PATCH 8/9] modify documentation of `handleMiddleClickEvent` --- packages/core/src/browser/tree/tree-widget.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 80ba634add932..30ec64742581d 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -1256,7 +1256,7 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { } /** - * Handle the middle-click mouse event. + * Prevents auto-scrolling behavior when middle-clicking. * @param event the middle-click mouse event. */ protected handleMiddleClickEvent(event: MouseEvent): void { From 7d08ebdf7d9807d07e1a884592a93b31aedb469d Mon Sep 17 00:00:00 2001 From: Vlad Arama Date: Wed, 2 Aug 2023 09:46:34 -0400 Subject: [PATCH 9/9] improve `handleMiddleClickEvent` documentation --- packages/core/src/browser/tree/tree-widget.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/core/src/browser/tree/tree-widget.tsx b/packages/core/src/browser/tree/tree-widget.tsx index 30ec64742581d..252e8463b36f5 100644 --- a/packages/core/src/browser/tree/tree-widget.tsx +++ b/packages/core/src/browser/tree/tree-widget.tsx @@ -1256,10 +1256,11 @@ export class TreeWidget extends ReactWidget implements StatefulWidget { } /** - * Prevents auto-scrolling behavior when middle-clicking. + * Handle the middle-click mouse event. * @param event the middle-click mouse event. */ protected handleMiddleClickEvent(event: MouseEvent): void { + // Prevents auto-scrolling behavior when middle-clicking. if (event.button === 1) { event.preventDefault(); }