]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/private/kfileitemclipboard.cpp
Merge branch 'release/20.08' into master
[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 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 m_cutItems = KUrlMimeData::urlsFromMimeData(mimeData).toSet();
58 } else {
59 m_cutItems.clear();
60 }
61 emit cutItemsChanged();
62 }
63
64 KFileItemClipboard::KFileItemClipboard() :
65 QObject(nullptr),
66 m_cutItems()
67 {
68 updateCutItems();
69
70 connect(QApplication::clipboard(), &QClipboard::dataChanged,
71 this, &KFileItemClipboard::updateCutItems);
72 }