Hi, On Wed, Aug 26, 2015 at 5:15 PM, Raymond Ko <[email protected]> wrote: > On Wednesday, August 26, 2015 at 5:33:47 PM UTC-4, [email protected] wrote: >> Hi, >> >> Based on the following posts: >> >> http://blogs.msdn.com/b/oldnewthing/archive/2011/09/26/10216420.aspx >> http://blogs.msdn.com/b/oldnewthing/archive/2005/07/27/443824.aspx >> >> sending a WM_CLOSE and WM_NCDESTROY message to a window is not >> the same as calling DestroyWindow(). So I think the original fix (patch 829) >> for the crash is not correct. >> >> - Yegappan >> >> On Wed, Aug 26, 2015 at 2:12 PM, Bram Moolenaar <[email protected]> wrote: >> > >> > Patch 7.4.840 (after 7.4.829) >> > Problem: Tooltip window stays open. >> > Solution: Send a WM_CLOSE message. (Jurgen Kramer) >> > Files: src/gui_w32.c >> > >> > >> > *** ../vim-7.4.839/src/gui_w32.c 2015-08-25 12:21:23.583957205 +0200 >> > --- src/gui_w32.c 2015-08-26 23:10:03.847838259 +0200 >> > *************** >> > *** 4836,4841 **** >> > --- 4836,4842 ---- >> > delete_tooltip(beval) >> > BalloonEval *beval; >> > { >> > + PostMessage(beval->balloon, WM_CLOSE, 0, 0); >> > PostMessage(beval->balloon, WM_DESTROY, 0, 0); >> > PostMessage(beval->balloon, WM_NCDESTROY, 0, 0); >> > } >> > *** ../vim-7.4.839/src/version.c 2015-08-26 23:01:16.453676957 +0200 >> > --- src/version.c 2015-08-26 23:11:28.262906177 +0200 >> > *************** >> > *** 743,744 **** >> > --- 743,746 ---- >> > { /* Add new patch number below this line */ >> > + /**/ >> > + 840, >> > /**/ >> > > > You might be right. If WM_CLOSE does eventually does internally call > DestroyWindow() then the WM_DESTROY and WM_NCDESTROY might not be necessary. >
A WM_CLOSE message should be posted to a top level window to close the window. In response to this message, the window event handler is supposed to call the DestroyWindow() function. This function performs the following (as described in the Microsoft documentation): >>>> Destroys the specified window. The function sends WM_DESTROY and WM_NCDESTROY messages to the window to deactivate it and remove the keyboard focus from it. The function also destroys the window's menu, flushes the thread message queue, destroys timers, removes clipboard ownership, and breaks the clipboard viewer chain (if the window is at the top of the viewer chain). <<<< The resources associated with the window are freed by the DestroyWindow() function. > > I wonder if there is a way to verify that this is the case? The main issue is > that the code is crashing inside Microsoft's Common Controls DLL and I don't > think the source code for this is accessible. > Most probably it is crashing in the common controls DLL because Vim is trying to use/access a window resource after it is freed/destroyed. - Yegappan -- -- You received this message from the "vim_dev" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
