[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; 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 BOOL
FASTCALL FASTCALL
IntQueryTrackMouseEvent( IntQueryTrackMouseEvent(

View file

@ -381,6 +381,12 @@ DWORD FASTCALL IntGetWindowContextHelpId( PWND pWnd )
return HelpId; return HelpId;
} }
VOID
FASTCALL
IntRemoveTrackMouseEvent(
PDESKTOP pDesk);
/*********************************************************************** /***********************************************************************
* IntSendDestroyMsg * IntSendDestroyMsg
*/ */
@ -422,6 +428,12 @@ static void IntSendDestroyMsg(HWND hWnd)
{ {
co_IntDestroyCaret(ti); 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... */ /* If the window being destroyed is the current clipboard owner... */