changeset 14452:7b979289680f

8262446: DragAndDrop hangs on Windows Reviewed-by: aivanov, serb, kizune
author dmarkov
date Mon, 08 Mar 2021 16:38:21 +0000
parents f9073d041c9d
children 79198fff6d1d
files src/windows/native/sun/windows/awt_DnDDT.cpp
diffstat 1 files changed, 8 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/windows/native/sun/windows/awt_DnDDT.cpp	Thu Jul 09 12:34:12 2015 +0300
+++ b/src/windows/native/sun/windows/awt_DnDDT.cpp	Mon Mar 08 16:38:21 2021 +0000
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -133,6 +133,7 @@
 
 HRESULT __stdcall AwtDropTarget::DragEnter(IDataObject __RPC_FAR *pDataObj, DWORD grfKeyState, POINTL pt, DWORD __RPC_FAR *pdwEffect) {
     TRY;
+    AwtToolkit::GetInstance().isInDoDragDropLoop = TRUE;
     if (NULL != m_pIDropTargetHelper) {
         m_pIDropTargetHelper->DragEnter(
             m_window,
@@ -152,6 +153,7 @@
         (IsLocalDnD()  && !IsLocalDataObject(pDataObj)))
     {
         *pdwEffect = retEffect;
+        AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
         return ret;
     }
 
@@ -163,6 +165,7 @@
     }
 
     if (JNU_IsNull(env, m_dtcp) || !JNU_IsNull(env, safe_ExceptionOccurred(env))) {
+        AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
         return ret;
     }
 
@@ -188,10 +191,12 @@
                 env->ExceptionDescribe();
                 env->ExceptionClear();
                 actions = java_awt_dnd_DnDConstants_ACTION_NONE;
+                AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
             }
         } catch (std::bad_alloc&) {
             retEffect = ::convertActionsToDROPEFFECT(actions);
             *pdwEffect = retEffect;
+            AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
             throw;
         }
 
@@ -405,6 +410,7 @@
     m_dropSuccess = success;
     m_dropActions = action;
     AwtToolkit::GetInstance().QuitMessageLoop(AwtToolkit::EXIT_ENCLOSING_LOOP);
+    AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
 }
 
 /**
@@ -1119,6 +1125,7 @@
 
 void AwtDropTarget::DragCleanup(void) {
     UnloadCache();
+    AwtToolkit::GetInstance().isInDoDragDropLoop = FALSE;
 }
 
 BOOL AwtDropTarget::IsLocalDataObject(IDataObject __RPC_FAR *pDataObject) {