From: zhangzhou <zhangzhou@uniontech.com> Change-Id: I81fe6705abca29b1d18213dcb7033420b7ceb0ed --- dlls/user32/clipboard.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/dlls/user32/clipboard.c b/dlls/user32/clipboard.c index 3c3ba7c584c..4a05d40dc1e 100644 --- a/dlls/user32/clipboard.c +++ b/dlls/user32/clipboard.c @@ -1158,7 +1158,14 @@ void drag_drop_leave(void) TRACE("DND Operation canceled\n"); - if ((object = get_data_object( TRUE ))) IDataObject_Release( &object->IDataObject_iface ); + if (!(object = get_data_object( TRUE ))) return; + if (object->drop_target) + { + IDropTarget_DragLeave( object->drop_target ); + IDropTarget_Release( object->drop_target ); + object->drop_target = NULL; + } + IDataObject_Release( &object->IDataObject_iface ); } DWORD drag_drop_drag( HWND hwnd, POINT point, DWORD effect ) @@ -1276,8 +1283,6 @@ DWORD drag_drop_drop( HWND hwnd ) { HRESULT hr = IDropTarget_DragLeave( object->drop_target ); if (FAILED(hr)) WARN( "IDropTarget_DragLeave returned %#lx\n", hr ); - IDropTarget_Release( object->drop_target ); - object->drop_target = NULL; } if (drop_file) @@ -1306,6 +1311,12 @@ DWORD drag_drop_drop( HWND hwnd ) } } + if (object->drop_target) + { + IDropTarget_Release( object->drop_target ); + object->drop_target = NULL; + } + TRACE("effectRequested(0x%lx) accept(%d) performed(0x%lx) at x(%ld),y(%ld)\n", object->target_effect, accept, effect, object->target_pos.x, object->target_pos.y); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/11413