From ca8a72d304583ff55eba2db415a2d251f37d2565 Mon Sep 17 00:00:00 2001 From: Sergio Martins Date: Wed, 3 Jul 2019 15:10:12 +0100 Subject: [PATCH] DragController: Work with MFC windows too A MFC window with an embedded QMainWindow doesn't appear in topLevelWindows(), so we need an extra check. --- src/DragController.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/DragController.cpp b/src/DragController.cpp index fe017a39..f4878445 100644 --- a/src/DragController.cpp +++ b/src/DragController.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #if defined(Q_OS_WIN) # include @@ -342,8 +343,20 @@ QWidget *DragController::qtTopLevelUnderCursor() const return tl; } } else { + // Maybe it's embedded in a QWinWidget: + for (auto topLevel : topLevels) { + if (QLatin1String(topLevel->metaObject()->className()) == QLatin1String("QWinWidget")) { + if (hwnd == GetParent((HWND)topLevel->windowHandle()->winId())) { + if (topLevel->geometry().contains(globalPos) && topLevel->objectName() != QStringLiteral("_docks_IndicatorWindow_Overlay")) { + qCDebug(toplevels) << Q_FUNC_INFO << "Found top-level" << topLevel; + return topLevel; + } + } + } + } + // A window belonging to another app is below the cursor - qCDebug(toplevels) << Q_FUNC_INFO << "Window from another app is under cursor"; + qCDebug(toplevels) << Q_FUNC_INFO << "Window from another app is under cursor" << hwnd; return nullptr; } }