[WIN32K] Check if the window being destroyed is currently tracked. (#103)
[reactos.git] / win32ss / user / ntuser / mouse.c
index 0793ed1..46dfcfd 100644 (file)
@@ -2,7 +2,7 @@
  * COPYRIGHT:        See COPYING in the top level directory
  * PROJECT:          ReactOS kernel
  * PURPOSE:          Mouse functions
- * FILE:             subsystems/win32/win32k/ntuser/input.c
+ * FILE:             win32ss/user/ntuser/mouse.c
  * PROGRAMERS:       Casper S. Hornstrup (chorns@users.sourceforge.net)
  *                   Rafal Harabien (rafalh@reactos.org)
  */
@@ -342,6 +342,26 @@ UserSendMouseInput(MOUSEINPUT *pmi, BOOL bInjected)
     return TRUE;
 }
 
+VOID
+FASTCALL
+IntRemoveTrackMouseEvent(
+    PDESKTOP pDesk)
+{
+    /* Generate a leave message */
+    if (pDesk->dwDTFlags & DF_TME_LEAVE)
+    {
+        UINT uMsg = (pDesk->htEx != HTCLIENT) ? WM_NCMOUSELEAVE : WM_MOUSELEAVE;
+        UserPostMessage(UserHMGetHandle(pDesk->spwndTrack), uMsg, 0, 0);
+    }
+    /* Kill the timer */
+    if (pDesk->dwDTFlags & DF_TME_HOVER)
+        IntKillTimer(pDesk->spwndTrack, ID_EVENT_SYSTIMER_MOUSEHOVER, TRUE);
+
+    /* Reset state */
+    pDesk->dwDTFlags &= ~(DF_TME_LEAVE|DF_TME_HOVER);
+    pDesk->spwndTrack = NULL;
+}
+
 BOOL
 FASTCALL
 IntQueryTrackMouseEvent(