Module: wine Branch: master Commit: 6827724e54c49a5f15993ba7e24dddafa68e8502 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6827724e54c49a5f15993ba7e2...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Sat Jun 13 19:26:22 2015 +0300
regedit: Make it possible for save/restore position on tree root.
---
programs/regedit/childwnd.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/programs/regedit/childwnd.c b/programs/regedit/childwnd.c index 6dc7d0c..55b11de 100644 --- a/programs/regedit/childwnd.c +++ b/programs/regedit/childwnd.c @@ -243,7 +243,14 @@ static void get_last_key(HWND hwndTV) if (RegCreateKeyExW(HKEY_CURRENT_USER, wszKeyName, 0, NULL, 0, KEY_READ, NULL, &hkey, NULL) == ERROR_SUCCESS) { if (RegQueryValueExW(hkey, wszLastKey, NULL, NULL, (LPBYTE)wszVal, &dwSize) == ERROR_SUCCESS) - SendMessageW(hwndTV, TVM_SELECTITEM, TVGN_CARET, (LPARAM)FindPathInTree(hwndTV, wszVal)); + { + HTREEITEM selection; + if (!strcmpW(wszVal, g_pChildWnd->szPath)) + selection = (HTREEITEM)SendMessageW(g_pChildWnd->hTreeWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0); + else + selection = FindPathInTree(hwndTV, wszVal); + SendMessageW(hwndTV, TVM_SELECTITEM, TVGN_CARET, (LPARAM)selection); + }
RegCloseKey(hkey); } @@ -258,15 +265,20 @@ static void get_last_key(HWND hwndTV) static void set_last_key(HWND hwndTV) { HKEY hkey; - WCHAR *wszVal;
if (RegCreateKeyExW(HKEY_CURRENT_USER, wszKeyName, 0, NULL, 0, KEY_WRITE, NULL, &hkey, NULL) == ERROR_SUCCESS) { HTREEITEM selection = (HTREEITEM)SendMessageW(g_pChildWnd->hTreeWnd, TVM_GETNEXTITEM, TVGN_CARET, 0); - - wszVal = GetItemFullPath(g_pChildWnd->hTreeWnd, selection, FALSE); - RegSetValueExW(hkey, wszLastKey, 0, REG_SZ, (LPBYTE)wszVal, (lstrlenW(wszVal) + 1) * sizeof(WCHAR)); - HeapFree(GetProcessHeap(), 0, wszVal); + HTREEITEM root = (HTREEITEM)SendMessageW(g_pChildWnd->hTreeWnd, TVM_GETNEXTITEM, TVGN_ROOT, 0); + WCHAR *value; + + if (selection == root) + value = g_pChildWnd->szPath; + else + value = GetItemFullPath(g_pChildWnd->hTreeWnd, selection, FALSE); + RegSetValueExW(hkey, wszLastKey, 0, REG_SZ, (LPBYTE)value, (lstrlenW(value) + 1) * sizeof(WCHAR)); + if (selection != root) + HeapFree(GetProcessHeap(), 0, value); RegCloseKey(hkey); } }