[ros-diffs] [jimtabor] 52188: [Win32k] - Fixed mouse tracking. See bug 6257.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Sat Jun 11 12:56:29 UTC 2011


Author: jimtabor
Date: Sat Jun 11 12:56:29 2011
New Revision: 52188

URL: http://svn.reactos.org/svn/reactos?rev=52188&view=rev
Log:
[Win32k]
- Fixed mouse tracking. See bug 6257.


Modified:
    trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c?rev=52188&r1=52187&r2=52188&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/msgqueue.c [iso-8859-1] Sat Jun 11 12:56:29 2011
@@ -523,13 +523,8 @@
 
    /* Get the desktop window */
    pwndDesktop = UserGetDesktopWindow();
-   if (!pwndDesktop)
-       return;
-
-   /* Set hit somewhere on the desktop */
+   if (!pwndDesktop) return;
    pDesk = pwndDesktop->head.rpdesk;
-   pDesk->htEx = HTNOWHERE;
-   pDesk->spwndTrack = pwndDesktop;
 
    /* Check if the mouse is captured */
    Msg->hwnd = IntGetCaptureWindow();
@@ -545,7 +540,21 @@
 
    if (pwnd)
    {
-      pDesk->spwndTrack = IntChildrenWindowFromPoint(pwnd, Msg->pt.x, Msg->pt.y);
+      PWND pwndTrack = IntChildrenWindowFromPoint(pwnd, Msg->pt.x, Msg->pt.y);
+
+      if ( pDesk->spwndTrack != pwndTrack && pDesk->dwDTFlags & (DF_TME_LEAVE|DF_TME_HOVER) )
+      {
+         if ( pDesk->dwDTFlags & DF_TME_LEAVE )
+            UserPostMessage( UserHMGetHandle(pDesk->spwndTrack),
+                            (pDesk->htEx != HTCLIENT) ? WM_NCMOUSELEAVE : WM_MOUSELEAVE,
+                             0, 0);
+
+         if ( pDesk->dwDTFlags & DF_TME_HOVER )
+            IntKillTimer(UserHMGetHandle(pDesk->spwndTrack), ID_EVENT_SYSTIMER_MOUSEHOVER, TRUE);
+
+         pDesk->dwDTFlags &= ~(DF_TME_LEAVE|DF_TME_HOVER);
+      }
+      pDesk->spwndTrack = pwndTrack;
       pDesk->htEx = GetNCHitEx(pDesk->spwndTrack, Msg->pt);
    }
 




More information about the Ros-diffs mailing list