Android: Only have one valid QMimeData object kept around

Once the clipboard data is queried then we can clean up the previous
QMimeData object created. So rather than keeping on to it and cleaning
up when the clipboard is created we can delete it at that point. This
means it is not necessary to make it a QObject subclass, so we can save
in that respect too.

Pick-to: 5.15
Change-Id: I152ca6ea5c713abe25f75ca2016759c0e3152bfb
Reviewed-by: Assam Boudjelthia <assam.boudjelthia@qt.io>
This commit is contained in:
Andy Shaw 2020-04-27 10:34:33 +02:00
parent 77e978001b
commit 857722ed8f
2 changed files with 13 additions and 4 deletions

View File

@ -48,12 +48,19 @@ QAndroidPlatformClipboard::QAndroidPlatformClipboard()
QtAndroidClipboard::setClipboardManager(this);
}
QAndroidPlatformClipboard::~QAndroidPlatformClipboard()
{
if (data)
delete data;
}
QMimeData *QAndroidPlatformClipboard::mimeData(QClipboard::Mode mode)
{
Q_UNUSED(mode);
Q_ASSERT(supportsMode(mode));
QMimeData *data = QtAndroidClipboard::getClipboardMimeData();
data->setParent(this);
if (data)
data->deleteLater();
data = QtAndroidClipboard::getClipboardMimeData();
return data;
}

View File

@ -46,14 +46,16 @@
#ifndef QT_NO_CLIPBOARD
QT_BEGIN_NAMESPACE
class QAndroidPlatformClipboard : public QObject, public QPlatformClipboard
class QAndroidPlatformClipboard : public QPlatformClipboard
{
public:
QAndroidPlatformClipboard();
~QAndroidPlatformClipboard();
QMimeData *mimeData(QClipboard::Mode mode = QClipboard::Clipboard) override;
void setMimeData(QMimeData *data, QClipboard::Mode mode = QClipboard::Clipboard) override;
bool supportsMode(QClipboard::Mode mode) const override;
private:
QMimeData *data = nullptr;
};
QT_END_NAMESPACE