[WIN32K] Check if the window being destroyed is currently tracked. (#103)

* [WIN32K] Check if the window being destroyed is currently tracked.
CORE-13619
This commit is contained in:
Mark Jansen 2017-11-04 15:00:54 +01:00 committed by GitHub
parent 1eea9304e1
commit 9e4d2f1f9e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 32 additions and 0 deletions

View file

@ -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(

View file

@ -381,6 +381,12 @@ DWORD FASTCALL IntGetWindowContextHelpId( PWND pWnd )
return HelpId;
}
VOID
FASTCALL
IntRemoveTrackMouseEvent(
PDESKTOP pDesk);
/***********************************************************************
* IntSendDestroyMsg
*/
@ -422,6 +428,12 @@ static void IntSendDestroyMsg(HWND hWnd)
{
co_IntDestroyCaret(ti);
}
/* If the window being destroyed is currently tracked... */
if (ti->rpdesk->spwndTrack == Window)
{
IntRemoveTrackMouseEvent(ti->rpdesk);
}
}
/* If the window being destroyed is the current clipboard owner... */