Hugh McMaster : regedit: Delete a listview item without refreshing the listview.
Alexandre Julliard
julliard at winehq.org
Tue May 30 16:05:14 CDT 2017
Module: wine
Branch: master
Commit: 06eceb3af2d56f158dab2db5a7bc768cc2b1c391
URL: http://source.winehq.org/git/wine.git/?a=commit;h=06eceb3af2d56f158dab2db5a7bc768cc2b1c391
Author: Hugh McMaster <hugh.mcmaster at outlook.com>
Date: Mon May 29 08:20:55 2017 +0000
regedit: Delete a listview item without refreshing the listview.
Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
programs/regedit/framewnd.c | 42 +++++++++++++++++++++++-------------------
1 file changed, 23 insertions(+), 19 deletions(-)
diff --git a/programs/regedit/framewnd.c b/programs/regedit/framewnd.c
index 0978cbc..8e9f604 100644
--- a/programs/regedit/framewnd.c
+++ b/programs/regedit/framewnd.c
@@ -699,8 +699,6 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HKEY hKeyRoot = 0;
DWORD valueType;
- int curIndex;
- BOOL firstItem = TRUE;
if (LOWORD(wParam) >= ID_FAVORITE_FIRST && LOWORD(wParam) <= ID_FAVORITE_LAST) {
HKEY hKey;
@@ -744,29 +742,35 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
}
HeapFree(GetProcessHeap(), 0, keyPath);
} else if (hWndDelete == g_pChildWnd->hListWnd) {
- WCHAR* keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
- curIndex = SendMessageW(g_pChildWnd->hListWnd, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_SELECTED, 0));
- while(curIndex != -1) {
- WCHAR* valueName = GetItemText(g_pChildWnd->hListWnd, curIndex);
-
- curIndex = SendMessageW(g_pChildWnd->hListWnd, LVM_GETNEXTITEM, curIndex, MAKELPARAM(LVNI_SELECTED, 0));
- if(curIndex != -1 && firstItem) {
- if (MessageBoxW(hWnd, MAKEINTRESOURCEW(IDS_DELETE_VALUE_TEXT_MULTIPLE),
- MAKEINTRESOURCEW(IDS_DELETE_VALUE_TITLE),
- MB_YESNO | MB_ICONEXCLAMATION) != IDYES)
+ unsigned int num_selected, index;
+ WCHAR *keyPath;
+
+ if (!(num_selected = SendMessageW(g_pChildWnd->hListWnd, LVM_GETSELECTEDCOUNT, 0, 0L)))
+ break;
+
+ if (num_selected > 1)
+ {
+ if (messagebox(hWnd, MB_YESNO | MB_ICONEXCLAMATION, IDS_DELETE_VALUE_TITLE,
+ IDS_DELETE_VALUE_TEXT_MULTIPLE) != IDYES)
break;
}
- if (!DeleteValue(hWnd, hKeyRoot, keyPath, valueName, curIndex==-1 && firstItem))
+ keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
+
+ index = SendMessageW(g_pChildWnd->hListWnd, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_SELECTED, 0));
+ while (index != -1)
{
+ WCHAR *valueName = GetItemText(g_pChildWnd->hListWnd, index);
+ if (!DeleteValue(hWnd, hKeyRoot, keyPath, valueName, num_selected == 1))
+ {
+ HeapFree(GetProcessHeap(), 0, valueName);
+ break;
+ }
HeapFree(GetProcessHeap(), 0, valueName);
- break;
+ SendMessageW(g_pChildWnd->hListWnd, LVM_DELETEITEM, index, 0L);
+ index = SendMessageW(g_pChildWnd->hListWnd, LVM_GETNEXTITEM, -1, MAKELPARAM(LVNI_SELECTED, 0));
}
- firstItem = FALSE;
- HeapFree(GetProcessHeap(), 0, valueName);
- }
- RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, NULL);
- HeapFree(GetProcessHeap(), 0, keyPath);
+ HeapFree(GetProcessHeap(), 0, keyPath);
} else if (IsChild(g_pChildWnd->hTreeWnd, hWndDelete) ||
IsChild(g_pChildWnd->hListWnd, hWndDelete)) {
SendMessageW(hWndDelete, WM_KEYDOWN, VK_DELETE, 0);
More information about the wine-cvs
mailing list