Hello community, here is the log from the commit of package kcalendarcore for openSUSE:Factory checked in at 2020-07-14 07:51:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kcalendarcore (Old) and /work/SRC/openSUSE:Factory/.kcalendarcore.new.3060 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kcalendarcore" Tue Jul 14 07:51:39 2020 rev:9 rq:820344 version:5.72.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kcalendarcore/kcalendarcore.changes 2020-06-16 13:41:45.104876561 +0200 +++ /work/SRC/openSUSE:Factory/.kcalendarcore.new.3060/kcalendarcore.changes 2020-07-14 07:52:39.704502006 +0200 @@ -1,0 +2,14 @@ +Sun Jul 5 07:55:06 UTC 2020 - Christophe Giboudeaux <[email protected]> + +- Update to 5.72.0 + * New feature release + * For more details please see: + * https://kde.org/announcements/kde-frameworks-5.72.0 +- Changes since 5.71.0: + * Correct documentation for Recurrence::setStartDateTime() + * Check for write error in save() if the disk is full (kde#370708) + * Correct icon names for recurring to-dos + * Fix serialization of recurring to-do's start date (kde#345498) + * Add more tests for Recurrence::getNextDayTime(QDateTime) + +------------------------------------------------------------------- Old: ---- kcalendarcore-5.71.0.tar.xz kcalendarcore-5.71.0.tar.xz.sig New: ---- kcalendarcore-5.72.0.tar.xz kcalendarcore-5.72.0.tar.xz.sig ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kcalendarcore.spec ++++++ --- /var/tmp/diff_new_pack.V4WGxy/_old 2020-07-14 07:52:40.332504039 +0200 +++ /var/tmp/diff_new_pack.V4WGxy/_new 2020-07-14 07:52:40.336504052 +0200 @@ -16,14 +16,14 @@ # -%define _tar_path 5.71 +%define _tar_path 5.72 # Full KF5 version (e.g. 5.33.0) %{!?_kf5_version: %global _kf5_version %{version}} # Last major and minor KF5 version (e.g. 5.33) %{!?_kf5_bugfix_version: %define _kf5_bugfix_version %(echo %{_kf5_version} | awk -F. '{print $1"."$2}')} %bcond_without lang Name: kcalendarcore -Version: 5.71.0 +Version: 5.72.0 Release: 0 Summary: Library to access and handle calendar data License: LGPL-2.0-or-later @@ -86,13 +86,13 @@ %postun -n libKF5CalendarCore5 -p /sbin/ldconfig %files -n libKF5CalendarCore5 -%license COPYING* -%{_kf5_libdir}/libKF5CalendarCore.so.* +%license LICENSES/* %{_kf5_debugdir}/*.categories %{_kf5_debugdir}/*.renamecategories +%{_kf5_libdir}/libKF5CalendarCore.so.* %files devel -%license COPYING* +%license LICENSES/* %{_kf5_cmakedir}/KF5CalendarCore/ %{_kf5_includedir}/KCalendarCore/ %{_kf5_includedir}/kcalcore_version.h ++++++ kcalendarcore-5.71.0.tar.xz -> kcalendarcore-5.72.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/CMakeLists.txt new/kcalendarcore-5.72.0/CMakeLists.txt --- old/kcalendarcore-5.71.0/CMakeLists.txt 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/CMakeLists.txt 2020-07-04 11:45:57.000000000 +0200 @@ -1,11 +1,11 @@ cmake_minimum_required(VERSION 3.5) -set(KF5_VERSION "5.71.0") # handled by release scripts +set(KF5_VERSION "5.72.0") # handled by release scripts project(KCalendarCore VERSION ${KF5_VERSION}) # ECM setup include(FeatureSummary) -find_package(ECM 5.71.0 NO_MODULE) +find_package(ECM 5.72.0 NO_MODULE) set_package_properties(ECM PROPERTIES TYPE REQUIRED DESCRIPTION "Extra CMake Modules." URL "https://commits.kde.org/extra-cmake-modules") feature_summary(WHAT REQUIRED_PACKAGES_NOT_FOUND FATAL_ON_MISSING_REQUIRED_PACKAGES) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/CMakeLists.txt new/kcalendarcore-5.72.0/autotests/CMakeLists.txt --- old/kcalendarcore-5.71.0/autotests/CMakeLists.txt 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/CMakeLists.txt 2020-07-04 11:45:57.000000000 +0200 @@ -20,6 +20,7 @@ testattendee testcalfilter testcustomproperties + testdateserialization testduration testevent testincidence diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testdateserialization.cpp new/kcalendarcore-5.72.0/autotests/testdateserialization.cpp --- old/kcalendarcore-5.71.0/autotests/testdateserialization.cpp 1970-01-01 01:00:00.000000000 +0100 +++ new/kcalendarcore-5.72.0/autotests/testdateserialization.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -0,0 +1,91 @@ +/* + * SPDX-FileCopyrightText: 2020 Glen Ditchfield <[email protected]> + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#include "testdateserialization.h" +#include "icalformat.h" +#include "memorycalendar.h" + +#include <QDebug> +#include <QTest> + +QTEST_MAIN(TestDateSerialization) + +using namespace KCalendarCore; + +// Check that serialization and deserialization of a minimal recurring todo +// preserves the start and due dates of the todo and its first occurrence. +// See bug 345498. +void TestDateSerialization::testNewRecurringTodo() +{ +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + QDateTime startDate = QDate(2015, 3, 24).startOfDay(); +#else + QDateTime startDate { QDate(2015, 3, 24) }; +#endif + QDateTime dueDate { startDate.addDays(1) }; + + Todo::Ptr todo(new Todo); + todo->setDtStart(startDate); + todo->setDtDue(dueDate, true); + todo->setAllDay(true); + todo->recurrence()->setMonthly(1); + + MemoryCalendar::Ptr cal { new MemoryCalendar(QTimeZone::utc()) }; + cal->addIncidence(todo); + + ICalFormat format; + const QString result = format.toString(cal, QString()); + + Incidence::Ptr i = format.fromString(result); + QVERIFY(i); + QVERIFY(i->type() == IncidenceBase::IncidenceType::TypeTodo); + Todo::Ptr newTodo = i.staticCast<Todo>(); + QCOMPARE(newTodo->dtStart(true), startDate); + QCOMPARE(newTodo->dtStart(false), startDate); + QCOMPARE(newTodo->dtDue(true), dueDate); + QCOMPARE(newTodo->dtDue(false), dueDate); +} + +// Check that serialization and deserialization of a minimal recurring todo +// that has been completed once preserves the start and due dates of the todo +// and correctly calculates the start and due dates of the next occurrence. +// See bug 345565. +void TestDateSerialization::testTodoCompletedOnce() +{ +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + QDateTime startDate = QDate::currentDate().startOfDay(); +#else + QDateTime startDate { QDate::currentDate() }; +#endif + QDateTime dueDate { startDate.addDays(1) }; + + Todo::Ptr todo(new Todo); + todo->setDtStart(startDate); + todo->setDtDue(dueDate, true); + todo->setAllDay(true); + todo->recurrence()->setMonthly(1); + + MemoryCalendar::Ptr cal { new MemoryCalendar(QTimeZone::utc()) }; + cal->addIncidence(todo); + + ICalFormat format; + QString result = format.toString(cal, QString()); + + Incidence::Ptr i = format.fromString(result); + QVERIFY(i); + QVERIFY(i->type() == IncidenceBase::IncidenceType::TypeTodo); + todo = i.staticCast<Todo>(); + todo->setCompleted(dueDate); + + cal = MemoryCalendar::Ptr {new MemoryCalendar(QTimeZone::utc()) }; + cal->addIncidence(todo); + result = format.toString(cal, QString()); + + QCOMPARE(todo->dtStart(true), startDate); + QCOMPARE(todo->dtStart(false), startDate.addMonths(1)); + QCOMPARE(todo->dtDue(true), dueDate); + QCOMPARE(todo->dtDue(false), dueDate.addMonths(1)); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testdateserialization.h new/kcalendarcore-5.72.0/autotests/testdateserialization.h --- old/kcalendarcore-5.71.0/autotests/testdateserialization.h 1970-01-01 01:00:00.000000000 +0100 +++ new/kcalendarcore-5.72.0/autotests/testdateserialization.h 2020-07-04 11:45:57.000000000 +0200 @@ -0,0 +1,19 @@ +/* + * SPDX-FileCopyrightText: 2020 Glen Ditchfield <[email protected]> + * + * SPDX-License-Identifier: LGPL-3.0-or-later + */ + +#ifndef TESTDATESERIALIZATION_H +#define TESTDATESERIALIZATION_H +#include <QObject> + +class TestDateSerialization : public QObject +{ + Q_OBJECT +private Q_SLOTS: + void testNewRecurringTodo(); + void testTodoCompletedOnce(); +}; + +#endif // TESTDATESERIALIZATION_H diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testfreebusyperiod.cpp new/kcalendarcore-5.72.0/autotests/testfreebusyperiod.cpp --- old/kcalendarcore-5.71.0/autotests/testfreebusyperiod.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/testfreebusyperiod.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -84,7 +84,11 @@ void FreeBusyPeriodTest::testDataStreamIn() { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + const QDateTime p1DateTime = QDate(2006, 8, 30).startOfDay(); +#else const QDateTime p1DateTime(QDate(2006, 8, 30)); +#endif const Duration duration(24 * 60 * 60); FreeBusyPeriod p1(p1DateTime, duration); p1.setSummary(QStringLiteral("I can haz summary?")); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testicalformat.cpp new/kcalendarcore-5.72.0/autotests/testicalformat.cpp --- old/kcalendarcore-5.71.0/autotests/testicalformat.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/testicalformat.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -143,7 +143,11 @@ ICalFormat format; Event::Ptr event(new Event); +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + event->setDtStart(QDate(2017, 03, 24).startOfDay()); +#else event->setDtStart(QDateTime(QDate(2017, 03, 24))); +#endif Alarm::Ptr alarm = event->newAlarm(); alarm->setType(Alarm::Display); alarm->setStartOffset(Duration(0)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testrecurtodo.cpp new/kcalendarcore-5.72.0/autotests/testrecurtodo.cpp --- old/kcalendarcore-5.71.0/autotests/testrecurtodo.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/testrecurtodo.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -227,6 +227,7 @@ todo->recurrence()->setDaily(1); todo->recurrence()->setDuration(3); + QCOMPARE(todo->recurrence()->getNextDateTime(dtstart.addMSecs(-1)), dtstart); QCOMPARE(todo->recurrence()->getNextDateTime(dtstart), dtstart.addDays(1)); QCOMPARE(todo->recurrence()->getNextDateTime(dtstart.addDays(1)), dtstart.addDays(2)); QCOMPARE(todo->recurrence()->getNextDateTime(dtstart.addDays(2)), QDateTime()); @@ -243,7 +244,32 @@ todo->recurrence()->setDaily(1); todo->recurrence()->setDuration(3); + QCOMPARE(todo->recurrence()->getNextDateTime(dtdue.addMSecs(-1)), dtdue); QCOMPARE(todo->recurrence()->getNextDateTime(dtdue), dtdue.addDays(1)); QCOMPARE(todo->recurrence()->getNextDateTime(dtdue.addDays(1)), dtdue.addDays(2)); QCOMPARE(todo->recurrence()->getNextDateTime(dtdue.addDays(2)), QDateTime()); } + +/** Test that occurrances specified by a recurrence rule are eliminated by + * exception dates. + */ +void RecurTodoTest::testRecurrenceExdates() +{ + const QDateTime dtstart(QDate(2013, 03, 10), QTime(10, 0, 0), Qt::UTC); + const QDateTime dtdue(QDate(2013, 03, 10), QTime(11, 0, 0), Qt::UTC); + + KCalendarCore::Todo::Ptr todo(new KCalendarCore::Todo()); + todo->setUid(QStringLiteral("todo")); + todo->setDtStart(dtstart); + todo->setDtDue(dtdue); + todo->recurrence()->setDaily(1); + todo->recurrence()->setDuration(3); + + // Test for boundary errors. + todo->recurrence()->addExDateTime(dtstart); + todo->recurrence()->addExDateTime(dtstart.addDays(2)); + + QCOMPARE(todo->recurrence()->getNextDateTime(dtstart.addMSecs(-1)), dtstart.addDays(1)); + QCOMPARE(todo->recurrence()->getNextDateTime(dtstart.addDays(1)), QDateTime()); + +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testrecurtodo.h new/kcalendarcore-5.72.0/autotests/testrecurtodo.h --- old/kcalendarcore-5.71.0/autotests/testrecurtodo.h 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/testrecurtodo.h 2020-07-04 11:45:57.000000000 +0200 @@ -21,6 +21,7 @@ void testDtStart(); void testRecurrenceBasedOnDtStart(); void testRecurrenceBasedOnDue(); + void testRecurrenceExdates(); void testRecurrenceStart(); void testHasDueDate(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testtimesininterval.cpp new/kcalendarcore-5.72.0/autotests/testtimesininterval.cpp --- old/kcalendarcore-5.71.0/autotests/testtimesininterval.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/testtimesininterval.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -204,7 +204,11 @@ : QTimeZone(QByteArray("America/Toronto"))); Event event; event.setAllDay(true); +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + event.setDtStart(QDate(2019, 10, 11).startOfDay()); +#else event.setDtStart(QDateTime(QDate(2019, 10, 11))); +#endif RecurrenceRule * const rule = new RecurrenceRule(); rule->setRecurrenceType(RecurrenceRule::rDaily); @@ -223,7 +227,11 @@ // A simple date, will apply. recurrence->addExDate(QDate(2019, 10, 14)); // A date only local time, will apply. +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + recurrence->addExDateTime(QDate(2019, 10, 15).startOfDay()); +#else recurrence->addExDateTime(QDateTime(QDate(2019, 10, 15))); +#endif // A date time starting at 00:00 in another zone, will not apply. recurrence->addExDateTime(QDateTime(QDate(2019, 10, 17), QTime(), anotherZone)); // A date time starting at 00:00 in the system time zone, will apply. @@ -238,7 +246,11 @@ // nor either of the exception date times. const QList<int> expectedDays { 11, 16, 17, 18, 21, 22, 23, 25 }; for (int day : expectedDays) { +#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0) + QVERIFY(timesInInterval.contains(QDate(2019, 10, day).startOfDay())); +#else QVERIFY(timesInInterval.contains(QDateTime(QDate(2019, 10, day)))); +#endif } QCOMPARE(timesInInterval.size(), expectedDays.size()); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testtodo.cpp new/kcalendarcore-5.72.0/autotests/testtodo.cpp --- old/kcalendarcore-5.71.0/autotests/testtodo.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/testtodo.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -271,3 +271,46 @@ QCOMPARE(todo.dateTime(Incidence::RoleDisplayStart), yesterday); QCOMPARE(todo.dateTime(Incidence::RoleDisplayEnd), yesterday); } + +void TodoTest::testIconNameOneoff() +{ + const QDateTime now = QDateTime::currentDateTime(); + Todo todo; + todo.setDtStart(now); + + QCOMPARE(todo.iconName(), QLatin1String("view-calendar-tasks")); + todo.setCompleted(now); + QCOMPARE(todo.iconName(), QLatin1String("task-complete")); +} + +void TodoTest::testIconNameRecurringNeverDue() +{ + const QDateTime now = QDateTime::currentDateTime(); + Todo todo; + todo.setDtStart(now); + todo.recurrence()->setDaily(1); + + QCOMPARE(todo.iconName(now), QLatin1String("view-calendar-tasks")); + + todo.setCompleted(now); + QCOMPARE(todo.iconName(now), QLatin1String("task-complete")); + QCOMPARE(todo.iconName(now.addDays(1)), QLatin1String("view-calendar-tasks")); +} + +void TodoTest::testIconNameRecurringDue() +{ + const QDateTime now = QDateTime::currentDateTime(); + const QDateTime later = now.addSecs(3600); + Todo todo; + todo.setDtStart(now); + todo.setDtDue(later, /*first=*/true); + todo.recurrence()->setDaily(1); + + QCOMPARE(todo.iconName(now), QLatin1String("view-calendar-tasks")); + QCOMPARE(todo.iconName(later), QLatin1String("view-calendar-tasks")); // Legacy case + + todo.setCompleted(now); + QCOMPARE(todo.iconName(now), QLatin1String("task-complete")); + QCOMPARE(todo.iconName(later), QLatin1String("task-complete")); // Legacy case + QCOMPARE(todo.iconName(now.addDays(1)), QLatin1String("view-calendar-tasks")); +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/autotests/testtodo.h new/kcalendarcore-5.72.0/autotests/testtodo.h --- old/kcalendarcore-5.71.0/autotests/testtodo.h 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/autotests/testtodo.h 2020-07-04 11:45:57.000000000 +0200 @@ -27,6 +27,9 @@ void testSerializer_data(); void testSerializer(); void testRoles(); + void testIconNameOneoff(); + void testIconNameRecurringNeverDue(); + void testIconNameRecurringDue(); }; #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/src/customproperties.cpp new/kcalendarcore-5.72.0/src/customproperties.cpp --- old/kcalendarcore-5.71.0/src/customproperties.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/src/customproperties.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -200,9 +200,10 @@ QMap<QByteArray, QString> CustomProperties::customProperties() const { - QMap<QByteArray, QString> result; - result.unite(d->mProperties); - result.unite(d->mVolatileProperties); + QMap<QByteArray, QString> result = d->mProperties; + for (auto it = d->mVolatileProperties.begin(), end = d->mVolatileProperties.end(); it != end; ++it) { + result.insert(it.key(), it.value()); + } return result; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/src/icalformat.cpp new/kcalendarcore-5.72.0/src/icalformat.cpp --- old/kcalendarcore-5.71.0/src/icalformat.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/src/icalformat.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -121,6 +121,14 @@ // Convert to UTF8 and save QByteArray textUtf8 = text.toUtf8(); file.write(textUtf8.data(), textUtf8.size()); + // QSaveFile doesn't report a write error when the device is full (see Qt + // bug 75077), so check that the data can actually be written. + if (!file.flush()) { + qCDebug(KCALCORE_LOG) << "file write error (flush failed)"; + setException(new Exception(Exception::SaveErrorSaveFile, + QStringList(fileName))); + return false; + } if (!file.commit()) { qCDebug(KCALCORE_LOG) << "file finalize error:" << file.errorString(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/src/icalformat_p.cpp new/kcalendarcore-5.72.0/src/icalformat_p.cpp --- old/kcalendarcore-5.71.0/src/icalformat_p.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/src/icalformat_p.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -242,9 +242,8 @@ icalcomponent_add_property(vtodo, icalproperty_new_status(ICAL_STATUS_COMPLETED)); } - if (todo->recurs() && todo->dtDue().isValid()) { - // dtDue( first = true ) returns the dtRecurrence() - prop = writeICalDateTimeProperty(ICAL_X_PROPERTY, todo->dtDue(), tzUsedList); + if (todo->recurs() && todo->dtStart(false).isValid()) { + prop = writeICalDateTimeProperty(ICAL_X_PROPERTY, todo->dtStart(false), tzUsedList); icalproperty_set_x_name(prop, "X-KDE-LIBKCAL-DTRECURRENCE"); icalcomponent_add_property(vtodo, prop); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/src/recurrence.cpp new/kcalendarcore-5.72.0/src/recurrence.cpp --- old/kcalendarcore-5.71.0/src/recurrence.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/src/recurrence.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -147,7 +147,10 @@ // ### this copies the pointers in mExRules and mRRules eventually resulting in a double free! // fortunately however this function is unused, we just can't remove it just yet, due to ABI guarantees +QT_WARNING_PUSH +QT_WARNING_DISABLE_GCC("-Wdeprecated-copy") *d = *recurrence.d; +QT_WARNING_POP return *this; } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/src/recurrence.h new/kcalendarcore-5.72.0/src/recurrence.h --- old/kcalendarcore-5.71.0/src/recurrence.h 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/src/recurrence.h 2020-07-04 11:45:57.000000000 +0200 @@ -152,9 +152,9 @@ /** Return the start date/time of the recurrence */ Q_REQUIRED_RESULT QDate startDate() const; /** Set start of recurrence. - If @p start is date-only, the recurrence is set to all-day. Otherwise, the - start is set to a date and time, and the recurrence is set to non-all-day. @param start the new start date or date/time of the recurrence. + @param isAllDay if true, the recurrence is set to all-day. Otherwise the recurrence is set + to non-all-day. */ void setStartDateTime(const QDateTime &start, bool isAllDay); @@ -240,10 +240,11 @@ */ Q_REQUIRED_RESULT QList<QDateTime> timesInInterval(const QDateTime &start, const QDateTime &end) const; - /** Returns the date and time of the next recurrence, after the specified date/time. + /** Returns the start date/time of the earliest recurrence with a start date/time after + * the specified date/time. * If the recurrence has no time, the next date after the specified date is returned. * @param preDateTime the date/time after which to find the recurrence. - * @return date/time of next recurrence (strictly later than the given + * @return start date/time of next recurrence (strictly later than the given * QDateTime), or invalid date if none. */ Q_REQUIRED_RESULT QDateTime getNextDateTime(const QDateTime &preDateTime) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kcalendarcore-5.71.0/src/todo.cpp new/kcalendarcore-5.72.0/src/todo.cpp --- old/kcalendarcore-5.71.0/src/todo.cpp 2020-06-06 21:33:34.000000000 +0200 +++ new/kcalendarcore-5.72.0/src/todo.cpp 2020-07-04 11:45:57.000000000 +0200 @@ -531,7 +531,7 @@ { const bool usesCompletedTaskPixmap = isCompleted() || - (recurs() && recurrenceId.isValid() && (recurrenceId < dtDue(false))); + (recurs() && recurrenceId.isValid() && (recurrenceId < dtStart(/*first=*/false))); if (usesCompletedTaskPixmap) { return QLatin1String("task-complete");
