diff --git a/grid/impl/resources/intellij.grid.impl.xml b/grid/impl/resources/intellij.grid.impl.xml
index 0e7daa3b9a61..56ff0cbb98bd 100644
--- a/grid/impl/resources/intellij.grid.impl.xml
+++ b/grid/impl/resources/intellij.grid.impl.xml
@@ -31,6 +31,10 @@
description="Factor for cache size for rendered table cells"/>
+
+
diff --git a/grid/impl/src/run/ui/EditorCellViewer.kt b/grid/impl/src/run/ui/EditorCellViewer.kt
index 97d621629f06..2d0d4344c648 100644
--- a/grid/impl/src/run/ui/EditorCellViewer.kt
+++ b/grid/impl/src/run/ui/EditorCellViewer.kt
@@ -12,6 +12,7 @@ import com.intellij.ide.highlighter.HighlighterFactory
import com.intellij.ide.util.PropertiesComponent
import com.intellij.lang.Language
import com.intellij.openapi.actionSystem.CommonDataKeys
+import com.intellij.openapi.actionSystem.PlatformCoreDataKeys
import com.intellij.openapi.actionSystem.UiDataProvider
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.application.WriteAction
@@ -22,6 +23,7 @@ import com.intellij.openapi.editor.event.DocumentEvent
import com.intellij.openapi.editor.event.DocumentListener
import com.intellij.openapi.editor.ex.EditorEx
import com.intellij.openapi.fileEditor.FileDocumentManager
+import com.intellij.openapi.fileEditor.impl.text.TextEditorProvider
import com.intellij.openapi.fileTypes.PlainTextLanguage
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key
@@ -78,6 +80,7 @@ class EditorCellViewer(private val project: Project,
private val wrappedComponent = UiDataProvider.wrapComponent(editor.component) { sink ->
sink[CommonDataKeys.EDITOR] = editor
+ sink[PlatformCoreDataKeys.FILE_EDITOR] = TextEditorProvider.getInstance().getTextEditor(editor)
}
override val component: JComponent
diff --git a/grid/impl/src/run/ui/TableResultPanel.java b/grid/impl/src/run/ui/TableResultPanel.java
index 6623f5293335..9d50aed21ad9 100644
--- a/grid/impl/src/run/ui/TableResultPanel.java
+++ b/grid/impl/src/run/ui/TableResultPanel.java
@@ -875,9 +875,6 @@ public class TableResultPanel extends UserDataHolderBase
protected void uiDataSnapshot(@NotNull DataSink sink) {
sink.set(CommonDataKeys.PROJECT, myProject);
sink.setNull(CommonDataKeys.EDITOR);
- sink.set(PlatformDataKeys.COPY_PROVIDER, new GridCopyProvider(this));
- sink.set(PlatformDataKeys.PASTE_PROVIDER, new GridPasteProvider(this, GridUtil::retrieveDataFromText));
- sink.set(PlatformDataKeys.DELETE_ELEMENT_PROVIDER, new DeleteRowsAction());
sink.set(DatabaseDataKeys.DATA_GRID_KEY, this);
sink.set(LangDataKeys.NO_NEW_ACTION, Boolean.TRUE);
diff --git a/grid/impl/src/run/ui/TableResultPanelUIDataRule.kt b/grid/impl/src/run/ui/TableResultPanelUIDataRule.kt
new file mode 100644
index 000000000000..bee3d4d8adcf
--- /dev/null
+++ b/grid/impl/src/run/ui/TableResultPanelUIDataRule.kt
@@ -0,0 +1,35 @@
+package com.intellij.database.run.ui
+
+import com.intellij.database.DatabaseDataKeys
+import com.intellij.database.datagrid.GridUtil
+import com.intellij.database.run.actions.DeleteRowsAction
+import com.intellij.database.run.ui.grid.GridCopyProvider
+import com.intellij.database.run.ui.grid.GridPasteProvider
+import com.intellij.openapi.actionSystem.CommonDataKeys.EDITOR
+import com.intellij.openapi.actionSystem.DataSink
+import com.intellij.openapi.actionSystem.DataSnapshot
+import com.intellij.openapi.actionSystem.PlatformDataKeys.COPY_PROVIDER
+import com.intellij.openapi.actionSystem.PlatformDataKeys.CUT_PROVIDER
+import com.intellij.openapi.actionSystem.PlatformDataKeys.DELETE_ELEMENT_PROVIDER
+import com.intellij.openapi.actionSystem.PlatformDataKeys.PASTE_PROVIDER
+import com.intellij.openapi.actionSystem.UiDataRule
+import com.intellij.openapi.editor.ex.EditorEx
+
+class TableResultPanelUIDataRule : UiDataRule {
+ override fun uiDataSnapshot(sink: DataSink, snapshot: DataSnapshot) {
+ val grid = snapshot[DatabaseDataKeys.DATA_GRID_KEY] ?: return
+ sink[COPY_PROVIDER] = GridCopyProvider(grid)
+ sink[PASTE_PROVIDER] = GridPasteProvider(grid, GridUtil::retrieveDataFromText)
+ sink[DELETE_ELEMENT_PROVIDER] = DeleteRowsAction()
+ }
+}
+
+class InnerEditorsTableResultPanelUIDataRule : UiDataRule {
+ override fun uiDataSnapshot(sink: DataSink, snapshot: DataSnapshot) {
+ val editor = snapshot[EDITOR] as? EditorEx ?: return
+ sink[COPY_PROVIDER] = editor.getCopyProvider()
+ sink[PASTE_PROVIDER] = editor.getPasteProvider()
+ sink[CUT_PROVIDER] = editor.getCutProvider()
+ sink[DELETE_ELEMENT_PROVIDER] = editor.getDeleteProvider()
+ }
+}
\ No newline at end of file