[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;