WINCE: Fix special case for toplevel
authorAndreas Holzammer <andreas.holzammer@kdab.com>
Fri, 23 Jan 2015 12:50:07 +0000 (13:50 +0100)
committerJani Heikkinen <jani.heikkinen@theqtcompany.com>
Thu, 29 Jan 2015 09:30:05 +0000 (09:30 +0000)
It looks like that WindowFromPoint does not
return same handle each time, hence
he then is in a endless loop. We don't need
to look for a child in a loop here for
Windows Embedded Compact.

Task-number: QTBUG-44073
Change-Id: Ic42d56616b29f293d187111588fde3947c15659c
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@theqtcompany.com>
src/plugins/platforms/windows/qwindowscontext.cpp

index ffa7f82d8e2025498745be25ec1aaba216441bd0..99ba5463bffbf25127cd339c4072ae603e181b35 100644 (file)
@@ -675,6 +675,8 @@ static inline bool findPlatformWindowHelper(const POINT &screenPoint, unsigned c
 #ifndef Q_OS_WINCE
     const HWND child = ChildWindowFromPointEx(*hwnd, point, cwexFlags);
 #else
+//  Under Windows CE we don't use ChildWindowFromPointEx as it's not available
+//  and ChildWindowFromPoint does not work properly.
     Q_UNUSED(cwexFlags)
     const HWND child = WindowFromPoint(point);
 #endif
@@ -683,7 +685,13 @@ static inline bool findPlatformWindowHelper(const POINT &screenPoint, unsigned c
     if (QWindowsWindow *window = context->findPlatformWindow(child)) {
         *result = window;
         *hwnd = child;
+#ifndef Q_OS_WINCE
         return true;
+#else
+//      WindowFromPoint does not return same handle in two sequential calls, which leads
+//      to an endless loop, but calling WindowFromPoint once is good enough.
+        return false;
+#endif
     }
 #ifndef Q_OS_WINCE // Does not have  WS_EX_TRANSPARENT .
     // QTBUG-40555: despite CWP_SKIPINVISIBLE, it is possible to hit on invisible