fix termination of "search program" dialog
Modified: trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp
Modified: trunk/reactos/subsys/system/explorer/explorer.cpp
Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp

Modified: trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp
--- trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp	2005-04-02 18:01:18 UTC (rev 14450)
+++ trunk/reactos/subsys/system/explorer/dialogs/searchprogram.cpp	2005-04-02 18:24:13 UTC (rev 14451)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2003, 2004 Martin Fuchs
+ * Copyright 2003, 2004, 2005 Martin Fuchs
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -42,10 +42,11 @@
 	} catch(COMException&) {
 	}
 
-	try {
-		collect_programs(SpecialFolderPath(CSIDL_PROGRAMS, _hwnd));
-	} catch(COMException&) {
-	}
+	if (_alive)
+		try {
+			collect_programs(SpecialFolderPath(CSIDL_PROGRAMS, _hwnd));
+		} catch(COMException&) {
+		}
 
 	if (_alive)
 		_cache_valid = true;
@@ -60,16 +61,13 @@
 
 	dir->smart_scan(SORT_NONE, /*SCAN_EXTRACT_ICONS|*/SCAN_FILESYSTEM);
 
-	for(Entry*entry=dir->_down; entry; entry=entry->_next) {
-		if (!_alive)
-			break;
-
+	for(Entry*entry=dir->_down; _alive && entry; entry=entry->_next) {
 		if (entry->_shell_attribs & SFGAO_HIDDEN)
 			continue;
 
-		if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
+		if (entry->_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
 			collect_programs(entry->create_absolute_pidl());
-		} else if (entry->_shell_attribs & SFGAO_LINK)
+		else if (entry->_shell_attribs & SFGAO_LINK)
 			if (_alive)
 				_callback(entry, _para);
 	}
@@ -139,6 +137,8 @@
 
 FindProgramDlg::~FindProgramDlg()
 {
+	_thread.Stop();
+
 	unregister_pretranslate(_hwnd);
 }
 
@@ -262,6 +262,10 @@
 LRESULT FindProgramDlg::WndProc(UINT nmsg, WPARAM wparam, LPARAM lparam)
 {
 	switch(nmsg) {
+	  case WM_CLOSE:
+		ListView_SetImageList(_list_ctrl, 0, LVSIL_SMALL);	// detach system image list
+		goto def;
+
 	  case PM_TRANSLATE_MSG: {
 		MSG* pmsg = (MSG*) lparam;
 
@@ -270,7 +274,7 @@
 
 		return FALSE;}
 
-	  default:
+	  default: def:
 		return super::WndProc(nmsg, wparam, lparam);
 	}
 

Modified: trunk/reactos/subsys/system/explorer/explorer.cpp
--- trunk/reactos/subsys/system/explorer/explorer.cpp	2005-04-02 18:01:18 UTC (rev 14450)
+++ trunk/reactos/subsys/system/explorer/explorer.cpp	2005-04-02 18:24:13 UTC (rev 14451)
@@ -387,7 +387,7 @@
 
 	SHFILEINFO sfi;
 
-#if 1	// use system image list
+#if 1	// use system image list - the "search program dialog" needs it
 	HIMAGELIST himlSys = (HIMAGELIST) SHGetFileInfo(path, 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX|SHGFI_SMALLICON);
 
 	if (himlSys) {

Modified: trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp
--- trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-04-02 18:01:18 UTC (rev 14450)
+++ trunk/reactos/subsys/system/explorer/taskbar/startmenu.cpp	2005-04-02 18:24:13 UTC (rev 14451)
@@ -425,7 +425,7 @@
 		break;
 
 	  case PM_SELECT_ENTRY:
-		SelectButtonIndex(0, wparam?true:false);
+		SelectButtonIndex(0, wparam!=0);
 		break;
 
 #ifdef _LIGHT_STARTMENU