]> cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/private/kfileitemclipboard.cpp
d27869dffd31a64c75a6b69353db379944eeab8e
[dolphin.git] / src / kitemviews / private / kfileitemclipboard.cpp
1 /***************************************************************************
2 * Copyright (C) 2011 by Peter Penz <peter.penz19@gmail.com> *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
18 ***************************************************************************/
19
20 #include "kfileitemclipboard.h"
21
22 #include <QApplication>
23 #include <QClipboard>
24 #include <QMimeData>
25 #include <KUrlMimeData>
26
27 class KFileItemClipboardSingleton
28 {
29 public:
30 KFileItemClipboard instance;
31 };
32 Q_GLOBAL_STATIC(KFileItemClipboardSingleton, s_KFileItemClipboard)
33
34
35
36 KFileItemClipboard* KFileItemClipboard::instance()
37 {
38 return &s_KFileItemClipboard->instance;
39 }
40
41 bool KFileItemClipboard::isCut(const QUrl& url) const
42 {
43 return m_cutItems.contains(url);
44 }
45
46 QList<QUrl> KFileItemClipboard::cutItems() const
47 {
48 return m_cutItems.toList();
49 }
50
51 KFileItemClipboard::~KFileItemClipboard()
52 {
53 }
54
55 void KFileItemClipboard::updateCutItems()
56 {
57 const QMimeData* mimeData = QApplication::clipboard()->mimeData();
58
59 // mimeData can be 0 according to https://bugs.kde.org/show_bug.cgi?id=335053
60 if (!mimeData) {
61 m_cutItems.clear();
62 emit cutItemsChanged();
63 return;
64 }
65
66 const QByteArray data = mimeData->data(QStringLiteral("application/x-kde-cutselection"));
67 const bool isCutSelection = (!data.isEmpty() && data.at(0) == QLatin1Char('1'));
68 if (isCutSelection) {
69 m_cutItems = KUrlMimeData::urlsFromMimeData(mimeData).toSet();
70 } else {
71 m_cutItems.clear();
72 }
73 emit cutItemsChanged();
74 }
75
76 KFileItemClipboard::KFileItemClipboard() :
77 QObject(0),
78 m_cutItems()
79 {
80 updateCutItems();
81
82 connect(QApplication::clipboard(), &QClipboard::dataChanged,
83 this, &KFileItemClipboard::updateCutItems);
84 }