From 301141c7557a85f6faddec2ba73a94934de3879c Mon Sep 17 00:00:00 2001 From: albexk Date: Wed, 17 Jan 2024 17:43:54 +0300 Subject: [PATCH 1/2] Remove Android TextField workaround It has been fixed in Qt 6.5.3, 6.6.0 --- client/amnezia_application.cpp | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index fe360818..72630f06 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -167,20 +167,6 @@ void AmneziaApplication::init() }); } #endif - -// Android TextField clipboard workaround -// https://bugreports.qt.io/browse/QTBUG-113461 -#ifdef Q_OS_ANDROID - QObject::connect(qApp, &QGuiApplication::applicationStateChanged, [](Qt::ApplicationState state) { - if (state == Qt::ApplicationActive) { - if (qApp->clipboard()->mimeData()->formats().contains("text/html")) { - QTextDocument doc; - doc.setHtml(qApp->clipboard()->mimeData()->html()); - qApp->clipboard()->setText(doc.toPlainText()); - } - } - }); -#endif } void AmneziaApplication::registerTypes() From 2552e33d6470d9365f34b92db3c07b0bf10a8ddd Mon Sep 17 00:00:00 2001 From: albexk Date: Wed, 17 Jan 2024 17:46:54 +0300 Subject: [PATCH 2/2] Add Android TextArea clipboard workaround --- client/amnezia_application.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/client/amnezia_application.cpp b/client/amnezia_application.cpp index 72630f06..0590b6d1 100644 --- a/client/amnezia_application.cpp +++ b/client/amnezia_application.cpp @@ -167,6 +167,23 @@ void AmneziaApplication::init() }); } #endif + +// Android TextArea clipboard workaround +// Text from TextArea always has "text/html" mime-type: +// /qt/6.6.1/Src/qtdeclarative/src/quick/items/qquicktextcontrol.cpp:1865 +// Next, html is created for this mime-type: +// /qt/6.6.1/Src/qtdeclarative/src/quick/items/qquicktextcontrol.cpp:1885 +// And this html goes to the Androids clipboard, i.e. text from TextArea is always copied as richText: +// /qt/6.6.1/Src/qtbase/src/plugins/platforms/android/androidjniclipboard.cpp:46 +// So we catch all the copies to the clipboard and clear them from "text/html" +#ifdef Q_OS_ANDROID + connect(QGuiApplication::clipboard(), &QClipboard::dataChanged, []() { + auto clipboard = QGuiApplication::clipboard(); + if (clipboard->mimeData()->hasHtml()) { + clipboard->setText(clipboard->text()); + } + }); +#endif } void AmneziaApplication::registerTypes()