]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Do not crash if QApplication::clipboard()->mimeData() is a null pointer
authorFrank Reininghaus <frank78ac@googlemail.com>
Thu, 12 Jun 2014 06:37:11 +0000 (08:37 +0200)
committerFrank Reininghaus <frank78ac@googlemail.com>
Thu, 12 Jun 2014 06:37:11 +0000 (08:37 +0200)
This removes the remaining unchecked accesses to the clipboard mime
data after commit 7828b057da0491f1b08bfaec681067e195d7b6ca. According
to a bug report, it can be a null pointer on Wayland.

BUG: 335053
REVIEW: 118649

src/dolphincontextmenu.cpp
src/kitemviews/private/kfileitemclipboard.cpp
src/panels/folders/treeviewcontextmenu.cpp

index f295de708f939c88917a26c67944a085eb6cbf25..e692c8fa9a0cd8c9ef3f53cc5c6ff71d04043a9c 100644 (file)
@@ -429,10 +429,9 @@ QAction* DolphinContextMenu::createPasteAction()
     QAction* action = 0;
     const bool isDir = !m_fileInfo.isNull() && m_fileInfo.isDir();
     if (isDir && (m_selectedItems.count() == 1)) {
+        const QPair<bool, QString> pasteInfo = KonqOperations::pasteInfo(m_fileInfo.url());
         action = new QAction(KIcon("edit-paste"), i18nc("@action:inmenu", "Paste Into Folder"), this);
-        const QMimeData* mimeData = QApplication::clipboard()->mimeData();
-        const KUrl::List pasteData = KUrl::List::fromMimeData(mimeData);
-        action->setEnabled(!pasteData.isEmpty() && selectedItemsProperties().supportsWriting());
+        action->setEnabled(pasteInfo.first);
         connect(action, SIGNAL(triggered()), m_mainWindow, SLOT(pasteIntoFolder()));
     } else {
         action = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
index faace2a3a6af822506eb2361fd3b9af25d268c73..0dcc81f4fb2746d7c6c354c120859192759b7aea 100644 (file)
@@ -55,6 +55,14 @@ KFileItemClipboard::~KFileItemClipboard()
 void KFileItemClipboard::updateCutItems()
 {
     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();
+        emit cutItemsChanged();
+        return;
+    }
+
     const QByteArray data = mimeData->data("application/x-kde-cutselection");
     const bool isCutSelection = (!data.isEmpty() && data.at(0) == QLatin1Char('1'));
     if (isCutSelection) {
index fa8844dfa75e29ca86395dba7a4ba71377ec34a5..83ffa87a7173fc3dfef12821ed5ebd0c53704d4c 100644 (file)
@@ -62,11 +62,10 @@ void TreeViewContextMenu::open()
         QAction* copyAction = new QAction(KIcon("edit-copy"), i18nc("@action:inmenu", "Copy"), this);
         connect(copyAction, SIGNAL(triggered()), this, SLOT(copy()));
 
-        QAction* pasteAction = new QAction(KIcon("edit-paste"), i18nc("@action:inmenu", "Paste"), this);
-        const QMimeData* mimeData = QApplication::clipboard()->mimeData();
-        const KUrl::List pasteData = KUrl::List::fromMimeData(mimeData);
+        const QPair<bool, QString> pasteInfo = KonqOperations::pasteInfo(m_fileItem.url());
+        QAction* pasteAction = new QAction(KIcon("edit-paste"), pasteInfo.second, this);
         connect(pasteAction, SIGNAL(triggered()), this, SLOT(paste()));
-        pasteAction->setEnabled(!pasteData.isEmpty() && capabilities.supportsWriting());
+        pasteAction->setEnabled(pasteInfo.first);
 
         popup->addAction(cutAction);
         popup->addAction(copyAction);
@@ -172,17 +171,7 @@ void TreeViewContextMenu::copy()
 
 void TreeViewContextMenu::paste()
 {
-    QClipboard* clipboard = QApplication::clipboard();
-    const QMimeData* mimeData = clipboard->mimeData();
-
-    const KUrl::List source = KUrl::List::fromMimeData(mimeData);
-    const KUrl& dest = m_fileItem.url();
-    if (KonqMimeData::decodeIsCutSelection(mimeData)) {
-        KonqOperations::copy(m_parent, KonqOperations::MOVE, source, dest);
-        clipboard->clear();
-    } else {
-        KonqOperations::copy(m_parent, KonqOperations::COPY, source, dest);
-    }
+    KonqOperations::doPaste(m_parent, m_fileItem.url());
 }
 
 void TreeViewContextMenu::rename()