# HG changeset patch # User dmarkov # Date 1615221501 0 # Node ID 7b979289680f810672b9c975d5ff3790e0828c32 # Parent f9073d041c9d484c3cd98051582dad0e1706f5fb 8262446: DragAndDrop hangs on Windows Reviewed-by: aivanov, serb, kizune diff -r f9073d041c9d -r 7b979289680f src/windows/native/sun/windows/awt_DnDDT.cpp --- 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) {