[PATCH 4/7] regedit: Add listview entries without refreshing the listview

Hugh McMaster hugh.mcmaster at outlook.com
Mon May 29 03:20:34 CDT 2017


Signed-off-by: Hugh McMaster <hugh.mcmaster at outlook.com>
---
 programs/regedit/edit.c     | 10 +++++++++-
 programs/regedit/framewnd.c |  4 +---
 programs/regedit/listview.c |  3 ++-
 programs/regedit/main.h     |  1 +
 4 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index 28ea474..97a283f 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -443,8 +443,9 @@ BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, DWORD valueType, LPW
     WCHAR newValue[256];
     DWORD valueDword = 0;
     BOOL result = FALSE;
-    int valueNum;
+    int valueNum, index;
     HKEY hKey;
+    LVITEMW item;
          
     lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_READ | KEY_SET_VALUE, &hKey);
     if (lRet != ERROR_SUCCESS) {
@@ -470,6 +471,13 @@ BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, DWORD valueType, LPW
         error_code_messagebox(hwnd, IDS_CREATE_VALUE_FAILED);
 	goto done;
     }
+
+    /* Add the new item to the listview */
+    index = AddEntryToList(g_pChildWnd->hListWnd, valueName, valueType, (BYTE *)&valueDword, sizeof(DWORD));
+    item.state = LVIS_FOCUSED | LVIS_SELECTED;
+    item.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
+    SendMessageW(g_pChildWnd->hListWnd, LVM_SETITEMSTATE, index, (LPARAM)&item);
+
     result = TRUE;
 
 done:
diff --git a/programs/regedit/framewnd.c b/programs/regedit/framewnd.c
index a81c174..93a5e4f 100644
--- a/programs/regedit/framewnd.c
+++ b/programs/regedit/framewnd.c
@@ -861,10 +861,8 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
     {
         WCHAR* keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hKeyRoot);
         WCHAR newKey[MAX_NEW_KEY_LEN];
-        if (CreateValue(hWnd, hKeyRoot, keyPath, valueType, newKey)) {
-            RefreshListView(g_pChildWnd->hListWnd, hKeyRoot, keyPath, newKey);
+        if (CreateValue(hWnd, hKeyRoot, keyPath, valueType, newKey))
             StartValueRename(g_pChildWnd->hListWnd);
-        }
         HeapFree(GetProcessHeap(), 0, keyPath);
     }
 	break;
diff --git a/programs/regedit/listview.c b/programs/regedit/listview.c
index e485c77..123949f 100644
--- a/programs/regedit/listview.c
+++ b/programs/regedit/listview.c
@@ -109,7 +109,7 @@ static void MakeMULTISZDisplayable(LPWSTR multi)
 /*******************************************************************************
  * Local module support methods
  */
-static void AddEntryToList(HWND hwndLV, LPWSTR Name, DWORD dwValType, void *ValBuf, DWORD dwCount)
+int AddEntryToList(HWND hwndLV, WCHAR *Name, DWORD dwValType, void *ValBuf, DWORD dwCount)
 {
     LINE_INFO* linfo;
     LVITEMW item;
@@ -202,6 +202,7 @@ static void AddEntryToList(HWND hwndLV, LPWSTR Name, DWORD dwValType, void *ValB
           }
         }
     }
+    return index;
 }
 
 static BOOL InitListViewImageList(HWND hWndListView)
diff --git a/programs/regedit/main.h b/programs/regedit/main.h
index a8e464e..b4b0307 100644
--- a/programs/regedit/main.h
+++ b/programs/regedit/main.h
@@ -117,6 +117,7 @@ extern void SetupStatusBar(HWND hWnd, BOOL bResize);
 extern void UpdateStatusBar(void);
 
 /* listview.c */
+extern int AddEntryToList(HWND hwndLV, WCHAR *Name, DWORD dwValType, void *ValBuf, DWORD dwCount);
 extern HWND CreateListView(HWND hwndParent, UINT id);
 extern BOOL RefreshListView(HWND hwndLV, HKEY hKeyRoot, LPCWSTR keyPath, LPCWSTR highlightValue);
 extern HWND StartValueRename(HWND hwndLV);
-- 
2.7.4




More information about the wine-patches mailing list