https://git.reactos.org/?p=reactos.git;a=commitdiff;h=621439d6f22a4d9f1746f34b8a8b04a0020bead1

commit 621439d6f22a4d9f1746f34b8a8b04a0020bead1
Author:     Katayama Hirofumi MZ <[email protected]>
AuthorDate: Fri Feb 17 09:23:25 2023 +0900
Commit:     GitHub <[email protected]>
CommitDate: Fri Feb 17 09:23:25 2023 +0900

    [NOTEPAD] Fix and simplify Status Bar handling (#5076)
    
    - Rename DoCreateStatusBar as DoShowHideStatusBar.
    - Simplify WM_SIZE handler.
    - Enable/disable CMD_STATUSBAR menu item correctly.
    - Make DoShowHideStatusBar independent from DoCreateEditWindow.
---
 base/applications/notepad/dialog.c   | 98 +++++++-----------------------------
 base/applications/notepad/dialog.h   |  2 +-
 base/applications/notepad/main.c     | 72 +++++++-------------------
 base/applications/notepad/settings.c |  5 +-
 4 files changed, 36 insertions(+), 141 deletions(-)

diff --git a/base/applications/notepad/dialog.c 
b/base/applications/notepad/dialog.c
index 8233082be1b..3f863c19179 100644
--- a/base/applications/notepad/dialog.c
+++ b/base/applications/notepad/dialog.c
@@ -911,17 +911,13 @@ VOID DIALOG_EditTimeDate(VOID)
     SendMessage(Globals.hEdit, EM_REPLACESEL, TRUE, (LPARAM)szText);
 }
 
-VOID DoCreateStatusBar(VOID)
+VOID DoShowHideStatusBar(VOID)
 {
-    RECT rc;
-    RECT rcstatus;
-    BOOL bStatusBarVisible;
-
     /* Check if status bar object already exists. */
-    if (Globals.hStatusBar == NULL)
+    if (Globals.bShowStatusBar && Globals.hStatusBar == NULL)
     {
         /* Try to create the status bar */
-        Globals.hStatusBar = CreateStatusWindow(WS_CHILD | WS_VISIBLE | 
CCS_BOTTOM | SBARS_SIZEGRIP,
+        Globals.hStatusBar = CreateStatusWindow(WS_CHILD | CCS_BOTTOM | 
SBARS_SIZEGRIP,
                                                 NULL,
                                                 Globals.hMainWnd,
                                                 CMD_STATUSBAR_WND_ID);
@@ -936,59 +932,17 @@ VOID DoCreateStatusBar(VOID)
         LoadString(Globals.hInstance, STRING_LINE_COLUMN, 
Globals.szStatusBarLineCol, MAX_PATH - 1);
     }
 
-    /* Set status bar visiblity according to the settings. */
-    if ((Globals.bWrapLongLines != FALSE) || (Globals.bShowStatusBar == FALSE))
-    {
-        bStatusBarVisible = FALSE;
-        ShowWindow(Globals.hStatusBar, SW_HIDE);
-    }
-    else
-    {
-        bStatusBarVisible = TRUE;
-        ShowWindow(Globals.hStatusBar, SW_SHOW);
-        SendMessage(Globals.hStatusBar, WM_SIZE, 0, 0);
-    }
-
-    /* Set check state in show status bar item. */
-    if (bStatusBarVisible)
-    {
-        CheckMenuItem(Globals.hMenu, CMD_STATUSBAR, MF_BYCOMMAND | MF_CHECKED);
-    }
-    else
-    {
-        CheckMenuItem(Globals.hMenu, CMD_STATUSBAR, MF_BYCOMMAND | 
MF_UNCHECKED);
-    }
-
-    /* Update menu mar with the previous changes */
-    DrawMenuBar(Globals.hMainWnd);
+    /* Update layout of controls */
+    PostMessageW(Globals.hMainWnd, WM_SIZE, 0, 0);
 
-    /* Sefety test is edit control exists */
-    if (Globals.hEdit != NULL)
-    {
-        /* Retrieve the sizes of the controls */
-        GetClientRect(Globals.hMainWnd, &rc);
-        GetClientRect(Globals.hStatusBar, &rcstatus);
-
-        /* If status bar is currently visible, update dimensions of edit 
control */
-        if (bStatusBarVisible)
-            rc.bottom -= (rcstatus.bottom - rcstatus.top);
-
-        /* Resize edit control to right size. */
-        MoveWindow(Globals.hEdit,
-                   rc.left,
-                   rc.top,
-                   rc.right - rc.left,
-                   rc.bottom - rc.top,
-                   TRUE);
-    }
+    if (Globals.hStatusBar == NULL)
+        return;
 
-    /* Set the status bar for multiple-text output */
-    DIALOG_StatusBarAlignParts();
+    /* Update visibility of status bar */
+    ShowWindow(Globals.hStatusBar, (Globals.bShowStatusBar ? SW_SHOWNOACTIVATE 
: SW_HIDE));
 
-    /* Update content with current row/column text */
+    /* Update status bar contents */
     DIALOG_StatusBarUpdateCaretPos();
-    
-    /* Update line endings and encoding on the status bar */
     DIALOG_StatusBarUpdateLineEndings();
     DIALOG_StatusBarUpdateEncoding();
 }
@@ -1032,17 +986,7 @@ VOID DoCreateEditWindow(VOID)
     }
 
     /* Update wrap status into the main menu and recover style flags */
-    if (Globals.bWrapLongLines)
-    {
-        dwStyle = EDIT_STYLE_WRAP;
-        EnableMenuItem(Globals.hMenu, CMD_STATUSBAR, MF_BYCOMMAND | 
MF_DISABLED | MF_GRAYED);
-    } else {
-        dwStyle = EDIT_STYLE;
-        EnableMenuItem(Globals.hMenu, CMD_STATUSBAR, MF_BYCOMMAND | 
MF_ENABLED);
-    }
-
-    /* Update previous changes */
-    DrawMenuBar(Globals.hMainWnd);
+    dwStyle = (Globals.bWrapLongLines ? EDIT_STYLE_WRAP : EDIT_STYLE);
 
     /* Create the new edit control */
     Globals.hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
@@ -1057,7 +1001,6 @@ VOID DoCreateEditWindow(VOID)
                                    NULL,
                                    Globals.hInstance,
                                    NULL);
-
     if (Globals.hEdit == NULL)
     {
         if (pTemp)
@@ -1087,28 +1030,22 @@ VOID DoCreateEditWindow(VOID)
                                                  GWLP_WNDPROC,
                                                  (LONG_PTR)EDIT_WndProc);
 
-    /* Create/update status bar */
-    DoCreateStatusBar();
-
     /* Finally shows new edit control and set focus into it. */
     ShowWindow(Globals.hEdit, SW_SHOW);
     SetFocus(Globals.hEdit);
+
+    /* Re-arrange controls */
+    PostMessageW(Globals.hMainWnd, WM_SIZE, 0, 0);
 }
 
 VOID DIALOG_EditWrap(VOID)
 {
     Globals.bWrapLongLines = !Globals.bWrapLongLines;
 
-    if (Globals.bWrapLongLines)
-    {
-        EnableMenuItem(Globals.hMenu, CMD_GOTO, MF_BYCOMMAND | MF_DISABLED | 
MF_GRAYED);
-    }
-    else
-    {
-        EnableMenuItem(Globals.hMenu, CMD_GOTO, MF_BYCOMMAND | MF_ENABLED);
-    }
+    EnableMenuItem(Globals.hMenu, CMD_GOTO, (Globals.bWrapLongLines ? 
MF_GRAYED : MF_ENABLED));
 
     DoCreateEditWindow();
+    DoShowHideStatusBar();
 }
 
 VOID DIALOG_SelectFont(VOID)
@@ -1274,8 +1211,7 @@ VOID DIALOG_StatusBarUpdateCaretPos(VOID)
 VOID DIALOG_ViewStatusBar(VOID)
 {
     Globals.bShowStatusBar = !Globals.bShowStatusBar;
-
-    DoCreateStatusBar();
+    DoShowHideStatusBar();
 }
 
 VOID DIALOG_HelpContents(VOID)
diff --git a/base/applications/notepad/dialog.h 
b/base/applications/notepad/dialog.h
index 3d5572cfad7..5b9967af0ad 100644
--- a/base/applications/notepad/dialog.h
+++ b/base/applications/notepad/dialog.h
@@ -67,5 +67,5 @@ BOOL FileExists(LPCTSTR szFilename);
 BOOL HasFileExtension(LPCTSTR szFilename);
 BOOL DoCloseFile(VOID);
 VOID DoOpenFile(LPCTSTR szFileName);
-VOID DoCreateStatusBar(VOID);
+VOID DoShowHideStatusBar(VOID);
 VOID DoCreateEditWindow(VOID);
diff --git a/base/applications/notepad/main.c b/base/applications/notepad/main.c
index 81908e303f2..2768d87fa8d 100644
--- a/base/applications/notepad/main.c
+++ b/base/applications/notepad/main.c
@@ -285,13 +285,8 @@ static VOID NOTEPAD_InitMenuPopup(HMENU menu, LPARAM index)
 
     UNREFERENCED_PARAMETER(index);
 
-    CheckMenuItem(GetMenu(Globals.hMainWnd), CMD_WRAP,
-        MF_BYCOMMAND | (Globals.bWrapLongLines ? MF_CHECKED : MF_UNCHECKED));
-    if (!Globals.bWrapLongLines)
-    {
-        CheckMenuItem(GetMenu(Globals.hMainWnd), CMD_STATUSBAR,
-            MF_BYCOMMAND | (Globals.bShowStatusBar ? MF_CHECKED : 
MF_UNCHECKED));
-    }
+    CheckMenuItem(menu, CMD_WRAP, (Globals.bWrapLongLines ? MF_CHECKED : 
MF_UNCHECKED));
+    CheckMenuItem(menu, CMD_STATUSBAR, (Globals.bShowStatusBar ? MF_CHECKED : 
MF_UNCHECKED));
     EnableMenuItem(menu, CMD_UNDO,
         SendMessage(Globals.hEdit, EM_CANUNDO, 0, 0) ? MF_ENABLED : MF_GRAYED);
     EnableMenuItem(menu, CMD_PASTE,
@@ -304,7 +299,6 @@ static VOID NOTEPAD_InitMenuPopup(HMENU menu, LPARAM index)
 
     EnableMenuItem(menu, CMD_SELECT_ALL,
         GetWindowTextLength(Globals.hEdit) ? MF_ENABLED : MF_GRAYED);
-    DrawMenuBar(Globals.hMainWnd);
 }
 
 LRESULT CALLBACK EDIT_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM 
lParam)
@@ -394,56 +388,24 @@ NOTEPAD_WndProc(HWND hWnd, UINT msg, WPARAM wParam, 
LPARAM lParam)
 
     case WM_SIZE:
     {
-        if ((Globals.bShowStatusBar != FALSE) && (Globals.bWrapLongLines == 
FALSE))
-        {
-            RECT rcStatusBar;
-            HDWP hdwp;
-
-            if (!GetWindowRect(Globals.hStatusBar, &rcStatusBar))
-                break;
-
-            hdwp = BeginDeferWindowPos(2);
-            if (hdwp == NULL)
-                break;
-
-            hdwp = DeferWindowPos(hdwp,
-                                  Globals.hEdit,
-                                  NULL,
-                                  0,
-                                  0,
-                                  LOWORD(lParam),
-                                  HIWORD(lParam) - (rcStatusBar.bottom - 
rcStatusBar.top),
-                                  SWP_NOZORDER | SWP_NOMOVE);
-
-            if (hdwp == NULL)
-                break;
+        RECT rc;
+        GetClientRect(hWnd, &rc);
 
-            hdwp = DeferWindowPos(hdwp,
-                                  Globals.hStatusBar,
-                                  NULL,
-                                  0,
-                                  0,
-                                  LOWORD(lParam),
-                                  LOWORD(wParam),
-                                  SWP_NOZORDER);
+        if (Globals.bShowStatusBar)
+        {
+            RECT rcStatus;
+            SendMessageW(Globals.hStatusBar, WM_SIZE, 0, 0);
+            GetWindowRect(Globals.hStatusBar, &rcStatus);
+            rc.bottom -= rcStatus.bottom - rcStatus.top;
+        }
 
-            if (hdwp == NULL)
-                break;
-                
-            EndDeferWindowPos(hdwp);
+        MoveWindow(Globals.hEdit, 0, 0, rc.right, rc.bottom, TRUE);
 
+        if (Globals.bShowStatusBar)
+        {
             /* Align status bar parts, only if the status bar resize operation 
succeeds */
             DIALOG_StatusBarAlignParts();
         }
-        else
-            SetWindowPos(Globals.hEdit,
-                         NULL,
-                         0,
-                         0,
-                         LOWORD(lParam),
-                         HIWORD(lParam),
-                         SWP_NOZORDER | SWP_NOMOVE);
-
         break;
     }
 
@@ -467,10 +429,11 @@ NOTEPAD_WndProc(HWND hWnd, UINT msg, WPARAM wParam, 
LPARAM lParam)
         DoOpenFile(szFileName);
         break;
     }
-    case WM_CHAR:
+
     case WM_INITMENUPOPUP:
         NOTEPAD_InitMenuPopup((HMENU)wParam, lParam);
         break;
+
     default:
         if (msg == aFINDMSGSTRING)
         {
@@ -669,6 +632,7 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE prev, 
LPTSTR cmdline, int sh
     }
 
     DoCreateEditWindow();
+    DoShowHideStatusBar();
 
     NOTEPAD_InitData();
     DIALOG_FileNew();
@@ -677,8 +641,6 @@ int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE prev, 
LPTSTR cmdline, int sh
     UpdateWindow(Globals.hMainWnd);
     DragAcceptFiles(Globals.hMainWnd, TRUE);
 
-    DIALOG_ViewStatusBar();
-
     if (!HandleCommandLine(cmdline))
     {
         return 0;
diff --git a/base/applications/notepad/settings.c 
b/base/applications/notepad/settings.c
index d0295937b43..0031e14f9b0 100644
--- a/base/applications/notepad/settings.c
+++ b/base/applications/notepad/settings.c
@@ -157,9 +157,6 @@ void NOTEPAD_LoadSettingsFromRegistry(void)
         Globals.main_rect.right = Globals.main_rect.left + dx;
         Globals.main_rect.bottom = Globals.main_rect.top + dy;
 
-        /* invert value because DIALOG_ViewStatusBar will be called to show it 
*/
-        Globals.bShowStatusBar = !Globals.bShowStatusBar;
-
         if (dwPointSize != 0)
             Globals.lfFont.lfHeight = HeightFromPointSize(dwPointSize);
         else
@@ -170,7 +167,7 @@ void NOTEPAD_LoadSettingsFromRegistry(void)
     else
     {
         /* If no settings are found in the registry, then use default values */
-        Globals.bShowStatusBar = FALSE;
+        Globals.bShowStatusBar = TRUE;
         Globals.bWrapLongLines = FALSE;
         SetRect(&Globals.lMargins, 750, 1000, 750, 1000);
 

Reply via email to