Skip to content

Commit b2b3d99

Browse files
Merge main into feature/remote-chat-lsp
2 parents d798cc4 + 781f173 commit b2b3d99

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
@@ -50,7 +50,9 @@ import software.aws.toolkits.jetbrains.utils.isRunningOnRemoteBackend
5050
import software.aws.toolkits.resources.message
5151
import java.awt.datatransfer.DataFlavor
5252
import java.awt.dnd.DropTarget
53+
import java.awt.dnd.DropTargetDragEvent
5354
import java.awt.dnd.DropTargetDropEvent
55+
import java.awt.dnd.DropTargetEvent
5456
import java.io.File
5557
import java.util.concurrent.CompletableFuture
5658
import javax.imageio.ImageIO.read
@@ -146,6 +148,15 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
146148
// As an alternative, enabling the native drag in JCEF,
147149
// and let the native handling the drop event, and update the UI through JS bridge.
148150
val dropTarget = object : DropTarget() {
151+
override fun dragEnter(dtde: DropTargetDragEvent) {
152+
setDragAndDropOverlayVisible(browserInstance, true)
153+
}
154+
override fun dragOver(dtde: DropTargetDragEvent) {
155+
setDragAndDropOverlayVisible(browserInstance, true)
156+
}
157+
override fun dragExit(dte: DropTargetEvent) {
158+
setDragAndDropOverlayVisible(browserInstance, false)
159+
}
149160
override fun drop(dtde: DropTargetDropEvent) {
150161
try {
151162
dtde.acceptDrop(dtde.dropAction)
@@ -174,20 +185,16 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
174185
validImages.subList(20, validImages.size).clear()
175186
}
176187

188+
executeJavaScript(browserInstance, "window.resetTopBarClicked()")
189+
190+
setDragAndDropOverlayVisible(browserInstance, false)
191+
177192
val json = OBJECT_MAPPER.writeValueAsString(validImages)
178-
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
179-
"window.handleNativeDrop('$json')",
180-
browserInstance.jcefBrowser.cefBrowser.url,
181-
0
182-
)
193+
executeJavaScript(browserInstance, "window.handleNativeDrop('$json')")
183194

184195
if (errorMessages.isNotEmpty()) {
185196
val errorJson = OBJECT_MAPPER.writeValueAsString(errorMessages)
186-
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
187-
"window.handleNativeNotify('$errorJson')",
188-
browserInstance.jcefBrowser.cefBrowser.url,
189-
0
190-
)
197+
executeJavaScript(browserInstance, "window.handleNativeNotify('$errorJson')")
191198
}
192199

193200
dtde.dropComplete(true)
@@ -294,6 +301,22 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
294301
}
295302
}
296303

304+
private fun executeJavaScript(browserInstance: Browser, jsCommand: String) {
305+
try {
306+
browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
307+
jsCommand,
308+
browserInstance.jcefBrowser.cefBrowser.url,
309+
0
310+
)
311+
} catch (e: Exception) {
312+
LOG.error { "Failed to execute JavaScript: $jsCommand - ${e.message}" }
313+
}
314+
}
315+
316+
private fun setDragAndDropOverlayVisible(browserInstance: Browser, visible: Boolean) {
317+
executeJavaScript(browserInstance, "window.setDragAndDropVisible('$visible')")
318+
}
319+
297320
private fun validateImageFile(file: File, allowedTypes: Set<String>, maxFileSize: Double, maxDimension: Int): String? {
298321
val fileName = file.name
299322
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
@@ -196,6 +196,15 @@ class Browser(parent: Disposable, private val mynahAsset: Path, val project: Pro
196196
},
197197
})
198198
};
199+
200+
window.setDragAndDropVisible = function(visibility) {
201+
const parsedVisibility = JSON.parse(visibility);
202+
qChat.setDragOverlayVisible(qChat.getSelectedTabId(), parsedVisibility)
203+
};
204+
205+
window.resetTopBarClicked = function() {
206+
qChat.resetTopBarClicked(qChat.getSelectedTabId())
207+
};
199208
}
200209
</script>
201210
""".trimIndent()

0 commit comments

Comments
 (0)