[pim/akonadi-calendar] src: Move KCalUtils::DndFactory::copyIncidences here

Volker Krause <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 8e8fc92f7dbef8914a298133019ba2ff1695f443 by Volker Krause.
Committed on 29/07/2026 at 19:04.
Pushed by vkrause into branch 'master'.

Move KCalUtils::DndFactory::copyIncidences here

This is the only use, and once we depend on KF 6.29 it's merely 10 lines
of code.

M  +40   -3    src/calendarclipboard.cpp
M  +0    -5    src/calendarclipboard_p.h

https://invent.kde.org/pim/akonadi-calendar/-/commit/8e8fc92f7dbef8914a298133019ba2ff1695f443

diff --git a/src/calendarclipboard.cpp b/src/calendarclipboard.cpp
index b7d27730..c546d980 100644
--- a/src/calendarclipboard.cpp
+++ b/src/calendarclipboard.cpp
@@ -5,7 +5,6 @@
 */
 
 #include "calendarclipboard_p.h"
-#include <KCalUtils/DndFactory>
 #if KCALENDARCORE_VERSION < QT_VERSION_CHECK(6, 29, 0)
 #include <KCalUtils/ICalDrag>
 #else
@@ -17,9 +16,47 @@
 
 #include <QApplication>
 #include <QClipboard>
+#include <QMimeData>
 
 using namespace Akonadi;
 
+// Copies a list of incidences to the clipboard.
+static bool copyIncidences(const KCalendarCore::Incidence::List &incidences)
+{
+    QClipboard *clipboard = QGuiApplication::clipboard();
+    Q_ASSERT(clipboard);
+#if KCALENDARCORE_VERSION < QT_VERSION_CHECK(6, 29, 0)
+    Calendar::Ptr const calendar(new MemoryCalendar(QTimeZone::systemTimeZone()));
+
+    Incidence::List::ConstIterator it;
+    const Incidence::List::ConstIterator end(incidences.constEnd());
+    for (it = incidences.constBegin(); it != end; ++it) {
+        if (*it) {
+            calendar->addIncidence(Incidence::Ptr((*it)->clone()));
+        }
+    }
+
+    auto mimeData = new QMimeData;
+
+    ICalDrag::populateMimeData(mimeData, calendar);
+
+    if (calendar->incidences().isEmpty()) {
+        return false;
+    } else {
+        clipboard->setMimeData(mimeData);
+        return true;
+    }
+#else
+    auto mimeData = new QMimeData;
+    KCalendarCore::MimeData::populate(mimeData, incidences);
+    if (KCalendarCore::MimeData::canDecode(mimeData)) {
+        clipboard->setMimeData(mimeData);
+        return true;
+    }
+    return false;
+#endif
+}
+
 CalendarClipboardPrivate::CalendarClipboardPrivate(const Akonadi::CalendarBase::Ptr &calendar, Akonadi::IncidenceChanger *changer, CalendarClipboard *qq)
     : m_calendar(calendar)
     , m_changer(changer)
@@ -55,7 +92,7 @@ void CalendarClipboardPrivate::getIncidenceHierarchy(const KCalendarCore::Incide
 
 void CalendarClipboardPrivate::cut(const KCalendarCore::Incidence::List &incidences)
 {
-    const bool copyResult = KCalUtils::DndFactory::copyIncidences(incidences);
+    const bool copyResult = copyIncidences(incidences);
     m_pendingChangeIds.clear();
     // Note: Don't use DndFactory::cutIncidences(), it doesn't use IncidenceChanger for deletion
     // we would loose async error handling and redo/undo features
@@ -241,7 +278,7 @@ bool CalendarClipboard::copyIncidence(const KCalendarCore::Incidence::Ptr &incid
         }
     }
 
-    return KCalUtils::DndFactory::copyIncidences(incidencesToCopy);
+    return copyIncidences(incidencesToCopy);
 }
 
 bool CalendarClipboard::pasteAvailable() const
diff --git a/src/calendarclipboard_p.h b/src/calendarclipboard_p.h
index ecfe5cee..b6aa3673 100644
--- a/src/calendarclipboard_p.h
+++ b/src/calendarclipboard_p.h
@@ -13,11 +13,6 @@
 #include <QList>
 #include <QSet>
 
-namespace KCalUtils
-{
-class DndFactory;
-}
-
 namespace Akonadi
 {
 class IncidenceChanger;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.