Skip to content

Commit c57cb79

Browse files
committed
fix(amazonq): render drag&drop overlay and fix the issue that images added to pinned context from drag&drop
1 parent ee1d809 commit c57cb79

File tree

2 files changed

+56
-0
lines changed
  • plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq

2 files changed

+56
-0
lines changed

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/toolwindow/AmazonQPanel.kt

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ import software.aws.toolkits.jetbrains.services.codemodernizer.utils.isCodeTrans
4949
import software.aws.toolkits.resources.message
5050
import java.awt.datatransfer.DataFlavor
5151
import java.awt.dnd.DropTarget
52+
import java.awt.dnd.DropTargetDragEvent
5253
import java.awt.dnd.DropTargetDropEvent
54+
import java.awt.dnd.DropTargetEvent
5355
import java.io.File
5456
import java.util.concurrent.CompletableFuture
5557
import javax.imageio.ImageIO.read
@@ -138,6 +140,39 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
138140
// As an alternative, enabling the native drag in JCEF,
139141
// and let the native handling the drop event, and update the UI through JS bridge.
140142
val dropTarget = object : DropTarget() {
143+
override fun dragEnter(dtde: DropTargetDragEvent) {
144+
try {
145+
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
146+
"window.setDragAndDropVisible('true')",
147+
browserInstance.jcefBrowser.cefBrowser.url,
148+
0
149+
)
150+
} catch (e: Exception) {
151+
LOG.error { "Failed to handle dragEnter: ${e.message}" }
152+
}
153+
}
154+
override fun dragOver(dtde: DropTargetDragEvent) {
155+
try {
156+
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
157+
"window.setDragAndDropVisible('true')",
158+
browserInstance.jcefBrowser.cefBrowser.url,
159+
0
160+
)
161+
} catch (e: Exception) {
162+
LOG.error { "Failed to handle dragOver: ${e.message}" }
163+
}
164+
}
165+
override fun dragExit(dte: DropTargetEvent) {
166+
try {
167+
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
168+
"window.setDragAndDropVisible('false')",
169+
browserInstance.jcefBrowser.cefBrowser.url,
170+
0
171+
)
172+
} catch (e: Exception) {
173+
LOG.error { "Failed to handle dragExit: ${e.message}" }
174+
}
175+
}
141176
override fun drop(dtde: DropTargetDropEvent) {
142177
try {
143178
dtde.acceptDrop(dtde.dropAction)
@@ -166,6 +201,18 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
166201
validImages.subList(20, validImages.size).clear()
167202
}
168203

204+
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
205+
"window.resetTopBarClicked()",
206+
browserInstance.jcefBrowser.cefBrowser.url,
207+
0
208+
)
209+
210+
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
211+
"window.setDragAndDropVisible('false')",
212+
browserInstance.jcefBrowser.cefBrowser.url,
213+
0
214+
)
215+
169216
val json = OBJECT_MAPPER.writeValueAsString(validImages)
170217
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
171218
"window.handleNativeDrop('$json')",

plugins/amazonq/chat/jetbrains-community/src/software/aws/toolkits/jetbrains/services/amazonq/webview/Browser.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,15 @@ class Browser(parent: Disposable, private val webUri: URI, val project: Project)
181181
})
182182
});
183183
};
184+
185+
window.setDragAndDropVisible = function(visibility) {
186+
const parsedVisibility = JSON.parse(visibility);
187+
qChat.setDragOverlayVisible(qChat.getSelectedTabId(), parsedVisibility)
188+
};
189+
190+
window.resetTopBarClicked = function() {
191+
qChat.resetTopBarClicked(qChat.getSelectedTabId())
192+
};
184193
}
185194
</script>
186195
""".trimIndent()

0 commit comments

Comments
 (0)