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

commit f949e256b599457f1e2e9a8ba6b0f5d2551ce249
Author:     Kyle Katarn <[email protected]>
AuthorDate: Mon Apr 27 18:25:19 2020 +0200
Commit:     GitHub <[email protected]>
CommitDate: Mon Apr 27 18:25:19 2020 +0200

    [SYSDM] User Profiles fix of OnDestroy (CORE-16921) (#2614)
---
 dll/cpl/sysdm/userprofile.c | 59 +++++++++++++++------------------------------
 1 file changed, 20 insertions(+), 39 deletions(-)

diff --git a/dll/cpl/sysdm/userprofile.c b/dll/cpl/sysdm/userprofile.c
index faef5431970..58e35f964bd 100644
--- a/dll/cpl/sysdm/userprofile.c
+++ b/dll/cpl/sysdm/userprofile.c
@@ -125,7 +125,6 @@ ChangeUserProfileType(
     ZeroMemory(&Item, sizeof(LVITEM));
     Item.mask = LVIF_PARAM;
     Item.iItem = iSelected;
-    Item.iSubItem = 0;
     if (!ListView_GetItem(hwndListView, &Item))
         return FALSE;
 
@@ -170,7 +169,6 @@ DeleteUserProfile(
     ZeroMemory(&Item, sizeof(LVITEM));
     Item.mask = LVIF_PARAM;
     Item.iItem = iSelected;
-    Item.iSubItem = 0;
     if (!ListView_GetItem(hwndListView, &Item))
         return FALSE;
 
@@ -253,7 +251,6 @@ CopyUserProfile(
     ZeroMemory(&Item, sizeof(LVITEM));
     Item.mask = LVIF_PARAM;
     Item.iItem = iSelected;
-    Item.iSubItem = 0;
     if (!ListView_GetItem(hwndListView, &Item))
         return FALSE;
 
@@ -645,9 +642,9 @@ UpdateButtonState(
         iSelected = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED);
         if (iSelected != -1)
         {
+            ZeroMemory(&Item, sizeof(LVITEM));
             Item.mask = LVIF_PARAM;
             Item.iItem = iSelected;
-            Item.iSubItem = 0;
             if (ListView_GetItem(hwndListView, &Item))
             {
                 if (Item.lParam != 0)
@@ -804,48 +801,36 @@ OnInitUserProfileDialog(HWND hwndDlg)
     AddUserProfiles(hwndDlg, GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST), 
bAdmin);
 }
 
-
-static
-VOID
-OnDestroy(
-    _In_ HWND hwndDlg)
-{
-    HWND hwndList;
-    INT nItems, i;
-    LVITEM Item;
-
-    hwndList = GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST);
-
-    nItems = ListView_GetItemCount(hwndList);
-    for (i = 0; i < nItems; i++)
-    {
-        Item.iItem = i;
-        Item.iSubItem = 0;
-        if (ListView_GetItem(hwndList, &Item))
-        {
-            if (Item.lParam != 0)
-                HeapFree(GetProcessHeap(), 0, (PVOID)Item.lParam);
-        }
-    }
-}
-
-
 static
 VOID
 OnNotify(
     _In_ HWND hwndDlg,
     _In_ NMHDR *nmhdr)
 {
+    LPNMLISTVIEW pNMLV;
+    
     if (nmhdr->idFrom == IDC_USERACCOUNT_LINK && nmhdr->code == NM_CLICK)
     {
         ShellExecuteW(hwndDlg, NULL, L"usrmgr.cpl", NULL, NULL, 0);
     }
     else if (nmhdr->idFrom == IDC_USERPROFILE_LIST)
     {
-        if (nmhdr->code == LVN_ITEMCHANGED)
-            UpdateButtonState(hwndDlg, nmhdr->hwndFrom);
-        else if (nmhdr->code == NM_DBLCLK)
-            ChangeUserProfileType(hwndDlg);
+        switch(nmhdr->code)
+        {
+            case LVN_ITEMCHANGED:
+                UpdateButtonState(hwndDlg, nmhdr->hwndFrom);            
+                break;
+            
+            case NM_DBLCLK:
+                ChangeUserProfileType(hwndDlg);
+                break;
+                
+            case LVN_DELETEITEM:
+                pNMLV = (LPNMLISTVIEW)nmhdr;            
+                if (pNMLV->lParam != 0)
+                    HeapFree(GetProcessHeap(), 0, (LPVOID)pNMLV->lParam);      
          
+                break;
+        }        
     }
 }
 
@@ -862,11 +847,7 @@ UserProfileDlgProc(HWND hwndDlg,
         case WM_INITDIALOG:
             OnInitUserProfileDialog(hwndDlg);
             return TRUE;
-
-        case WM_DESTROY:
-            OnDestroy(hwndDlg);
-            break;
-
+    
         case WM_COMMAND:
             switch (LOWORD(wParam))
             {

Reply via email to