]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/private/kfileitemclipboard.cpp
ec31068e7db3ef58c246aa19f4d199faf36c0210
[dolphin.git] / src / kitemviews / private / kfileitemclipboard.cpp
1 /*
2 * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "kfileitemclipboard.h"
8
9 #include <KUrlMimeData>
10
11 #include <QApplication>
12 #include <QClipboard>
13 #include <QMimeData>
14
15 class KFileItemClipboardSingleton
16 {
17 public:
18 KFileItemClipboard instance;
19 };
20 Q_GLOBAL_STATIC(KFileItemClipboardSingleton, s_KFileItemClipboard)
21
22
23
24 KFileItemClipboard* KFileItemClipboard::instance()
25 {
26 return &s_KFileItemClipboard->instance;
27 }
28
29 bool KFileItemClipboard::isCut(const QUrl& url) const
30 {
31 return m_cutItems.contains(url);
32 }
33
34 QList<QUrl> KFileItemClipboard::cutItems() const
35 {
36 return m_cutItems.values();
37 }
38
39 KFileItemClipboard::~KFileItemClipboard()
40 {
41 }
42
43 void KFileItemClipboard::updateCutItems()
44 {
45 const QMimeData* mimeData = QApplication::clipboard()->mimeData();
46
47 // mimeData can be 0 according to https://bugs.kde.org/show_bug.cgi?id=335053
48 if (!mimeData) {
49 m_cutItems.clear();
50 Q_EMIT cutItemsChanged();
51 return;
52 }
53
54 const QByteArray data = mimeData->data(QStringLiteral("application/x-kde-cutselection"));
55 const bool isCutSelection = (!data.isEmpty() && data.at(0) == QLatin1Char('1'));
56 if (isCutSelection) {
57 const auto urlsFromMimeData = KUrlMimeData::urlsFromMimeData(mimeData);
58 m_cutItems = QSet<QUrl>(urlsFromMimeData.constBegin(), urlsFromMimeData.constEnd());
59 } else {
60 m_cutItems.clear();
61 }
62 Q_EMIT cutItemsChanged();
63 }
64
65 KFileItemClipboard::KFileItemClipboard() :
66 QObject(nullptr),
67 m_cutItems()
68 {
69 updateCutItems();
70
71 connect(QApplication::clipboard(), &QClipboard::dataChanged,
72 this, &KFileItemClipboard::updateCutItems);
73 }