[PATCH] Complete IFolderView::ItemCount() implementation
Nikolay Sivov
nsivov at codeweavers.com
Sun Apr 18 09:55:50 CDT 2010
---
dlls/shell32/shlview.c | 26 +++++++++++++++++++++++---
dlls/shell32/tests/shlview.c | 19 ++++++++++++++++++-
2 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/dlls/shell32/shlview.c b/dlls/shell32/shlview.c
index c7d9ee8..77b93de 100644
--- a/dlls/shell32/shlview.c
+++ b/dlls/shell32/shlview.c
@@ -2774,10 +2774,30 @@ static HRESULT WINAPI IFView_ItemCount(IFolderView *iface, UINT flags, int *item
TRACE("(%p)->(%u %p)\n", This, flags, items);
- if (flags != SVGIO_ALLVIEW)
- FIXME("some flags unsupported, %x\n", flags & ~SVGIO_ALLVIEW);
+ switch (flags & SVGIO_TYPE_MASK)
+ {
+ case SVGIO_SELECTION:
+ *items = SendMessageW(This->hWndList, LVM_GETSELECTEDCOUNT, 0, 0);
+ break;
+ case SVGIO_BACKGROUND:
+ case SVGIO_ALLVIEW:
+ *items = SendMessageW(This->hWndList, LVM_GETITEMCOUNT, 0, 0);
+ break;
+ case SVGIO_CHECKED:
+ {
+ DWORD state, count;
- *items = SendMessageW(This->hWndList, LVM_GETITEMCOUNT, 0, 0);
+ *items = count = SendMessageW(This->hWndList, LVM_GETSELECTEDCOUNT, 0, 0);
+ while (count--)
+ {
+ state = SendMessageW(This->hWndList, LVM_GETITEMSTATE, count, LVIS_STATEIMAGEMASK);
+ if (((state & LVIS_STATEIMAGEMASK) >> 12) != 2) (*items)--;
+ }
+ break;
+ }
+ default:
+ WARN("unsupported flags, %x\n", flags);
+ }
return S_OK;
}
diff --git a/dlls/shell32/tests/shlview.c b/dlls/shell32/tests/shlview.c
index dc60a49..4af7246 100644
--- a/dlls/shell32/tests/shlview.c
+++ b/dlls/shell32/tests/shlview.c
@@ -432,6 +432,11 @@ static const struct message folderview_itemcount_seq[] = {
{ 0 }
};
+static const struct message folderview_selected_count_seq[] = {
+ { LVM_GETSELECTEDCOUNT, sent },
+ { 0 }
+};
+
static void test_IShellView_CreateViewWindow(void)
{
IShellFolder *desktop;
@@ -621,7 +626,19 @@ if (0)
hr = IFolderView_ItemCount(fv, SVGIO_ALLVIEW, &ret);
ok(hr == S_OK, "got (0x%08x)\n", hr);
ok_sequence(sequences, LISTVIEW_SEQ_INDEX, folderview_itemcount_seq,
- "IFolderView::ItemCount", FALSE);
+ "IFolderView::ItemCount - SVGIO_ALLVIEW", FALSE);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ hr = IFolderView_ItemCount(fv, SVGIO_SELECTION, &ret);
+ ok(hr == S_OK, "got (0x%08x)\n", hr);
+ ok_sequence(sequences, LISTVIEW_SEQ_INDEX, folderview_selected_count_seq,
+ "IFolderView::ItemCount - SVGIO_SELECTION", FALSE);
+
+ flush_sequences(sequences, NUM_MSG_SEQUENCES);
+ hr = IFolderView_ItemCount(fv, SVGIO_BACKGROUND, &ret);
+ ok(hr == S_OK, "got (0x%08x)\n", hr);
+ ok_sequence(sequences, LISTVIEW_SEQ_INDEX, folderview_itemcount_seq,
+ "IFolderView::ItemCount - SVGIO_BACKGROUND", FALSE);
IShellBrowser_Release(browser);
IFolderView_Release(fv);
--
1.5.6.5
--=-CEFihzN79zW7jFaLudUl--
More information about the wine-patches
mailing list