From b80400ed108c91b9cbaccec925fcd125a399d183 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Thu, 21 Mar 2019 21:51:56 +0100 Subject: [PATCH] [SYSDM] Update the buttons on the user profile dialog after adding the profiles to the listview. --- dll/cpl/sysdm/userprofile.c | 89 +++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 43 deletions(-) diff --git a/dll/cpl/sysdm/userprofile.c b/dll/cpl/sysdm/userprofile.c index e0868a8fbb7..8bacb58ba51 100644 --- a/dll/cpl/sysdm/userprofile.c +++ b/dll/cpl/sysdm/userprofile.c @@ -159,7 +159,47 @@ done: static VOID -AddUserProfiles(HWND hwndListView) +UpdateButtonState( + _In_ HWND hwndDlg, + _In_ HWND hwndListView) +{ + LVITEM Item; + INT iSelected; + BOOL bMyProfile; + + iSelected = ListView_GetNextItem(hwndListView, -1, LVNI_SELECTED); + if (iSelected != -1) + { + Item.mask = LVIF_PARAM; + Item.iItem = iSelected; + Item.iSubItem = 0; + if (ListView_GetItem(hwndListView, &Item)) + { + if (Item.lParam != 0) + { + bMyProfile = ((PPROFILEDATA)Item.lParam)->bMyProfile; + if (/*IsUserAnAdmin() &&*/ !bMyProfile) + { + EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_DELETE), TRUE); + EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_COPY), TRUE); + } + } + } + EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_CHANGE), TRUE); + } + else + { + EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_CHANGE), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_DELETE), FALSE); + EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_COPY), FALSE); + } +} + + +static VOID +AddUserProfiles( + _In_ HWND hwndDlg, + _In_ HWND hwndListView) { HKEY hKeyUserProfiles = INVALID_HANDLE_VALUE; DWORD dwIndex; @@ -210,6 +250,8 @@ AddUserProfiles(HWND hwndListView) if (ListView_GetItemCount(hwndListView) != 0) ListView_SetItemState(hwndListView, 0, LVIS_SELECTED, LVIS_SELECTED); + UpdateButtonState(hwndDlg, hwndListView); + done: if (hKeyUserProfiles != INVALID_HANDLE_VALUE) RegCloseKey(hKeyUserProfiles); @@ -228,14 +270,7 @@ OnInitUserProfileDialog(HWND hwndDlg) /* Initialize the list view control */ SetListViewColumns(GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST)); - AddUserProfiles(GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST)); - - /* Disable the "Delete" and "Copy To" buttons if the user is not an admin */ - if (!IsUserAnAdmin()) - { - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_DELETE), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_COPY), FALSE); - } + AddUserProfiles(hwndDlg, GetDlgItem(hwndDlg, IDC_USERPROFILE_LIST)); } @@ -276,39 +311,7 @@ OnNotify( } else if (nmhdr->idFrom == IDC_USERPROFILE_LIST && nmhdr->code == LVN_ITEMCHANGED) { - if (ListView_GetSelectedCount(nmhdr->hwndFrom) == 0) - { - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_CHANGE), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_DELETE), FALSE); - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_COPY), FALSE); - } - else - { - LVITEM Item; - INT iSelected; - BOOL bMyProfile = FALSE; - - iSelected = ListView_GetNextItem(nmhdr->hwndFrom, -1, LVNI_SELECTED); - if (iSelected != -1) - { - Item.iItem = iSelected; - Item.iSubItem = 0; - if (ListView_GetItem(nmhdr->hwndFrom, &Item)) - { - if (Item.lParam != 0) - { - bMyProfile = ((PPROFILEDATA)Item.lParam)->bMyProfile; - } - } - } - - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_CHANGE), TRUE); - if (IsUserAnAdmin() && !bMyProfile) - { - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_DELETE), TRUE); - EnableWindow(GetDlgItem(hwndDlg, IDC_USERPROFILE_COPY), TRUE); - } - } + UpdateButtonState(hwndDlg, nmhdr->hwndFrom); } } @@ -324,7 +327,7 @@ UserProfileDlgProc(HWND hwndDlg, { case WM_INITDIALOG: OnInitUserProfileDialog(hwndDlg); - break; + return TRUE; case WM_DESTROY: OnDestroy(hwndDlg);