shell32/shellview: Implemented IFolderView::GetSelectionMarkedItem() with basic test.
authorNikolay Sivov <nsivov@codeweavers.com>
Sat, 6 Mar 2010 20:54:03 +0000 (23:54 +0300)
committerAlexandre Julliard <julliard@winehq.org>
Mon, 15 Mar 2010 13:18:06 +0000 (14:18 +0100)
dlls/shell32/shlview.c
dlls/shell32/tests/shlview.c

index c2fb9730e1eae64df8856e9bc835d866fa9adafd..8778dbd6e122a479adb4d0d0b79d7eaaa878c98f 100644 (file)
@@ -2739,9 +2739,13 @@ static HRESULT WINAPI IFView_Items(IFolderView *iface, UINT flags, REFIID riid,
 
 static HRESULT WINAPI IFView_GetSelectionMarkedItem(IFolderView *iface, int *item)
 {
-       IShellViewImpl *This = impl_from_IFolderView(iface);
-       FIXME("(%p)->(%p), stub\n", This, item);
-       return E_NOTIMPL;
+    IShellViewImpl *This = impl_from_IFolderView(iface);
+
+    TRACE("(%p)->(%p)\n", This, item);
+
+    *item = SendMessageW(This->hWndList, LVM_GETSELECTIONMARK, 0, 0);
+
+    return S_OK;
 }
 
 static HRESULT WINAPI IFView_GetFocusedItem(IFolderView *iface, int *item)
index a14c691e92889a4c2385bf5f572defb1c38531dc..fd65e49a9dfb62d633b47ce5e0571129d4feb826 100644 (file)
@@ -298,6 +298,11 @@ static const struct message folderview_getspacing_seq[] = {
     { 0 }
 };
 
+static const struct message folderview_getselectionmarked_seq[] = {
+    { LVM_GETSELECTIONMARK, sent },
+    { 0 }
+};
+
 static void test_IShellView_CreateViewWindow(void)
 {
     IShellFolder *desktop;
@@ -344,7 +349,7 @@ static void test_IFolderView(void)
     IFolderView *fv;
     HWND hwnd_view, hwnd_list;
     HRESULT hr;
-    DWORD ret;
+    INT ret;
     POINT pt;
     RECT r;
 
@@ -371,6 +376,9 @@ if (0)
 {
     /* crashes on Vista and Win2k8 - List not created yet case */
     hr = IFolderView_GetSpacing(fv, &pt);
+
+    /* crashes on XP */
+    hr = IFolderView_GetSelectionMarkedItem(fv, NULL);
 }
 
     browser = IShellBrowserImpl_Construct();
@@ -414,6 +422,19 @@ if (0)
         ok(pt.x == LOWORD(ret) && pt.y == HIWORD(ret), "got (%d, %d)\n", LOWORD(ret), HIWORD(ret));
     }
 
+    /* IFolderView::GetSelectionMarkedItem */
+if (0)
+{
+    /* crashes on XP */
+    hr = IFolderView_GetSelectionMarkedItem(fv, NULL);
+}
+
+    flush_sequences(sequences, NUM_MSG_SEQUENCES);
+    hr = IFolderView_GetSelectionMarkedItem(fv, &ret);
+    ok(hr == S_OK, "got (0x%08x)\n", hr);
+    ok_sequence(sequences, LISTVIEW_SEQ_INDEX, folderview_getselectionmarked_seq,
+                                  "IFolderView::GetSelectionMarkedItem", FALSE);
+
     IShellBrowser_Release(browser);
     IFolderView_Release(fv);
     IShellView_Release(view);