From c663493690b3d3d98965ae6bfe943ce8f406c787 Mon Sep 17 00:00:00 2001 From: Alan Ren Date: Thu, 11 Aug 2022 21:22:19 -0700 Subject: [PATCH] properly handle copy request (#20320) --- .../contrib/query/browser/gridPanel.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/sql/workbench/contrib/query/browser/gridPanel.ts b/src/sql/workbench/contrib/query/browser/gridPanel.ts index a1c4c3c6da..fd930d8621 100644 --- a/src/sql/workbench/contrib/query/browser/gridPanel.ts +++ b/src/sql/workbench/contrib/query/browser/gridPanel.ts @@ -19,7 +19,6 @@ import { RowNumberColumn } from 'sql/base/browser/ui/table/plugins/rowNumberColu import { escape } from 'sql/base/common/strings'; import { hyperLinkFormatter, textFormatter } from 'sql/base/browser/ui/table/formatters'; import { AdditionalKeyBindings } from 'sql/base/browser/ui/table/plugins/additionalKeyBindings.plugin'; -import { CopyKeybind } from 'sql/base/browser/ui/table/plugins/copyKeybind.plugin'; import { IContextMenuService, IContextViewService } from 'vs/platform/contextview/browser/contextView'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; @@ -52,6 +51,7 @@ import { FilterButtonWidth, HeaderFilter } from 'sql/base/browser/ui/table/plugi import { HybridDataProvider } from 'sql/base/browser/ui/table/hybridDataProvider'; import { INotificationService } from 'vs/platform/notification/common/notification'; import { alert, status } from 'vs/base/browser/ui/aria/aria'; +import { CopyAction } from 'vs/editor/contrib/clipboard/clipboard'; const ROW_HEIGHT = 29; const HEADER_HEIGHT = 26; @@ -492,10 +492,6 @@ export abstract class GridTableBase extends Disposable implements IView { this.renderGridDataRowsRange(startIndex, count); }); this.rowNumberColumn = new RowNumberColumn({ numberOfRows: this.resultSet.rowCount }); - let copyHandler = new CopyKeybind(); - copyHandler.onCopy(e => { - this.instantiationService.createInstance(CopyResultAction, CopyResultAction.COPY_ID, CopyResultAction.COPY_LABEL, false).run(this.generateContext()); - }); this.columns.unshift(this.rowNumberColumn.getColumnDefinition()); let tableOptions: Slick.GridOptions = { rowHeight: this.rowHeight, @@ -525,7 +521,6 @@ export abstract class GridTableBase extends Disposable implements IView { this.table.registerPlugin(new MouseWheelSupport()); const autoSizeOnRender: boolean = !this.state.columnSizes && this.configurationService.getValue('resultsGrid.autoSizeColumns'); this.table.registerPlugin(new AutoColumnSize({ autoSizeOnRender: autoSizeOnRender, maxWidth: this.configurationService.getValue('resultsGrid.maxColumnWidth'), extraColumnHeaderWidth: FilterButtonWidth })); - this.table.registerPlugin(copyHandler); this.table.registerPlugin(this.rowNumberColumn); this.table.registerPlugin(new AdditionalKeyBindings()); this._register(this.dataProvider.onFilterStateChange(() => { this.layout(); })); @@ -608,6 +603,18 @@ export abstract class GridTableBase extends Disposable implements IView { this.state.activeCell = this.table.grid.getActiveCell(); } }); + // Add implementation for the copy action to respect the user's global copy command keybinding. + // 1 is a priority number that is slightly larger than the basic handler's priority 0 to make sure our implementation + // is executed. + this._register(CopyAction.addImplementation(1, 'query-result-grid', accessor => { + const selectedRanges = this.table.getSelectedRanges(); + // Only do copy if the grid is the current active grid. + if (this.container.contains(document.activeElement) && selectedRanges && selectedRanges.length !== 0) { + this.instantiationService.createInstance(CopyResultAction, CopyResultAction.COPY_ID, CopyResultAction.COPY_LABEL, false).run(this.generateContext()); + return true; + } + return false; + })); } private restoreScrollState() {