Warning, /graphics/krita/3rdparty/ext_qt/0024-Android-Add-clipboard-buffer-for-mimeTypes-that-aren.patch is written in an unsupported language. File is not indexed.
0001 From 654d26ce54d8bedfe3ec22eebfd3e90305e4241f Mon Sep 17 00:00:00 2001 0002 From: Sharaf Zaman <sharafzaz121@gmail.com> 0003 Date: Thu, 8 Oct 2020 13:35:02 +0000 0004 Subject: [PATCH 24/46] Android: Add clipboard buffer for mimeTypes that aren't 0005 supported 0006 0007 Paste: If the data exists in clipboard, we use that. If 0008 the data doesn't exist, we check if it is local buffer. 0009 0010 Copy: If we set the data and it isn't a compatible mimeType, 0011 then we clear the system clipboard and store the data on 0012 app's buffer. 0013 --- 0014 .../org/qtproject/qt5/android/QtNative.java | 16 +++++++++++++ 0015 .../platforms/android/androidjniclipboard.cpp | 11 +++++++++ 0016 .../platforms/android/androidjniclipboard.h | 2 ++ 0017 .../android/qandroidplatformclipboard.cpp | 24 +++++++++++++++---- 0018 .../android/qandroidplatformclipboard.h | 3 +++ 0019 5 files changed, 51 insertions(+), 5 deletions(-) 0020 0021 diff --git a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 0022 index 5e9749f264..367b063a0e 100644 0023 --- a/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 0024 +++ b/src/android/jar/src/org/qtproject/qt5/android/QtNative.java 0025 @@ -899,6 +899,14 @@ public class QtNative 0026 private static void clearClipData() 0027 { 0028 m_usePrimaryClip = false; 0029 + if (m_clipboardManager != null) { 0030 + if (Build.VERSION.SDK_INT >= 28) { 0031 + m_clipboardManager.clearPrimaryClip(); 0032 + } else { 0033 + ClipData clipData = ClipData.newPlainText("text/plain", ""); 0034 + m_clipboardManager.setPrimaryClip(clipData); 0035 + } 0036 + } 0037 } 0038 private static void setClipboardText(String text) 0039 { 0040 @@ -971,6 +979,14 @@ public class QtNative 0041 } 0042 } 0043 0044 + private static boolean hasClipData() 0045 + { 0046 + if (m_clipboardManager != null) { 0047 + return m_clipboardManager.hasPrimaryClip() && m_usePrimaryClip; 0048 + } 0049 + return false; 0050 + } 0051 + 0052 private static void setClipboardHtml(String text, String html) 0053 { 0054 if (m_clipboardManager != null) { 0055 diff --git a/src/plugins/platforms/android/androidjniclipboard.cpp b/src/plugins/platforms/android/androidjniclipboard.cpp 0056 index 671d0b56d0..ec52eaf77a 100644 0057 --- a/src/plugins/platforms/android/androidjniclipboard.cpp 0058 +++ b/src/plugins/platforms/android/androidjniclipboard.cpp 0059 @@ -123,6 +123,17 @@ namespace QtAndroidClipboard 0060 { 0061 m_manager->emitChanged(QClipboard::Clipboard); 0062 } 0063 + 0064 + bool hasClipboardMimeData() 0065 + { 0066 + return QJNIObjectPrivate::callStaticMethod<jboolean>(applicationClass(), "hasClipData"); 0067 + } 0068 + 0069 + void clearClipboardMimeData() 0070 + { 0071 + QJNIObjectPrivate::callStaticMethod<void>(applicationClass(), "clearClipData"); 0072 + } 0073 + 0074 } 0075 0076 QT_END_NAMESPACE 0077 diff --git a/src/plugins/platforms/android/androidjniclipboard.h b/src/plugins/platforms/android/androidjniclipboard.h 0078 index e83e6b555c..1295438813 100644 0079 --- a/src/plugins/platforms/android/androidjniclipboard.h 0080 +++ b/src/plugins/platforms/android/androidjniclipboard.h 0081 @@ -54,6 +54,8 @@ namespace QtAndroidClipboard 0082 void setClipboardMimeData(QMimeData *data); 0083 QMimeData *getClipboardMimeData(); 0084 void onClipboardDataChanged(JNIEnv */*env*/, jobject /*thiz*/); 0085 + bool hasClipboardMimeData(); 0086 + void clearClipboardMimeData(); 0087 // Clipboard support 0088 } 0089 0090 diff --git a/src/plugins/platforms/android/qandroidplatformclipboard.cpp b/src/plugins/platforms/android/qandroidplatformclipboard.cpp 0091 index 17dfe27d12..d3a6cd1b0e 100644 0092 --- a/src/plugins/platforms/android/qandroidplatformclipboard.cpp 0093 +++ b/src/plugins/platforms/android/qandroidplatformclipboard.cpp 0094 @@ -44,6 +44,7 @@ 0095 QT_BEGIN_NAMESPACE 0096 0097 QAndroidPlatformClipboard::QAndroidPlatformClipboard() 0098 + : m_mimeData(nullptr) 0099 { 0100 QtAndroidClipboard::setClipboardManager(this); 0101 } 0102 @@ -54,15 +55,28 @@ QMimeData *QAndroidPlatformClipboard::mimeData(QClipboard::Mode mode) 0103 Q_ASSERT(supportsMode(mode)); 0104 QMimeData *data = QtAndroidClipboard::getClipboardMimeData(); 0105 data->setParent(this); 0106 - return data; 0107 + 0108 + // this means clipboard is empty, so data could possibly be in m_mimeData 0109 + if (!QtAndroidClipboard::hasClipboardMimeData() && m_mimeData) { 0110 + return m_mimeData.data(); 0111 + } else { 0112 + m_mimeData.reset(); 0113 + return data; 0114 + } 0115 } 0116 0117 void QAndroidPlatformClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) 0118 { 0119 - if (data && supportsMode(mode)) 0120 - QtAndroidClipboard::setClipboardMimeData(data); 0121 - if (data != 0) 0122 - data->deleteLater(); 0123 + if (data && supportsMode(mode) && m_mimeData.data() != data) { 0124 + if (data->hasHtml() || data->hasText() || data->hasUrls()) { 0125 + QtAndroidClipboard::setClipboardMimeData(data); 0126 + data->deleteLater(); 0127 + } else { 0128 + m_mimeData.reset(data); 0129 + QtAndroidClipboard::clearClipboardMimeData(); 0130 + emitChanged(mode); 0131 + } 0132 + } 0133 } 0134 0135 bool QAndroidPlatformClipboard::supportsMode(QClipboard::Mode mode) const 0136 diff --git a/src/plugins/platforms/android/qandroidplatformclipboard.h b/src/plugins/platforms/android/qandroidplatformclipboard.h 0137 index 3ed9d323f8..d7d319f504 100644 0138 --- a/src/plugins/platforms/android/qandroidplatformclipboard.h 0139 +++ b/src/plugins/platforms/android/qandroidplatformclipboard.h 0140 @@ -54,6 +54,9 @@ public: 0141 QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override; 0142 void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) override; 0143 bool supportsMode(QClipboard::Mode mode) const override; 0144 + 0145 +private: 0146 + QScopedPointer<QMimeData> m_mimeData; 0147 }; 0148 0149 QT_END_NAMESPACE 0150 -- 0151 2.33.0 0152