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/ntu... ============================================================================== --- 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); }