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