Nikolay Sivov : comctl32/listview: Don' t change Z-order of edit window while resizing edit box.

Alexandre Julliard julliard at winehq.org
Sun Apr 25 20:01:48 CDT 2010


Module: wine
Branch: master
Commit: 379cf468734363da9c5aa60dec23702ae478a4a5
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=379cf468734363da9c5aa60dec23702ae478a4a5

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Apr 23 22:39:55 2010 +0400

comctl32/listview: Don't change Z-order of edit window while resizing edit box.

---

 dlls/comctl32/listview.c       |   14 ++++----------
 dlls/comctl32/tests/listview.c |   26 +++++++++++++++++++-------
 2 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 256d4c6..09c731a 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -11599,7 +11599,7 @@ static LRESULT LISTVIEW_Command(LISTVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lP
 
             /* Select font to get the right dimension of the string */
             hFont = (HFONT)SendMessageW(infoPtr->hwndEdit, WM_GETFONT, 0, 0);
-            if(hFont != 0)
+            if (hFont)
             {
                 hOldFont = SelectObject(hdc, hFont);
             }
@@ -11612,16 +11612,10 @@ static LRESULT LISTVIEW_Command(LISTVIEW_INFO *infoPtr, WPARAM wParam, LPARAM lP
                 GetTextMetricsW(hdc, &textMetric);
                 sz.cx += (textMetric.tmMaxCharWidth * 2);
 
-		SetWindowPos (
-		    infoPtr->hwndEdit,
-		    HWND_TOP,
-		    0,
-		    0,
-		    sz.cx,
-		    rect.bottom - rect.top,
-		    SWP_DRAWFRAME|SWP_NOMOVE);
+		SetWindowPos(infoPtr->hwndEdit, NULL, 0, 0, sz.cx,
+		    rect.bottom - rect.top, SWP_DRAWFRAME | SWP_NOMOVE | SWP_NOZORDER);
 	    }
-            if(hFont != 0)
+            if (hFont)
                 SelectObject(hdc, hOldFont);
 
 	    ReleaseDC(infoPtr->hwndEdit, hdc);
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 4bf877a..176f323 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -3422,12 +3422,12 @@ static void test_getitemrect(void)
 
 static void test_editbox(void)
 {
-    HWND hwnd, hwndedit, hwndedit2;
+    static CHAR testitemA[]  = "testitem";
+    static CHAR testitem1A[] = "testitem_quitelongname";
+    static CHAR buffer[25];
+    HWND hwnd, hwndedit, hwndedit2, header;
     LVITEMA item;
     DWORD r;
-    static CHAR testitemA[]  = "testitem";
-    static CHAR testitem1A[] = "testitem1";
-    static CHAR buffer[10];
 
     hwnd = create_listview_control(LVS_EDITLABELS | LVS_REPORT);
     ok(hwnd != NULL, "failed to create a listview window\n");
@@ -3447,16 +3447,28 @@ static void test_editbox(void)
     hwndedit = (HWND)SendMessage(hwnd, LVM_EDITLABEL, 0, 0);
     ok(IsWindow(hwndedit), "Expected Edit window to be created\n");
 
+    /* test children Z-order after Edit box created */
+    header = (HWND)SendMessageA(hwnd, LVM_GETHEADER, 0, 0);
+    ok(IsWindow(header), "Expected header to be created\n");
+    ok(GetTopWindow(hwnd) == header, "Expected header to be on top\n");
+    ok(GetNextWindow(header, GW_HWNDNEXT) == hwndedit, "got %p\n", GetNextWindow(header, GW_HWNDNEXT));
+
     /* modify initial string */
     r = SendMessage(hwndedit, WM_SETTEXT, 0, (LPARAM)testitem1A);
     expect(TRUE, r);
+
+    /* edit window is resized and repositioned,
+       check again for Z-order - it should be preserved */
+    ok(GetTopWindow(hwnd) == header, "Expected header to be on top\n");
+    ok(GetNextWindow(header, GW_HWNDNEXT) == hwndedit, "got %p\n", GetNextWindow(header, GW_HWNDNEXT));
+
     /* return focus to listview */
     SetFocus(hwnd);
 
     memset(&item, 0, sizeof(item));
     item.mask = LVIF_TEXT;
     item.pszText = buffer;
-    item.cchTextMax = 10;
+    item.cchTextMax = sizeof(buffer);
     item.iItem = 0;
     item.iSubItem = 0;
     r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM)&item);
@@ -3496,7 +3508,7 @@ static void test_editbox(void)
     expect(0, r);
     memset(&item, 0, sizeof(item));
     item.pszText = buffer;
-    item.cchTextMax = 10;
+    item.cchTextMax = sizeof(buffer);
     item.iItem = 0;
     item.iSubItem = 0;
     r = SendMessage(hwnd, LVM_GETITEMTEXTA, 0, (LPARAM)&item);
@@ -3522,7 +3534,7 @@ static void test_editbox(void)
 
     memset(&item, 0, sizeof(item));
     item.pszText = buffer;
-    item.cchTextMax = 10;
+    item.cchTextMax = sizeof(buffer);
     item.iItem = 0;
     item.iSubItem = 0;
     r = SendMessage(hwnd, LVM_GETITEMTEXTA, 0, (LPARAM)&item);




More information about the wine-cvs mailing list