summaryrefslogtreecommitdiffstats
path: root/WebCore/platform/win/ClipboardWin.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/platform/win/ClipboardWin.cpp')
-rw-r--r--WebCore/platform/win/ClipboardWin.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/WebCore/platform/win/ClipboardWin.cpp b/WebCore/platform/win/ClipboardWin.cpp
index b2e8e3e..b75ce46 100644
--- a/WebCore/platform/win/ClipboardWin.cpp
+++ b/WebCore/platform/win/ClipboardWin.cpp
@@ -577,8 +577,32 @@ HashSet<String> ClipboardWin::types() const
PassRefPtr<FileList> ClipboardWin::files() const
{
- notImplemented();
- return 0;
+ RefPtr<FileList> files = FileList::create();
+ if (policy() != ClipboardReadable && policy() != ClipboardTypesReadable)
+ return files.release();
+
+ if (!m_dataObject)
+ return files.release();
+
+ STGMEDIUM medium;
+ if (FAILED(m_dataObject->GetData(cfHDropFormat(), &medium)))
+ return files.release();
+
+ HDROP hdrop = reinterpret_cast<HDROP>(GlobalLock(medium.hGlobal));
+ if (!hdrop)
+ return files.release();
+
+ WCHAR filename[MAX_PATH];
+ UINT fileCount = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
+ for (UINT i = 0; i < fileCount; i++) {
+ if (!DragQueryFileW(hdrop, i, filename, ARRAYSIZE(filename)))
+ continue;
+ files->append(File::create(reinterpret_cast<UChar*>(filename)));
+ }
+
+ GlobalUnlock(medium.hGlobal);
+ ReleaseStgMedium(&medium);
+ return files.release();
}
void ClipboardWin::setDragImage(CachedImage* image, Node *node, const IntPoint &loc)