X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/06e5202c4727df7295fc7a515e41f65a9c2fcdde..30a807e44afb334dd153c8bcbdbde4f36942bee0:/src/kitemviews/private/kfileitemclipboard.cpp diff --git a/src/kitemviews/private/kfileitemclipboard.cpp b/src/kitemviews/private/kfileitemclipboard.cpp index c5f88194d..47718fa02 100644 --- a/src/kitemviews/private/kfileitemclipboard.cpp +++ b/src/kitemviews/private/kfileitemclipboard.cpp @@ -1,25 +1,13 @@ -/*************************************************************************** - * Copyright (C) 2011 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ +/* + * SPDX-FileCopyrightText: 2011 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ #include "kfileitemclipboard.h" -#include +#include + #include #include #include @@ -29,23 +17,21 @@ class KFileItemClipboardSingleton public: KFileItemClipboard instance; }; -K_GLOBAL_STATIC(KFileItemClipboardSingleton, s_KFileItemClipboard) - - +Q_GLOBAL_STATIC(KFileItemClipboardSingleton, s_KFileItemClipboard) -KFileItemClipboard* KFileItemClipboard::instance() +KFileItemClipboard *KFileItemClipboard::instance() { return &s_KFileItemClipboard->instance; } -bool KFileItemClipboard::isCut(const KUrl& url) const +bool KFileItemClipboard::isCut(const QUrl &url) const { return m_cutItems.contains(url); } -QList KFileItemClipboard::cutItems() const +QList KFileItemClipboard::cutItems() const { - return m_cutItems.toList(); + return m_cutItems.values(); } KFileItemClipboard::~KFileItemClipboard() @@ -54,19 +40,33 @@ KFileItemClipboard::~KFileItemClipboard() void KFileItemClipboard::updateCutItems() { - const QMimeData* mimeData = QApplication::clipboard()->mimeData(); - m_cutItems = KUrl::List::fromMimeData(mimeData).toSet(); - emit cutItemsChanged(); + const QMimeData *mimeData = QApplication::clipboard()->mimeData(); + + // mimeData can be 0 according to https://bugs.kde.org/show_bug.cgi?id=335053 + if (!mimeData) { + m_cutItems.clear(); + Q_EMIT cutItemsChanged(); + return; + } + + const QByteArray data = mimeData->data(QStringLiteral("application/x-kde-cutselection")); + const bool isCutSelection = (!data.isEmpty() && data.at(0) == QLatin1Char('1')); + if (isCutSelection) { + const auto urlsFromMimeData = KUrlMimeData::urlsFromMimeData(mimeData); + m_cutItems = QSet(urlsFromMimeData.constBegin(), urlsFromMimeData.constEnd()); + } else { + m_cutItems.clear(); + } + Q_EMIT cutItemsChanged(); } -KFileItemClipboard::KFileItemClipboard() : - QObject(0), - m_cutItems() +KFileItemClipboard::KFileItemClipboard() + : QObject(nullptr) + , m_cutItems() { updateCutItems(); - connect(QApplication::clipboard(), SIGNAL(dataChanged()), - this, SLOT(updateCutItems())); + connect(QApplication::clipboard(), &QClipboard::dataChanged, this, &KFileItemClipboard::updateCutItems); } -#include "kfileitemclipboard.moc" +#include "moc_kfileitemclipboard.cpp"