Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qwindowsdropdataobject.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
5
6#include <QtCore/qurl.h>
7#include <QtCore/qmimedata.h>
9
11
25{
26}
27
29
30STDMETHODIMP
31QWindowsDropDataObject::GetData(LPFORMATETC pformatetc, LPSTGMEDIUM pmedium)
32{
33 if (shouldIgnore(pformatetc))
34 return ResultFromScode(DATA_E_FORMATETC);
35
36 return QWindowsOleDataObject::GetData(pformatetc, pmedium);
37}
38
39STDMETHODIMP
41{
42 if (shouldIgnore(pformatetc))
43 return ResultFromScode(DATA_E_FORMATETC);
44
45 return QWindowsOleDataObject::QueryGetData(pformatetc);
46}
47
48// If the data is "text/uri-list" only, and all URIs are for local files,
49// we prevent it from being exported as text or URLs, to make target applications
50// like MS Office attach or open the files instead of creating local hyperlinks.
51bool QWindowsDropDataObject::shouldIgnore(LPFORMATETC pformatetc) const
52{
53 QMimeData *dropData = mimeData();
54
55 if (dropData && dropData->formats().size() == 1 && dropData->hasUrls()) {
57 if (pformatetc->cfFormat == CF_UNICODETEXT
58 || pformatetc->cfFormat == CF_TEXT
59 || formatName == QStringLiteral("UniformResourceLocator")
60 || formatName == QStringLiteral("UniformResourceLocatorW")) {
61 const auto urls = dropData->urls();
62 return std::all_of(urls.cbegin(), urls.cend(), [] (const QUrl &u) { return u.isLocalFile(); });
63 }
64 }
65
66 return false;
67}
68
\inmodule QtCore
Definition qmimedata.h:16
bool hasUrls() const
Returns true if the object can return a list of urls; otherwise returns false.
QList< QUrl > urls() const
Returns a list of URLs contained within the MIME data object.
virtual QStringList formats() const
Returns a list of formats supported by the object.
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
\inmodule QtCore
Definition qurl.h:94
STDMETHOD() QueryGetData(LPFORMATETC pformatetc) override
STDMETHOD() GetData(LPFORMATETC pformatetcIn, LPSTGMEDIUM pmedium) override
QWindowsDropDataObject(QMimeData *mimeData)
~QWindowsDropDataObject() override
static QString clipboardFormatName(int cf)
OLE data container.
Definition qwindowsole.h:22
QMimeData * mimeData() const
STDMETHOD() QueryGetData(LPFORMATETC pformatetc) override
STDMETHOD() GetData(LPFORMATETC pformatetcIn, LPSTGMEDIUM pmedium) override
Combined button and popup list for selecting options.
static QByteArray formatName(int format)
#define QStringLiteral(str)
QMimeData * mimeData