Alexander Nicolaysen Sørnes : regedit: Convert key creation to unicode.
Alexandre Julliard
julliard at winehq.org
Fri Aug 22 04:44:02 CDT 2008
Module: wine
Branch: master
Commit: a6a4109dd446a6306bbe9c6ed88a1533d7c8be6f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a6a4109dd446a6306bbe9c6ed88a1533d7c8be6f
Author: Alexander Nicolaysen Sørnes <alex at thehandofagony.com>
Date: Thu Aug 21 23:49:34 2008 +0200
regedit: Convert key creation to unicode.
---
programs/regedit/edit.c | 14 +++++++-------
programs/regedit/framewnd.c | 13 +++++++++----
programs/regedit/main.h | 4 ++--
programs/regedit/treeview.c | 14 +++++++++-----
4 files changed, 27 insertions(+), 18 deletions(-)
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index f9a5abf..1c26baa 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -242,33 +242,33 @@ done:
return NULL;
}
-BOOL CreateKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPTSTR keyName)
+BOOL CreateKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPWSTR keyName)
{
BOOL result = FALSE;
LONG lRet = ERROR_SUCCESS;
HKEY retKey = NULL;
- TCHAR newKey[MAX_NEW_KEY_LEN - 4];
+ WCHAR newKey[MAX_NEW_KEY_LEN - 4];
int keyNum;
HKEY hKey;
- lRet = RegOpenKeyEx(hKeyRoot, keyPath, 0, KEY_CREATE_SUB_KEY, &hKey);
+ lRet = RegOpenKeyExW(hKeyRoot, keyPath, 0, KEY_CREATE_SUB_KEY, &hKey);
if (lRet != ERROR_SUCCESS) {
error_code_messagebox(hwnd, lRet);
goto done;
}
- if (!LoadString(GetModuleHandle(0), IDS_NEWKEY, newKey, COUNT_OF(newKey))) goto done;
+ if (!LoadStringW(GetModuleHandle(0), IDS_NEWKEY, newKey, COUNT_OF(newKey))) goto done;
/* try to find out a name for the newly create key (max 100 times) */
for (keyNum = 1; keyNum < 100; keyNum++) {
- wsprintf(keyName, newKey, keyNum);
- lRet = RegOpenKey(hKey, keyName, &retKey);
+ wsprintfW(keyName, newKey, keyNum);
+ lRet = RegOpenKeyW(hKey, keyName, &retKey);
if (lRet != ERROR_SUCCESS) break;
RegCloseKey(retKey);
}
if (lRet == ERROR_SUCCESS) goto done;
- lRet = RegCreateKey(hKey, keyName, &retKey);
+ lRet = RegCreateKeyW(hKey, keyName, &retKey);
if (lRet != ERROR_SUCCESS) {
error_code_messagebox(hwnd, lRet);
goto done;
diff --git a/programs/regedit/framewnd.c b/programs/regedit/framewnd.c
index 51c94cc..e8a6bf5 100644
--- a/programs/regedit/framewnd.c
+++ b/programs/regedit/framewnd.c
@@ -761,10 +761,15 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
break;
}
case ID_EDIT_NEW_KEY:
- if (CreateKey(hWnd, hKeyRoot, keyPath, newKey)) {
- if (InsertNode(g_pChildWnd->hTreeWnd, 0, newKey))
- StartKeyRename(g_pChildWnd->hTreeWnd);
- }
+ {
+ WCHAR newKeyW[MAX_NEW_KEY_LEN];
+ WCHAR* keyPathW = GetWideString(keyPath);
+ if (CreateKey(hWnd, hKeyRoot, keyPathW, newKeyW)) {
+ if (InsertNode(g_pChildWnd->hTreeWnd, 0, newKeyW))
+ StartKeyRename(g_pChildWnd->hTreeWnd);
+ }
+ HeapFree(GetProcessHeap(), 0, keyPathW);
+ }
break;
case ID_EDIT_NEW_STRINGVALUE:
valueType = REG_SZ;
diff --git a/programs/regedit/main.h b/programs/regedit/main.h
index 6b5a098..885ab0d 100644
--- a/programs/regedit/main.h
+++ b/programs/regedit/main.h
@@ -134,13 +134,13 @@ extern BOOL OnTreeExpanding(HWND hWnd, NMTREEVIEW* pnmtv);
extern LPTSTR GetItemPath(HWND hwndTV, HTREEITEM hItem, HKEY* phRootKey);
extern LPWSTR GetItemPathW(HWND hwndTV, HTREEITEM hItem, HKEY* phRootKey);
extern BOOL DeleteNode(HWND hwndTV, HTREEITEM hItem);
-extern HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPTSTR name);
+extern HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPWSTR name);
extern HWND StartKeyRename(HWND hwndTV);
extern HTREEITEM FindPathInTree(HWND hwndTV, LPCTSTR lpKeyName);
extern HTREEITEM FindNext(HWND hwndTV, HTREEITEM hItem, LPCTSTR sstring, int mode, int *row);
/* edit.c */
-extern BOOL CreateKey(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPTSTR newKeyName);
+extern BOOL CreateKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath, LPWSTR newKeyName);
extern BOOL CreateValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, DWORD valueType, LPTSTR valueName);
extern BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName);
extern BOOL DeleteKey(HWND hwnd, HKEY hKeyRoot, LPCWSTR keyPath);
diff --git a/programs/regedit/treeview.c b/programs/regedit/treeview.c
index 3261a66..61c13ad 100644
--- a/programs/regedit/treeview.c
+++ b/programs/regedit/treeview.c
@@ -518,7 +518,7 @@ BOOL RefreshTreeView(HWND hwndTV)
return TRUE;
}
-HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPTSTR name)
+HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPWSTR name)
{
TCHAR buf[MAX_NEW_KEY_LEN];
HTREEITEM hNewItem = 0;
@@ -527,7 +527,9 @@ HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPTSTR name)
if (!hItem) hItem = TreeView_GetSelection(hwndTV);
if (!hItem) return FALSE;
if (TreeView_GetItemState(hwndTV, hItem, TVIS_EXPANDEDONCE)) {
- hNewItem = AddEntryToTree(hwndTV, hItem, name, 0, 0);
+ char* nameA = GetMultiByteString(name);
+ hNewItem = AddEntryToTree(hwndTV, hItem, nameA, 0, 0);
+ HeapFree(GetProcessHeap(), 0, nameA);
} else {
item.mask = TVIF_CHILDREN | TVIF_HANDLE;
item.hItem = hItem;
@@ -535,19 +537,21 @@ HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPTSTR name)
item.cChildren = 1;
if (!TreeView_SetItem(hwndTV, &item)) return FALSE;
}
- SendMessage(hwndTV, TVM_EXPAND, TVE_EXPAND, (LPARAM)hItem );
+ SendMessageW(hwndTV, TVM_EXPAND, TVE_EXPAND, (LPARAM)hItem );
if (!hNewItem) {
+ char* nameA = GetMultiByteString(name);
for(hNewItem = TreeView_GetChild(hwndTV, hItem); hNewItem; hNewItem = TreeView_GetNextSibling(hwndTV, hNewItem)) {
item.mask = TVIF_HANDLE | TVIF_TEXT;
item.hItem = hNewItem;
item.pszText = buf;
item.cchTextMax = COUNT_OF(buf);
if (!TreeView_GetItem(hwndTV, &item)) continue;
- if (lstrcmp(name, item.pszText) == 0) break;
+ if (lstrcmp(nameA, item.pszText) == 0) break;
}
+ HeapFree(GetProcessHeap(), 0, nameA);
}
if (hNewItem)
- SendMessage(hwndTV, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hNewItem);
+ SendMessageW(hwndTV, TVM_SELECTITEM, TVGN_CARET, (LPARAM)hNewItem);
return hNewItem;
}
More information about the wine-cvs
mailing list