Windows drag&drop: Use correct window for drag target processing

GetFocus will return the window that currently has keyboard focus. This
is not what we want for drag and drop handling though. Use the window
under mouse and process events for that window when doing the touch/pen
input workaround. If no window is found we fall back to the focus
window. Followup to 31e7790102b260344893eaa8bf8b7b1a0f95e3b7

Fixes: QTBUG-111149
Change-Id: Ib8233debc267df0cc19b21c1dc5c6881d018d84a
Reviewed-by: Timothée Keller <timothee.keller@qt.io>
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
(cherry picked from commit c912bde52a1b85a782db6aed8d6f9917d597f58b)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Oliver Wolff 2023-02-23 10:39:28 +01:00 committed by Qt Cherry-pick Bot
parent 9a1a7e4965
commit 9ff5b886fa

View File

@ -648,7 +648,8 @@ IDropTargetHelper* QWindowsDrag::dropHelper() {
// We process pointer messages for touch/pen and generate mouse input through SendInput() to trigger DoDragDrop()
static HRESULT startDoDragDrop(LPDATAOBJECT pDataObj, LPDROPSOURCE pDropSource, DWORD dwOKEffects, LPDWORD pdwEffect)
{
HWND hwnd = ::GetFocus();
QWindow *underMouse = QWindowsContext::instance()->windowUnderMouse();
const HWND hwnd = underMouse ? reinterpret_cast<HWND>(underMouse->winId()) : ::GetFocus();
bool starting = false;
for (;;) {