On 07/09/12 02:13, Erich E. Hoover wrote:
- case HH_CLOSE_ALL: {
struct list *ptr;
HHInfo *info;
LIST_FOR_EACH(ptr, &window_list)
{
info = LIST_ENTRY(ptr, HHInfo, entry);
TRACE("Destroying window %s.\n", debugstr_w(info->pszType));
if (info->WinType.hwndHelp)
DestroyWindow(info->WinType.hwndHelp);
list_remove(&info->entry);
}
How is it supposed to work? AFAICS you're destroying windows, removing info object from the list and forget about it. If your intention is to destroy these objects, then ReleaseHelpViewer seems more appropriate. Also moving list_remove call to ReleaseHelpViewer seems preferable, so that it's removed from the list regardless of the reason for being destroyed. Same for list_add_tail, shouldn't it be done in CreateHelpViewer?
Jacek