summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlya Fedin <fedin-ilja2010@ya.ru>2023-02-09 09:51:54 +0400
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-03-01 16:05:23 +0000
commit9467141a9bbc52d5fff6c36728976bbc972c5fc6 (patch)
treeb8a89bb6de8dd8389872379f6b81a26e5db302c1
parentb7c6654987fde2cbfb9dead748c5fe325258c391 (diff)
downloadqtbase-9467141a9bbc52d5fff6c36728976bbc972c5fc6.tar.gz
Rely on Windows to generate CF_TEXT when active code page is UTF-8
It's possible since Windows 10 1903 to set the active code page to UTF-8 using the manifest. In that mode, QString::toLocal8Bit converts to UTF-8 and the legacy programs not using UTF-8 codepage can't interpret the value. We can detect whether the UTF-8 code page is used, and in that case only provide data as CF_UNICODETEXT. Windows will then synthesize the CF_TEXT format when the clipboard data is consumed, using the right code page for the target application. https://learn.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page Change-Id: Ie024a618556d9bb5b5c7ac70507d279b959ff6db Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit 481771a331b904810ce3da459d4b6293a83fcec0) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--src/plugins/platforms/windows/qwindowsmimeregistry.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/plugins/platforms/windows/qwindowsmimeregistry.cpp b/src/plugins/platforms/windows/qwindowsmimeregistry.cpp
index 64b5dc463e..2d1c42df91 100644
--- a/src/plugins/platforms/windows/qwindowsmimeregistry.cpp
+++ b/src/plugins/platforms/windows/qwindowsmimeregistry.cpp
@@ -347,7 +347,7 @@ public:
bool QWindowsMimeText::canConvertFromMime(const FORMATETC &formatetc, const QMimeData *mimeData) const
{
int cf = getCf(formatetc);
- return (cf == CF_UNICODETEXT || cf == CF_TEXT) && mimeData->hasText();
+ return (cf == CF_UNICODETEXT || (cf == CF_TEXT && GetACP() != CP_UTF8)) && mimeData->hasText();
}
/*
@@ -448,7 +448,8 @@ QList<FORMATETC> QWindowsMimeText::formatsForMime(const QString &mimeType, const
QList<FORMATETC> formatics;
if (mimeType.startsWith(u"text/plain") && mimeData->hasText()) {
formatics += setCf(CF_UNICODETEXT);
- formatics += setCf(CF_TEXT);
+ if (GetACP() != CP_UTF8)
+ formatics += setCf(CF_TEXT);
}
return formatics;
}