[NOTEPAD] Let the user know when an opened file is modified. By Lee Schroeder. CORE...
authorAmine Khaldi <amine.khaldi@reactos.org>
Sun, 29 Nov 2015 18:13:33 +0000 (18:13 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Sun, 29 Nov 2015 18:13:33 +0000 (18:13 +0000)
svn path=/trunk/; revision=70207

reactos/base/applications/notepad/dialog.c
reactos/base/applications/notepad/main.c
reactos/base/applications/notepad/notepad.h

index 827e58d..afc96ab 100644 (file)
@@ -63,24 +63,35 @@ VOID ShowLastError(VOID)
  *    (untitled) - Notepad      if no file is open
  *    [filename] - Notepad      if a file is given
  */
-static void UpdateWindowCaption(void)
+void UpdateWindowCaption(BOOL clearModifyAlert)
 {
     TCHAR szCaption[MAX_STRING_LEN];
     TCHAR szNotepad[MAX_STRING_LEN];
+    TCHAR szFilename[MAX_STRING_LEN];
 
+    /* Load the name of the application */
     LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, ARRAY_SIZE(szNotepad));
 
+    /* Determine if the file has been saved or if this is a new file */
     if (Globals.szFileTitle[0] != 0)
-    {
-        StringCchCopy(szCaption, ARRAY_SIZE(szCaption), Globals.szFileTitle);
-    }
+        StringCchCopy(szFilename, ARRAY_SIZE(szFilename), Globals.szFileTitle);
+    else
+        LoadString(Globals.hInstance, STRING_UNTITLED, szFilename, ARRAY_SIZE(szFilename));
+
+    /* When a file is being opened or created, there is no need to have the edited flag shown
+       when the new or opened file has not been edited yet */
+    if (clearModifyAlert)
+        StringCbPrintf(szCaption, ARRAY_SIZE(szCaption), _T("%s - %s"), szFilename, szNotepad);
     else
     {
-        LoadString(Globals.hInstance, STRING_UNTITLED, szCaption, ARRAY_SIZE(szCaption));
+        BOOL isModified = (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0) ? TRUE : FALSE);
+
+        /* Update the caption based upon if the user has modified the contents of the file or not */
+        StringCbPrintf(szCaption, ARRAY_SIZE(szCaption), _T("%s%s - %s"),
+            (isModified ? _T("*") : _T("")), szFilename, szNotepad);
     }
 
-    StringCchCat(szCaption, ARRAY_SIZE(szCaption), _T(" - "));
-    StringCchCat(szCaption, ARRAY_SIZE(szCaption), szNotepad);
+    /* Update the window caption */
     SetWindowText(Globals.hMainWnd, szCaption);
 }
 
@@ -326,7 +337,7 @@ BOOL DoCloseFile(VOID)
     }
 
     SetFileName(empty_str);
-    UpdateWindowCaption();
+    UpdateWindowCaption(TRUE);
 
     return TRUE;
 }
@@ -375,7 +386,7 @@ VOID DoOpenFile(LPCTSTR szFileName)
     }
 
     SetFileName(szFileName);
-    UpdateWindowCaption();
+    UpdateWindowCaption(TRUE);
     NOTEPAD_EnableSearchMenu();
 done:
     if (hFile != INVALID_HANDLE_VALUE)
@@ -522,7 +533,7 @@ BOOL DIALOG_FileSaveAs(VOID)
         SetFileName(szPath);
         if (DoSaveFile())
         {
-            UpdateWindowCaption();
+            UpdateWindowCaption(TRUE);
             return TRUE;
         }
         else
index 1f9de21..c9a145f 100644 (file)
@@ -324,6 +324,11 @@ LRESULT CALLBACK EDIT_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
                 case VK_RIGHT:
                     DIALOG_StatusBarUpdateCaretPos();
                     break;
+                default:
+                {
+                    UpdateWindowCaption(FALSE);
+                    break;
+                }
             }
         }
         case WM_LBUTTONUP:
index cbddce7..2817acb 100644 (file)
@@ -20,4 +20,6 @@
 #include "main.h"
 #include "dialog.h"
 
+void UpdateWindowCaption(BOOL clearModifyAlert);
+
 #endif /* _NOTEPAD_H */