From 66cb770a982a2502456d10d73838df2b7239fd89 Mon Sep 17 00:00:00 2001
From: George Hazan <george.hazan@gmail.com>
Date: Mon, 4 Mar 2013 07:23:42 +0000
Subject: new subclassing functions applied to all plugins

git-svn-id: http://svn.miranda-ng.org/main/trunk@3880 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c
---
 plugins/YAMN/src/browser/mailbrowser.cpp | 922 +++++++++++++++----------------
 1 file changed, 453 insertions(+), 469 deletions(-)

(limited to 'plugins/YAMN/src')

diff --git a/plugins/YAMN/src/browser/mailbrowser.cpp b/plugins/YAMN/src/browser/mailbrowser.cpp
index 270fe2e31f..cdbb4e2d3c 100644
--- a/plugins/YAMN/src/browser/mailbrowser.cpp
+++ b/plugins/YAMN/src/browser/mailbrowser.cpp
@@ -33,8 +33,6 @@ int HeadSplitPos=250; // per-mils of the size
 static int FromWidth=250,SubjectWidth=280,SizeWidth=50,SizeDate=205;
 unsigned char optDateTime =  (SHOWDATELONG | SHOWDATENOTODAY);
 
-static WNDPROC OldListViewSubclassProc;
-
 struct CMailNumbersSub
 {
 	int Total;		//any mail
@@ -819,13 +817,10 @@ void DoMailActions(HWND hDlg,HACCOUNT ActualAccount,struct CMailNumbers *MN,DWOR
 				sprintf(tmp,Translate("%d new mail message(s), %d total"),MN->Real.PopUpNC+MN->Virtual.PopUpNC,MN->Real.PopUpTC+MN->Virtual.PopUpTC);
 				DBWriteContactSettingString(ActualAccount->hContact, "CList", "StatusMsg", tmp);
 			}
-			else
-				DBWriteContactSettingString(ActualAccount->hContact, "CList", "StatusMsg", Translate("No new mail message"));
+			else DBWriteContactSettingString(ActualAccount->hContact, "CList", "StatusMsg", Translate("No new mail message"));
 
 			if (nflags & YAMN_ACC_CONTNICK)
-			{
 				DBWriteContactSettingString(ActualAccount->hContact, YAMN_DBMODULE, "Nick", ActualAccount->Name);
-			}
 		}
 	}
 	return;
@@ -1278,51 +1273,51 @@ int CALLBACK ListViewCompareProc(LPARAM lParam1, LPARAM lParam2,LPARAM lParamSor
 } 
 
 HCURSOR hCurSplitNS, hCurSplitWE;
-static WNDPROC OldSplitterProc;
 #define DM_SPLITTERMOVED     (WM_USER+15)
+
 static LRESULT CALLBACK SplitterSubclassProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
 {
 	switch (msg) {
-		case WM_NCHITTEST:
-		  return HTCLIENT;
-		case WM_SETCURSOR:
-		{
-				SetCursor(hCurSplitNS);
-				return TRUE;
+	case WM_NCHITTEST:
+		return HTCLIENT;
+
+	case WM_SETCURSOR:
+		SetCursor(hCurSplitNS);
+		return TRUE;
+
+	case WM_LBUTTONDOWN:
+		SetCapture(hwnd);
+		return 0;
+
+	case WM_MOUSEMOVE:
+		if (GetCapture() == hwnd) {
+			RECT rc;
+			GetClientRect(hwnd, &rc);
+			SendMessage(GetParent(hwnd), DM_SPLITTERMOVED, (short) HIWORD(GetMessagePos()) + rc.bottom / 2, (LPARAM) hwnd);
 		}
-		case WM_LBUTTONDOWN:
-			SetCapture(hwnd);
-			return 0;
-		case WM_MOUSEMOVE:
-			if (GetCapture() == hwnd) {
-				RECT rc;
-				GetClientRect(hwnd, &rc);
-				SendMessage(GetParent(hwnd), DM_SPLITTERMOVED, (short) HIWORD(GetMessagePos()) + rc.bottom / 2, (LPARAM) hwnd);
-			}
-			return 0;
-		case WM_LBUTTONUP:
-			ReleaseCapture();
-			return 0;
+		return 0;
+
+	case WM_LBUTTONUP:
+		ReleaseCapture();
+		return 0;
 	}
-	return CallWindowProc(OldSplitterProc, hwnd, msg, wParam, lParam);
+	return mir_callNextSubclass(hwnd, SplitterSubclassProc, msg, wParam, lParam);
 }
 
-
 void ConvertCodedStringToUnicode(char *stream,WCHAR **storeto,DWORD cp,int mode);
 int ConvertStringToUnicode(char *stream,unsigned int cp,WCHAR **out);
+
 INT_PTR CALLBACK DlgProcYAMNShowMessage(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
 {
-	switch(msg)
-	{
-		case WM_INITDIALOG:
+	switch(msg) {
+	case WM_INITDIALOG:
 		{
-//			HIMAGELIST hIcons;
 			PYAMN_MAILSHOWPARAM MailParam = (PYAMN_MAILSHOWPARAM)lParam;
 			WCHAR *iHeaderW=NULL;
 			WCHAR *iValueW=NULL;
 			int StrLen;
 			HWND hListView = GetDlgItem(hDlg,IDC_LISTHEADERS);
-			OldSplitterProc = (WNDPROC) SetWindowLongPtr(GetDlgItem(hDlg, IDC_SPLITTER), GWLP_WNDPROC, (LONG_PTR) SplitterSubclassProc);
+			mir_subclassWindow(GetDlgItem(hDlg, IDC_SPLITTER), SplitterSubclassProc);
 			SetWindowLongPtr(hDlg,DWLP_USER,(LONG_PTR)MailParam);
 			SendMessageW(hDlg,WM_SETICON,(WPARAM)ICON_BIG,(LPARAM)g_LoadIconEx(2, true));
 			SendMessageW(hDlg,WM_SETICON,(WPARAM)ICON_SMALL,(LPARAM)g_LoadIconEx(2));
@@ -1352,10 +1347,11 @@ INT_PTR CALLBACK DlgProcYAMNShowMessage(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			SendMessage(hDlg,WM_YAMN_CHANGECONTENT,0,(LPARAM)MailParam);
 			MoveWindow(hDlg,HeadPosX,HeadPosY,HeadSizeX,HeadSizeY,0);
 			ShowWindow(hDlg,SW_SHOWNORMAL);
-			break;
 		}
-		case WM_YAMN_CHANGECONTENT:
-			{
+		break;
+
+	case WM_YAMN_CHANGECONTENT:
+		{
 			PYAMN_MAILSHOWPARAM MailParam  = (PYAMN_MAILSHOWPARAM)
 				(lParam?lParam:GetWindowLongPtr(hDlg,DWLP_USER));
 			HWND hListView = GetDlgItem(hDlg,IDC_LISTHEADERS);
@@ -1406,11 +1402,11 @@ INT_PTR CALLBACK DlgProcYAMNShowMessage(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 					while (str2[ofs]) {
 						if ((str2[ofs]==0x266A)||(str2[ofs]==0x25D9)||(str2[ofs]==0x25CB)||
 							(str2[ofs]==0x09)||(str2[ofs]==0x0A)||(str2[ofs]==0x0D)) {
-							if (str2[ofs-1]) {
-								count++;
-							}
-							split[count]=(WCHAR *)(str2+ofs+1);
-							str2[ofs]=0;
+								if (str2[ofs-1]) {
+									count++;
+								}
+								split[count]=(WCHAR *)(str2+ofs+1);
+								str2[ofs]=0;
 						}
 						ofs++;
 					};
@@ -1498,8 +1494,9 @@ INT_PTR CALLBACK DlgProcYAMNShowMessage(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			// turn on redrawing
 			SendMessage(hListView, WM_SETREDRAW, 1, 0);
 			SendMessage(hDlg, WM_SIZE, 0, HeadSizeY<<16|HeadSizeX);
-			} break;
-		case WM_YAMN_STOPACCOUNT:
+		} break;
+
+	case WM_YAMN_STOPACCOUNT:
 		{
 			PYAMN_MAILSHOWPARAM MailParam  = (PYAMN_MAILSHOWPARAM)
 				(lParam?lParam:GetWindowLongPtr(hDlg,DWLP_USER));
@@ -1508,23 +1505,24 @@ INT_PTR CALLBACK DlgProcYAMNShowMessage(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				break;
 			if ((HACCOUNT)wParam != MailParam->account)
 				break;
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"ShowMessage:STOPACCOUNT:sending destroy msg\n");
-			#endif
+#endif
 			DestroyWindow(hDlg);
 		}
-			return 1;
-		case WM_CTLCOLORSTATIC: 
-			//here should be check if this is our edittext control. 
-			//but we have only one static control (for now);
-			SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));
-			SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT));
-			return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);;
-		case WM_DESTROY:
+		return 1;
+
+	case WM_CTLCOLORSTATIC: 
+		//here should be check if this is our edittext control. 
+		//but we have only one static control (for now);
+		SetBkColor((HDC)wParam, GetSysColor(COLOR_WINDOW));
+		SetTextColor((HDC)wParam, GetSysColor(COLOR_WINDOWTEXT));
+		return (INT_PTR)GetSysColorBrush(COLOR_WINDOW);;
+
+	case WM_DESTROY:
 		{
 			RECT coord;
-			if (GetWindowRect(hDlg,&coord))
-			{
+			if (GetWindowRect(hDlg,&coord)) {
 				HeadPosX=coord.left;
 				HeadSizeX=coord.right-coord.left;
 				HeadPosY=coord.top;
@@ -1534,112 +1532,109 @@ INT_PTR CALLBACK DlgProcYAMNShowMessage(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			PostQuitMessage(1);
 		}
 		break;
-		case WM_SYSCOMMAND:
-		{
-			switch(wParam)
-			{
-				case SC_CLOSE:
-					DestroyWindow(hDlg);
-					break;
-			}
+
+	case WM_SYSCOMMAND:
+		switch(wParam) {
+		case SC_CLOSE:
+			DestroyWindow(hDlg);
+			break;
 		}
 		break;
-		case WM_MOVE:
-				HeadPosX=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
-				HeadPosY=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
-				return 0;
-		case DM_SPLITTERMOVED:
-			{
-				if ((HWND) lParam == GetDlgItem(hDlg, IDC_SPLITTER)) {
-					POINT pt;
-					pt.x = 0;
-					pt.y = wParam;
-					ScreenToClient(hDlg, &pt);
-					HeadSplitPos = (pt.y*1000)/HeadSizeY;//+rc.bottom-rc.top;
-					if (HeadSplitPos>=1000) HeadSplitPos = 999;
-					else if (HeadSplitPos<=0) HeadSplitPos = 1;
-					else SendMessage(hDlg, WM_SIZE, 0, HeadSizeY<<16|HeadSizeX);
-				}
-				return 0;
-			}
-		case WM_SIZE:
-			if (wParam==SIZE_RESTORED)
-			{
-				HWND hList = GetDlgItem(hDlg,IDC_LISTHEADERS);
-				HWND hEdit = GetDlgItem(hDlg,IDC_EDITBODY);
-				BOOL changeX = LOWORD(lParam) != HeadSizeX;
-				BOOL isBodyShown = ((PYAMN_MAILSHOWPARAM)(GetWindowLongPtr(hDlg,DWLP_USER)))->mail->Flags & YAMN_MSG_BODYRECEIVED;
-				HeadSizeX=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
-				HeadSizeY=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
-				int localSplitPos = (HeadSplitPos*HeadSizeY)/1000;
-				int localSizeX;
-				RECT coord;
-				MoveWindow(GetDlgItem(hDlg,IDC_SPLITTER),5,localSplitPos,HeadSizeX-10,2,TRUE);
-				MoveWindow(hEdit,5,localSplitPos+6,HeadSizeX-10,HeadSizeY-localSplitPos-11,TRUE);	//where to put text window while resizing
-				MoveWindow(hList,  5         ,5     ,HeadSizeX-10    ,(isBodyShown?localSplitPos:HeadSizeY)-10,TRUE);	//where to put headers list window while resizing
-				//if (changeX) {
-					if (GetClientRect(hList,&coord)) {
-						localSizeX=coord.right-coord.left;
-					} else localSizeX=HeadSizeX;
-					LONG iNameWidth =  ListView_GetColumnWidth(hList,0);
-					ListView_SetColumnWidth(hList,1,(localSizeX<=iNameWidth)?0:(localSizeX-iNameWidth));
-				//}
-			}
-//			break;
-			return 0;
-		case WM_CONTEXTMENU:
-			{
-				if ( GetWindowLongPtr(( HWND )wParam, GWLP_ID ) == IDC_LISTHEADERS)	{
-					//MessageBox(0,"LISTHEADERS","Debug",0);
-					HWND hList = GetDlgItem( hDlg, IDC_LISTHEADERS );
-					POINT pt = { (signed short)LOWORD( lParam ), (signed short)HIWORD( lParam ) };
-					HTREEITEM hItem = 0;
-					if (pt.x==-1) pt.x = 0;
-					if (pt.y==-1) pt.y = 0;
-					if (int numRows = ListView_GetItemCount(hList)) {
-						HMENU hMenu = CreatePopupMenu();
-						AppendMenu(hMenu, MF_STRING, (UINT_PTR)1, TranslateT("Copy Selected"));
-						AppendMenu(hMenu, MF_STRING, (UINT_PTR)2, TranslateT("Copy All"));
-						AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
-						AppendMenu(hMenu, MF_STRING, (UINT_PTR)0, TranslateT("Cancel"));
-						int nReturnCmd = TrackPopupMenu( hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, NULL );
-						DestroyMenu( hMenu );
-						if (nReturnCmd>0) {
-							int courRow=0;
-							size_t sizeNeeded = 0;
-							TCHAR headname[64]={0}, headvalue[256]={0}; 
-							for (courRow=0; courRow < numRows; courRow++) {
-								if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
-								ListView_GetItemText(hList, courRow, 0, headname, SIZEOF(headname));
-								ListView_GetItemText(hList, courRow, 1, headvalue, SIZEOF(headvalue));
-								size_t headnamelen = _tcslen(headname);
-								if (headnamelen) sizeNeeded += 1 + headnamelen;
-								sizeNeeded += 3 + _tcslen(headvalue);
-							}
-							if (sizeNeeded && OpenClipboard(hDlg)) {
-								EmptyClipboard();
-								HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE,(sizeNeeded+1)*sizeof(TCHAR));
-								TCHAR *buff = ( TCHAR* )GlobalLock(hData);
-								int courPos = 0;
-								for (courRow=0;courRow<numRows;courRow++) {
-									if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
-									ListView_GetItemText(hList, courRow, 0, headname, SIZEOF(headname));
-									ListView_GetItemText(hList, courRow, 1, headvalue, SIZEOF(headvalue));
-									if ( _tcslen(headname)) courPos += _stprintf(&buff[courPos], _T("%s:\t%s\r\n"), headname, headvalue);
-									else courPos += _stprintf( &buff[courPos], _T("\t%s\r\n"), headvalue);
-								}
-								GlobalUnlock(hData);
-								#if defined( _UNICODE )
-									SetClipboardData(CF_UNICODETEXT,hData);
-								#else
-									SetClipboardData(CF_TEXT,hData);
-								#endif
-								CloseClipboard();
-							}
+
+	case WM_MOVE:
+		HeadPosX=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
+		HeadPosY=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
+		return 0;
+
+	case DM_SPLITTERMOVED:
+		if ((HWND) lParam == GetDlgItem(hDlg, IDC_SPLITTER)) {
+			POINT pt;
+			pt.x = 0;
+			pt.y = wParam;
+			ScreenToClient(hDlg, &pt);
+			HeadSplitPos = (pt.y*1000)/HeadSizeY;//+rc.bottom-rc.top;
+			if (HeadSplitPos>=1000) HeadSplitPos = 999;
+			else if (HeadSplitPos<=0) HeadSplitPos = 1;
+			else SendMessage(hDlg, WM_SIZE, 0, HeadSizeY<<16|HeadSizeX);
+		}
+		return 0;
+
+	case WM_SIZE:
+		if (wParam == SIZE_RESTORED) {
+			HWND hList = GetDlgItem(hDlg,IDC_LISTHEADERS);
+			HWND hEdit = GetDlgItem(hDlg,IDC_EDITBODY);
+			BOOL changeX = LOWORD(lParam) != HeadSizeX;
+			BOOL isBodyShown = ((PYAMN_MAILSHOWPARAM)(GetWindowLongPtr(hDlg,DWLP_USER)))->mail->Flags & YAMN_MSG_BODYRECEIVED;
+			HeadSizeX=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
+			HeadSizeY=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
+			int localSplitPos = (HeadSplitPos*HeadSizeY)/1000;
+			int localSizeX;
+			RECT coord;
+			MoveWindow(GetDlgItem(hDlg,IDC_SPLITTER),5,localSplitPos,HeadSizeX-10,2,TRUE);
+			MoveWindow(hEdit,5,localSplitPos+6,HeadSizeX-10,HeadSizeY-localSplitPos-11,TRUE);	//where to put text window while resizing
+			MoveWindow(hList,  5         ,5     ,HeadSizeX-10    ,(isBodyShown?localSplitPos:HeadSizeY)-10,TRUE);	//where to put headers list window while resizing
+			//if (changeX) {
+			if (GetClientRect(hList,&coord)) {
+				localSizeX=coord.right-coord.left;
+			} else localSizeX=HeadSizeX;
+			LONG iNameWidth =  ListView_GetColumnWidth(hList,0);
+			ListView_SetColumnWidth(hList,1,(localSizeX<=iNameWidth)?0:(localSizeX-iNameWidth));
+			//}
+		}
+		return 0;
+
+	case WM_CONTEXTMENU:
+		if ( GetWindowLongPtr(( HWND )wParam, GWLP_ID ) == IDC_LISTHEADERS)	{
+			//MessageBox(0,"LISTHEADERS","Debug",0);
+			HWND hList = GetDlgItem( hDlg, IDC_LISTHEADERS );
+			POINT pt = { (signed short)LOWORD( lParam ), (signed short)HIWORD( lParam ) };
+			HTREEITEM hItem = 0;
+			if (pt.x==-1) pt.x = 0;
+			if (pt.y==-1) pt.y = 0;
+			if (int numRows = ListView_GetItemCount(hList)) {
+				HMENU hMenu = CreatePopupMenu();
+				AppendMenu(hMenu, MF_STRING, (UINT_PTR)1, TranslateT("Copy Selected"));
+				AppendMenu(hMenu, MF_STRING, (UINT_PTR)2, TranslateT("Copy All"));
+				AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
+				AppendMenu(hMenu, MF_STRING, (UINT_PTR)0, TranslateT("Cancel"));
+				int nReturnCmd = TrackPopupMenu( hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, NULL );
+				DestroyMenu( hMenu );
+				if (nReturnCmd>0) {
+					int courRow=0;
+					size_t sizeNeeded = 0;
+					TCHAR headname[64]={0}, headvalue[256]={0}; 
+					for (courRow=0; courRow < numRows; courRow++) {
+						if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+						ListView_GetItemText(hList, courRow, 0, headname, SIZEOF(headname));
+						ListView_GetItemText(hList, courRow, 1, headvalue, SIZEOF(headvalue));
+						size_t headnamelen = _tcslen(headname);
+						if (headnamelen) sizeNeeded += 1 + headnamelen;
+						sizeNeeded += 3 + _tcslen(headvalue);
+					}
+					if (sizeNeeded && OpenClipboard(hDlg)) {
+						EmptyClipboard();
+						HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE,(sizeNeeded+1)*sizeof(TCHAR));
+						TCHAR *buff = ( TCHAR* )GlobalLock(hData);
+						int courPos = 0;
+						for (courRow=0;courRow<numRows;courRow++) {
+							if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+							ListView_GetItemText(hList, courRow, 0, headname, SIZEOF(headname));
+							ListView_GetItemText(hList, courRow, 1, headvalue, SIZEOF(headvalue));
+							if ( _tcslen(headname)) courPos += _stprintf(&buff[courPos], _T("%s:\t%s\r\n"), headname, headvalue);
+							else courPos += _stprintf( &buff[courPos], _T("\t%s\r\n"), headvalue);
 						}
+						GlobalUnlock(hData);
+#if defined( _UNICODE )
+						SetClipboardData(CF_UNICODETEXT,hData);
+#else
+						SetClipboardData(CF_TEXT,hData);
+#endif
+						CloseClipboard();
 					}
-			}	}
-			break; // just in case
+				}
+			}
+		}
+		break; // just in case
 	}
 	return 0;
 }
@@ -1687,9 +1682,8 @@ CREADTEVIEWMESSAGEWINDOW:
 
 INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM lParam)
 {
-	switch(msg)
-	{
-		case WM_INITDIALOG:
+	switch(msg) {
+	case WM_INITDIALOG:
 		{
 			HACCOUNT ActualAccount;
 			struct MailBrowserWinParam *MyParam=(struct MailBrowserWinParam *)lParam;
@@ -1707,20 +1701,20 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			mwui->RunFirstTime=TRUE;
 
 			SetWindowLongPtr(hDlg,DWLP_USER,(LONG_PTR)mwui);
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read wait\n");
-			#endif
+#endif
 			if (WAIT_OBJECT_0 != WaitToReadFcn(ActualAccount->AccountAccessSO))
 			{
-				#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 				DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read enter failed\n");
-				#endif
+#endif
 				DestroyWindow(hDlg);
 				return FALSE;
 			}
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read enter\n");
-			#endif
+#endif
 
 			SendMessageW(GetDlgItem(hDlg,IDC_BTNAPP),WM_SETTEXT,0,(LPARAM)TranslateW(L"Run application"));
 			SendMessageW(GetDlgItem(hDlg,IDC_BTNDEL),WM_SETTEXT,0,(LPARAM)TranslateW(L"Delete selected"));
@@ -1740,9 +1734,9 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				EnableWindow(GetDlgItem(hDlg,IDC_BTNAPP),(WPARAM)TRUE);
 			else
 				EnableWindow(GetDlgItem(hDlg,IDC_BTNAPP),(WPARAM)FALSE);
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:INIT:ActualAccountSO-read done\n");
-			#endif
+#endif
 			ReadDoneFcn(ActualAccount->AccountAccessSO);
 
 			WindowList_Add(YAMNVar.MessageWnds,hDlg,NULL);
@@ -1756,15 +1750,13 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			SetTimer(hDlg,TIMER_FLASHING,500,NULL);
 
 			if (ActualAccount->hContact != NULL)
-			{
 				CallService(MS_CLIST_REMOVEEVENT,(WPARAM)ActualAccount->hContact,(LPARAM)"yamn new mail message");
-			}
 
-			OldListViewSubclassProc = (WNDPROC) SetWindowLongPtr(GetDlgItem(hDlg, IDC_LISTMAILS), GWLP_WNDPROC, (LONG_PTR) ListViewSubclassProc);
-
-			break;
+			mir_subclassWindow( GetDlgItem(hDlg, IDC_LISTMAILS), ListViewSubclassProc);
 		}
-		case WM_DESTROY:
+		break;
+
+	case WM_DESTROY:
 		{
 			HACCOUNT ActualAccount;
 			RECT coord;
@@ -1786,9 +1778,9 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			if (ListView_GetColumn(GetDlgItem(hDlg,IDC_LISTMAILS),3,&ColInfo))
 				SizeDate=ColInfo.cx;
 
-			#ifdef DEBUG_SYNCHRO
-				DebugLog(SynchroFile,"MailBrowser:DESTROY:save window position\n");
-			#endif
+#ifdef DEBUG_SYNCHRO
+			DebugLog(SynchroFile,"MailBrowser:DESTROY:save window position\n");
+#endif
 			if (!YAMNVar.Shutdown && GetWindowRect(hDlg,&coord))	//the YAMNVar.Shutdown testing is because M<iranda strange functionality at shutdown phase, when call to DBWriteContactSetting freezes calling thread
 			{
 				PosX=coord.left;
@@ -1802,25 +1794,25 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			}
 			KillTimer(hDlg,TIMER_FLASHING);
 
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:DESTROY:remove window from list\n");
-			#endif
+#endif
 			WindowList_Remove(YAMNVar.NewMailAccountWnd,hDlg);
 			WindowList_Remove(YAMNVar.MessageWnds,hDlg);
 
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write wait\n");
-			#endif
+#endif
 			if (WAIT_OBJECT_0 != WaitToWriteFcn(ActualAccount->MessagesAccessSO))
 			{
-				#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 				DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write wait failed\n");
-				#endif
+#endif
 				break;
 			}
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write enter\n");
-			#endif
+#endif
 			//delete mails from queue, which are deleted from server (spam level 3 mails e.g.)
 			for (Parser=(HYAMNMAIL)ActualAccount->Mails;Parser != NULL;Parser=Parser->Next)
 			{
@@ -1834,9 +1826,9 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			//mark mails as read (remove "new" and "unseen" flags)
 			if (mwui->Seen)
 				SetRemoveFlagsInQueueFcn((HYAMNMAIL)ActualAccount->Mails,YAMN_MSG_DISPLAY,0,YAMN_MSG_NEW | YAMN_MSG_UNSEEN,0);
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:DESTROY:ActualAccountMsgsSO-write done\n");
-			#endif
+#endif
 			WriteDoneFcn(ActualAccount->MessagesAccessSO);
 
 			ZeroMemory(&nid,sizeof(NOTIFYICONDATA));
@@ -1850,8 +1842,8 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			Shell_NotifyIcon(NIM_DELETE,&nid);
 			PostQuitMessage(0);
 		}
-			break;
-		case WM_SHOWWINDOW:
+		break;
+	case WM_SHOWWINDOW:
 		{
 			struct CMailWinUserInfo *mwui;
 
@@ -1859,7 +1851,7 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				return 0;
 			mwui->Seen=TRUE;
 		}
-		case WM_YAMN_CHANGESTATUS:
+	case WM_YAMN_CHANGESTATUS:
 		{
 			HACCOUNT ActualAccount;
 			if (NULL==(ActualAccount=GetWindowAccount(hDlg)))
@@ -1872,8 +1864,8 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			GetStatusFcn(ActualAccount,accstatus);
 			SetDlgItemText(hDlg,IDC_STSTATUS,accstatus);
 		}
-			return 1;
-		case WM_YAMN_CHANGECONTENT:
+		return 1;
+	case WM_YAMN_CHANGECONTENT:
 		{
 			struct CUpdateMails UpdateParams;
 			BOOL ThisThreadWindow=(GetCurrentThreadId()==GetWindowThreadProcessId(hDlg,NULL));
@@ -1886,9 +1878,9 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			UpdateParams.Flags=(struct CChangeContent *)lParam;
 			UpdateParams.Waiting=!ThisThreadWindow;
 
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:CHANGECONTENT:posting UPDATEMAILS\n");
-			#endif
+#endif
 			if (ThisThreadWindow)
 			{
 				if (!UpdateMails(hDlg,(HACCOUNT)wParam,UpdateParams.Flags->nflags,UpdateParams.Flags->nnflags))
@@ -1898,29 +1890,29 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			{
 				if (!ThisThreadWindow)
 				{
-					#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 					DebugLog(SynchroFile,"MailBrowser:CHANGECONTENT:waiting for event\n");
-					#endif
+#endif
 					WaitForSingleObject(UpdateParams.Copied,INFINITE);
-					#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 					DebugLog(SynchroFile,"MailBrowser:CHANGECONTENT:event signaled\n");
-					#endif
+#endif
 				}
 			}
 
 			CloseHandle(UpdateParams.Copied);
 		}
-			return 1;
-		case WM_YAMN_UPDATEMAILS:
+		return 1;
+	case WM_YAMN_UPDATEMAILS:
 		{
 			HACCOUNT ActualAccount;
 
 			struct CUpdateMails *um=(struct CUpdateMails *)lParam;
 			DWORD nflags,nnflags;
 
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:UPDATEMAILS\n");
-			#endif
+#endif
 
 			if (NULL==(ActualAccount=GetWindowAccount(hDlg)))
 				return 0;
@@ -1936,8 +1928,8 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 			if (!UpdateMails(hDlg,ActualAccount,nflags,nnflags))
 				DestroyWindow(hDlg);
 		}
-			return 1;
-		case WM_YAMN_STOPACCOUNT:
+		return 1;
+	case WM_YAMN_STOPACCOUNT:
 		{
 			HACCOUNT ActualAccount;
 
@@ -1945,13 +1937,13 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				break;
 			if ((HACCOUNT)wParam != ActualAccount)
 				break;
-			#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 			DebugLog(SynchroFile,"MailBrowser:STOPACCOUNT:sending destroy msg\n");
-			#endif
+#endif
 			PostQuitMessage(0);
 		}
-			return 1;
-		case WM_YAMN_NOTIFYICON:
+		return 1;
+	case WM_YAMN_NOTIFYICON:
 		{
 			HACCOUNT ActualAccount;
 			if (NULL==(ActualAccount=GetWindowAccount(hDlg)))
@@ -1959,36 +1951,36 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 
 			switch(lParam)
 			{
-				case WM_LBUTTONDBLCLK:
-					#ifdef DEBUG_SYNCHRO
-					DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read wait\n");
-					#endif
-					if (WAIT_OBJECT_0 != WaitToReadFcn(ActualAccount->AccountAccessSO))
-					{
-						#ifdef DEBUG_SYNCHRO
-						DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read wait failed\n");
-						#endif
-						return 0;
-					}
-					#ifdef DEBUG_SYNCHRO
-					DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read enter\n");
-					#endif
-					if (ActualAccount->AbilityFlags & YAMN_ACC_BROWSE)
-					{
-						ShowWindow(hDlg,SW_SHOWNORMAL);
-						SetForegroundWindow(hDlg);
-					}
-					else
-						DestroyWindow(hDlg);
-					#ifdef DEBUG_SYNCHRO
-					DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read done\n");
-					#endif
-					ReadDoneFcn(ActualAccount->AccountAccessSO);
-					break;
+			case WM_LBUTTONDBLCLK:
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read wait\n");
+#endif
+				if (WAIT_OBJECT_0 != WaitToReadFcn(ActualAccount->AccountAccessSO))
+				{
+#ifdef DEBUG_SYNCHRO
+					DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read wait failed\n");
+#endif
+					return 0;
+				}
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read enter\n");
+#endif
+				if (ActualAccount->AbilityFlags & YAMN_ACC_BROWSE)
+				{
+					ShowWindow(hDlg,SW_SHOWNORMAL);
+					SetForegroundWindow(hDlg);
+				}
+				else
+					DestroyWindow(hDlg);
+#ifdef DEBUG_SYNCHRO
+				DebugLog(SynchroFile,"MailBrowser:DBLCLICKICON:ActualAccountSO-read done\n");
+#endif
+				ReadDoneFcn(ActualAccount->AccountAccessSO);
+				break;
 			}
 			break;
 		}
-		case WM_YAMN_SHOWSELECTED:
+	case WM_YAMN_SHOWSELECTED:
 		{
 			int iSelect;
 			iSelect=SendMessage(GetDlgItem(hDlg,IDC_LISTMAILS),LVM_GETNEXTITEM,-1,MAKELPARAM((UINT)LVNI_FOCUSED,0)); // return item selected
@@ -2023,7 +2015,7 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				}
 			}
 		} break;
-		case WM_SYSCOMMAND:
+	case WM_SYSCOMMAND:
 		{
 			HACCOUNT ActualAccount;
 
@@ -2031,14 +2023,14 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				break;
 			switch(wParam)
 			{
-				case SC_CLOSE:
-					DestroyWindow(hDlg);
-					break;
+			case SC_CLOSE:
+				DestroyWindow(hDlg);
+				break;
 			}
 		}
-			break;
+		break;
 
-		case WM_COMMAND:
+	case WM_COMMAND:
 		{
 			HACCOUNT ActualAccount;
 			int Items;
@@ -2048,20 +2040,20 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 
 			switch(LOWORD(wParam))
 			{
-				case IDC_BTNCHECKALL:
-					ListView_SetItemState(GetDlgItem(hDlg,IDC_LISTMAILS), -1, 0, LVIS_SELECTED); // deselect all items
-					ListView_SetItemState(GetDlgItem(hDlg,IDC_LISTMAILS),-1, LVIS_SELECTED ,LVIS_SELECTED);
-					Items = ListView_GetItemCount(GetDlgItem(hDlg,IDC_LISTMAILS));
-					ListView_RedrawItems(GetDlgItem(hDlg,IDC_LISTMAILS), 0, Items);
-					UpdateWindow(GetDlgItem(hDlg,IDC_LISTMAILS));
-					SetFocus(GetDlgItem(hDlg,IDC_LISTMAILS));
-					break;
+			case IDC_BTNCHECKALL:
+				ListView_SetItemState(GetDlgItem(hDlg,IDC_LISTMAILS), -1, 0, LVIS_SELECTED); // deselect all items
+				ListView_SetItemState(GetDlgItem(hDlg,IDC_LISTMAILS),-1, LVIS_SELECTED ,LVIS_SELECTED);
+				Items = ListView_GetItemCount(GetDlgItem(hDlg,IDC_LISTMAILS));
+				ListView_RedrawItems(GetDlgItem(hDlg,IDC_LISTMAILS), 0, Items);
+				UpdateWindow(GetDlgItem(hDlg,IDC_LISTMAILS));
+				SetFocus(GetDlgItem(hDlg,IDC_LISTMAILS));
+				break;
 
-				case IDC_BTNOK:
-					DestroyWindow(hDlg);
-					break;
+			case IDC_BTNOK:
+				DestroyWindow(hDlg);
+				break;
 
-				case IDC_BTNAPP:
+			case IDC_BTNAPP:
 				{
 					PROCESS_INFORMATION pi;
 					STARTUPINFOW si;
@@ -2069,14 +2061,14 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 					ZeroMemory(&si,sizeof(si));
 					si.cb=sizeof(si);
 
-					#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 					DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read wait\n");
-					#endif
+#endif
 					if (WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
 					{
-						#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 						DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read enter\n");
-						#endif
+#endif
 						if (ActualAccount->NewMailN.App != NULL)
 						{
 							WCHAR *Command;
@@ -2084,7 +2076,7 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 								Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+wcslen(ActualAccount->NewMailN.AppParam)+6];
 							else
 								Command=new WCHAR[wcslen(ActualAccount->NewMailN.App)+6];
-						
+
 							if (Command != NULL)
 							{
 								lstrcpyW(Command,L"\"");
@@ -2097,21 +2089,21 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 							}
 						}
 
-						#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 						DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read done\n");
-						#endif
+#endif
 						ReadDoneFcn(ActualAccount->AccountAccessSO);
 					}
-					#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 					else
 						DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read enter failed\n");
-					#endif
+#endif
 					if (!(GetKeyState(VK_SHIFT) & 0x8000) && !(GetKeyState(VK_CONTROL) & 0x8000))
 						DestroyWindow(hDlg);
 
 				}
-					break;
-				case IDC_BTNDEL:
+				break;
+			case IDC_BTNDEL:
 				{
 					LVITEMW item;
 					HYAMNMAIL FirstMail=NULL,ActualMail;
@@ -2124,14 +2116,14 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 					int Items=ListView_GetItemCount(GetDlgItem(hDlg,IDC_LISTMAILS));
 
 					item.stateMask=0xFFFFFFFF;
-					#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 					DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write wait\n");
-					#endif
+#endif
 					if (WAIT_OBJECT_0==WaitToWriteFcn(ActualAccount->MessagesAccessSO))
 					{
-						#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 						DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write enter\n");
-						#endif
+#endif
 						for (int i=0;i<Items;i++)
 						{
 							item.iItem=i;
@@ -2150,9 +2142,9 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 						}
 
 						// Enable write-access to mails
-						#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 						DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write done\n");
-						#endif
+#endif
 						WriteDoneFcn(ActualAccount->MessagesAccessSO);
 
 						if (Total)
@@ -2165,14 +2157,14 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 								struct DeleteParam ParamToDeleteMails={YAMN_DELETEVERSION,ThreadRunningEV,ActualAccount,NULL};
 
 								// Find if there's mail marked to delete, which was deleted before
-								#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 								DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write wait\n");
-								#endif
+#endif
 								if (WAIT_OBJECT_0==WaitToWriteFcn(ActualAccount->MessagesAccessSO))
 								{
-									#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 									DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write enter\n");
-									#endif
+#endif
 									for (ActualMail=(HYAMNMAIL)ActualAccount->Mails;ActualMail != NULL;ActualMail=ActualMail->Next)
 									{
 										if ((ActualMail->Flags & YAMN_MSG_DELETED) && ((ActualMail->Flags & YAMN_MSG_USERDELETE)))	//if selected mail was already deleted
@@ -2193,9 +2185,9 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 										CloseHandle(NewThread);
 									}
 									// Enable write-access to mails
-									#ifdef DEBUG_SYNCHRO
+#ifdef DEBUG_SYNCHRO
 									DebugLog(SynchroFile,"MailBrowser:BTNDEL:ActualAccountMsgsSO-write done\n");
-									#endif
+#endif
 									WriteDoneFcn(ActualAccount->MessagesAccessSO);
 								}
 							}
@@ -2212,26 +2204,26 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				break;
 			}
 		}
-			break;
-		case WM_SIZE:
-			if (wParam==SIZE_RESTORED)
-			{
-				LONG x=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
-				LONG y=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
-				MoveWindow(GetDlgItem(hDlg,IDC_BTNDEL),     5            ,y-5-25,(x-20)/3,25,TRUE);	//where to put DELETE button while resizing
-				MoveWindow(GetDlgItem(hDlg,IDC_BTNCHECKALL),10+  (x-20)/3,y-5-25,(x-20)/6,25,TRUE);	//where to put CHECK ALL button while resizing				
-				MoveWindow(GetDlgItem(hDlg,IDC_BTNAPP),     15+  (x-20)/3 + (x-20)/6,y-5-25,(x-20)/3,25,TRUE);	//where to put RUN APP button while resizing
-				MoveWindow(GetDlgItem(hDlg,IDC_BTNOK),      20+2*(x-20)/3 + (x-20)/6 ,y-5-25,(x-20)/6,25,TRUE);	//where to put OK button while resizing
-				MoveWindow(GetDlgItem(hDlg,IDC_LISTMAILS),  5         ,5     ,x-10    ,y-55,TRUE);	//where to put list mail window while resizing
-				MoveWindow(GetDlgItem(hDlg,IDC_STSTATUS),   5         ,y-5-45     ,x-10    ,15,TRUE);	//where to put account status text while resizing
-			}
-//			break;
-			return 0;
-		case WM_GETMINMAXINFO:
-			((LPMINMAXINFO)lParam)->ptMinTrackSize.x=MAILBROWSER_MINXSIZE;
-			((LPMINMAXINFO)lParam)->ptMinTrackSize.y=MAILBROWSER_MINYSIZE;
-			return 0;
-		case WM_TIMER:
+		break;
+	case WM_SIZE:
+		if (wParam==SIZE_RESTORED)
+		{
+			LONG x=LOWORD(lParam);	//((LPRECT)lParam)->right-((LPRECT)lParam)->left;
+			LONG y=HIWORD(lParam);	//((LPRECT)lParam)->bottom-((LPRECT)lParam)->top;
+			MoveWindow(GetDlgItem(hDlg,IDC_BTNDEL),     5            ,y-5-25,(x-20)/3,25,TRUE);	//where to put DELETE button while resizing
+			MoveWindow(GetDlgItem(hDlg,IDC_BTNCHECKALL),10+  (x-20)/3,y-5-25,(x-20)/6,25,TRUE);	//where to put CHECK ALL button while resizing				
+			MoveWindow(GetDlgItem(hDlg,IDC_BTNAPP),     15+  (x-20)/3 + (x-20)/6,y-5-25,(x-20)/3,25,TRUE);	//where to put RUN APP button while resizing
+			MoveWindow(GetDlgItem(hDlg,IDC_BTNOK),      20+2*(x-20)/3 + (x-20)/6 ,y-5-25,(x-20)/6,25,TRUE);	//where to put OK button while resizing
+			MoveWindow(GetDlgItem(hDlg,IDC_LISTMAILS),  5         ,5     ,x-10    ,y-55,TRUE);	//where to put list mail window while resizing
+			MoveWindow(GetDlgItem(hDlg,IDC_STSTATUS),   5         ,y-5-45     ,x-10    ,15,TRUE);	//where to put account status text while resizing
+		}
+		//			break;
+		return 0;
+	case WM_GETMINMAXINFO:
+		((LPMINMAXINFO)lParam)->ptMinTrackSize.x=MAILBROWSER_MINXSIZE;
+		((LPMINMAXINFO)lParam)->ptMinTrackSize.y=MAILBROWSER_MINYSIZE;
+		return 0;
+	case WM_TIMER:
 		{
 			NOTIFYICONDATA nid;
 			struct CMailWinUserInfo *mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER);
@@ -2247,198 +2239,190 @@ INT_PTR CALLBACK DlgProcYAMNMailBrowser(HWND hDlg,UINT msg,WPARAM wParam,LPARAM
 				nid.hIcon=g_LoadIconEx(2);
 			Shell_NotifyIcon(NIM_MODIFY,&nid);
 			mwui->TrayIconState=!mwui->TrayIconState;
-//			UpdateWindow(hDlg);
+			//			UpdateWindow(hDlg);
 		}
-			break;
-		case WM_NOTIFY:
-			switch(((LPNMHDR)lParam)->idFrom)
-			{
-				
-				case IDC_LISTMAILS:
-				{
+		break;
 
-					switch(((LPNMHDR)lParam)->code)
+	case WM_NOTIFY:
+		switch(((LPNMHDR)lParam)->idFrom) {
+		case IDC_LISTMAILS:
+			switch(((LPNMHDR)lParam)->code) {
+			case NM_DBLCLK:
+				SendMessage(hDlg,WM_YAMN_SHOWSELECTED,0,0);
+				break;
+			case LVN_COLUMNCLICK:
+				HACCOUNT ActualAccount;
+				if (NULL != (ActualAccount=GetWindowAccount(hDlg))) {
+					NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)lParam;
+					if (WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
 					{
-						case NM_DBLCLK:
-							SendMessage(hDlg,WM_YAMN_SHOWSELECTED,0,0);
+#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"MailBrowser:COLUMNCLICK:ActualAccountSO-read enter\n");
+#endif
+						switch((int)pNMListView->iSubItem)
+						{
+						case 0:
+							bFrom = !bFrom;
 							break;
-						case LVN_COLUMNCLICK:
-							HACCOUNT ActualAccount;
-							if (NULL != (ActualAccount=GetWindowAccount(hDlg))) {
-								NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)lParam;
-								if (WAIT_OBJECT_0==WaitToReadFcn(ActualAccount->AccountAccessSO))
-								{
-									#ifdef DEBUG_SYNCHRO
-									DebugLog(SynchroFile,"MailBrowser:COLUMNCLICK:ActualAccountSO-read enter\n");
-									#endif
-									switch((int)pNMListView->iSubItem)
-									{
-										case 0:
-											bFrom = !bFrom;
-											break;
-										case 1:
-											bSub = !bSub;
-											break;
-										case 2:
-											bSize = !bSize;
-											break;
-										case 3:
-											bDate = !bDate;
-											break;
-										default:
-											break;
-									}
-									ListView_SortItems(pNMListView->hdr.hwndFrom,ListViewCompareProc,pNMListView->iSubItem);
-									#ifdef DEBUG_SYNCHRO
-									DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read done\n");
-									#endif
-									ReadDoneFcn(ActualAccount->AccountAccessSO);
-							}	}
+						case 1:
+							bSub = !bSub;
+							break;
+						case 2:
+							bSize = !bSize;
+							break;
+						case 3:
+							bDate = !bDate;
 							break;
+						default:
+							break;
+						}
+						ListView_SortItems(pNMListView->hdr.hwndFrom,ListViewCompareProc,pNMListView->iSubItem);
+#ifdef DEBUG_SYNCHRO
+						DebugLog(SynchroFile,"MailBrowser:BTNAPP:ActualAccountSO-read done\n");
+#endif
+						ReadDoneFcn(ActualAccount->AccountAccessSO);
+					}
+				}
+				break;
 
-						case NM_CUSTOMDRAW:
-						{
-							HACCOUNT ActualAccount;
-							LPNMLVCUSTOMDRAW cd=(LPNMLVCUSTOMDRAW)lParam;
-							LONG_PTR PaintCode;
+			case NM_CUSTOMDRAW:
+				{
+					HACCOUNT ActualAccount;
+					LPNMLVCUSTOMDRAW cd=(LPNMLVCUSTOMDRAW)lParam;
+					LONG_PTR PaintCode;
 
-							if (NULL==(ActualAccount=GetWindowAccount(hDlg)))
-								break;
+					if (NULL==(ActualAccount=GetWindowAccount(hDlg)))
+						break;
+
+					switch(cd->nmcd.dwDrawStage) {
+					case CDDS_PREPAINT:
+						PaintCode=CDRF_NOTIFYITEMDRAW;
+						break;
+					case CDDS_ITEMPREPAINT:
+						PaintCode=CDRF_NOTIFYSUBITEMDRAW;
+						break;
+					case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
+						{
+							//									COLORREF crText, crBkgnd;
+							//									crText= RGB(128,128,255);
+							HYAMNMAIL ActualMail;
+							BOOL umma;
 
-							switch(cd->nmcd.dwDrawStage)
 							{
-								case CDDS_PREPAINT:
-									PaintCode=CDRF_NOTIFYITEMDRAW;
+								struct CMailWinUserInfo *mwui;
+								mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER);
+								umma= mwui->UpdateMailsMessagesAccess;
+							}
+							ActualMail=(HYAMNMAIL)cd->nmcd.lItemlParam;
+							if (!ActualMail) 
+								ActualMail=(HYAMNMAIL)readItemLParam(cd->nmcd.hdr.hwndFrom,cd->nmcd.dwItemSpec);
+#ifdef DEBUG_SYNCHRO
+							DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read wait\n");
+#endif
+							if (!umma)
+								if (WAIT_OBJECT_0 != WaitToReadFcn(ActualAccount->MessagesAccessSO))
+								{
+#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read wait failed\n");
+#endif
+									return 0;
+								}
+#ifdef DEBUG_SYNCHRO
+								DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read enter\n");
+#endif
+								switch(ActualMail->Flags & YAMN_MSG_SPAMMASK)
+								{
+								case YAMN_MSG_SPAML1:
+								case YAMN_MSG_SPAML2:
+									cd->clrText=RGB(150,150,150);
 									break;
-								case CDDS_ITEMPREPAINT:
-									PaintCode=CDRF_NOTIFYSUBITEMDRAW;
+								case YAMN_MSG_SPAML3:
+									cd->clrText=RGB(200,200,200);
+									cd->clrTextBk=RGB(160,160,160);
 									break;
-								case CDDS_ITEMPREPAINT | CDDS_SUBITEM:
-								{
-//									COLORREF crText, crBkgnd;
-//									crText= RGB(128,128,255);
-									HYAMNMAIL ActualMail;
-									BOOL umma;
-
-									{
-										struct CMailWinUserInfo *mwui;
-										mwui=(struct CMailWinUserInfo *)GetWindowLongPtr(hDlg,DWLP_USER);
-										umma= mwui->UpdateMailsMessagesAccess;
-									}
-									ActualMail=(HYAMNMAIL)cd->nmcd.lItemlParam;
-									if (!ActualMail) 
-										ActualMail=(HYAMNMAIL)readItemLParam(cd->nmcd.hdr.hwndFrom,cd->nmcd.dwItemSpec);
-									#ifdef DEBUG_SYNCHRO
-									DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read wait\n");
-									#endif
-									if (!umma)
-										if (WAIT_OBJECT_0 != WaitToReadFcn(ActualAccount->MessagesAccessSO))
-										{
-											#ifdef DEBUG_SYNCHRO
-											DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read wait failed\n");
-											#endif
-											return 0;
-										}
-									#ifdef DEBUG_SYNCHRO
-									DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read enter\n");
-									#endif
-									switch(ActualMail->Flags & YAMN_MSG_SPAMMASK)
-									{
-										case YAMN_MSG_SPAML1:
-										case YAMN_MSG_SPAML2:
-											cd->clrText=RGB(150,150,150);
-											break;
-										case YAMN_MSG_SPAML3:
-											cd->clrText=RGB(200,200,200);
-											cd->clrTextBk=RGB(160,160,160);
-											break;
-										case 0:
-											if (cd->nmcd.dwItemSpec & 1)
-												cd->clrTextBk=RGB(230,230,230);
-											break;
-										default:
-											break;
-									}
-									if (ActualMail->Flags & YAMN_MSG_UNSEEN)
-										cd->clrTextBk=RGB(220,235,250);
-									PaintCode=CDRF_DODEFAULT;
-
-									if (!umma)
-									{
-										#ifdef DEBUG_SYNCHRO
-										DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read done\n");
-										#endif
-										ReadDoneFcn(ActualAccount->MessagesAccessSO);
-									}
-
+								case 0:
+									if (cd->nmcd.dwItemSpec & 1)
+										cd->clrTextBk=RGB(230,230,230);
+									break;
+								default:
 									break;
 								}
-							}
-							SetWindowLongPtr(hDlg,DWLP_MSGRESULT,PaintCode);
-								return 1;
+								if (ActualMail->Flags & YAMN_MSG_UNSEEN)
+									cd->clrTextBk=RGB(220,235,250);
+								PaintCode=CDRF_DODEFAULT;
+
+								if (!umma)
+								{
+#ifdef DEBUG_SYNCHRO
+									DebugLog(SynchroFile,"MailBrowser:DRAWITEM:ActualAccountMsgsSO-read done\n");
+#endif
+									ReadDoneFcn(ActualAccount->MessagesAccessSO);
+								}
+
+								break;
 						}
 					}
+					SetWindowLongPtr(hDlg,DWLP_MSGRESULT,PaintCode);
+					return 1;
 				}
 			}
-			break;
-		case WM_CONTEXTMENU:
-			{
-				if ( GetWindowLongPtr(( HWND )wParam, GWLP_ID ) == IDC_LISTMAILS)	{
-					//MessageBox(0,"LISTHEADERS","Debug",0);
-					HWND hList = GetDlgItem( hDlg, IDC_LISTMAILS );
-					POINT pt = { (signed short)LOWORD( lParam ), (signed short)HIWORD( lParam ) };
-					HTREEITEM hItem = 0;
-					if (pt.x==-1) pt.x = 0;
-					if (pt.y==-1) pt.y = 0;
-					if (int numRows = ListView_GetItemCount(hList)) {
-						HMENU hMenu = CreatePopupMenu();
-						AppendMenu(hMenu, MF_STRING, (UINT_PTR)1, TranslateT("Copy Selected"));
-						AppendMenu(hMenu, MF_STRING, (UINT_PTR)2, TranslateT("Copy All"));
-						AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
-						AppendMenu(hMenu, MF_STRING, (UINT_PTR)0, TranslateT("Cancel"));
-						int nReturnCmd = TrackPopupMenu( hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, NULL );
-						DestroyMenu( hMenu );
-						if (nReturnCmd>0) {
-							int courRow=0;
-							size_t sizeNeeded = 0;
-							TCHAR from[128]={0}, subject[256]={0}, size[16]={0}, date[64]={0};
-							for (courRow=0;courRow<numRows;courRow++) {
-								if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
-								ListView_GetItemText(hList, courRow, 0, from, SIZEOF(from));
-								ListView_GetItemText(hList, courRow, 1, subject, SIZEOF(subject));
-								ListView_GetItemText(hList, courRow, 2, size, SIZEOF(size));
-								ListView_GetItemText(hList, courRow, 3, date, SIZEOF(date));
-								sizeNeeded += 5+_tcslen(from)+_tcslen(subject)+_tcslen(size)+_tcslen(date);
-							}
-							if (sizeNeeded && OpenClipboard(hDlg)) {
-								EmptyClipboard();
-								HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE,(sizeNeeded+1)*sizeof(TCHAR));
-								TCHAR *buff = (TCHAR *)GlobalLock(hData);
-								int courPos = 0;
-								for (courRow=0; courRow < numRows; courRow++) {
-									if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
-									ListView_GetItemText(hList, courRow, 0, from, SIZEOF(from));
-									ListView_GetItemText(hList, courRow, 1, subject, SIZEOF(subject));
-									ListView_GetItemText(hList, courRow, 2, size, SIZEOF(size));
-									ListView_GetItemText(hList, courRow, 3, date, SIZEOF(date));
-									courPos += _stprintf(&buff[courPos], _T("%s\t%s\t%s\t%s\r\n"), from, subject, size, date);
-								}
-								GlobalUnlock(hData);
-								#if defined( _UNICODE )
-									SetClipboardData(CF_UNICODETEXT,hData);
-								#else
-									SetClipboardData(CF_TEXT,hData);
-								#endif
-								CloseClipboard();
-							}
+		}
+		break;
+
+	case WM_CONTEXTMENU:
+		if ( GetWindowLongPtr(( HWND )wParam, GWLP_ID ) == IDC_LISTMAILS)	{
+			//MessageBox(0,"LISTHEADERS","Debug",0);
+			HWND hList = GetDlgItem( hDlg, IDC_LISTMAILS );
+			POINT pt = { (signed short)LOWORD( lParam ), (signed short)HIWORD( lParam ) };
+			HTREEITEM hItem = 0;
+			if (pt.x==-1) pt.x = 0;
+			if (pt.y==-1) pt.y = 0;
+			if (int numRows = ListView_GetItemCount(hList)) {
+				HMENU hMenu = CreatePopupMenu();
+				AppendMenu(hMenu, MF_STRING, (UINT_PTR)1, TranslateT("Copy Selected"));
+				AppendMenu(hMenu, MF_STRING, (UINT_PTR)2, TranslateT("Copy All"));
+				AppendMenu(hMenu, MF_SEPARATOR, 0, NULL);
+				AppendMenu(hMenu, MF_STRING, (UINT_PTR)0, TranslateT("Cancel"));
+				int nReturnCmd = TrackPopupMenu( hMenu, TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, NULL );
+				DestroyMenu( hMenu );
+				if (nReturnCmd>0) {
+					int courRow=0;
+					size_t sizeNeeded = 0;
+					TCHAR from[128]={0}, subject[256]={0}, size[16]={0}, date[64]={0};
+					for (courRow=0;courRow<numRows;courRow++) {
+						if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+						ListView_GetItemText(hList, courRow, 0, from, SIZEOF(from));
+						ListView_GetItemText(hList, courRow, 1, subject, SIZEOF(subject));
+						ListView_GetItemText(hList, courRow, 2, size, SIZEOF(size));
+						ListView_GetItemText(hList, courRow, 3, date, SIZEOF(date));
+						sizeNeeded += 5+_tcslen(from)+_tcslen(subject)+_tcslen(size)+_tcslen(date);
+					}
+					if (sizeNeeded && OpenClipboard(hDlg)) {
+						EmptyClipboard();
+						HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE,(sizeNeeded+1)*sizeof(TCHAR));
+						TCHAR *buff = (TCHAR *)GlobalLock(hData);
+						int courPos = 0;
+						for (courRow=0; courRow < numRows; courRow++) {
+							if ((nReturnCmd==1) && (ListView_GetItemState(hList, courRow, LVIS_SELECTED)==0)) continue;
+							ListView_GetItemText(hList, courRow, 0, from, SIZEOF(from));
+							ListView_GetItemText(hList, courRow, 1, subject, SIZEOF(subject));
+							ListView_GetItemText(hList, courRow, 2, size, SIZEOF(size));
+							ListView_GetItemText(hList, courRow, 3, date, SIZEOF(date));
+							courPos += _stprintf(&buff[courPos], _T("%s\t%s\t%s\t%s\r\n"), from, subject, size, date);
 						}
+						GlobalUnlock(hData);
+#if defined( _UNICODE )
+						SetClipboardData(CF_UNICODETEXT,hData);
+#else
+						SetClipboardData(CF_TEXT,hData);
+#endif
+						CloseClipboard();
 					}
-			}	}
-			break; // just in case
-		default:
-			return 0;
+				}
+			}
+		}
+		break; // just in case
 	}
-//	return DefWindowProc(hDlg,msg,wParam,lParam);
 	return 0;
 }
 
@@ -2482,7 +2466,7 @@ LRESULT CALLBACK ListViewSubclassProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM
 
 		}
 	}
-	return CallWindowProc(OldListViewSubclassProc, hDlg, msg, wParam, lParam);
+	return mir_callNextSubclass(hDlg, ListViewSubclassProc, msg, wParam, lParam);
 }
 
 DWORD WINAPI MailBrowser(LPVOID Param)
-- 
cgit v1.2.3