diff options
| -rw-r--r-- | plugins/NotesAndReminders/NotesReminders_10.vcxproj | 8 | ||||
| -rw-r--r-- | plugins/NotesAndReminders/NotesReminders_12.vcxproj | 8 | ||||
| -rw-r--r-- | plugins/NotesAndReminders/NotesReminders_14.vcxproj | 8 | ||||
| -rw-r--r-- | plugins/NotesAndReminders/src/main.cpp | 26 | ||||
| -rw-r--r-- | plugins/NotesAndReminders/src/notes.cpp | 557 | ||||
| -rw-r--r-- | plugins/NotesAndReminders/src/options.cpp | 158 | ||||
| -rw-r--r-- | plugins/NotesAndReminders/src/reminders.cpp | 551 | 
7 files changed, 611 insertions, 705 deletions
diff --git a/plugins/NotesAndReminders/NotesReminders_10.vcxproj b/plugins/NotesAndReminders/NotesReminders_10.vcxproj index 6063bb4e36..3dc010d8a0 100644 --- a/plugins/NotesAndReminders/NotesReminders_10.vcxproj +++ b/plugins/NotesAndReminders/NotesReminders_10.vcxproj @@ -78,7 +78,7 @@        <Optimization>Disabled</Optimization>
        <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
        <PrecompiledHeader>Use</PrecompiledHeader>
 @@ -105,7 +105,7 @@        <Optimization>Disabled</Optimization>
        <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
        <PrecompiledHeader>Use</PrecompiledHeader>
 @@ -135,7 +135,7 @@        <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <StringPooling>true</StringPooling>
        <FunctionLevelLinking>true</FunctionLevelLinking>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <PrecompiledHeader>Use</PrecompiledHeader>
        <PrecompiledHeaderFile>globals.h</PrecompiledHeaderFile>
 @@ -166,7 +166,7 @@        <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <StringPooling>true</StringPooling>
        <FunctionLevelLinking>true</FunctionLevelLinking>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <PrecompiledHeader>Use</PrecompiledHeader>
        <PrecompiledHeaderFile>globals.h</PrecompiledHeaderFile>
 diff --git a/plugins/NotesAndReminders/NotesReminders_12.vcxproj b/plugins/NotesAndReminders/NotesReminders_12.vcxproj index 6b02e0a53b..6b0d26a20a 100644 --- a/plugins/NotesAndReminders/NotesReminders_12.vcxproj +++ b/plugins/NotesAndReminders/NotesReminders_12.vcxproj @@ -82,7 +82,7 @@        <Optimization>Disabled</Optimization>
        <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
        <PrecompiledHeader>Use</PrecompiledHeader>
 @@ -110,7 +110,7 @@        <Optimization>Disabled</Optimization>
        <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
        <PrecompiledHeader>Use</PrecompiledHeader>
 @@ -140,7 +140,7 @@        <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <StringPooling>true</StringPooling>
        <FunctionLevelLinking>true</FunctionLevelLinking>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <PrecompiledHeader>Use</PrecompiledHeader>
        <PrecompiledHeaderFile>globals.h</PrecompiledHeaderFile>
 @@ -171,7 +171,7 @@        <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <StringPooling>true</StringPooling>
        <FunctionLevelLinking>true</FunctionLevelLinking>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <PrecompiledHeader>Use</PrecompiledHeader>
        <PrecompiledHeaderFile>globals.h</PrecompiledHeaderFile>
 diff --git a/plugins/NotesAndReminders/NotesReminders_14.vcxproj b/plugins/NotesAndReminders/NotesReminders_14.vcxproj index 74aa19bc3f..53e2671707 100644 --- a/plugins/NotesAndReminders/NotesReminders_14.vcxproj +++ b/plugins/NotesAndReminders/NotesReminders_14.vcxproj @@ -82,7 +82,7 @@        <Optimization>Disabled</Optimization>
        <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
        <PrecompiledHeader>Use</PrecompiledHeader>
 @@ -110,7 +110,7 @@        <Optimization>Disabled</Optimization>
        <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
        <PrecompiledHeader>Use</PrecompiledHeader>
 @@ -140,7 +140,7 @@        <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <StringPooling>true</StringPooling>
        <FunctionLevelLinking>true</FunctionLevelLinking>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <PrecompiledHeader>Use</PrecompiledHeader>
        <PrecompiledHeaderFile>globals.h</PrecompiledHeaderFile>
 @@ -171,7 +171,7 @@        <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
        <StringPooling>true</StringPooling>
        <FunctionLevelLinking>true</FunctionLevelLinking>
 -      <WarningLevel>Level3</WarningLevel>
 +      <WarningLevel>Level4</WarningLevel>
        <AdditionalIncludeDirectories>..\..\include;..\ExternalAPI;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
        <PrecompiledHeader>Use</PrecompiledHeader>
        <PrecompiledHeaderFile>globals.h</PrecompiledHeaderFile>
 diff --git a/plugins/NotesAndReminders/src/main.cpp b/plugins/NotesAndReminders/src/main.cpp index fdf9140439..c4985c1b84 100644 --- a/plugins/NotesAndReminders/src/main.cpp +++ b/plugins/NotesAndReminders/src/main.cpp @@ -37,7 +37,7 @@ void BringAllNotesToFront(STICKYNOTE *pActive);  void CloseNotesList();
  void CloseReminderList();
 -INT_PTR PluginMenuCommandAddNew(WPARAM w, LPARAM l)
 +INT_PTR PluginMenuCommandAddNew(WPARAM, LPARAM)
  {
  	STICKYNOTE *PSN = NewNote(0,0,0,0,NULL,NULL,TRUE,TRUE,0);
  	if(PSN)
 @@ -45,44 +45,44 @@ INT_PTR PluginMenuCommandAddNew(WPARAM w, LPARAM l)  	return 0;
  }
 -INT_PTR PluginMenuCommandDeleteAll(WPARAM w, LPARAM l)
 +INT_PTR PluginMenuCommandDeleteAll(WPARAM, LPARAM)
  {
  	if (g_Stickies && MessageBox(NULL, Translate("Are you sure you want to delete all notes?"), Translate(SECTIONNAME), MB_OKCANCEL) == IDOK)
  		DeleteNotes();
  	return 0;
  }
 -INT_PTR PluginMenuCommandShowHide(WPARAM w, LPARAM l)
 +static INT_PTR PluginMenuCommandShowHide(WPARAM, LPARAM)
  {
  	ShowHideNotes();
  	return 0;
  }
 -INT_PTR PluginMenuCommandViewNotes(WPARAM w, LPARAM l)
 +static INT_PTR PluginMenuCommandViewNotes(WPARAM, LPARAM)
  {
  	ListNotes();
  	return 0;
  }
 -INT_PTR PluginMenuCommandAllBringFront(WPARAM w, LPARAM l)
 +static INT_PTR PluginMenuCommandAllBringFront(WPARAM, LPARAM)
  {
  	BringAllNotesToFront(NULL);
  	return 0;
  }
 -INT_PTR PluginMenuCommandNewReminder(WPARAM w, LPARAM l)
 +static INT_PTR PluginMenuCommandNewReminder(WPARAM, LPARAM)
  {
  	NewReminder();
  	return 0;
  }
 -INT_PTR PluginMenuCommandViewReminders(WPARAM w, LPARAM l)
 +static INT_PTR PluginMenuCommandViewReminders(WPARAM, LPARAM)
  {
  	ListReminders();
  	return 0;
  }
 -INT_PTR PluginMenuCommandDeleteReminders(WPARAM w, LPARAM l)
 +static INT_PTR PluginMenuCommandDeleteReminders(WPARAM, LPARAM)
  {
  	if (RemindersList && MessageBox(NULL, Translate("Are you sure you want to delete all reminders?"), Translate(SECTIONNAME), MB_OKCANCEL) == IDOK)
  		DeleteReminders();
 @@ -114,7 +114,7 @@ void InitIcons(void)  	Icon_Register(hinstance, LPGEN("Sticky Notes"), iconList, _countof(iconList), MODULENAME);
  }
 -int OnOptInitialise(WPARAM w, LPARAM L)
 +static int OnOptInitialise(WPARAM w, LPARAM)
  {
  	OPTIONSDIALOGPAGE odp = { 0 };
  	odp.position = 900002000;
 @@ -127,7 +127,7 @@ int OnOptInitialise(WPARAM w, LPARAM L)  	return 0;
  }
 -int OnTopToolBarInit(WPARAM w, LPARAM L) 
 +int OnTopToolBarInit(WPARAM, LPARAM) 
  {
  	TTBButton ttb = { 0 };
  	ttb.dwFlags = TTBBF_VISIBLE | TTBBF_SHOWTOOLTIP;
 @@ -185,7 +185,7 @@ static void addMenuItem(CMenuItem &mi)  	Menu_AddMainMenuItem(&mi);
  }
 -int OnModulesLoaded(WPARAM wparam, LPARAM lparam)
 +int OnModulesLoaded(WPARAM, LPARAM)
  {
  	// register fonts and hotkeys
  	RegisterFontServiceFonts();
 @@ -260,7 +260,7 @@ int OnModulesLoaded(WPARAM wparam, LPARAM lparam)  	return 0;
  }
 -extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
 +extern "C" __declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD)
  {
  	return &pluginInfo;
  }
 @@ -290,7 +290,7 @@ extern "C" __declspec(dllexport) int Unload(void)  	return 0;
  }
 -BOOL WINAPI DllMain(HINSTANCE hinst, DWORD fdwReason, LPVOID lpvReserved)
 +BOOL WINAPI DllMain(HINSTANCE hinst, DWORD, LPVOID)
  {
  	hinstance = hinst;
  	return TRUE;
 diff --git a/plugins/NotesAndReminders/src/notes.cpp b/plugins/NotesAndReminders/src/notes.cpp index 0708bbfcaf..a341579d21 100644 --- a/plugins/NotesAndReminders/src/notes.cpp +++ b/plugins/NotesAndReminders/src/notes.cpp @@ -90,9 +90,7 @@ TREEELEMENT *g_Stickies = NULL;  INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,  								  WPARAM wParam,LPARAM lParam); -INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam, -								  LPARAM lParam); -void JustSaveNotes(void); +  INT_PTR PluginMenuCommandAddNew(WPARAM w,LPARAM l);  INT_PTR PluginMenuCommandDeleteAll(WPARAM w,LPARAM l);  void GetTriggerTimeString(const ULARGE_INTEGER *When, char *s, UINT strSize, BOOL bUtc); @@ -113,16 +111,13 @@ COLORREF GetCaptionColor(COLORREF bodyClr)  static void EnsureUniqueID(STICKYNOTE *TSN)  { -	TREEELEMENT *TTE; -  	if (!g_Stickies)  		return;  try_next:  	// check existing notes if id is in use -	TTE = g_Stickies; -	while (TTE) +	for (TREEELEMENT *TTE = g_Stickies; TTE; TTE = (TREEELEMENT*)TTE->next)  	{  		if (((STICKYNOTE*)TTE->ptrdata)->ID.QuadPart == TSN->ID.QuadPart)  		{ @@ -131,8 +126,6 @@ try_next:  			TSN->ID.QuadPart++;  			goto try_next;  		} - -		TTE = (TREEELEMENT*)TTE->next;  	}  } @@ -220,7 +213,6 @@ static BOOL CreateStickyNoteFont(STICKYNOTEFONT *pCustomFont, LOGFONT *plf)  STICKYNOTE* NewNoteEx(int Ax,int Ay,int Aw,int Ah,char *Data,ULARGE_INTEGER *ID,BOOL Visible,BOOL OnTop,int scrollV,COLORREF bgClr,COLORREF fgClr,char *Title,STICKYNOTEFONT *pCustomFont,BOOL bLoading)  { -	STICKYNOTE* TSN;  	WNDCLASSEX TWC = {0};  	WINDOWPLACEMENT TWP;  	DWORD L1,L2; @@ -245,7 +237,7 @@ STICKYNOTE* NewNoteEx(int Ax,int Ay,int Aw,int Ah,char *Data,ULARGE_INTEGER *ID,  		TWC.lpszMenuName = 0;  		TWC.lpszClassName = NOTE_WND_CLASS;  		TWC.cbSize = sizeof(WNDCLASSEX); -		TWC.lpfnWndProc = (WNDPROC)StickyNoteWndProc; +		TWC.lpfnWndProc = StickyNoteWndProc;  		if (!RegisterClassEx(&TWC)) return NULL;  	} @@ -258,7 +250,7 @@ STICKYNOTE* NewNoteEx(int Ax,int Ay,int Aw,int Ah,char *Data,ULARGE_INTEGER *ID,  		Ay = ((TWP.rcNormalPosition.bottom - TWP.rcNormalPosition.top) / 2) - (Ah / 2);  	} -	TSN = (STICKYNOTE*)malloc(sizeof(STICKYNOTE)); +	STICKYNOTE *TSN = (STICKYNOTE*)malloc(sizeof(STICKYNOTE));  	if (ID)  	{ @@ -367,17 +359,15 @@ STICKYNOTE* NewNote(int Ax,int Ay,int Aw,int Ah,char *Data,ULARGE_INTEGER *ID,BO  void LoadNotes(BOOL bIsStartup)  { -	int I; -	int NotesCount; -	WORD Size; +	WORD Size = 0;  	char *Value = NULL, *TVal = NULL;  	char ValueName[32];  	g_Stickies = NULL; -	NotesCount = db_get_dw(0,MODULENAME,"NotesData",0); +	int NotesCount = db_get_dw(0,MODULENAME,"NotesData",0); -	for (I = 0; I < NotesCount; I++) +	for (int I = 0; I < NotesCount; I++)  	{  		char *DelPos; @@ -556,7 +546,7 @@ void LoadNotes(BOOL bIsStartup)  			if (DelPos = strchr(Value,0x1B))  			{	// get first delimiter -				int	PartLen = DelPos - TVal; +//				int	PartLen = DelPos - TVal;  				Data = NULL;  				ID = NULL; @@ -661,11 +651,9 @@ void CloseNotesList()  static void PurgeNotesTree()  { -	STICKYNOTE *pt; -  	while (g_Stickies) // empty whole tree  	{ -		pt = (STICKYNOTE*)g_Stickies->ptrdata; +		STICKYNOTE *pt = (STICKYNOTE*)g_Stickies->ptrdata;  		if (pt->SNHwnd) DestroyWindow(pt->SNHwnd);  		SAFE_FREE((void**)&pt->title);  		SAFE_FREE((void**)&pt->data); @@ -680,44 +668,18 @@ static void PurgeNotesTree()  	g_Stickies = NULL;  } -void SaveNotes(void) -{ -	JustSaveNotes(); -	PurgeNotesTree(); -} -  void PurgeNotes(void)  { -	int NotesCount, I;  	char ValueName[16]; -	NotesCount = db_get_dw(0,MODULENAME,"NotesData",0); -	for(I = 0; I < NotesCount; I++) +	int NotesCount = db_get_dw(0,MODULENAME,"NotesData",0); +	for(int I = 0; I < NotesCount; I++)  	{  		mir_snprintf(ValueName, "NotesData%d", I);  		db_unset(0,MODULENAME,ValueName);  	}  } -void OnDeleteNote(HWND hdlg, STICKYNOTE *SN) -{ -	if (MessageBoxW(hdlg, TranslateT("Are you sure you want to delete this note?"), TranslateT(SECTIONNAME), MB_OKCANCEL) == IDOK) -	{ -		if (SN->SNHwnd) -			DestroyWindow(SN->SNHwnd); -		TreeDelete(&g_Stickies,SN); -		SAFE_FREE((void**)&SN->data); -		if (SN->pCustomFont) -		{ -			DeleteObject(SN->pCustomFont->hFont); -			free(SN->pCustomFont); -		} -		SAFE_FREE((void**)&SN); -		JustSaveNotes(); -		NOTIFY_LIST(); -	} -} -  void DeleteNotes(void)  {  	PurgeNotes(); @@ -726,58 +688,8 @@ void DeleteNotes(void)  	NOTIFY_LIST();  } -void ShowHideNotes(void) -{ -	BOOL Visible; - -	if (!g_Stickies) -		return; - -	// if some notes are hidden but others visible then first make all visible -	// only toggle vis state if all are hidden or all are visible - -	UINT nHideCount  = 0, nVisCount = 0; -	TREEELEMENT *TTE = g_Stickies; -	while (TTE) -	{ -		if (((STICKYNOTE*)TTE->ptrdata)->Visible) -			nVisCount++; -		else -			nHideCount++; - -		TTE = (TREEELEMENT*)TTE->next; -	} - -	if (!nVisCount) -		Visible = TRUE; -	else if (!nHideCount) -		Visible = FALSE; -	else -		Visible = TRUE; - -	int bShow = Visible ? SW_SHOWNA : SW_HIDE; - -	TTE = g_Stickies; -	while (TTE) -	{ -		STICKYNOTE *SN = (STICKYNOTE*)TTE->ptrdata; - -		if ((!Visible) != (!SN->Visible)) -		{ -			ShowWindow(SN->SNHwnd, bShow); -			SN->Visible = Visible; -		} - -		TTE = (TREEELEMENT*)TTE->next; -	} - -	JustSaveNotes(); -} -  void BringAllNotesToFront(STICKYNOTE *pActive)  { -	TREEELEMENT *TTE; -  	if (!g_Stickies)  		return; @@ -785,9 +697,7 @@ void BringAllNotesToFront(STICKYNOTE *pActive)  	//       is active, it refuses to move notes to top like it should with HWND_TOP. as a workaround still doesn't  	//       work 100% of the time, but at least more often, we first move not to top-most then for non-always-on-top  	//       notes we demote them back as a non top-most window - -	TTE = g_Stickies; -	while (TTE) +	for (TREEELEMENT *TTE = g_Stickies; TTE; TTE = (TREEELEMENT*)TTE->next)  	{  		STICKYNOTE *SN = (STICKYNOTE*)TTE->ptrdata; @@ -797,8 +707,6 @@ void BringAllNotesToFront(STICKYNOTE *pActive)  			if (!SN->OnTop)  				SetWindowPos(SN->SNHwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);  		} - -		TTE = (TREEELEMENT*)TTE->next;  	}  	if (pActive) @@ -809,12 +717,10 @@ void BringAllNotesToFront(STICKYNOTE *pActive)  	}  } -static void JustSaveNotesEx(STICKYNOTE *pModified) +// pModified optionally points to the modified note that invoked the JustSaveNotesEx call +static void JustSaveNotesEx(STICKYNOTE *pModified = NULL)  { -	// pModified optionally points to the modified note that invoked the JustSaveNotesEx call - -	TREEELEMENT *TTE; -	int I, NotesCount = TreeGetCount(g_Stickies); +	int I = 0, NotesCount = TreeGetCount(g_Stickies);  	int n, l;  	char ValueName[32];  	WINDOWPLACEMENT wp; @@ -828,7 +734,7 @@ static void JustSaveNotesEx(STICKYNOTE *pModified)  	db_set_dw(0, MODULENAME, "NotesData", NotesCount); -	for (TTE = g_Stickies, I = 0; TTE; TTE = (TREEELEMENT*)TTE->next, I++) +	for (TREEELEMENT *TTE = g_Stickies; TTE; TTE = (TREEELEMENT*)TTE->next, I++)  	{  		STICKYNOTE *pNote = (STICKYNOTE*)TTE->ptrdata;  		BOOL bDeleteTData = TRUE; @@ -963,9 +869,73 @@ static void JustSaveNotesEx(STICKYNOTE *pModified)  	NOTIFY_LIST();  } -__inline void JustSaveNotes(void) +void OnDeleteNote(HWND hdlg, STICKYNOTE *SN)  { -	JustSaveNotesEx(NULL); +	if (MessageBoxW(hdlg, TranslateT("Are you sure you want to delete this note?"), TranslateT(SECTIONNAME), MB_OKCANCEL) == IDOK) +	{ +		if (SN->SNHwnd) +			DestroyWindow(SN->SNHwnd); +		TreeDelete(&g_Stickies, SN); +		SAFE_FREE((void**)&SN->data); +		if (SN->pCustomFont) +		{ +			DeleteObject(SN->pCustomFont->hFont); +			free(SN->pCustomFont); +		} +		SAFE_FREE((void**)&SN); +		JustSaveNotesEx(); +		NOTIFY_LIST(); +	} +} + +void ShowHideNotes(void) +{ +	BOOL Visible; + +	if (!g_Stickies) +		return; + +	// if some notes are hidden but others visible then first make all visible +	// only toggle vis state if all are hidden or all are visible + +	UINT nHideCount = 0, nVisCount = 0; +	 +	for (TREEELEMENT *TTE = g_Stickies; TTE; TTE = (TREEELEMENT*)TTE->next) +	{ +		if (((STICKYNOTE*)TTE->ptrdata)->Visible) +			nVisCount++; +		else +			nHideCount++; +	} + +	if (!nVisCount) +		Visible = TRUE; +	else if (!nHideCount) +		Visible = FALSE; +	else +		Visible = TRUE; + +	int bShow = Visible ? SW_SHOWNA : SW_HIDE; + +	 +	for (TREEELEMENT *TTE = g_Stickies; TTE; TTE = (TREEELEMENT*)TTE->next) +	{ +		STICKYNOTE *SN = (STICKYNOTE*)TTE->ptrdata; + +		if ((!Visible) != (!SN->Visible)) +		{ +			ShowWindow(SN->SNHwnd, bShow); +			SN->Visible = Visible; +		} +	} + +	JustSaveNotesEx(); +} + +void SaveNotes(void) +{ +	JustSaveNotesEx(); +	PurgeNotesTree();  } @@ -974,9 +944,6 @@ __inline void JustSaveNotes(void)  static int FindMenuItem(HMENU h, LPTSTR lpszName)  { -	UINT i; -	char s[128]; -  	int n = GetMenuItemCount(h);  	if (n <= 0) @@ -985,8 +952,10 @@ static int FindMenuItem(HMENU h, LPTSTR lpszName)  	}  	// searches for a menu item based on name (used to avoid hardcoding item indices for sub-menus) -	for (i=0; i<(UINT)n; i++) +	for (UINT i=0; i<(UINT)n; i++)  	{ +		char s[128]; +  		if ( GetMenuString(h, i, s, 128, MF_BYPOSITION) )  		{  			if ( !mir_strcmp(s, lpszName) ) @@ -999,9 +968,8 @@ static int FindMenuItem(HMENU h, LPTSTR lpszName)  	return -1;  } -static BOOL DoContextMenu(HWND AhWnd,WPARAM wParam,LPARAM lParam) +static BOOL DoContextMenu(HWND AhWnd,WPARAM,LPARAM lParam)  { -	int n, i;  	STICKYNOTE *SN = (STICKYNOTE*)GetProp(AhWnd, "ctrldata");  	HMENU hMenuLoad, FhMenu, hSub; @@ -1018,16 +986,16 @@ static BOOL DoContextMenu(HWND AhWnd,WPARAM wParam,LPARAM lParam)  	// NOTE: names used for FindMenuItem would need to include & chars if such shortcuts are added to the menus -	n = FindMenuItem(FhMenu, "Appearance"); +	int n = FindMenuItem(FhMenu, "Appearance");  	if (n >= 0 && (hSub = GetSubMenu(FhMenu, n)))  	{  		HMENU hBg = GetSubMenu(hSub, FindMenuItem(hSub, "Background Color"));  		HMENU hFg = GetSubMenu(hSub, FindMenuItem(hSub, "Text Color")); -		for (i=0; i<_countof(clrPresets); i++) +		for (int i=0; i<_countof(clrPresets); i++)  			InsertMenu(hBg, i, MF_BYPOSITION|MF_OWNERDRAW, IDM_COLORPRESET_BG+i, Translate(clrPresets[i].szName)); -		for (i=0; i<_countof(clrPresets); i++) +		for (int i=0; i<_countof(clrPresets); i++)  			InsertMenu(hFg, i, MF_BYPOSITION|MF_OWNERDRAW, IDM_COLORPRESET_FG+i, Translate(clrPresets[i].szName));  	} @@ -1037,10 +1005,10 @@ static BOOL DoContextMenu(HWND AhWnd,WPARAM wParam,LPARAM lParam)  	return TRUE;  } -static void MeasureColorPresetMenuItem(HWND hdlg, LPMEASUREITEMSTRUCT lpMeasureItem, struct ColorPreset *clrPresets) +static void MeasureColorPresetMenuItem(HWND hdlg, LPMEASUREITEMSTRUCT lpMeasureItem, struct ColorPreset *clrPresets2)  {  	HDC hdc = GetDC(hdlg); -	LPSTR lpsz = Translate(clrPresets->szName); +	LPSTR lpsz = Translate(clrPresets2->szName);  	SIZE sz;  	GetTextExtentPoint32(hdc, lpsz, (int)mir_strlen(lpsz), &sz);  	ReleaseDC(hdlg, hdc); @@ -1049,9 +1017,9 @@ static void MeasureColorPresetMenuItem(HWND hdlg, LPMEASUREITEMSTRUCT lpMeasureI  	lpMeasureItem->itemHeight = (sz.cy+2)>18 ? sz.cy+2 : 18;  } -static void PaintColorPresetMenuItem(LPDRAWITEMSTRUCT lpDrawItem, struct ColorPreset *clrPresets) +static void PaintColorPresetMenuItem(LPDRAWITEMSTRUCT lpDrawItem, struct ColorPreset *clrPresets2)  { -	UINT n = lpDrawItem->itemID - IDM_COLORPRESET_BG; +//	UINT n = lpDrawItem->itemID - IDM_COLORPRESET_BG;  	RECT rect;  	rect.left = lpDrawItem->rcItem.left + 50;  	rect.top = lpDrawItem->rcItem.top; @@ -1072,7 +1040,7 @@ static void PaintColorPresetMenuItem(LPDRAWITEMSTRUCT lpDrawItem, struct ColorPr  	}  	SetBkMode(lpDrawItem->hDC, TRANSPARENT); -	DrawText(lpDrawItem->hDC, clrPresets->szName, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER); +	DrawText(lpDrawItem->hDC, clrPresets2->szName, -1, &rect, DT_LEFT | DT_SINGLELINE | DT_END_ELLIPSIS | DT_VCENTER);  	int h = lpDrawItem->rcItem.bottom - lpDrawItem->rcItem.top;  	rect.left = lpDrawItem->rcItem.left + 5; @@ -1083,7 +1051,7 @@ static void PaintColorPresetMenuItem(LPDRAWITEMSTRUCT lpDrawItem, struct ColorPr  	FrameRect(lpDrawItem->hDC, &rect, (HBRUSH)GetStockObject(BLACK_BRUSH));  	rect.left++; rect.top++;  	rect.right--; rect.bottom--; -	SetDCBrushColor(lpDrawItem->hDC, clrPresets->color); +	SetDCBrushColor(lpDrawItem->hDC, clrPresets2->color);  	FillRect(lpDrawItem->hDC, &rect, (HBRUSH)GetStockObject(DC_BRUSH));  } @@ -1152,7 +1120,7 @@ static void SetNoteTextControl(STICKYNOTE *SN)  } -static UINT_PTR CALLBACK CFHookProc(HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam) +static UINT_PTR CALLBACK CFHookProc(HWND hdlg, UINT msg, WPARAM, LPARAM)  {  	if (msg == WM_INITDIALOG)  	{ @@ -1186,6 +1154,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			return TRUE;  		} +      case WM_TIMER:  		if (wParam == 1025)  		{ @@ -1195,18 +1164,17 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			JustSaveNotesEx(SN);  		}  		break; +      case WM_MOVE: -		{ -			KillTimer(hdlg, 1025); -			SetTimer(hdlg, 1025, NOTE_CHANGE_COMMIT_DELAY, 0); -			return TRUE; -		} +		KillTimer(hdlg, 1025); +		SetTimer(hdlg, 1025, NOTE_CHANGE_COMMIT_DELAY, 0); +		return TRUE; +      case WM_CREATE:  		{  			STICKYNOTE *SN = (STICKYNOTE*)GetProp(hdlg, "ctrldata");  			CREATESTRUCT *CS = (CREATESTRUCT *)lParam; -			HWND H;  			DWORD mystyle;  			SN = (STICKYNOTE*)CS->lpCreateParams; @@ -1214,7 +1182,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			BringWindowToTop(hdlg);  			mystyle = WS_CHILD | WS_VISIBLE | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN;  			if (g_ShowScrollbar) mystyle |= WS_VSCROLL; -			H = CreateWindow(RICHEDIT_CLASS, 0, mystyle, 0, 0, CS->cx-3-3, CS->cy-3-(3+14), hdlg, (HMENU)1, hmiranda, 0); +			HWND H = CreateWindow(RICHEDIT_CLASS, 0, mystyle, 0, 0, CS->cx-3-3, CS->cy-3-(3+14), hdlg, (HMENU)1, hmiranda, 0);  			SN->REHwnd = H;  			SendMessage(H, EM_SETTEXTMODE, TM_PLAINTEXT, 0);  			SendMessage(H, EM_LIMITTEXT, MAX_NOTE_LEN, 0); @@ -1223,8 +1191,9 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			SendMessage(H, EM_SETBKGNDCOLOR, 0, SN->BgColor ? (SN->BgColor&0xffffff) : BodyColor);  			SendMessage(H, EM_AUTOURLDETECT, 1, 0);  			SetNoteTextControl(SN); -			return TRUE;  		} +		return TRUE; +  	case WM_GETMINMAXINFO:  		{  			MINMAXINFO *mm = (MINMAXINFO*)lParam; @@ -1234,15 +1203,16 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			mm->ptMinTrackSize.y = 3+3+14;  		}  		return 0; +  	case WM_ERASEBKGND:  		// no BG needed as edit control takes up entire client area  		return TRUE; +  	case WM_NCPAINT:  		// make window borders have the same color as caption  		{  			STICKYNOTE *SN = (STICKYNOTE*)GetProp(hdlg,"ctrldata"); -			HBRUSH hBkBrush;  			RECT rect, wr, r;  			//HDC hdc = GetDCEx(hdlg, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN);  			HDC hdc = GetWindowDC(hdlg); @@ -1257,7 +1227,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			rect = wr;  			OffsetRect(&rect, -wr.left, -wr.top); -			hBkBrush = (HBRUSH)GetStockObject(DC_BRUSH); +			HBRUSH hBkBrush = (HBRUSH)GetStockObject(DC_BRUSH);  			SetDCBrushColor(hdc, GetCaptionColor((SN && SN->BgColor) ? SN->BgColor : BodyColor));  			// draw all frame sides separately to avoid filling client area (which flickers) @@ -1324,12 +1294,14 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			pRect->right -= 3;  			pRect->left += 3;  			pRect->top += 3+14; -			return WVR_REDRAW;  		} +		return WVR_REDRAW; +  	case WM_NCACTIVATE:  		// update window (so that parts that potentially became visible through activation get redrawn immediately)  		RedrawWindow(hdlg, NULL, NULL, RDW_UPDATENOW);  		return TRUE; +      case WM_NOTIFY:          if (LOWORD(wParam) == 1)  		{ @@ -1353,6 +1325,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			return FALSE;          }  		break; +  	case WM_NCHITTEST:  		{  		int r = DefWindowProc(hdlg,message,wParam,lParam); @@ -1367,6 +1340,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  		}  		return r;  		} +  	case WM_NCLBUTTONDOWN:  		if (wParam == HTCAPTION && g_ShowNoteButtons)  		{ @@ -1397,6 +1371,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			}  		}  		return DefWindowProc(hdlg,message,wParam,lParam); +  	case WM_MEASUREITEM:  		{  			LPMEASUREITEMSTRUCT lpMeasureItem = (LPMEASUREITEMSTRUCT)lParam; @@ -1416,6 +1391,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			}  		}  		break; +  	case WM_DRAWITEM:  		if (!wParam)  		{ @@ -1436,35 +1412,31 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  			}  		}  		break; +  	case WM_COMMAND:  		{  			STICKYNOTE *SN = (STICKYNOTE*)GetProp(hdlg, "ctrldata"); -			HWND H; -			UINT id; -  			switch ( HIWORD(wParam) )  			{  			case EN_CHANGE:  			case EN_VSCROLL:  			case EN_HSCROLL: -				{ -					KillTimer(hdlg,1025); -					SetTimer(hdlg, 1025, NOTE_CHANGE_COMMIT_DELAY, 0); -				} +				KillTimer(hdlg,1025); +				SetTimer(hdlg, 1025, NOTE_CHANGE_COMMIT_DELAY, 0);  				break;  			} -			id = (UINT) LOWORD(wParam); +			UINT id = (UINT) LOWORD(wParam); -			H = SN->REHwnd; +			HWND H = SN->REHwnd;  			if (id >= IDM_COLORPRESET_BG && id <= IDM_COLORPRESET_BG+_countof(clrPresets))  			{  				SN->BgColor = clrPresets[id-IDM_COLORPRESET_BG].color | 0xff000000;  				SendMessage(H, EM_SETBKGNDCOLOR, 0, SN->BgColor & 0xffffff);  				RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -				JustSaveNotes(); +				JustSaveNotesEx();  				return FALSE;  			}  			else if (id >= IDM_COLORPRESET_FG && id <= IDM_COLORPRESET_FG+_countof(clrPresets)) @@ -1476,17 +1448,16 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  				CF.crTextColor = SN->FgColor & 0xffffff;  				SendMessage(H, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&CF);  				RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -				JustSaveNotes(); +				JustSaveNotesEx();  				return FALSE;  			}  			switch (id)  			{  			case ID_CONTEXTMENUNOTEPOPUP_NEWNOTE: -				{ -					PluginMenuCommandAddNew(0,0); -				} +				PluginMenuCommandAddNew(0,0);  				break; +  			case ID_APPEARANCE_CUSTOMBG:  				{  					COLORREF custclr[16] = {0}; @@ -1503,7 +1474,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  						SN->BgColor = cc.rgbResult | 0xff000000;  						SendMessage(H, EM_SETBKGNDCOLOR, 0, SN->BgColor&0xffffff);  						RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -						JustSaveNotes(); +						JustSaveNotesEx();  					}  				}  				break; @@ -1527,7 +1498,7 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  						CF.crTextColor = SN->FgColor & 0xffffff;  						SendMessage(H, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&CF);  						RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -						JustSaveNotes(); +						JustSaveNotesEx();  					}  				}  				break; @@ -1572,18 +1543,18 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  						SendMessage(H, WM_SETFONT, (WPARAM)(SN->pCustomFont ? SN->pCustomFont->hFont : hBodyFont), FALSE);  						SetNoteTextControl(SN);  						RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -						JustSaveNotes(); +						JustSaveNotesEx();  					}  				}  				break; +  			case ID_BACKGROUNDCOLOR_RESET: -				{ -					SN->BgColor = 0; -					SendMessage(H, EM_SETBKGNDCOLOR, 0, (LPARAM)BodyColor); -					RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -					JustSaveNotes(); -				} +				SN->BgColor = 0; +				SendMessage(H, EM_SETBKGNDCOLOR, 0, (LPARAM)BodyColor); +				RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); +				JustSaveNotesEx();  				break; +  			case ID_TEXTCOLOR_RESET:  				{  					CHARFORMAT CF = {0}; @@ -1593,26 +1564,26 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  					CF.crTextColor = BodyFontColor;  					SendMessage(H, EM_SETCHARFORMAT, SCF_ALL, (LPARAM)&CF);  					RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -					JustSaveNotes();  				} +				JustSaveNotesEx();  				break; +  			case ID_FONT_RESET: +				if (SN->pCustomFont)  				{ -					if (SN->pCustomFont) -					{ -						DeleteObject(SN->pCustomFont->hFont); -						free(SN->pCustomFont); -						SN->pCustomFont = NULL; - -						// clear text first to force a reformatting w.r.w scrollbar -						SetWindowText(H, ""); -						SendMessage(H, WM_SETFONT, (WPARAM)hBodyFont, FALSE); -						SetNoteTextControl(SN); -						RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -						JustSaveNotes(); -					} +					DeleteObject(SN->pCustomFont->hFont); +					free(SN->pCustomFont); +					SN->pCustomFont = NULL; + +					// clear text first to force a reformatting w.r.w scrollbar +					SetWindowText(H, ""); +					SendMessage(H, WM_SETFONT, (WPARAM)hBodyFont, FALSE); +					SetNoteTextControl(SN); +					RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); +					JustSaveNotesEx();  				}  				break; +  			case ID_CONTEXTMENUNOTEPOPUP_PASTETITLE:  				{  					char s[MAX_TITLE_LEN+1]; @@ -1623,10 +1594,11 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  						SN->title = _strdup(s);  						SN->CustomTitle = TRUE;  						RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -						JustSaveNotes(); +						JustSaveNotesEx();  					}  				}  				break; +  			case ID_CONTEXTMENUNOTEPOPUP_RESETTITLE:  				if (SN->CustomTitle)  				{ @@ -1637,41 +1609,58 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  					}  					InitNoteTitle(SN);  					RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_INVALIDATE|RDW_FRAME|RDW_UPDATENOW); -					JustSaveNotes(); +					JustSaveNotesEx();  				}  				break; +  			case IDM_REMOVENOTE:  				OnDeleteNote(hdlg, SN);  				break; +  			case IDM_HIDENOTE: -				{ -					SN->Visible = FALSE; -					ShowWindow(hdlg,SW_HIDE); -					JustSaveNotes(); -				} +				SN->Visible = FALSE; +				ShowWindow(hdlg,SW_HIDE); +				JustSaveNotesEx(); +				break; + +			case IDM_COPY: +				SendMessage(H,WM_COPY,0,0); +				break; + +			case IDM_PASTE: +				SendMessage(H,WM_PASTE,0,0); +				break; + +			case IDM_CUT: +				SendMessage(H,WM_CUT,0,0);  				break; -			case IDM_COPY: SendMessage(H,WM_COPY,0,0); break; -			case IDM_PASTE: SendMessage(H,WM_PASTE,0,0); break; -			case IDM_CUT: SendMessage(H,WM_CUT,0,0); break; -			case IDM_CLEAR: SendMessage(H,WM_CLEAR,0,0); break; -			case IDM_UNDO: SendMessage(H,WM_UNDO,0,0); break; + +			case IDM_CLEAR: +				SendMessage(H,WM_CLEAR,0,0); +				break; + +			case IDM_UNDO: +				SendMessage(H,WM_UNDO,0,0); +				break; +  			case IDM_TOGGLEONTOP: -				{ -					SN->OnTop = !SN->OnTop; -					SetWindowPos(hdlg, SN->OnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0,0,0,0, SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE); -					RedrawWindow(hdlg, NULL, NULL, RDW_FRAME|RDW_INVALIDATE|RDW_UPDATENOW); -					JustSaveNotes(); -				} +				SN->OnTop = !SN->OnTop; +				SetWindowPos(hdlg, SN->OnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0,0,0,0, SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE); +				RedrawWindow(hdlg, NULL, NULL, RDW_FRAME|RDW_INVALIDATE|RDW_UPDATENOW); +				JustSaveNotesEx();  				break; +  			case ID_CONTEXTMENUNOTEPOPUP_VIEWNOTES:  				ListNotes();  				break; +  			case ID_CONTEXTMENUNOTEPOPUP_BRINGALLTOTOP:  				BringAllNotesToFront(SN);  				break;  			}  			return TRUE;  		} +  	case WM_NCDESTROY:  		RemoveProp(hdlg, "ctrldata");  		break; @@ -1686,23 +1675,6 @@ INT_PTR CALLBACK StickyNoteWndProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM l  	return FALSE;  } - -///////////////////////////////////////////////////////////////////// -// Notes List Dialog (uses same dialog template as reminder list) - -void ListNotes(void) -{ -	if (!ListNotesVisible) -	{ -		CreateDialog(hinstance, MAKEINTRESOURCE(IDD_LISTREMINDERS), 0, DlgProcViewNotes); -		ListNotesVisible = TRUE; -	} -	else -	{ -		BringWindowToTop(LV); -	} -} -  static void EditNote(STICKYNOTE *SN)  {  	if (!SN) @@ -1711,7 +1683,7 @@ static void EditNote(STICKYNOTE *SN)  	if (!SN->Visible)  	{  		SN->Visible = TRUE; -		JustSaveNotes(); +		JustSaveNotesEx();  	}  	SetWindowPos(SN->SNHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); @@ -1772,12 +1744,9 @@ char* GetPreviewString(const char *lpsz)  static void InitListView(HWND AHLV)  { -	LV_ITEM lvTIt; -	int I; +	int I = 0;      char *S;  	char S1[128]; -	STICKYNOTE *pNote; -	TREEELEMENT *TTE;  	char *V = Translate("Visible");  	char *T = Translate("Top"); @@ -1785,13 +1754,12 @@ static void InitListView(HWND AHLV)  	ListView_SetHoverTime(AHLV,700);  	ListView_SetExtendedListViewStyle(AHLV,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_TRACKSELECT);  	ListView_DeleteAllItems(AHLV); - -	I = 0; -	TTE = g_Stickies; -	while (TTE) +	 +	for (TREEELEMENT *TTE = g_Stickies; TTE; TTE = (TREEELEMENT*)TTE->next)  	{ -		pNote = (STICKYNOTE*)TTE->ptrdata; +		STICKYNOTE *pNote = (STICKYNOTE*)TTE->ptrdata; +		LV_ITEM lvTIt;  		lvTIt.mask = LVIF_TEXT;  		if (!pNote->CustomTitle || !pNote->title) @@ -1825,7 +1793,6 @@ static void InitListView(HWND AHLV)  		ListView_SetItem(AHLV,&lvTIt);  		I++; -		TTE = (TREEELEMENT*)TTE->next;  	}  	ListView_SetItemState(AHLV,0,LVIS_SELECTED,LVIS_SELECTED); @@ -1869,24 +1836,19 @@ static BOOL DoListContextMenu(HWND AhWnd,WPARAM wParam,LPARAM lParam,STICKYNOTE  } -INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam) +static INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam)  { -    LV_COLUMN lvCol; -    NMLISTVIEW *NM; -    char *S; -    int I; -  	switch (Message)  	{  	case WM_SIZE: -		{ -			OnListResize(Dialog); -			UpdateGeomFromWnd(Dialog, g_notesListGeom, NULL, 0); -			break; -		} +		OnListResize(Dialog); +		UpdateGeomFromWnd(Dialog, g_notesListGeom, NULL, 0); +		break; +  	case WM_MOVE:  		UpdateGeomFromWnd(Dialog, g_notesListGeom, NULL, 0);  		break; +  	case WM_GETMINMAXINFO:  		{  			MINMAXINFO *mm = (MINMAXINFO*)lParam; @@ -1894,21 +1856,20 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  			mm->ptMinTrackSize.y = 300;  		}  		return 0; +  	case WM_RELOAD: -		{ -			SetDlgItemText(Dialog,IDC_REMINDERDATA,""); -			InitListView(GetDlgItem(Dialog,IDC_LISTREMINDERS)); -			return TRUE; -		} +		SetDlgItemText(Dialog,IDC_REMINDERDATA,""); +		InitListView(GetDlgItem(Dialog,IDC_LISTREMINDERS)); +		return TRUE; +  	case WM_CONTEXTMENU:  		{ -			HWND H;  			STICKYNOTE *pNote = NULL; -			H = GetDlgItem(Dialog,IDC_LISTREMINDERS); +			HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);  			if ( ListView_GetSelectedCount(H) )  			{ -				I = ListView_GetSelectionMark(H); +				int I = ListView_GetSelectionMark(H);  				if (I != -1)  				{  					pNote = (STICKYNOTE*)TreeGetAt(g_Stickies, I); @@ -1919,20 +1880,23 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  				return TRUE;  		}  		break; +  	case WM_INITDIALOG: -		{ -			Window_SetIcon_IcoLib(Dialog, iconList[13].hIcolib); +		Window_SetIcon_IcoLib(Dialog, iconList[13].hIcolib); -			SetWindowText(Dialog, LPGEN("Notes")); +		SetWindowText(Dialog, LPGEN("Notes")); -			TranslateDialogDefault(Dialog); +		TranslateDialogDefault(Dialog); -			SetDlgItemText(Dialog, IDC_REMINDERDATA, ""); +		SetDlgItemText(Dialog, IDC_REMINDERDATA, ""); +		{  			HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS); + +			LV_COLUMN lvCol;  			lvCol.mask = LVCF_TEXT | LVCF_WIDTH; -			S = Translate("Note text"); +			char *S = Translate("Note text");  			lvCol.pszText = S;  			lvCol.cx = g_notesListColGeom[3];  			ListView_InsertColumn(H,0,&lvCol); @@ -1970,8 +1934,9 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  				wp.rcNormalPosition.bottom = g_notesListGeom[3] + g_notesListGeom[1];  				SetWindowPlacement(Dialog, &wp);  			} -			return TRUE;  		} +		return TRUE; +  	case WM_CLOSE:  		DestroyWindow(Dialog);  		ListNotesVisible = FALSE; @@ -1986,23 +1951,21 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  		{  			if (wParam == IDC_LISTREMINDERS)  			{ -				NM = (NMLISTVIEW *)lParam; +				LPNMLISTVIEW NM = (LPNMLISTVIEW)lParam;  				switch (NM->hdr.code)  				{  				case LVN_ITEMCHANGED:  					{ -						S = ((STICKYNOTE*)TreeGetAt(g_Stickies,NM->iItem))->data; +						char *S = ((STICKYNOTE*)TreeGetAt(g_Stickies,NM->iItem))->data;  					    SetDlgItemText(Dialog,IDC_REMINDERDATA,S);  					}  					break;  				case NM_DBLCLK:  					{ -						HWND H; - -						H = GetDlgItem(Dialog,IDC_LISTREMINDERS); +						HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);  						if ( ListView_GetSelectedCount(H) )  						{ -							I = ListView_GetSelectionMark(H); +							int I = ListView_GetSelectionMark(H);  							if (I != -1)  							{  								EditNote((STICKYNOTE *)TreeGetAt(g_Stickies, I)); @@ -2014,7 +1977,7 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  			}  			else if (wParam == IDC_LISTREMINDERS_HEADER)  			{ -				NMHEADER *NM = (NMHEADER*)lParam; +				LPNMHEADER NM = (LPNMHEADER)lParam;  				switch (NM->hdr.code)  				{  				case HDN_ENDTRACK: @@ -2024,18 +1987,17 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  			}  		}  		break; +  	case WM_COMMAND:  		{  			switch(LOWORD(wParam))  			{  			case ID_CONTEXTMENUNOTELISTVIEW_EDITNOTE:  				{ -					HWND H; - -					H = GetDlgItem(Dialog,IDC_LISTREMINDERS); +					HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);  					if ( ListView_GetSelectedCount(H) )  					{ -						I = ListView_GetSelectionMark(H); +						int I = ListView_GetSelectionMark(H);  						if (I != -1)  						{  							EditNote((STICKYNOTE*)TreeGetAt(g_Stickies, I)); @@ -2045,66 +2007,58 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  				return TRUE;  			case ID_CONTEXTMENUNOTELISTVIEW_TOGGLEVISIBILITY:  				{ -					HWND H; - -					H = GetDlgItem(Dialog,IDC_LISTREMINDERS); +					HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);  					if ( ListView_GetSelectedCount(H) )  					{ -						I = ListView_GetSelectionMark(H); +						int I = ListView_GetSelectionMark(H);  						if (I != -1)  						{  							STICKYNOTE *SN = (STICKYNOTE*)TreeGetAt(g_Stickies, I);  							SN->Visible = !SN->Visible;  							ShowWindow(SN->SNHwnd,SN->Visible?SW_SHOWNA:SW_HIDE); -							JustSaveNotes(); +							JustSaveNotesEx();  						}  					}  				}  				return TRUE;  			case IDM_TOGGLEONTOP:  				{ -					HWND H; - -					H = GetDlgItem(Dialog,IDC_LISTREMINDERS); +					HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);  					if ( ListView_GetSelectedCount(H) )  					{ -						I = ListView_GetSelectionMark(H); +						int I = ListView_GetSelectionMark(H);  						if (I != -1)  						{  							STICKYNOTE *SN = (STICKYNOTE*)TreeGetAt(g_Stickies,I);  							SN->OnTop = !SN->OnTop;  							SetWindowPos(SN->SNHwnd, SN->OnTop ? HWND_TOPMOST : HWND_NOTOPMOST, 0,0,0,0, SWP_SHOWWINDOW|SWP_NOMOVE|SWP_NOSIZE);  							RedrawWindow(SN->SNHwnd, NULL, NULL, RDW_FRAME|RDW_INVALIDATE|RDW_UPDATENOW); -							JustSaveNotes(); +							JustSaveNotesEx();  						}  					}  				}  				return TRUE; +  			case IDC_CLOSE: -				{ -					DestroyWindow(Dialog); -					ListNotesVisible = FALSE; -					return TRUE; -				} +				DestroyWindow(Dialog); +				ListNotesVisible = FALSE; +				return TRUE; +  			case ID_CONTEXTMENUNOTEPOPUP_NEWNOTE:  			case IDC_ADDNEWREMINDER: -				{ -					PluginMenuCommandAddNew(0,0); -					return TRUE; -				} +				PluginMenuCommandAddNew(0,0); +				return TRUE; +  			case ID_CONTEXTMENUNOTELISTVIEW_DELETEALLNOTES: -				{ -					PluginMenuCommandDeleteAll(0,0); -					return TRUE; -				} +				PluginMenuCommandDeleteAll(0,0); +				return TRUE; +  			case IDM_REMOVENOTE:  				{ -					HWND H; - -					H = GetDlgItem(Dialog,IDC_LISTREMINDERS); +					HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);  					if ( ListView_GetSelectedCount(H) )  					{ -						I = ListView_GetSelectionMark(H); +						int I = ListView_GetSelectionMark(H);  						if (I != -1)  						{  							OnDeleteNote(Dialog, (STICKYNOTE*)TreeGetAt(g_Stickies, I)); @@ -2113,17 +2067,32 @@ INT_PTR CALLBACK DlgProcViewNotes(HWND Dialog,UINT Message,WPARAM wParam,LPARAM  				}  				return TRUE;  			case ID_CONTEXTMENUNOTELISTVIEW_SHOW: -				{ -					ShowHideNotes(); -					return TRUE; -				} +				ShowHideNotes(); +				return TRUE; +  			case ID_CONTEXTMENUNOTEPOPUP_BRINGALLTOTOP: -				{ -					BringAllNotesToFront(NULL); -					return TRUE; -				} +				BringAllNotesToFront(NULL); +				return TRUE; +  			}  		}  	}  	return FALSE;  } + + +///////////////////////////////////////////////////////////////////// +// Notes List Dialog (uses same dialog template as reminder list) + +void ListNotes(void) +{ +	if (!ListNotesVisible) +	{ +		CreateDialog(hinstance, MAKEINTRESOURCE(IDD_LISTREMINDERS), 0, DlgProcViewNotes); +		ListNotesVisible = TRUE; +	} +	else +	{ +		BringWindowToTop(LV); +	} +} diff --git a/plugins/NotesAndReminders/src/options.cpp b/plugins/NotesAndReminders/src/options.cpp index fea1ee5f5c..560cf9e2bf 100644 --- a/plugins/NotesAndReminders/src/options.cpp +++ b/plugins/NotesAndReminders/src/options.cpp @@ -154,7 +154,7 @@ static BYTE MsgDlgGetCPDefaultCharset()  	}
  }
 -static int CALLBACK EnumFontFamExProc(const LOGFONT *lpelfe, const TEXTMETRIC *lpntme, DWORD FontType, LPARAM lParam)
 +static int CALLBACK EnumFontFamExProc(const LOGFONT *, const TEXTMETRIC *, DWORD, LPARAM lParam)
  {
  	*(int*)lParam = 1;
  	return 0;
 @@ -200,7 +200,7 @@ static void InitFonts()  }
 -static int FS_FontsChanged(WPARAM wParam, LPARAM lParam)
 +static int FS_FontsChanged(WPARAM, LPARAM)
  {
  	InitFonts();
 @@ -210,7 +210,7 @@ static int FS_FontsChanged(WPARAM wParam, LPARAM lParam)  	return 0;
  }
 -static int FS_ColorChanged(WPARAM wParam, LPARAM lParam)
 +static int FS_ColorChanged(WPARAM, LPARAM)
  {
  	LoadNRFont(NR_FONTID_CAPTION, &lfCaption, (COLORREF*)&CaptionFontColor);
  	LoadNRFont(NR_FONTID_BODY, &lfBody, (COLORREF*)&BodyFontColor);
 @@ -328,58 +328,52 @@ static void TrimString(char *s)  INT_PTR CALLBACK DlgProcOptions(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
  {
 -	BOOL LB;
 -	WORD SzT;
 -	void *P;
 -	int i;
 -
  	switch (message) {
  	case WM_INITDIALOG:
 -		{
 -			TranslateDialogDefault(hdlg);
 -			SendDlgItemMessage(hdlg, IDC_SLIDER_TRANSPARENCY, TBM_SETRANGE, TRUE, MAKELONG(0, 255 - MIN_ALPHA));
 -			SendDlgItemMessage(hdlg, IDC_SLIDER_TRANSPARENCY, TBM_SETPOS, TRUE, 255 - g_Transparency);
 -
 -			CheckDlgButton(hdlg, IDC_CHECK_HIDENOTES, !g_ShowNotesAtStart ? BST_CHECKED : BST_UNCHECKED);
 -			CheckDlgButton(hdlg, IDC_CHECK_MENUS, g_AddContListMI ? BST_CHECKED : BST_UNCHECKED);
 -			CheckDlgButton(hdlg, IDC_CHECK_BUTTONS, g_ShowNoteButtons ? BST_CHECKED : BST_UNCHECKED);
 -			CheckDlgButton(hdlg, IDC_CHECK_SCROLLBARS, g_ShowScrollbar ? BST_CHECKED : BST_UNCHECKED);
 -			CheckDlgButton(hdlg, IDC_CHECK_CLOSE, g_CloseAfterAddReminder ? BST_CHECKED : BST_UNCHECKED);
 -			CheckDlgButton(hdlg, IDC_CHECK_MSI, !g_UseDefaultPlaySound ? BST_CHECKED : BST_UNCHECKED);
 -			SetDlgItemInt(hdlg, IDC_EDIT_WIDTH, g_NoteWidth, FALSE);
 -			SetDlgItemInt(hdlg, IDC_EDIT_HEIGHT, g_NoteHeight, FALSE);
 -
 -			SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_RESETCONTENT, 0, 0);
 -			SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_RESETCONTENT, 0, 0);
 -			for (i = 0; i < _countof(dateFormats); i++)
 -				SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_ADDSTRING, 0, (LPARAM)dateFormats[i].lpszUI);
 -			for (i = 0; i < _countof(timeFormats); i++)
 -				SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_ADDSTRING, 0, (LPARAM)timeFormats[i].lpszUI);
 -			SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_ADDSTRING, 0, (LPARAM)Translate("None"));
 -			SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_ADDSTRING, 0, (LPARAM)Translate("None"));
 +		TranslateDialogDefault(hdlg);
 +		SendDlgItemMessage(hdlg, IDC_SLIDER_TRANSPARENCY, TBM_SETRANGE, TRUE, MAKELONG(0, 255 - MIN_ALPHA));
 +		SendDlgItemMessage(hdlg, IDC_SLIDER_TRANSPARENCY, TBM_SETPOS, TRUE, 255 - g_Transparency);
 +
 +		CheckDlgButton(hdlg, IDC_CHECK_HIDENOTES, !g_ShowNotesAtStart ? BST_CHECKED : BST_UNCHECKED);
 +		CheckDlgButton(hdlg, IDC_CHECK_MENUS, g_AddContListMI ? BST_CHECKED : BST_UNCHECKED);
 +		CheckDlgButton(hdlg, IDC_CHECK_BUTTONS, g_ShowNoteButtons ? BST_CHECKED : BST_UNCHECKED);
 +		CheckDlgButton(hdlg, IDC_CHECK_SCROLLBARS, g_ShowScrollbar ? BST_CHECKED : BST_UNCHECKED);
 +		CheckDlgButton(hdlg, IDC_CHECK_CLOSE, g_CloseAfterAddReminder ? BST_CHECKED : BST_UNCHECKED);
 +		CheckDlgButton(hdlg, IDC_CHECK_MSI, !g_UseDefaultPlaySound ? BST_CHECKED : BST_UNCHECKED);
 +		SetDlgItemInt(hdlg, IDC_EDIT_WIDTH, g_NoteWidth, FALSE);
 +		SetDlgItemInt(hdlg, IDC_EDIT_HEIGHT, g_NoteHeight, FALSE);
 +
 +		SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_RESETCONTENT, 0, 0);
 +		SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_RESETCONTENT, 0, 0);
 +		for (int i = 0; i < _countof(dateFormats); i++)
 +			SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_ADDSTRING, 0, (LPARAM)dateFormats[i].lpszUI);
 +		for (int i = 0; i < _countof(timeFormats); i++)
 +			SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_ADDSTRING, 0, (LPARAM)timeFormats[i].lpszUI);
 +		SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_ADDSTRING, 0, (LPARAM)Translate("None"));
 +		SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_ADDSTRING, 0, (LPARAM)Translate("None"));
 +
 +		SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_SETCURSEL, (WPARAM)(g_NoteTitleDate ? g_NoteTitleDate - 1 : SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_GETCOUNT, 0, 0) - 1), 0);
 +		SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_SETCURSEL, (WPARAM)(g_NoteTitleTime ? g_NoteTitleTime - 1 : SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_GETCOUNT, 0, 0) - 1), 0);
 +
 +		if (g_RemindSMS)
 +			SetDlgItemText(hdlg, IDC_EDIT_EMAILSMS, g_RemindSMS);
 +		else
 +			SetDlgItemText(hdlg, IDC_EDIT_EMAILSMS, "");
 +
 +		SetDlgItemText(hdlg, IDC_EDIT_ALTBROWSER, g_lpszAltBrowser ? g_lpszAltBrowser : "");
 +		return TRUE;
 -			SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_SETCURSEL, (WPARAM)(g_NoteTitleDate ? g_NoteTitleDate - 1 : SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_GETCOUNT, 0, 0) - 1), 0);
 -			SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_SETCURSEL, (WPARAM)(g_NoteTitleTime ? g_NoteTitleTime - 1 : SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_GETCOUNT, 0, 0) - 1), 0);
 -
 -			if (g_RemindSMS)
 -				SetDlgItemText(hdlg, IDC_EDIT_EMAILSMS, g_RemindSMS);
 -			else
 -				SetDlgItemText(hdlg, IDC_EDIT_EMAILSMS, "");
 -
 -			SetDlgItemText(hdlg, IDC_EDIT_ALTBROWSER, g_lpszAltBrowser ? g_lpszAltBrowser : "");
 -			return TRUE;
 -		}
  	case WM_HSCROLL:
 -		{
 -			SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0);
 -			return TRUE;
 -		}
 +		SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0);
 +		return TRUE;
 +
  	case WM_NOTIFY:
  		if (((LPNMHDR)lParam)->code == PSN_APPLY) {
  			g_ShowNotesAtStart = !(BOOL)IsDlgButtonChecked(hdlg, IDC_CHECK_HIDENOTES);
  			g_ShowNoteButtons = (BOOL)IsDlgButtonChecked(hdlg, IDC_CHECK_BUTTONS);
  			g_ShowScrollbar = (BOOL)IsDlgButtonChecked(hdlg, IDC_CHECK_SCROLLBARS);
  			g_AddContListMI = (BOOL)IsDlgButtonChecked(hdlg, IDC_CHECK_MENUS);
 +			BOOL LB;
  			g_NoteWidth = GetDlgItemInt(hdlg, IDC_EDIT_WIDTH, &LB, FALSE);
  			g_NoteHeight = GetDlgItemInt(hdlg, IDC_EDIT_HEIGHT, &LB, FALSE);
  			g_Transparency = 255 - SendDlgItemMessage(hdlg, IDC_SLIDER_TRANSPARENCY, TBM_GETPOS, 0, 0);
 @@ -395,12 +389,12 @@ INT_PTR CALLBACK DlgProcOptions(HWND hdlg, UINT message, WPARAM wParam, LPARAM l  				g_NoteHeight = 35;
  				SetDlgItemInt(hdlg, IDC_EDIT_HEIGHT, g_NoteHeight, FALSE);
  			}
 -			SzT = (WORD)SendDlgItemMessage(hdlg, IDC_EDIT_EMAILSMS, WM_GETTEXTLENGTH, 0, 0);
 +			WORD SzT = (WORD)SendDlgItemMessage(hdlg, IDC_EDIT_EMAILSMS, WM_GETTEXTLENGTH, 0, 0);
  			if (SzT != 0) {
  				g_RemindSMS = (char*)realloc(g_RemindSMS, SzT + 1);
  				GetDlgItemText(hdlg, IDC_EDIT_EMAILSMS, g_RemindSMS, SzT + 1);
  			}
 -			P = g_RemindSMS;
 +			char *P = g_RemindSMS;
  			db_set_blob(0, MODULENAME, "RemindEmail", P, SzT);
  			SzT = (WORD)SendDlgItemMessage(hdlg, IDC_EDIT_ALTBROWSER, WM_GETTEXTLENGTH, 0, 0);
 @@ -439,6 +433,7 @@ INT_PTR CALLBACK DlgProcOptions(HWND hdlg, UINT message, WPARAM wParam, LPARAM l  			return TRUE;
  		}
  		break;
 +
  	case WM_COMMAND:
  		switch (LOWORD(wParam)) {
  		case IDC_BTN_BROWSEBROWSER:
 @@ -463,40 +458,40 @@ INT_PTR CALLBACK DlgProcOptions(HWND hdlg, UINT message, WPARAM wParam, LPARAM l  				}
  			}
  			break;
 +
  		case IDC_BUTTON_RESET:
 -			{
 -				SAFE_FREE((void**)&g_RemindSMS);
 -				SetDlgItemText(hdlg, IDC_EDIT_EMAILSMS, "");
 -				if (g_lpszAltBrowser) {
 -					mir_free(g_lpszAltBrowser);
 -					g_lpszAltBrowser = NULL;
 -				}
 -				SetDlgItemText(hdlg, IDC_EDIT_ALTBROWSER, "");
 -				g_ShowNotesAtStart = TRUE;
 -				g_AddContListMI = TRUE;
 -				g_ShowScrollbar = TRUE;
 -				g_ShowNoteButtons = TRUE;
 -				g_NoteTitleDate = 1;
 -				g_NoteTitleTime = 1;
 -				g_CloseAfterAddReminder = TRUE;
 -				g_UseDefaultPlaySound = FALSE;
 -				CheckDlgButton(hdlg, IDC_CHECK_HIDENOTES, !g_ShowNotesAtStart ? BST_CHECKED : BST_UNCHECKED);
 -				CheckDlgButton(hdlg, IDC_CHECK_MENUS, g_AddContListMI ? BST_CHECKED : BST_UNCHECKED);
 -				CheckDlgButton(hdlg, IDC_CHECK_SCROLLBARS, g_ShowScrollbar ? BST_CHECKED : BST_UNCHECKED);
 -				CheckDlgButton(hdlg, IDC_CHECK_BUTTONS, g_ShowNoteButtons ? BST_CHECKED : BST_UNCHECKED);
 -				CheckDlgButton(hdlg, IDC_CHECK_CLOSE, g_CloseAfterAddReminder ? BST_CHECKED : BST_UNCHECKED);
 -				CheckDlgButton(hdlg, IDC_CHECK_MSI, !g_UseDefaultPlaySound ? BST_CHECKED : BST_UNCHECKED);
 -				SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_SETCURSEL, (WPARAM)(g_NoteTitleDate - 1), 0);
 -				SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_SETCURSEL, (WPARAM)(g_NoteTitleTime - 1), 0);
 -				g_NoteWidth = 179;
 -				g_NoteHeight = 35;
 -				SetDlgItemInt(hdlg, IDC_EDIT_WIDTH, g_NoteWidth, FALSE);
 -				SetDlgItemInt(hdlg, IDC_EDIT_HEIGHT, g_NoteHeight, FALSE);
 -				g_Transparency = 255;
 -				SendDlgItemMessage(hdlg, IDC_SLIDER_TRANSPARENCY, TBM_SETPOS, TRUE, 0);
 -				SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0); // JK optim
 -				return TRUE;
 +			SAFE_FREE((void**)&g_RemindSMS);
 +			SetDlgItemText(hdlg, IDC_EDIT_EMAILSMS, "");
 +			if (g_lpszAltBrowser) {
 +				mir_free(g_lpszAltBrowser);
 +				g_lpszAltBrowser = NULL;
  			}
 +			SetDlgItemText(hdlg, IDC_EDIT_ALTBROWSER, "");
 +			g_ShowNotesAtStart = TRUE;
 +			g_AddContListMI = TRUE;
 +			g_ShowScrollbar = TRUE;
 +			g_ShowNoteButtons = TRUE;
 +			g_NoteTitleDate = 1;
 +			g_NoteTitleTime = 1;
 +			g_CloseAfterAddReminder = TRUE;
 +			g_UseDefaultPlaySound = FALSE;
 +			CheckDlgButton(hdlg, IDC_CHECK_HIDENOTES, !g_ShowNotesAtStart ? BST_CHECKED : BST_UNCHECKED);
 +			CheckDlgButton(hdlg, IDC_CHECK_MENUS, g_AddContListMI ? BST_CHECKED : BST_UNCHECKED);
 +			CheckDlgButton(hdlg, IDC_CHECK_SCROLLBARS, g_ShowScrollbar ? BST_CHECKED : BST_UNCHECKED);
 +			CheckDlgButton(hdlg, IDC_CHECK_BUTTONS, g_ShowNoteButtons ? BST_CHECKED : BST_UNCHECKED);
 +			CheckDlgButton(hdlg, IDC_CHECK_CLOSE, g_CloseAfterAddReminder ? BST_CHECKED : BST_UNCHECKED);
 +			CheckDlgButton(hdlg, IDC_CHECK_MSI, !g_UseDefaultPlaySound ? BST_CHECKED : BST_UNCHECKED);
 +			SendDlgItemMessage(hdlg, IDC_COMBODATE, CB_SETCURSEL, (WPARAM)(g_NoteTitleDate - 1), 0);
 +			SendDlgItemMessage(hdlg, IDC_COMBOTIME, CB_SETCURSEL, (WPARAM)(g_NoteTitleTime - 1), 0);
 +			g_NoteWidth = 179;
 +			g_NoteHeight = 35;
 +			SetDlgItemInt(hdlg, IDC_EDIT_WIDTH, g_NoteWidth, FALSE);
 +			SetDlgItemInt(hdlg, IDC_EDIT_HEIGHT, g_NoteHeight, FALSE);
 +			g_Transparency = 255;
 +			SendDlgItemMessage(hdlg, IDC_SLIDER_TRANSPARENCY, TBM_SETPOS, TRUE, 0);
 +			SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0); // JK optim
 +			return TRUE;
 +
  		case IDC_EDIT_ALTBROWSER:
  		case IDC_EDIT_EMAILSMS:
  		case IDC_EDIT_WIDTH:
 @@ -504,11 +499,13 @@ INT_PTR CALLBACK DlgProcOptions(HWND hdlg, UINT message, WPARAM wParam, LPARAM l  			if (HIWORD(wParam) == EN_CHANGE && (HWND)lParam == GetFocus())
  				SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0);
  			break;
 +
  		case IDC_COMBODATE:
  		case IDC_COMBOTIME:
  			if (HIWORD(wParam) == CBN_SELCHANGE)
  				SendMessage(GetParent(hdlg), PSM_CHANGED, 0, 0);
  			break;
 +
  		case IDC_CHECK_SCROLLBARS:
  		case IDC_CHECK_BUTTONS:
  		case IDC_CHECK_HIDENOTES:
 @@ -526,9 +523,8 @@ INT_PTR CALLBACK DlgProcOptions(HWND hdlg, UINT message, WPARAM wParam, LPARAM l  void InitSettings(void)
  {
  	void *P = NULL;
 -	short Sz1;
 +	short Sz1 = MAX_PATH;
 -	Sz1 = MAX_PATH; P = NULL;
  	ReadSettingBlob(0, MODULENAME, "RemindEmail", (WORD*)&Sz1, &P);
  	if (!(Sz1 && P))
  		g_RemindSMS = NULL;
 diff --git a/plugins/NotesAndReminders/src/reminders.cpp b/plugins/NotesAndReminders/src/reminders.cpp index f3baa1e43a..5b43d7c7d9 100644 --- a/plugins/NotesAndReminders/src/reminders.cpp +++ b/plugins/NotesAndReminders/src/reminders.cpp @@ -52,13 +52,6 @@ static SOCKET S;  int WS_Send(SOCKET s,char *data,int datalen);
  unsigned long WS_ResolveName(char *name,WORD *port,int defaultPort);
 -INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,
 -								   WPARAM wParam,LPARAM lParam);
 -INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,
 -								LPARAM lParam);
 -INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,
 -								  LPARAM lParam);
 -
  void Send(char *user, char *host, char *Msg, char* server);
  char* GetPreviewString(const char *lpsz);
 @@ -156,13 +149,10 @@ try_next:;  static REMINDERDATA* FindReminder(DWORD uid)
  {
 -	TREEELEMENT *TTE;
 -
  	if (!RemindersList)
  		return NULL;
 -	TTE = RemindersList;
 -	while (TTE)
 +	for (TREEELEMENT *TTE = RemindersList; TTE; TTE = (TREEELEMENT *) TTE->next)
  	{
  		REMINDERDATA *pReminder = (REMINDERDATA*)TTE->ptrdata;
 @@ -170,8 +160,6 @@ static REMINDERDATA* FindReminder(DWORD uid)  		{
  			return pReminder;
  		}
 -
 -		TTE = (TREEELEMENT*)TTE->next;
  	}
  	return NULL;
 @@ -200,11 +188,10 @@ static void RemoveReminderSystemEvent(REMINDERDATA *p)  void PurgeReminders(void)
  {
 -	int ReminderCount,I;
  	char ValueName[32];
 -	ReminderCount = db_get_dw(0,MODULENAME,"RemindersData",0);
 -	for(I = 0;I < ReminderCount;I++)
 +	int ReminderCount = db_get_dw(0,MODULENAME,"RemindersData",0);
 +	for(int I = 0;I < ReminderCount;I++)
  	{
  		mir_snprintf(ValueName, "RemindersData%d", I);
  		db_unset(0, MODULENAME, ValueName);
 @@ -213,12 +200,10 @@ void PurgeReminders(void)  void JustSaveReminders(void)
  {
 -	TREEELEMENT *TTE;
 -	int I, n, l;
 +	int I = 0, n, l;
  	char *tmpReminder = NULL,*Value;
  	char ValueName[32];
  	int ReminderCount;
 -	REMINDERDATA *pReminder;
  	const int OldReminderCount = db_get_dw(0, MODULENAME, "RemindersData", 0);
 @@ -226,9 +211,9 @@ void JustSaveReminders(void)  	db_set_dw(0,MODULENAME, "RemindersData", ReminderCount);
 -	for (TTE = RemindersList, I = 0; TTE; TTE = (TREEELEMENT*)TTE->next, I++)
 +	for (TREEELEMENT *TTE = RemindersList; TTE; TTE = (TREEELEMENT *) TTE->next, I++)
  	{
 -		pReminder = (REMINDERDATA*)TTE->ptrdata;
 +		REMINDERDATA *pReminder = (REMINDERDATA *) TTE->ptrdata;
  		if (pReminder->Reminder && mir_strlen(pReminder->Reminder))
  			tmpReminder = pReminder->Reminder;
  		else
 @@ -295,16 +280,15 @@ void JustSaveReminders(void)  void LoadReminders(void)
  {
 -	int I,RemindersCount;
  	char *Value;
  	WORD Size;
  	char ValueName[32];
  	BOOL GenerateUids = FALSE;
  	RemindersList = NULL;
 -	RemindersCount = db_get_dw(0, MODULENAME, "RemindersData", 0);
 +	int RemindersCount = db_get_dw(0, MODULENAME, "RemindersData", 0);
 -	for (I = 0; I < RemindersCount; I++)
 +	for (int I = 0; I < RemindersCount; I++)
  	{
  		Size = 65535;
  		Value = NULL;
 @@ -436,53 +420,18 @@ skip:;  	// generate UIDs if there are any items with an invalid UID
  	if (GenerateUids && RemindersList)
  	{
 -		TREEELEMENT *TTE;
 -
 -		TTE = RemindersList;
 -		while (TTE)
 +		for (TREEELEMENT *TTE = RemindersList; TTE; TTE = (TREEELEMENT*)TTE->next)
  		{
  			REMINDERDATA *pReminder = (REMINDERDATA*)TTE->ptrdata;
  			if (!pReminder->uid)
  				pReminder->uid = CreateUid();
 -
 -			TTE = (TREEELEMENT*)TTE->next;
  		}
  		JustSaveReminders();
  	}
  }
 -void NewReminder(void)
 -{
 -	if (!NewReminderVisible)
 -	{
 -		NewReminderVisible = TRUE;
 -		CreateDialog(hinstance, MAKEINTRESOURCE(IDD_ADDREMINDER), 0, DlgProcNewReminder);
 -	}
 -}
 -
 -void EditReminder(REMINDERDATA *p)
 -{
 -	if (!p)
 -		return;
 -
 -	if (!NewReminderVisible && !p->SystemEventQueued)
 -	{
 -		if (!p->RemVisible)
 -		{
 -			p->RemVisible = TRUE;
 -			NewReminderVisible = 2;
 -			pEditReminder = p;
 -			CreateDialog(hinstance, MAKEINTRESOURCE(IDD_ADDREMINDER), 0, DlgProcNewReminder);
 -		}
 -		else
 -		{
 -			BringWindowToTop(p->handle);
 -		}
 -	}
 -}
 -
  static void DeleteReminder(REMINDERDATA *p)
  {
  	if (!p)
 @@ -510,11 +459,9 @@ void CloseReminderList()  static void PurgeReminderTree()
  {
 -	REMINDERDATA *pt;
 -
  	while (RemindersList) // empty whole tree
  	{
 -		pt = (REMINDERDATA*)RemindersList->ptrdata;
 +		REMINDERDATA *pt = (REMINDERDATA*)RemindersList->ptrdata;
  		if (pt->handle) DestroyWindow(pt->handle);
  		DeleteReminder(pt);
  	}
 @@ -534,19 +481,6 @@ void DeleteReminders(void)  	PurgeReminderTree();
  }
 -void ListReminders(void)
 -{
 -	if (!ListReminderVisible)
 -	{
 -		CreateDialog(hinstance, MAKEINTRESOURCE(IDD_LISTREMINDERS), 0, DlgProcViewReminders);
 -		ListReminderVisible = TRUE;
 -	}
 -	else
 -	{
 -		BringWindowToTop(LV);
 -	}
 -}
 -
  void GetTriggerTimeString(const ULARGE_INTEGER *When, char *s, UINT strSize, BOOL bUtc)
  {
 @@ -572,44 +506,6 @@ void GetTriggerTimeString(const ULARGE_INTEGER *When, char *s, UINT strSize, BOO  	else mir_snprintf(s, strSize, "%d-%02d-%02d %02d:%02d", tm.wYear, tm.wMonth, tm.wDay, tm.wHour, tm.wMinute);
  }
 -
 -INT_PTR OpenTriggeredReminder(WPARAM w, LPARAM l)
 -{
 -	if (!l)
 -		return 0;
 -
 -	l = ((CLISTEVENT*)l)->lParam;
 -
 -	REMINDERDATA *pReminder = (REMINDERDATA*)FindReminder((DWORD)l);
 -	if (!pReminder || !pReminder->SystemEventQueued)
 -		return 0;
 -
 -	pReminder->SystemEventQueued = FALSE;
 -	if (QueuedReminderCount)
 -		QueuedReminderCount--;
 -
 -	{
 -	char S[MAX_PATH];
 -	char S1[128];
 -	HWND H;
 -	GetTriggerTimeString(&pReminder->When, S1, sizeof(S1), TRUE);
 -
 -	pReminder->RemVisible = TRUE;
 -
 -	pReminder->handle = H = CreateDialog(hinstance, MAKEINTRESOURCE(IDD_NOTIFYREMINDER), 0, DlgProcNotifyReminder);
 -
 -	mir_snprintf(S, "%s! - %s", Translate("Reminder"), S1);
 -	SetWindowText(H, S);
 -
 -	if (pReminder->Reminder)
 -		SetDlgItemText(H, IDC_REMDATA, pReminder->Reminder);
 -
 -	BringWindowToTop(H);
 -	}
 -
 -	return 0;
 -}
 -
  static void SkinPlaySoundPoly(LPCSTR pszSoundName)
  {
  	if (g_UseDefaultPlaySound)
 @@ -723,11 +619,8 @@ BOOL CheckRemindersAndStart(void)  	// returns TRUE if there are any triggered reminder with SystemEventQueued, this will shorten the update interval
  	// allowing sound repeats with shorter intervals
 -	TREEELEMENT *TTE;
  	ULARGE_INTEGER curT;
 -	BOOL bHasPlayedSound;
  	BOOL bResult;
 -	BOOL bHasQueuedReminders;
  	if (!RemindersList)
  		return FALSE;
 @@ -750,17 +643,17 @@ BOOL CheckRemindersAndStart(void)  	bResult = FALSE;
  	// var used to avoid playing multiple alarm sounds during a single update
 -	bHasPlayedSound = FALSE;
 +	BOOL bHasPlayedSound = FALSE;
  	// if there are queued (triggered) reminders then iterate through entire list, becaue of WM_TIMECHANGE events
  	// and for example daylight saving changes it's possible for an already triggered event to end up with When>curT
 -	bHasQueuedReminders = (QueuedReminderCount != 0);
 +	BOOL bHasQueuedReminders = (QueuedReminderCount != 0);
  	// allthough count should always be correct, it's fool proof to just count them again in the loop below
  	QueuedReminderCount = 0;
 -	TTE = RemindersList;
 -	while (TTE && (bHasQueuedReminders || ((REMINDERDATA*)TTE->ptrdata)->When.QuadPart <= curT.QuadPart))
 +	
 +	for(TREEELEMENT *TTE = RemindersList;TTE && (bHasQueuedReminders || ((REMINDERDATA*)TTE->ptrdata)->When.QuadPart <= curT.QuadPart); TTE = (TREEELEMENT *)TTE->next)
  	{
  		REMINDERDATA *pReminder = (REMINDERDATA*)TTE->ptrdata;
 @@ -798,8 +691,6 @@ BOOL CheckRemindersAndStart(void)  				}
  			}
  		}
 -
 -		TTE = (TREEELEMENT*)TTE->next;
  	}
  	return bResult;
 @@ -1144,26 +1035,20 @@ static void PopulateTimeCombo(HWND Dialog, UINT nIDTime, BOOL bRelative, const S  static void PopulateTimeOffsetCombo(HWND Dialog, UINT nIDCombo)
  {
 -	int i, n;
 -	LPCSTR lpszMinutes;
 -	LPCSTR lpszHour;
 -	LPCSTR lpszHours;
 -	LPCSTR lpszDay;
 -	LPCSTR lpszDays;
 -	LPCSTR lpszWeek;
 +	int n;
  	char s[MAX_PATH];
  	SendDlgItemMessage(Dialog,nIDCombo,CB_RESETCONTENT,0,0);
 -	lpszMinutes = Translate("Minutes");
 -	lpszHour = Translate("Hour");
 -	lpszHours = Translate("Hours");
 -	lpszDay = Translate("Day");
 -	lpszDays = Translate("Days");
 -	lpszWeek = Translate("Week");
 +	LPCSTR lpszMinutes = Translate("Minutes");
 +	LPCSTR lpszHour = Translate("Hour");
 +	LPCSTR lpszHours = Translate("Hours");
 +	LPCSTR lpszDay = Translate("Day");
 +	LPCSTR lpszDays = Translate("Days");
 +	LPCSTR lpszWeek = Translate("Week");
  	// 5 - 55 minutes (in 5 minute steps)
 -	for (i = 1; i < 12; i++)
 +	for (int i = 1; i < 12; i++)
  	{
  		mir_snprintf(s, "%d %s", i*5, lpszMinutes);
  		n = SendDlgItemMessage(Dialog,nIDCombo,CB_ADDSTRING,0,(LPARAM)s);
 @@ -1176,7 +1061,7 @@ static void PopulateTimeOffsetCombo(HWND Dialog, UINT nIDCombo)  	SendDlgItemMessage(Dialog,nIDCombo,CB_SETITEMDATA, n, 60);
  	// 2, 4, 8 hours
 -	for (i = 2; i <= 8; i+=2)
 +	for (int i = 2; i <= 8; i+=2)
  	{
  		mir_snprintf(s, "%d %s", i, lpszHours);
  		n = SendDlgItemMessage(Dialog,nIDCombo,CB_ADDSTRING,0,(LPARAM)s);
 @@ -1189,7 +1074,7 @@ static void PopulateTimeOffsetCombo(HWND Dialog, UINT nIDCombo)  	SendDlgItemMessage(Dialog,nIDCombo,CB_SETITEMDATA, n, 24*60);
  	// 2-4 days
 -	for (i = 2; i <= 4; i++)
 +	for (int i = 2; i <= 4; i++)
  	{
  		mir_snprintf(s, "%d %s", i, lpszDays);
  		n = SendDlgItemMessage(Dialog,nIDCombo,CB_ADDSTRING,0,(LPARAM)s);
 @@ -1407,7 +1292,6 @@ static BOOL GetTriggerTime(HWND Dialog, UINT nIDTime, UINT nIDRefTime, SYSTEMTIM  {
  	ULARGE_INTEGER li;
  	char buf[32];
 -	int n;
  	int h, m;
  	// get reference (UTC) time from hidden control
 @@ -1416,7 +1300,8 @@ static BOOL GetTriggerTime(HWND Dialog, UINT nIDTime, UINT nIDRefTime, SYSTEMTIM  		li.QuadPart = _strtoui64(buf, NULL, 16);
  	}
 -	if ((n = SendDlgItemMessage(Dialog, nIDTime, CB_GETCURSEL, 0, 0)) != CB_ERR)
 +	int n = SendDlgItemMessage(Dialog, nIDTime, CB_GETCURSEL, 0, 0);
 +	if (n != CB_ERR)
  	{
  		// use preset value
  preset_value:;
 @@ -1535,10 +1420,8 @@ static void OnDateChanged(HWND Dialog, UINT nDateID, UINT nTimeID, UINT nRefTime  }
 -INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam)
 +static INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam)
  {
 -	int I;
 -
  	switch (Message)
  	{
  	case WM_INITDIALOG:
 @@ -1590,39 +1473,40 @@ INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LP  	case WM_NCDESTROY:
  		RemoveProp(GetDlgItem(Dialog, IDC_DATEAGAIN), TEXT("OldWndProc"));
  		return TRUE;
 +
  	case WM_NOTIFY:
 +		if (wParam == IDC_DATEAGAIN)
  		{
 -			if (wParam == IDC_DATEAGAIN)
 -			{
 -				NMLISTVIEW *NM = (NMLISTVIEW*)lParam;
 +			LPNMLISTVIEW NM = (LPNMLISTVIEW)lParam;
 -				switch (NM->hdr.code)
 -				{
 -				case DTN_DATETIMECHANGE:
 -					OnDateChanged(Dialog, IDC_DATEAGAIN, IDC_TIMEAGAIN, IDC_REFTIME);
 -					break;
 -				}
 +			switch (NM->hdr.code)
 +			{
 +			case DTN_DATETIMECHANGE:
 +				OnDateChanged(Dialog, IDC_DATEAGAIN, IDC_TIMEAGAIN, IDC_REFTIME);
 +				break;
  			}
  		}
  		break;
 +
  	case WM_CLOSE:
 +		{
 +			int ReminderCount = TreeGetCount(RemindersList);
 +			for (int I = 0; I < ReminderCount; I++)
  			{
 -				int ReminderCount = TreeGetCount(RemindersList);
 -				for (I = 0; I < ReminderCount; I++)
 -				{
 -					REMINDERDATA *pReminder = (REMINDERDATA*)TreeGetAt(RemindersList, I);
 +				REMINDERDATA *pReminder = (REMINDERDATA*)TreeGetAt(RemindersList, I);
 -					if (pReminder->handle == Dialog)
 -					{
 -						DeleteReminder(pReminder);
 -						JustSaveReminders();
 -						break;
 -					}
 +				if (pReminder->handle == Dialog)
 +				{
 +					DeleteReminder(pReminder);
 +					JustSaveReminders();
 +					break;
  				}
 -				NOTIFY_LIST();
  			}
 -			DestroyWindow(Dialog);
 -			return TRUE;
 +			NOTIFY_LIST();
 +		}
 +		DestroyWindow(Dialog);
 +		return TRUE;
 +
  	case WM_COMMAND:
  		{
  			switch (LOWORD(wParam))
 @@ -1689,27 +1573,25 @@ INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LP  				break;
  			case IDC_AFTER:
 -				{
 -					ShowWindow(GetDlgItem(Dialog, IDC_REMINDAGAININ), SW_SHOW);
 -					ShowWindow(GetDlgItem(Dialog, IDC_DATEAGAIN), SW_HIDE);
 -					ShowWindow(GetDlgItem(Dialog, IDC_TIMEAGAIN), SW_HIDE);
 -					ShowWindow(GetDlgItem(Dialog, IDC_STATIC_DATE), SW_HIDE);
 -					ShowWindow(GetDlgItem(Dialog, IDC_STATIC_TIME), SW_HIDE);
 -					return TRUE;
 -				}
 +				ShowWindow(GetDlgItem(Dialog, IDC_REMINDAGAININ), SW_SHOW);
 +				ShowWindow(GetDlgItem(Dialog, IDC_DATEAGAIN), SW_HIDE);
 +				ShowWindow(GetDlgItem(Dialog, IDC_TIMEAGAIN), SW_HIDE);
 +				ShowWindow(GetDlgItem(Dialog, IDC_STATIC_DATE), SW_HIDE);
 +				ShowWindow(GetDlgItem(Dialog, IDC_STATIC_TIME), SW_HIDE);
 +				return TRUE;
 +
  			case IDC_ONDATE:
 -				{
 -					ShowWindow(GetDlgItem(Dialog, IDC_DATEAGAIN), SW_SHOW);
 -					ShowWindow(GetDlgItem(Dialog, IDC_TIMEAGAIN), SW_SHOW);
 -					ShowWindow(GetDlgItem(Dialog, IDC_STATIC_DATE), SW_SHOW);
 -					ShowWindow(GetDlgItem(Dialog, IDC_STATIC_TIME), SW_SHOW);
 -					ShowWindow(GetDlgItem(Dialog, IDC_REMINDAGAININ), SW_HIDE);
 -					return TRUE;
 -				}
 +				ShowWindow(GetDlgItem(Dialog, IDC_DATEAGAIN), SW_SHOW);
 +				ShowWindow(GetDlgItem(Dialog, IDC_TIMEAGAIN), SW_SHOW);
 +				ShowWindow(GetDlgItem(Dialog, IDC_STATIC_DATE), SW_SHOW);
 +				ShowWindow(GetDlgItem(Dialog, IDC_STATIC_TIME), SW_SHOW);
 +				ShowWindow(GetDlgItem(Dialog, IDC_REMINDAGAININ), SW_HIDE);
 +				return TRUE;
 +
  			case IDC_DISMISS:
  				{
  					int ReminderCount = TreeGetCount(RemindersList);
 -					for (I = 0; I < ReminderCount; I++)
 +					for (int I = 0; I < ReminderCount; I++)
  					{
  						REMINDERDATA *pReminder = (REMINDERDATA*)TreeGetAt(RemindersList, I);
 @@ -1724,10 +1606,11 @@ INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LP  					DestroyWindow(Dialog);
  					return TRUE;
  				}
 +
  			case IDC_REMINDAGAIN:
  				{
  					int ReminderCount = TreeGetCount(RemindersList);
 -					for (I = 0; I < ReminderCount; I++)
 +					for (int I = 0; I < ReminderCount; I++)
  					{
  						REMINDERDATA *pReminder = (REMINDERDATA*)TreeGetAt(RemindersList, I);
 @@ -1740,12 +1623,11 @@ INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LP  								ULONGLONG TT;
  								SYSTEMTIME tm;
  								ULARGE_INTEGER li;
 -								int n;
  								GetSystemTime(&tm);
  								SYSTEMTIMEtoFILETIME(&tm, (FILETIME*)&li);
 -								n = SendDlgItemMessage(Dialog, IDC_REMINDAGAININ, CB_GETCURSEL, 0, 0);
 +								int n = SendDlgItemMessage(Dialog, IDC_REMINDAGAININ, CB_GETCURSEL, 0, 0);
  								if (n != CB_ERR)
  								{
  									TT = SendDlgItemMessage(Dialog, IDC_REMINDAGAININ, CB_GETITEMDATA, n, 0) * 60;
 @@ -1837,10 +1719,12 @@ INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LP  					DestroyWindow(Dialog);
  					return TRUE;
  				}
 +
  			case IDC_NONE:
 -				{// create note from remainder
 +				{
 +				// create note from remainder
  					int ReminderCount = TreeGetCount(RemindersList);
 -					for (I = 0; I < ReminderCount; I++)
 +					for (int I = 0; I < ReminderCount; I++)
  					{
  						REMINDERDATA *pReminder = (REMINDERDATA*)TreeGetAt(RemindersList, I);
 @@ -1868,7 +1752,7 @@ INT_PTR CALLBACK DlgProcNotifyReminder(HWND Dialog,UINT Message,WPARAM wParam,LP  	return FALSE;
  }
 -INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam)
 +static INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam)
  {
  	HICON hIcon = NULL;
  	switch (Message)
 @@ -1922,12 +1806,11 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  			if (NewReminderVisible == 2)
  			{
 -				int n;
  				char s[32];
  				mir_snprintf(s, "%02d:%02d", (UINT)tm.wHour, (UINT)tm.wMinute);
  				// search for preset first
 -				n = SendDlgItemMessage(Dialog, IDC_TIME, CB_FINDSTRING, (WPARAM)-1, (LPARAM)s);
 +				int n = SendDlgItemMessage(Dialog, IDC_TIME, CB_FINDSTRING, (WPARAM)-1, (LPARAM)s);
  				if (n != CB_ERR)
  					SendDlgItemMessage(Dialog, IDC_TIME, CB_SETCURSEL, n, 0);
  				else
 @@ -1943,13 +1826,12 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  			// populate sound repeat combo
  			{
  				char s[64];
 -				int n;
  				LPCSTR lpszEvery = Translate("Every");
  				LPCSTR lpszSeconds = Translate("Seconds");
  				// NOTE: use multiples of REMINDER_UPDATE_INTERVAL_SHORT (currently 5 seconds)
 -				n = SendDlgItemMessage(Dialog, IDC_COMBO_REPEATSND, CB_ADDSTRING, 0, (LPARAM)Translate("Never"));
 +				int n = SendDlgItemMessage(Dialog, IDC_COMBO_REPEATSND, CB_ADDSTRING, 0, (LPARAM)Translate("Never"));
  				SendDlgItemMessage(Dialog,IDC_COMBO_REPEATSND,CB_SETITEMDATA, n, 0);
  				mir_snprintf(s, "%s 5 %s", lpszEvery, lpszSeconds);
 @@ -2001,8 +1883,8 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  				if (NewReminderVisible == 2 && pEditReminder->SoundSel)
  				{
 -					const UINT n = pEditReminder->SoundSel<0 ? 3 : pEditReminder->SoundSel;
 -					SendDlgItemMessage(Dialog,IDC_COMBO_SOUND,CB_SETCURSEL,n,0);
 +					const UINT n2 = pEditReminder->SoundSel<0 ? 3 : pEditReminder->SoundSel;
 +					SendDlgItemMessage(Dialog,IDC_COMBO_SOUND,CB_SETCURSEL,n2,0);
  				}
  				else
  				{
 @@ -2026,35 +1908,35 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  			return FALSE;
  		}
 +
  	case WM_NCDESTROY:
  		RemoveProp(GetDlgItem(Dialog, IDC_DATE), TEXT("OldWndProc"));
  		return TRUE;
 +
  	case WM_CLOSE:
 +		if (NewReminderVisible == 2)
  		{
 -			if (NewReminderVisible == 2)
 -			{
 -				pEditReminder->RemVisible = FALSE;
 -			}
 -			DestroyWindow(Dialog);
 -			NewReminderVisible = FALSE;
 -			pEditReminder = NULL;
 -			return TRUE;
 +			pEditReminder->RemVisible = FALSE;
  		}
 +		DestroyWindow(Dialog);
 +		NewReminderVisible = FALSE;
 +		pEditReminder = NULL;
 +		return TRUE;
 +
  	case WM_NOTIFY:
 +		if (wParam == IDC_DATE)
  		{
 -			if (wParam == IDC_DATE)
 -			{
 -				NMLISTVIEW *NM = (NMLISTVIEW*)lParam;
 +			LPNMLISTVIEW NM = (LPNMLISTVIEW)lParam;
 -				switch (NM->hdr.code)
 -				{
 -				case DTN_DATETIMECHANGE:
 -					OnDateChanged(Dialog, IDC_DATE, IDC_TIME, IDC_REFTIME);
 -					break;
 -				}
 +			switch (NM->hdr.code)
 +			{
 +			case DTN_DATETIMECHANGE:
 +				OnDateChanged(Dialog, IDC_DATE, IDC_TIME, IDC_REFTIME);
 +				break;
  			}
  		}
  		break;
 +
  	case WM_COMMAND:
  		{
  			switch (LOWORD(wParam))
 @@ -2084,6 +1966,7 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  					break;
  				}
  				break;
 +
  			case IDC_COMBO_SOUND:
  				switch (HIWORD(wParam))
  				{
 @@ -2111,42 +1994,38 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  					}
  				}
  				return TRUE;
 +
  			case IDC_CLOSE:
 +				if (NewReminderVisible == 2)
  				{
 -					if (NewReminderVisible == 2)
 -					{
 -						pEditReminder->RemVisible = FALSE;
 -					}
 -					DestroyWindow(Dialog);
 -					NewReminderVisible = FALSE;
 -					pEditReminder = NULL;
 -					return TRUE;
 +					pEditReminder->RemVisible = FALSE;
  				}
 +				DestroyWindow(Dialog);
 +				NewReminderVisible = FALSE;
 +				pEditReminder = NULL;
 +				return TRUE;
 +
  			case IDC_VIEWREMINDERS:
 -				{
 -					ListReminders();
 -					return TRUE;
 -				}
 +				ListReminders();
 +				return TRUE;
 +
  			case IDC_ADDREMINDER:
  				{
 -					char *ReminderText = NULL;
 -					int SzT;
  					SYSTEMTIME Date;
 -					REMINDERDATA* TempRem;
 -					int RepeatSound;
  					SendDlgItemMessage(Dialog,IDC_DATE,DTM_GETSYSTEMTIME,0,(LPARAM)&Date);
  					if ( !GetTriggerTime(Dialog, IDC_TIME, IDC_REFTIME, &Date) )
  						break;
 -					RepeatSound = SendDlgItemMessage(Dialog,IDC_COMBO_REPEATSND,CB_GETCURSEL,0,0);
 +					int RepeatSound = SendDlgItemMessage(Dialog,IDC_COMBO_REPEATSND,CB_GETCURSEL,0,0);
  					if (RepeatSound != CB_ERR)
  						RepeatSound = SendDlgItemMessage(Dialog,IDC_COMBO_REPEATSND,CB_GETITEMDATA,(WPARAM)RepeatSound,0);
  					else
  						RepeatSound = 0;
 -					SzT = SendDlgItemMessage(Dialog,IDC_REMINDER,WM_GETTEXTLENGTH,0,0);
 +					int SzT = SendDlgItemMessage(Dialog,IDC_REMINDER,WM_GETTEXTLENGTH,0,0);
 +					char *ReminderText = NULL;
  					if (SzT)
  					{
  						if (SzT > MAX_REMINDER_LEN) SzT = MAX_REMINDER_LEN;
 @@ -2157,7 +2036,7 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  					if (NewReminderVisible != 2)
  					{
  						// new reminder
 -						TempRem = (REMINDERDATA*)malloc(sizeof(REMINDERDATA));
 +						REMINDERDATA *TempRem = (REMINDERDATA*)malloc(sizeof(REMINDERDATA));
  						TempRem->uid = CreateUid();
  						SYSTEMTIMEtoFILETIME(&Date, (FILETIME*)&TempRem->When);
  						TempRem->Reminder = ReminderText;
 @@ -2199,33 +2078,93 @@ INT_PTR CALLBACK DlgProcNewReminder(HWND Dialog,UINT Message,WPARAM wParam,LPARA  			}
  		}
  	case WM_DESTROY:
 +		IcoLib_ReleaseIcon(hIcon);
 +		break;
 +	}
 +  return FALSE;
 +}
 +
 +
 +INT_PTR OpenTriggeredReminder(WPARAM, LPARAM l)
 +{
 +	if (!l)
 +		return 0;
 +
 +	l = ((CLISTEVENT*)l)->lParam;
 +
 +	REMINDERDATA *pReminder = (REMINDERDATA*)FindReminder((DWORD)l);
 +	if (!pReminder || !pReminder->SystemEventQueued)
 +		return 0;
 +
 +	pReminder->SystemEventQueued = FALSE;
 +	if (QueuedReminderCount)
 +		QueuedReminderCount--;
 +
 +	{
 +		char S1[128], S2[MAX_PATH];
 +		GetTriggerTimeString(&pReminder->When, S1, sizeof(S1), TRUE);
 +
 +		pReminder->RemVisible = TRUE;
 +
 +		HWND H = CreateDialog(hinstance, MAKEINTRESOURCE(IDD_NOTIFYREMINDER), 0, DlgProcNotifyReminder);
 +		pReminder->handle = H;
 +
 +		mir_snprintf(S2, "%s! - %s", Translate("Reminder"), S1);
 +		SetWindowText(H, S2);
 +
 +		if (pReminder->Reminder)
 +			SetDlgItemText(H, IDC_REMDATA, pReminder->Reminder);
 +
 +		BringWindowToTop(H);
 +	}
 +
 +	return 0;
 +}
 +
 +void NewReminder(void)
 +{
 +	if (!NewReminderVisible)
 +	{
 +		NewReminderVisible = TRUE;
 +		CreateDialog(hinstance, MAKEINTRESOURCE(IDD_ADDREMINDER), 0, DlgProcNewReminder);
 +	}
 +}
 +
 +void EditReminder(REMINDERDATA *p)
 +{
 +	if (!p)
 +		return;
 +
 +	if (!NewReminderVisible && !p->SystemEventQueued)
 +	{
 +		if (!p->RemVisible)
  		{
 -			IcoLib_ReleaseIcon(hIcon);
 -			break;
 +			p->RemVisible = TRUE;
 +			NewReminderVisible = 2;
 +			pEditReminder = p;
 +			CreateDialog(hinstance, MAKEINTRESOURCE(IDD_ADDREMINDER), 0, DlgProcNewReminder);
 +		}
 +		else
 +		{
 +			BringWindowToTop(p->handle);
  		}
  	}
 -  return FALSE;
  }
  static void InitListView(HWND AHLV)
  {
 -	LV_ITEM lvTIt;
 -	int I;
 -    char *S;
 +	int I = 0;
  	char S1[128];
 -	REMINDERDATA *pReminder;
 -	TREEELEMENT *TTE;
  	ListView_SetHoverTime(AHLV,700);
  	ListView_SetExtendedListViewStyle(AHLV,LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_TRACKSELECT);
  	ListView_DeleteAllItems(AHLV);
 -
 -	I = 0;
 -	TTE = RemindersList;
 -	while (TTE)
 +	
 +	for (TREEELEMENT *TTE = RemindersList; TTE; TTE = (TREEELEMENT*)TTE->next)
  	{
 -		pReminder = (REMINDERDATA*)TTE->ptrdata;
 +		REMINDERDATA *pReminder = (REMINDERDATA*)TTE->ptrdata;
 +		LV_ITEM lvTIt;
  		lvTIt.mask = LVIF_TEXT;
  		GetTriggerTimeString(&pReminder->When, S1, sizeof(S1), TRUE);
 @@ -2235,14 +2174,13 @@ static void InitListView(HWND AHLV)  		lvTIt.pszText = S1;
  		ListView_InsertItem(AHLV,&lvTIt);
  		lvTIt.mask = LVIF_TEXT;
 -		S = GetPreviewString(pReminder->Reminder);
 +		char *S2 = GetPreviewString(pReminder->Reminder);
  		lvTIt.iItem = I;
  		lvTIt.iSubItem = 1;
 -		lvTIt.pszText = S;
 +		lvTIt.pszText = S2;
  		ListView_SetItem(AHLV,&lvTIt);
  		I++;
 -		TTE = (TREEELEMENT*)TTE->next;
  	}
  	ListView_SetItemState(AHLV,0,LVIS_SELECTED,LVIS_SELECTED);
 @@ -2312,10 +2250,9 @@ void UpdateGeomFromWnd(HWND Dialog, int *geom, int *colgeom, int nCols)  	if (colgeom)
  	{
 -		int i;
  		HWND H = GetDlgItem(Dialog, IDC_LISTREMINDERS);
 -		for (i=0; i<nCols; i++)
 +		for (int i=0; i<nCols; i++)
  		{
  			colgeom[i] = ListView_GetColumnWidth(H, i);
  		}
 @@ -2346,24 +2283,21 @@ static BOOL DoListContextMenu(HWND AhWnd,WPARAM wParam,LPARAM lParam,REMINDERDAT  	return TRUE;
  }
 -INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam)
 +static INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPARAM lParam)
  {
      LV_COLUMN lvCol;
 -    NMLISTVIEW *NM;
 -    char *S;
 -    int I;
  	switch (Message)
  	{
  	case WM_SIZE:
 -		{
 -			OnListResize(Dialog);
 -			UpdateGeomFromWnd(Dialog, g_reminderListGeom, NULL, 0);
 -			break;
 -		}
 +		OnListResize(Dialog);
 +		UpdateGeomFromWnd(Dialog, g_reminderListGeom, NULL, 0);
 +		break;
 +
  	case WM_MOVE:
  		UpdateGeomFromWnd(Dialog, g_reminderListGeom, NULL, 0);
  		break;
 +
  	case WM_GETMINMAXINFO:
  		{
  			MINMAXINFO *mm = (MINMAXINFO*)lParam;
 @@ -2371,21 +2305,20 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  			mm->ptMinTrackSize.y = 300;
  		}
  		return 0;
 +
  	case WM_RELOAD:
 -		{
 -			SetDlgItemText(Dialog, IDC_REMINDERDATA, "");
 -			InitListView(GetDlgItem(Dialog, IDC_LISTREMINDERS));
 -			return TRUE;
 -		}
 +		SetDlgItemText(Dialog, IDC_REMINDERDATA, "");
 +		InitListView(GetDlgItem(Dialog, IDC_LISTREMINDERS));
 +		return TRUE;
 +
  	case WM_CONTEXTMENU:
  		{
 -			HWND H;
  			REMINDERDATA *pReminder = NULL;
 -			H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
 +			HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
  			if ( ListView_GetSelectedCount(H) )
  			{
 -				I = ListView_GetSelectionMark(H);
 +				int I = ListView_GetSelectionMark(H);
  				if (I != -1)
  				{
  					pReminder = (REMINDERDATA*)TreeGetAt(RemindersList,I);
 @@ -2396,21 +2329,22 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  				return TRUE;
  		}
  		break;
 +
  	case WM_INITDIALOG:
 -		{
 -			Window_SetIcon_IcoLib(Dialog, iconList[6].hIcolib);
 +		Window_SetIcon_IcoLib(Dialog, iconList[6].hIcolib);
 -			TranslateDialogDefault(Dialog);
 -			SetDlgItemText(Dialog,IDC_REMINDERDATA, "");
 +		TranslateDialogDefault(Dialog);
 +		SetDlgItemText(Dialog,IDC_REMINDERDATA, "");
 +		{
  			HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
  			lvCol.mask = LVCF_TEXT | LVCF_WIDTH;
 -			S = Translate("Reminder text");
 -			lvCol.pszText = S;
 +			char *S2 = Translate("Reminder text");
 +			lvCol.pszText = S2;
  			lvCol.cx = g_reminderListColGeom[1];
  			ListView_InsertColumn(H,0,&lvCol);
  			lvCol.mask = LVCF_TEXT | LVCF_WIDTH;
 -			S = Translate("Date of activation");
 -			lvCol.pszText = S;
 +			S2 = Translate("Date of activation");
 +			lvCol.pszText = S2;
  			lvCol.cx = g_reminderListColGeom[0];
  			ListView_InsertColumn(H,0,&lvCol);
  			InitListView(H);
 @@ -2428,35 +2362,33 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  				wp.rcNormalPosition.bottom = g_reminderListGeom[3] + g_reminderListGeom[1];
  				SetWindowPlacement(Dialog, &wp);
  			}
 -			return TRUE;
  		}
 +		return TRUE;
 +
  	case WM_CLOSE:
 -		{
 -			DestroyWindow(Dialog);
 -			ListReminderVisible = FALSE;
 -			return TRUE;
 -		}
 +		DestroyWindow(Dialog);
 +		ListReminderVisible = FALSE;
 +		return TRUE;
 +
  	case WM_NOTIFY:
  		{
  			if (wParam == IDC_LISTREMINDERS)
  			{
 -				NM = (NMLISTVIEW *)lParam;
 +				LPNMLISTVIEW NM = (LPNMLISTVIEW)lParam;
  				switch (NM->hdr.code)
  				{
  				case LVN_ITEMCHANGED:
  					{
 -					    S = ((REMINDERDATA*)TreeGetAt(RemindersList,NM->iItem))->Reminder;
 -					    SetDlgItemText(Dialog,IDC_REMINDERDATA,S);
 +					    char *S2 = ((REMINDERDATA*)TreeGetAt(RemindersList,NM->iItem))->Reminder;
 +					    SetDlgItemText(Dialog,IDC_REMINDERDATA,S2);
  					}
  					break;
  				case NM_DBLCLK:
  					{
 -						HWND H;
 -
 -						H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
 +						HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
  						if ( ListView_GetSelectedCount(H) )
  						{
 -							I = ListView_GetSelectionMark(H);
 +							int I = ListView_GetSelectionMark(H);
  							if (I != -1)
  							{
  								EditReminder((REMINDERDATA*)TreeGetAt(RemindersList, I));
 @@ -2468,7 +2400,7 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  			}
  			else if (wParam == IDC_LISTREMINDERS_HEADER)
  			{
 -				NMHEADER *NM = (NMHEADER*)lParam;
 +				LPNMHEADER NM = (LPNMHEADER)lParam;
  				switch (NM->hdr.code)
  				{
  				case HDN_ENDTRACK:
 @@ -2484,12 +2416,10 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  			{
  			case ID_CONTEXTMENUREMINDERLISTVIEW_EDIT:
  				{
 -					HWND H;
 -
 -					H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
 +					HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
  					if ( ListView_GetSelectedCount(H) )
  					{
 -						I = ListView_GetSelectionMark(H);
 +						int I = ListView_GetSelectionMark(H);
  						if (I != -1)
  						{
  							EditReminder((REMINDERDATA*)TreeGetAt(RemindersList, I));
 @@ -2497,18 +2427,17 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  					}
  				}
  				return TRUE;
 +
  			case IDC_CLOSE:
 -				{
 -					DestroyWindow(Dialog);
 -					ListReminderVisible = FALSE;
 -					return TRUE;
 -				}
 +				DestroyWindow(Dialog);
 +				ListReminderVisible = FALSE;
 +				return TRUE;
 +
  			case IDM_NEWREMINDER:
  			case IDC_ADDNEWREMINDER:
 -				{
 -					NewReminder();
 -					return TRUE;
 -				}
 +				NewReminder();
 +				return TRUE;
 +
  			case IDM_DELETEALLREMINDERS:
  				if (RemindersList && MessageBox(Dialog, Translate("Are you sure you want to delete all reminders?"), Translate(SECTIONNAME), MB_OKCANCEL) == IDOK)
  				{
 @@ -2517,14 +2446,13 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  					InitListView(GetDlgItem(Dialog,IDC_LISTREMINDERS));
  				}
  				return TRUE;
 +
  			case IDM_DELETEREMINDER:
  				{
 -					HWND H;
 -
 -					H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
 +					HWND H = GetDlgItem(Dialog,IDC_LISTREMINDERS);
  					if ( ListView_GetSelectedCount(H) )
  					{
 -						I = ListView_GetSelectionMark(H);
 +						int I = ListView_GetSelectionMark(H);
  						if (I != -1
  							&& MessageBox(Dialog, Translate("Are you sure you want to delete this reminder?"), Translate(SECTIONNAME), MB_OKCANCEL) == IDOK)
  						{
 @@ -2545,6 +2473,19 @@ INT_PTR CALLBACK DlgProcViewReminders(HWND Dialog,UINT Message,WPARAM wParam,LPA  	return FALSE;
  }
 +void ListReminders(void)
 +{
 +	if (!ListReminderVisible)
 +	{
 +		CreateDialog(hinstance, MAKEINTRESOURCE(IDD_LISTREMINDERS), 0, DlgProcViewReminders);
 +		ListReminderVisible = TRUE;
 +	}
 +	else
 +	{
 +		BringWindowToTop(LV);
 +	}
 +}
 +
  /////////////////////////////////////////////////////////////////////
  // Email/SMS and WinSock functions
  | 
