@@ -141,37 +141,13 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
141141 // and let the native handling the drop event, and update the UI through JS bridge.
142142 val dropTarget = object : DropTarget () {
143143 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- }
144+ setDragAndDropOverlayVisible(browserInstance, true )
153145 }
154146 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- }
147+ setDragAndDropOverlayVisible(browserInstance, true )
164148 }
165149 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- }
150+ setDragAndDropOverlayVisible(browserInstance, false )
175151 }
176152 override fun drop (dtde : DropTargetDropEvent ) {
177153 try {
@@ -201,32 +177,16 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
201177 validImages.subList(20 , validImages.size).clear()
202178 }
203179
204- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
205- " window.resetTopBarClicked()" ,
206- browserInstance.jcefBrowser.cefBrowser.url,
207- 0
208- )
180+ executeJavaScript(browserInstance, " window.resetTopBarClicked()" )
209181
210- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
211- " window.setDragAndDropVisible('false')" ,
212- browserInstance.jcefBrowser.cefBrowser.url,
213- 0
214- )
182+ setDragAndDropOverlayVisible(browserInstance, false )
215183
216184 val json = OBJECT_MAPPER .writeValueAsString(validImages)
217- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
218- " window.handleNativeDrop('$json ')" ,
219- browserInstance.jcefBrowser.cefBrowser.url,
220- 0
221- )
185+ executeJavaScript(browserInstance, " window.handleNativeDrop('$json ')" )
222186
223187 if (errorMessages.isNotEmpty()) {
224188 val errorJson = OBJECT_MAPPER .writeValueAsString(errorMessages)
225- browserInstance.jcefBrowser.cefBrowser.executeJavaScript(
226- " window.handleNativeNotify('$errorJson ')" ,
227- browserInstance.jcefBrowser.cefBrowser.url,
228- 0
229- )
189+ executeJavaScript(browserInstance, " window.handleNativeNotify('$errorJson ')" )
230190 }
231191
232192 dtde.dropComplete(true )
@@ -333,6 +293,22 @@ class AmazonQPanel(val project: Project, private val scope: CoroutineScope) : Di
333293 }
334294 }
335295
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+
336312 private fun validateImageFile (file : File , allowedTypes : Set <String >, maxFileSize : Double , maxDimension : Int ): String? {
337313 val fileName = file.name
338314 val ext = fileName.substringAfterLast(' .' , " " ).lowercase()
0 commit comments