Jason Edmeades : comctl32/listview: Issue LVM_DELETEALLITEMS from WM_DESTROY.
Alexandre Julliard
julliard at winehq.org
Thu Jan 14 11:33:37 CST 2010
Module: wine
Branch: master
Commit: 81d813542426d660c2289b4cb72797d7f156d285
URL: http://source.winehq.org/git/wine.git/?a=commit;h=81d813542426d660c2289b4cb72797d7f156d285
Author: Jason Edmeades <jason.edmeades at googlemail.com>
Date: Wed Jan 13 14:51:01 2010 -0800
comctl32/listview: Issue LVM_DELETEALLITEMS from WM_DESTROY.
---
dlls/comctl32/listview.c | 9 +++++----
dlls/comctl32/tests/listview.c | 30 +++++++++++++++++++++++++++++-
2 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index d21935f..80a32f7 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -9188,10 +9188,14 @@ static LRESULT LISTVIEW_Create(HWND hwnd, const CREATESTRUCTW *lpcs)
* Success: 0
* Failure: -1
*/
-static LRESULT LISTVIEW_Destroy(const LISTVIEW_INFO *infoPtr)
+static LRESULT LISTVIEW_Destroy(LISTVIEW_INFO *infoPtr)
{
HTHEME theme = GetWindowTheme(infoPtr->hwndSelf);
CloseThemeData(theme);
+
+ /* delete all items */
+ LISTVIEW_DeleteAllItems(infoPtr, TRUE);
+
return 0;
}
@@ -9923,9 +9927,6 @@ static LRESULT LISTVIEW_NCDestroy(LISTVIEW_INFO *infoPtr)
TRACE("()\n");
- /* delete all items */
- LISTVIEW_DeleteAllItems(infoPtr, TRUE);
-
/* destroy data structure */
DPA_Destroy(infoPtr->hdpaItems);
DPA_Destroy(infoPtr->hdpaItemIds);
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 0122886..0bac4ec 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -32,7 +32,8 @@
#define PARENT_FULL_SEQ_INDEX 1
#define LISTVIEW_SEQ_INDEX 2
#define EDITBOX_SEQ_INDEX 3
-#define NUM_MSG_SEQUENCES 4
+#define COMBINED_SEQ_INDEX 4
+#define NUM_MSG_SEQUENCES 5
#define LISTVIEW_ID 0
#define HEADER_ID 1
@@ -286,6 +287,18 @@ static const struct message hover_parent[] = {
{ 0 }
};
+static const struct message listview_destroy[] = {
+ { 0x0090, sent|optional }, /* Vista */
+ { WM_PARENTNOTIFY, sent },
+ { WM_SHOWWINDOW, sent },
+ { WM_WINDOWPOSCHANGING, sent },
+ { WM_WINDOWPOSCHANGED, sent|optional },
+ { WM_DESTROY, sent },
+ { WM_NOTIFY, sent|id, 0, 0, LVN_DELETEALLITEMS },
+ { WM_NCDESTROY, sent },
+ { 0 }
+};
+
static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static LONG defwndproc_counter = 0;
@@ -312,6 +325,7 @@ static LRESULT WINAPI parent_wnd_proc(HWND hwnd, UINT message, WPARAM wParam, LP
trace("parent: %p, %04x, %08lx, %08lx\n", hwnd, message, wParam, lParam);
add_message(sequences, PARENT_SEQ_INDEX, &msg);
+ add_message(sequences, COMBINED_SEQ_INDEX, &msg);
}
add_message(sequences, PARENT_FULL_SEQ_INDEX, &msg);
@@ -460,6 +474,7 @@ static LRESULT WINAPI listview_subclass_proc(HWND hwnd, UINT message, WPARAM wPa
msg.lParam = lParam;
msg.id = LISTVIEW_ID;
add_message(sequences, LISTVIEW_SEQ_INDEX, &msg);
+ add_message(sequences, COMBINED_SEQ_INDEX, &msg);
defwndproc_counter++;
ret = CallWindowProcA(oldproc, hwnd, message, wParam, lParam);
@@ -4263,6 +4278,18 @@ static void test_hover(void)
DestroyWindow(hwnd);
}
+static void test_destroynotify(void)
+{
+ HWND hwnd;
+
+ hwnd = create_listview_control(LVS_REPORT);
+ ok(hwnd != NULL, "failed to create listview window\n");
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ DestroyWindow(hwnd);
+ ok_sequence(sequences, COMBINED_SEQ_INDEX, listview_destroy, "check destroy order", FALSE);
+}
+
START_TEST(listview)
{
HMODULE hComctl32;
@@ -4323,6 +4350,7 @@ START_TEST(listview)
test_approximate_viewrect();
test_finditem();
test_hover();
+ test_destroynotify();
if (!load_v6_module(&ctx_cookie, &hCtx))
{
More information about the wine-cvs
mailing list