Index: src/ch/DirTreeCtrl.cpp
===================================================================
diff -u -r6c67d46c243c6a275f2a427c991f82db59c63ef0 -r90e8a7720fc23cf282e486c7b2bc1dc590b5d74c
--- src/ch/DirTreeCtrl.cpp	(.../DirTreeCtrl.cpp)	(revision 6c67d46c243c6a275f2a427c991f82db59c63ef0)
+++ src/ch/DirTreeCtrl.cpp	(.../DirTreeCtrl.cpp)	(revision 90e8a7720fc23cf282e486c7b2bc1dc590b5d74c)
@@ -59,7 +59,7 @@
 {
 	LPMALLOC lpMalloc;
 	HRESULT  hr;
-	LPITEMIDLIST pidl=NULL;
+	LPITEMIDLIST pidl=nullptr;
 
 	hr=SHGetMalloc(&lpMalloc);
 
@@ -97,7 +97,7 @@
 	UINT cb1;
 	UINT cb2;
 
-	if (pidl1)  //May be NULL
+	if (pidl1)  //May be nullptr
 		cb1 = GetSize(pidl1) - sizeof(pidl1->mkid.cb);
 	else
 		cb1 = 0;
@@ -171,9 +171,9 @@
 
 CDirTreeCtrl::CDirTreeCtrl()
 {
-	m_hDrives=NULL;
-	m_hNetwork=NULL;
-	m_hImageList=NULL;
+	m_hDrives=nullptr;
+	m_hNetwork=nullptr;
+	m_hImageList=nullptr;
 	m_bIgnore=false;
 	m_iEditType=0;
 }
@@ -201,7 +201,6 @@
 // CDirTreeCtrl message handlers
 
 /////////////////////////////////////////////////////////////////////////////
-// inicjalizacja
 void CDirTreeCtrl::PreSubclassWindow() 
 {
 //	InitControl();		// here's not needed (strange ??)
@@ -234,47 +233,53 @@
 	PostMessage(WM_INITCONTROL);
 }
 
-/////////////////////////////////////////////////////////////////////////////
-// wstawia ikon� pulpitu
+int CDirTreeCtrl::GetSysIconIndex(LPITEMIDLIST item, bool bOpenIcon)
+{
+	if(item == nullptr)
+		return -1;
+
+	SHFILEINFO sfi { 0 };
+	sfi.iIcon = -1;
+	SHGetFileInfo((LPCTSTR)item, 0, &sfi, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | (bOpenIcon ? SHGFI_OPENICON : 0));
+
+	return sfi.iIcon;
+}
+
 HTREEITEM CDirTreeCtrl::InsertDesktopItem()
 {
 	// clear treectrl - it shouldn't be more than 1 desktop
 	if (!DeleteAllItems())
-		return NULL;
+		return nullptr;
 
 	// clear vars
-	m_hDrives=NULL;
-	m_hNetwork=NULL;
+	m_hDrives=nullptr;
+	m_hNetwork=nullptr;
 
 	// fill with items
-	SHFILEINFO sfi;
-	LPSHELLFOLDER lpsfDesktop;
-	LPITEMIDLIST lpiidlDesktop;
+	LPSHELLFOLDER lpsfDesktop = nullptr;
+	LPITEMIDLIST lpiidlDesktop = nullptr;
 	if (FAILED(SHGetDesktopFolder(&lpsfDesktop)))
-		return NULL;
+		return nullptr;
 	if (SHGetSpecialFolderLocation(this->GetSafeHwnd(), CSIDL_DESKTOP, &lpiidlDesktop) != NOERROR)
-		return NULL;
+		return nullptr;
 
 	// add desktop
-	TVITEM tvi;
-	TVINSERTSTRUCT tvis;
+	TVITEM tvi = { 0 };
+	TVINSERTSTRUCT tvis = { 0 };
 	TCHAR szText[_MAX_PATH];
-	_SHELLITEMDATA *psid=new _SHELLITEMDATA;
+	_SHELLITEMDATA *psid = new _SHELLITEMDATA;
 	psid->lpiidl=lpiidlDesktop;
 	psid->lpsf=lpsfDesktop;
-	psid->lpiidlRelative=NULL;
-	psid->lpsfParent=NULL;
+	psid->lpiidlRelative=nullptr;
+	psid->lpsfParent=nullptr;
 
 	tvi.mask=TVIF_CHILDREN | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_TEXT | TVIF_PARAM;
 	if (!GetName(lpsfDesktop, lpiidlDesktop, 0/*SHGDN_INCLUDE_NONFILESYS*/, szText))
 		lstrcpy(szText, _T("???"));
 	tvi.pszText=szText;
-	sfi.iIcon=-1;
-	SHGetFileInfo((LPCTSTR)lpiidlDesktop, 0, &sfi, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
-	tvi.iImage=sfi.iIcon;
-	sfi.iIcon=-1;
-	SHGetFileInfo((LPCTSTR)lpiidlDesktop, 0, &sfi, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON);
-	tvi.iSelectedImage=sfi.iIcon;
+
+	tvi.iImage = GetSysIconIndex(lpiidlDesktop, false);
+	tvi.iSelectedImage = GetSysIconIndex(lpiidlDesktop, true);
 	tvi.cChildren=1;
 	tvi.lParam=reinterpret_cast<LPARAM>(psid);
 
@@ -304,19 +309,17 @@
 // enables image list, ...
 void CDirTreeCtrl::OnDestroy() 
 {
-	SetImageList(NULL, LVSIL_SMALL);	
+	SetImageList(nullptr, LVSIL_SMALL);
 	CTreeCtrl::OnDestroy();
 }
 
 ////////////////////////////////////////////////////////////////////////////
 // compares two items
 int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM/* lParamSort*/)
 {
-	// je�li si� nie da
 	if (lParam1 == NULL || lParam2 == NULL)
 		return 0;
 
-	// normalne przetwarzanie
 	SHELLITEMDATA* psidl1=(SHELLITEMDATA*)lParam1, *psidl2=(SHELLITEMDATA*)lParam2;
 	
 	LPSHELLFOLDER lpsf;
@@ -341,9 +344,10 @@
 		bSilent=m_bIgnoreShellDialogs;
 
 	// get the desktop interface and id's of list for net neigh. and my computer
-	LPSHELLFOLDER lpsfDesktop=NULL;
-	LPITEMIDLIST lpiidlDrives=NULL;
-	LPITEMIDLIST lpiidlNetwork=NULL;
+	LPSHELLFOLDER lpsfDesktop = nullptr;
+	LPITEMIDLIST lpiidlDrives = nullptr;
+	LPITEMIDLIST lpiidlNetwork = nullptr;
+
 	HRESULT hResult = S_OK;
 	if (hParent == GetRootItem())
 	{
@@ -355,27 +359,27 @@
 	}
 
 	// shell allocator
-	LPMALLOC lpm = NULL;
+	LPMALLOC lpm = nullptr;
 	if(SUCCEEDED(hResult))
 		hResult = SHGetMalloc(&lpm);
 
 	// enumerate child items for lpsf
-	LPENUMIDLIST lpeid = NULL;
+	LPENUMIDLIST lpeid = nullptr;
 	if(SUCCEEDED(hResult))
-		hResult = lpsf->EnumObjects(bSilent ? NULL : GetParent()->GetSafeHwnd(), SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, &lpeid);
+		hResult = lpsf->EnumObjects(bSilent ? nullptr : GetParent()->GetSafeHwnd(), SHCONTF_FOLDERS | SHCONTF_INCLUDEHIDDEN, &lpeid);
 
 	bool bFound=false;
 	if(SUCCEEDED(hResult))
 	{
-		LPITEMIDLIST lpiidl;
-		SHFILEINFO sfi;
-		ULONG ulAttrib;
-		TVITEM tvi;
-		TVINSERTSTRUCT tvis;
-		_SHELLITEMDATA *psid;
-		TCHAR szText[_MAX_PATH];
-		HTREEITEM hCurrent=NULL;
-		while (lpeid->Next(1, &lpiidl, NULL) == NOERROR)
+		LPITEMIDLIST lpiidl = nullptr;
+		ULONG ulAttrib = 0;
+		TVITEM tvi = { 0 };
+		TVINSERTSTRUCT tvis = { 0 };
+		_SHELLITEMDATA *psid = nullptr;
+		TCHAR szText[ _MAX_PATH ];
+		HTREEITEM hCurrent = nullptr;
+
+		while (lpeid->Next(1, &lpiidl, nullptr) == NOERROR)
 		{
 			// filer what has been found
 			ulAttrib=SFGAO_FOLDER | SFGAO_HASSUBFOLDER | SFGAO_FILESYSANCESTOR | SFGAO_FILESYSTEM;
@@ -387,7 +391,7 @@
 
 				// it's time to add everything
 				psid=new _SHELLITEMDATA;
-				lpsf->BindToObject(lpiidl, NULL, IID_IShellFolder, (void**)&psid->lpsf);
+				lpsf->BindToObject(lpiidl, nullptr, IID_IShellFolder, (void**)&psid->lpsf);
 				psid->lpiidl=ConcatPidls(lpidl, lpiidl);
 				psid->lpiidlRelative=CopyITEMID(lpm, lpiidl);
 				psid->lpsfParent=lpsf;
@@ -396,12 +400,8 @@
 				if (!GetName(lpsf, lpiidl, SHGDN_INFOLDER/* | SHGDN_INCLUDE_NONFILESYS*/, szText))
 					lstrcpy(szText, _T("???"));
 				tvi.pszText=szText;
-				sfi.iIcon=-1;
-				SHGetFileInfo((LPCTSTR)psid->lpiidl, 0, &sfi, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON);
-				tvi.iImage=sfi.iIcon;
-				sfi.iIcon=-1;
-				SHGetFileInfo((LPCTSTR)psid->lpiidl, 0, &sfi, sizeof(SHFILEINFO), SHGFI_PIDL | SHGFI_SYSICONINDEX | SHGFI_SMALLICON | SHGFI_OPENICON);
-				tvi.iSelectedImage=sfi.iIcon;
+				tvi.iImage = GetSysIconIndex(psid->lpiidl, false);
+				tvi.iSelectedImage = GetSysIconIndex(psid->lpiidl, false);
 				tvi.cChildren=(ulAttrib & SFGAO_HASSUBFOLDER);
 				tvi.lParam=reinterpret_cast<LPARAM>(psid);
 
@@ -431,22 +431,22 @@
 	if(lpm)
 		lpm->Release();
 
-	// sortuj
+	// sort
 	if(SUCCEEDED(hResult))
 	{
 		if(bFound)
 		{
-			TVSORTCB tvscb;
+			TVSORTCB tvscb = { 0 };
 			tvscb.hParent=hParent;
 			tvscb.lpfnCompare=&CompareFunc;
-			tvscb.lParam=NULL;
+			tvscb.lParam = NULL;
 			if (!SortChildrenCB(&tvscb))
 				TRACE("SortChildren failed\n");
 		}
 		else
 		{
 			// some items has + and some not - correction
-			TVITEM tvi;
+			TVITEM tvi = { 0 };
 			tvi.mask=TVIF_HANDLE | TVIF_CHILDREN;
 			tvi.hItem=hParent;
 			if (GetItem(&tvi) && tvi.cChildren == 1)
@@ -469,7 +469,7 @@
 	case TVE_EXPAND:
 		{
 			// get the item's data
-			TVITEM tvi;
+			TVITEM tvi = { 0 };
 			tvi.mask=TVIF_PARAM | TVIF_STATE;
 			tvi.hItem=hItem;
 			tvi.stateMask=TVIS_EXPANDEDONCE | TVIS_SELECTED | TVIS_EXPANDED;
@@ -480,7 +480,7 @@
 				return true;
 
 			// Fill node before normal expanding
-			SHELLITEMDATA* psid;
+			SHELLITEMDATA* psid = nullptr;
 			if (GetItemStruct(hItem, &psid))
 			{
 				if(FAILED(FillNode(hItem, psid->lpsf, psid->lpiidl, true)))
@@ -541,7 +541,7 @@
 		if (ItemHasChildren(pNMTreeView->itemNew.hItem))
 		{
 			HTREEITEM hItem;
-			while ((hItem=GetChildItem(pNMTreeView->itemNew.hItem)) != NULL)
+			while ((hItem=GetChildItem(pNMTreeView->itemNew.hItem)) != nullptr)
 				DeleteItem(hItem);
 		}
 
@@ -574,15 +574,15 @@
 // returns path associated with an item
 bool CDirTreeCtrl::GetPath(HTREEITEM hItem, LPTSTR pszPath)
 {
-	TVITEM tvi;
+	TVITEM tvi = { 0 };
 	tvi.mask=TVIF_HANDLE | TVIF_PARAM;
 	tvi.hItem=hItem;
 
 	if (GetItem(&tvi))
 	{
 		// item data
 		_SHELLITEMDATA* psid=reinterpret_cast<_SHELLITEMDATA*>(tvi.lParam);
-		if (psid == NULL)
+		if (psid == nullptr)
 			return false;
 
 		// desktop interface
@@ -623,7 +623,7 @@
 		return SetLocalPath(lpszPath);
 	else
 	{
-		// we don't look in net neighbourhood for speed reasons
+		// we don't look in net neighborhood for speed reasons
 		EnsureVisible(m_hNetwork);
 //		SelectItem(m_hNetwork);
 //		ExpandItem(m_hNetwork, TVE_EXPAND);
@@ -649,7 +649,7 @@
 		ExpandItem(hFound, TVE_EXPAND);
 	}
 	
-	return hFound != NULL;
+	return hFound != nullptr;
 }
 
 ///////////////////////////////////////////////////////////////////////////
@@ -658,13 +658,13 @@
 HTREEITEM CDirTreeCtrl::RegularSelect(HTREEITEM hStart, LPCTSTR lpszPath)
 {
 	// some interfaces
-	_SHELLITEMDATA* psid;
+	_SHELLITEMDATA* psid = nullptr;
 	TCHAR szPath[_MAX_PATH];
-	TVITEM tvi;
+	TVITEM tvi = { 0 };
 	
 	// traverse the child items of my computer
-	HTREEITEM hItem=GetChildItem(hStart), hLast=NULL;
-	while (hItem != NULL)
+	HTREEITEM hItem=GetChildItem(hStart), hLast=nullptr;
+	while (hItem != nullptr)
 	{
 		tvi.mask=TVIF_HANDLE | TVIF_PARAM;
 		tvi.hItem=hItem;
@@ -694,48 +694,7 @@
 	// return what has been found
 	return hLast;
 }
-////////////////////////////////////////////////////////////////////////////
-// helper - finds comp in a network that matches the path. Skips all the
-// workgroups, network names, ...
-/*
-HTREEITEM CDirTreeCtrl::TraverseNetNode(HTREEITEM hItem, LPCTSTR lpszPath, LPTSTR lpszBuffer)
-{
-	// start with 1st chil item
-	HTREEITEM hNext=GetChildItem(hItem);
-	NETRESOURCE *pnet;
 
-	while (hNext)
-	{
-		// get NETRESOURCE structure - is this a server ?
-		if (GetItemShellData(hNext, SHGDFIL_NETRESOURCE, lpszBuffer, 2048))
-		{
-			// got NETRESOURCE
-			pnet=(NETRESOURCE*)lpszBuffer;
-
-			// is the path contained
-			if (ComparePaths(lpszPath, pnet->lpRemoteName))
-				return hNext;	// found what's needed
-
-			if (pnet->dwDisplayType != RESOURCEDISPLAYTYPE_SERVER)
-			{
-				// expand
-				if (!ExpandItem(hNext, TVE_EXPAND))
-					return NULL;
-
-				// recurse
-				HTREEITEM hFound;
-				if ( (hFound=TraverseNetNode(hNext, lpszPath, lpszBuffer)) != NULL)
-					return hFound;	// if found - return, if not - continue search
-			}
-		}
-
-		// next item to check.
-		hNext=GetNextSiblingItem(hNext);
-	}
-
-	return NULL;	// nothing has been found
-}
-*/
 ////////////////////////////////////////////////////////////////////////////
 // compares two paths - if one is contained in another (to the first '\\' or '/'
 bool CDirTreeCtrl::ComparePaths(LPCTSTR lpszFull, LPCTSTR lpszPartial)
@@ -744,10 +703,10 @@
 	strFnd.MakeUpper();
 	strFnd.TrimRight(_T("\\/"));
 				
-	// make uppercas the source string, cut before nearest \\ or / after strFnd.GetLength
+	// make uppercase the source string, cut before nearest \\ or / after strFnd.GetLength
 	strSrc.MakeUpper();
 				
-	// find out the position of a nearest / lub '\\'
+	// find out the position of a nearest / or '\\'
 	int iLen=strFnd.GetLength();
 	if (strSrc.GetLength() >= iLen)
 	{
@@ -766,7 +725,7 @@
 bool CDirTreeCtrl::GetItemInfoTip(HTREEITEM hItem, CString* pTip)
 {
 	_SHELLITEMDATA* psid=(_SHELLITEMDATA*)GetItemData(hItem);
-	if (psid == NULL || psid->lpiidlRelative == NULL || psid->lpsfParent == NULL)
+	if (psid == nullptr || psid->lpiidlRelative == nullptr || psid->lpsfParent == nullptr)
 		return false;
 
 	// get interface
@@ -785,7 +744,6 @@
 	// copy with a conversion
 	*pTip=(const WCHAR *)pszTip;
 
-	// uwolnij pami�� skojarzon� z pszTip
 	LPMALLOC lpm;
 	if (SHGetMalloc(&lpm) == NOERROR)
 	{
@@ -802,8 +760,8 @@
 // better exchange for SHGetDataFromIDList
 bool CDirTreeCtrl::GetItemShellData(HTREEITEM hItem, int nFormat, PVOID pBuffer, int iSize)
 {
-	PSHELLITEMDATA psid;
-	if (!GetItemStruct(hItem, &psid) || psid->lpsfParent == NULL || psid->lpiidlRelative == NULL)
+	PSHELLITEMDATA psid = nullptr;
+	if (!GetItemStruct(hItem, &psid) || psid->lpsfParent == nullptr || psid->lpiidlRelative == nullptr)
 		return false;
 
 	return SHGetDataFromIDList(psid->lpsfParent, psid->lpiidlRelative, nFormat, pBuffer, iSize) == NOERROR;
@@ -817,21 +775,21 @@
 	if(!ppsid)
 		return false;
 	*ppsid=(PSHELLITEMDATA)GetItemData(hItem);
-	return *ppsid != NULL;
+	return *ppsid != nullptr;
 }
 
 HTREEITEM CDirTreeCtrl::InsertNewFolder(HTREEITEM hParent, LPCTSTR /*lpszNewFolder*/)
 {
 	// check if HTREEITEM has an associated path
 	TCHAR szPath[_MAX_PATH];
 	if (!GetPath(hParent, szPath))
-		return NULL;
+		return nullptr;
 	
 	// focus
 	SetFocus();
 
 	// if has child items - enumerate
-	TVITEM tvi;
+	TVITEM tvi = { 0 };
 	tvi.mask=TVIF_HANDLE | TVIF_STATE | TVIF_CHILDREN;
 	tvi.hItem=hParent;
 	tvi.stateMask=TVIS_EXPANDED;
@@ -842,7 +800,7 @@
 		TRACE("%lu child items\n", tvi.cChildren);
 	}
 
-	// if hParent doesn't have any chilren - add + to make it look like it hastak, aby wydawa�o si�, �e ma
+	// if hParent doesn't have any chilren - add + to make it look like it has
 	if (!ItemHasChildren(hParent))
 	{
 		tvi.mask=TVIF_HANDLE | TVIF_CHILDREN;
@@ -865,7 +823,7 @@
 	tvis.item.iSelectedImage=-1;
 	tvis.item.pszText=pszPath;
 	tvis.item.cchTextMax=lstrlen(tvis.item.pszText);
-	tvis.item.lParam=NULL;
+	tvis.item.lParam = NULL;
 
 	HTREEITEM hRes=InsertItem(&tvis);
 
@@ -879,8 +837,8 @@
 	{
 		m_iEditType=1;
 		CEdit *pctlEdit=EditLabel(hRes);
-		if (pctlEdit == NULL)
-			return NULL;
+		if (pctlEdit == nullptr)
+			return nullptr;
 	}
 
 	return hRes;
@@ -923,16 +881,16 @@
 			strPath+=pdi->item.pszText;
 
 			// new folder
-			if (CreateDirectory(strPath, NULL))
+			if (CreateDirectory(strPath, nullptr))
 				iResult = 1;
 
 			// refresh - delete all from hParent and fill node
 			HTREEITEM hChild;
-			while ((hChild=GetChildItem(hParent)) != NULL)
+			while ((hChild=GetChildItem(hParent)) != nullptr)
 				DeleteItem(hChild);
 
 			// now fillnode
-			SHELLITEMDATA* psid;
+			SHELLITEMDATA* psid = nullptr;
 			if (GetItemStruct(hParent, &psid))
 			{
 				if (FAILED(FillNode(hParent, psid->lpsf, psid->lpiidl)))
@@ -950,7 +908,6 @@
 
 				if (_tcscmp(strPath, szPath) == 0)
 				{
-					// zaznacz
 					ExpandItem(hChild, TVE_EXPAND);
 					break;
 				}
Index: src/ch/DirTreeCtrl.h
===================================================================
diff -u -r6c67d46c243c6a275f2a427c991f82db59c63ef0 -r90e8a7720fc23cf282e486c7b2bc1dc590b5d74c
--- src/ch/DirTreeCtrl.h	(.../DirTreeCtrl.h)	(revision 6c67d46c243c6a275f2a427c991f82db59c63ef0)
+++ src/ch/DirTreeCtrl.h	(.../DirTreeCtrl.h)	(revision 90e8a7720fc23cf282e486c7b2bc1dc590b5d74c)
@@ -127,6 +127,9 @@
 	bool IsEditing() const { return m_iEditType != 0; };
 	virtual ~CDirTreeCtrl();
 
+private:
+	static int GetSysIconIndex(LPITEMIDLIST item, bool bOpenIcon);
+
 	// Generated message map functions
 protected:
 	friend int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM/* lParamSort*/);