mirror of
https://github.com/reactos/reactos.git
synced 2025-02-22 16:36:33 +00:00
[USER32]
Patch by Thomas Faber: When the Edit receives WM_KILLFOCUS, it will notify its parent (the ListView) of losing focus, which in turn will send WM_CLOSE to destroy the edit control. This will cause the edit to receive WM_DESTROY and free the EDITSTATE. When control returns to the WM_KILLFOCUS handler, this would call EDIT_UnlockBuffer on the now invalid EDITSTATE. Fix this by checking the validity of the EDITSTATE before calling EDIT_UnlockBuffer. Fixes explorer crash, when cancelling file renaming. See issue #5895 for more details. svn path=/trunk/; revision=50956
This commit is contained in:
parent
e12dbcd77d
commit
3d476667b6
1 changed files with 4 additions and 2 deletions
|
@ -4721,7 +4721,7 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
|
|||
|
||||
case WM_NCDESTROY:
|
||||
result = EDIT_WM_NCDestroy(es);
|
||||
es = NULL;
|
||||
// es = NULL; reactos
|
||||
#ifdef __REACTOS__
|
||||
NtUserSetWindowFNID(hwnd, FNID_DESTROY);
|
||||
#endif
|
||||
|
@ -5009,7 +5009,9 @@ LRESULT WINAPI EditWndProc_common( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lP
|
|||
break;
|
||||
}
|
||||
|
||||
if (IsWindow(hwnd) && es) EDIT_UnlockBuffer(es, FALSE);
|
||||
/* reactos: check GetWindowLong in case es has been destroyed during processing */
|
||||
if (IsWindow(hwnd) && es && GetWindowLongPtrW(hwnd, 0))
|
||||
EDIT_UnlockBuffer(es, FALSE);
|
||||
|
||||
TRACE("hwnd=%p msg=%x (%s) -- 0x%08lx\n", hwnd, msg, SPY_GetMsgName(msg, hwnd), result);
|
||||
|
||||
|
|
Loading…
Reference in a new issue