[PATCH 01/17] Set edit box text before notification and keep it after
Nikolay Sivov
nsivov at codeweavers.com
Sat Aug 6 03:55:33 CDT 2011
---
dlls/comctl32/tests/treeview.c | 70 +++++++++++++++++++++++++++++++++------
dlls/comctl32/treeview.c | 5 +--
2 files changed, 61 insertions(+), 14 deletions(-)
diff --git a/dlls/comctl32/tests/treeview.c b/dlls/comctl32/tests/treeview.c
index a55ae45..588a5ca 100644
--- a/dlls/comctl32/tests/treeview.c
+++ b/dlls/comctl32/tests/treeview.c
@@ -40,6 +40,7 @@ static BOOL g_get_from_expand;
static BOOL g_get_rect_in_expand;
static BOOL g_disp_A_to_W;
static BOOL g_disp_set_stateimage;
+static BOOL g_beginedit_alter_text;
#define NUM_MSG_SEQUENCES 2
#define TREEVIEW_SEQ_INDEX 0
@@ -99,7 +100,7 @@ static const struct message focus_seq[] = {
{ WM_PAINT, sent|defwinproc },
{ WM_NCPAINT, sent|wparam|defwinproc, 1 },
{ WM_ERASEBKGND, sent|defwinproc },
- { TVM_EDITLABEL, sent },
+ { TVM_EDITLABELA, sent },
{ WM_COMMAND, sent|wparam|defwinproc, MAKEWPARAM(0, EN_UPDATE) },
{ WM_COMMAND, sent|wparam|defwinproc, MAKEWPARAM(0, EN_CHANGE) },
{ WM_PARENTNOTIFY, sent|wparam|defwinproc, MAKEWPARAM(WM_CREATE, 0) },
@@ -1025,6 +1026,21 @@ static LRESULT CALLBACK parent_wnd_proc(HWND hWnd, UINT message, WPARAM wParam,
break;
}
+ case TVN_BEGINLABELEDIT:
+ {
+ if (g_beginedit_alter_text)
+ {
+ static const char* textA = "<edittextaltered>";
+ HWND edit;
+
+ edit = (HWND)SendMessageA(pHdr->hwndFrom, TVM_GETEDITCONTROL, 0, 0);
+ ok(IsWindow(edit), "failed to get edit handle\n");
+ SetWindowTextA(edit, textA);
+ }
+
+ break;
+ }
+
case TVN_ENDLABELEDIT: return TRUE;
case TVN_ITEMEXPANDINGA:
ok(pTreeView->itemNew.mask ==
@@ -1181,18 +1197,18 @@ static void test_itemedit(void)
DWORD r;
HWND edit;
TVITEMA item;
- CHAR buff[2];
+ CHAR buffA[20];
HWND hTree;
hTree = create_treeview_control(0);
fill_tree(hTree);
/* try with null item */
- edit = (HWND)SendMessage(hTree, TVM_EDITLABEL, 0, 0);
+ edit = (HWND)SendMessage(hTree, TVM_EDITLABELA, 0, 0);
ok(!IsWindow(edit), "Expected valid handle\n");
/* trigger edit */
- edit = (HWND)SendMessage(hTree, TVM_EDITLABEL, 0, (LPARAM)hRoot);
+ edit = (HWND)SendMessage(hTree, TVM_EDITLABELA, 0, (LPARAM)hRoot);
ok(IsWindow(edit), "Expected valid handle\n");
/* item shouldn't be selected automatically after TVM_EDITLABEL */
r = SendMessage(hTree, TVM_GETITEMSTATE, (WPARAM)hRoot, TVIS_SELECTED);
@@ -1209,7 +1225,7 @@ static void test_itemedit(void)
expect(0, r);
/* try to cancel with wrong (not null) handle */
- edit = (HWND)SendMessage(hTree, TVM_EDITLABEL, 0, (LPARAM)hRoot);
+ edit = (HWND)SendMessage(hTree, TVM_EDITLABELA, 0, (LPARAM)hRoot);
ok(IsWindow(edit), "Expected valid handle\n");
r = SendMessage(hTree, WM_COMMAND, MAKEWPARAM(0, EN_KILLFOCUS), (LPARAM)hTree);
expect(0, r);
@@ -1220,13 +1236,13 @@ static void test_itemedit(void)
/* remove selection after starting edit */
r = TreeView_SelectItem(hTree, hRoot);
expect(TRUE, r);
- edit = (HWND)SendMessage(hTree, TVM_EDITLABEL, 0, (LPARAM)hRoot);
+ edit = (HWND)SendMessage(hTree, TVM_EDITLABELA, 0, (LPARAM)hRoot);
ok(IsWindow(edit), "Expected valid handle\n");
r = TreeView_SelectItem(hTree, NULL);
expect(TRUE, r);
/* alter text */
- strcpy(buff, "x");
- r = SendMessage(edit, WM_SETTEXT, 0, (LPARAM)buff);
+ strcpy(buffA, "x");
+ r = SendMessage(edit, WM_SETTEXT, 0, (LPARAM)buffA);
expect(TRUE, r);
r = SendMessage(hTree, WM_COMMAND, MAKEWPARAM(0, EN_KILLFOCUS), (LPARAM)edit);
expect(0, r);
@@ -1234,11 +1250,43 @@ static void test_itemedit(void)
/* check that text is saved */
item.mask = TVIF_TEXT;
item.hItem = hRoot;
- item.pszText = buff;
- item.cchTextMax = sizeof(buff)/sizeof(CHAR);
+ item.pszText = buffA;
+ item.cchTextMax = sizeof(buffA)/sizeof(CHAR);
r = SendMessage(hTree, TVM_GETITEMA, 0, (LPARAM)&item);
expect(TRUE, r);
- ok(!strcmp("x", buff), "Expected item text to change\n");
+ ok(!strcmp("x", buffA), "Expected item text to change\n");
+
+ /* try A/W messages */
+ edit = (HWND)SendMessageA(hTree, TVM_EDITLABELA, 0, (LPARAM)hRoot);
+ ok(IsWindow(edit), "Expected valid handle\n");
+ ok(IsWindowUnicode(edit), "got ansi window\n");
+ r = SendMessage(hTree, WM_COMMAND, MAKEWPARAM(0, EN_KILLFOCUS), (LPARAM)edit);
+ expect(0, r);
+ ok(!IsWindow(edit), "expected invalid handle\n");
+
+ edit = (HWND)SendMessageA(hTree, TVM_EDITLABELW, 0, (LPARAM)hRoot);
+ ok(IsWindow(edit), "Expected valid handle\n");
+ ok(IsWindowUnicode(edit), "got ansi window\n");
+ r = SendMessage(hTree, WM_COMMAND, MAKEWPARAM(0, EN_KILLFOCUS), (LPARAM)edit);
+ expect(0, r);
+
+ /* alter text during TVM_BEGINLABELEDIT, check that it's preserved */
+ strcpy(buffA, "<root>");
+
+ item.mask = TVIF_TEXT;
+ item.hItem = hRoot;
+ item.pszText = buffA;
+ item.cchTextMax = 0;
+ r = SendMessage(hTree, TVM_SETITEMA, 0, (LPARAM)&item);
+ expect(TRUE, r);
+
+ g_beginedit_alter_text = TRUE;
+ edit = (HWND)SendMessageA(hTree, TVM_EDITLABELA, 0, (LPARAM)hRoot);
+ ok(IsWindow(edit), "Expected valid handle\n");
+ g_beginedit_alter_text = FALSE;
+
+ GetWindowTextA(edit, buffA, sizeof(buffA)/sizeof(CHAR));
+ ok(!strcmp(buffA, "<edittextaltered>"), "got string %s\n", buffA);
DestroyWindow(hTree);
}
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index c14bcab..02b5a7f 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -3871,6 +3871,8 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
infoPtr->wpEditOrig = (WNDPROC)SetWindowLongPtrW(hwndEdit, GWLP_WNDPROC,
(DWORD_PTR)
TREEVIEW_Edit_SubclassProc);
+ if (hItem->pszText)
+ SetWindowTextW(hwndEdit, hItem->pszText);
if (TREEVIEW_BeginLabelEditNotify(infoPtr, hItem))
{
@@ -3880,9 +3882,6 @@ TREEVIEW_EditLabel(TREEVIEW_INFO *infoPtr, HTREEITEM hItem)
return NULL;
}
- if (hItem->pszText)
- SetWindowTextW(hwndEdit, hItem->pszText);
-
SetFocus(hwndEdit);
SendMessageW(hwndEdit, EM_SETSEL, 0, -1);
ShowWindow(hwndEdit, SW_SHOW);
--
1.5.6.5
--------------070306000909050106090301--
More information about the wine-patches
mailing list