Skip to content

Commit 683b786

Browse files
Merge main into feature/model-selection
2 parents 70d9749 + 781f173 commit 683b786

File tree

3 files changed

+46
-10
lines changed

3 files changed

+46
-10
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "bugfix",
3+
"description" : "Fix the issue that sometime images added via drag & drop are incorrectly routed to pinned context"
4+
}

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

Lines changed: 33 additions & 10 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,15 @@ 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+
setDragAndDropOverlayVisible(browserInstance, true)
145+
}
146+
override fun dragOver(dtde: DropTargetDragEvent) {
147+
setDragAndDropOverlayVisible(browserInstance, true)
148+
}
149+
override fun dragExit(dte: DropTargetEvent) {
150+
setDragAndDropOverlayVisible(browserInstance, false)
151+
}
141152
override fun drop(dtde: DropTargetDropEvent) {
142153
try {
143154
dtde.acceptDrop(dtde.dropAction)
@@ -166,20 +177,16 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
166177
validImages.subList(20, validImages.size).clear()
167178
}
168179

180+
executeJavaScript(browserInstance, "window.resetTopBarClicked()")
181+
182+
setDragAndDropOverlayVisible(browserInstance, false)
183+
169184
val json = OBJECT_MAPPER.writeValueAsString(validImages)
170-
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
171-
"window.handleNativeDrop('$json')",
172-
browserInstance.jcefBrowser.cefBrowser.url,
173-
0
174-
)
185+
executeJavaScript(browserInstance, "window.handleNativeDrop('$json')")
175186

176187
if (errorMessages.isNotEmpty()) {
177188
val errorJson = OBJECT_MAPPER.writeValueAsString(errorMessages)
178-
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
179-
"window.handleNativeNotify('$errorJson')",
180-
browserInstance.jcefBrowser.cefBrowser.url,
181-
0
182-
)
189+
executeJavaScript(browserInstance, "window.handleNativeNotify('$errorJson')")
183190
}
184191

185192
dtde.dropComplete(true)
@@ -286,6 +293,22 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
286293
}
287294
}
288295

296+
private fun executeJavaScript(browserInstance: Browser, jsCommand: String) {
297+
try {
298+
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
299+
jsCommand,
300+
browserInstance.jcefBrowser.cefBrowser.url,
301+
0
302+
)
303+
} catch (e: Exception) {
304+
LOG.error { "Failed to execute JavaScript: $jsCommand - ${e.message}" }
305+
}
306+
}
307+
308+
private fun setDragAndDropOverlayVisible(browserInstance: Browser, visible: Boolean) {
309+
executeJavaScript(browserInstance, "window.setDragAndDropVisible('$visible')")
310+
}
311+
289312
private fun validateImageFile(file: File, allowedTypes: Set<String>, maxFileSize: Double, maxDimension: Int): String? {
290313
val fileName = file.name
291314
val ext = fileName.substringAfterLast('.', "").lowercase()

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
@@ -189,6 +189,15 @@ class Browser(parent: Disposable, private val webUri: URI, val project: Project)
189189
},
190190
})
191191
};
192+
193+
window.setDragAndDropVisible = function(visibility) {
194+
const parsedVisibility = JSON.parse(visibility);
195+
qChat.setDragOverlayVisible(qChat.getSelectedTabId(), parsedVisibility)
196+
};
197+
198+
window.resetTopBarClicked = function() {
199+
qChat.resetTopBarClicked(qChat.getSelectedTabId())
200+
};
192201
}
193202
</script>
194203
""".trimIndent()

0 commit comments

Comments
 (0)