Hello community,

here is the log from the commit of package kdepimlibs4 for openSUSE:Factory 
checked in at 2014-11-19 20:24:19
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kdepimlibs4 (Old)
 and      /work/SRC/openSUSE:Factory/.kdepimlibs4.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kdepimlibs4"

Changes:
--------
--- /work/SRC/openSUSE:Factory/kdepimlibs4/kdepimlibs4.changes  2014-10-16 
18:11:27.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.kdepimlibs4.new/kdepimlibs4.changes     
2014-11-19 20:26:59.000000000 +0100
@@ -1,0 +2,12 @@
+Mon Nov 10 02:26:00 UTC 2014 - Led <[email protected]>
+
+- fix bashisms in post/postun scripts
+
+-------------------------------------------------------------------
+Sun Nov  9 20:24:11 UTC 2014 - [email protected]
+
+- Update to 4.14.3
+   * KDE 4.14.3 SC Bugfix Release
+   * See http://www.kde.org/announcements/announce-4.14.3.php
+
+-------------------------------------------------------------------

Old:
----
  kdepimlibs-4.14.2.tar.xz

New:
----
  kdepimlibs-4.14.3.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kdepimlibs4.spec ++++++
--- /var/tmp/diff_new_pack.1PXozm/_old  2014-11-19 20:27:01.000000000 +0100
+++ /var/tmp/diff_new_pack.1PXozm/_new  2014-11-19 20:27:01.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           kdepimlibs4
-Version:        4.14.2
+Version:        4.14.3
 Release:        0
 Summary:        KDE PIM Libraries
 License:        LGPL-2.1+
@@ -76,11 +76,11 @@
 
 %post
 /sbin/ldconfig
-%{_kde4_bindir}/update-mime-database %{_datadir}/mime &> /dev/null || :
+%{_kde4_bindir}/update-mime-database %{_datadir}/mime > /dev/null 2>&1 || :
 
 %postun
 /sbin/ldconfig
-%{_kde4_bindir}/update-mime-database %{_datadir}/mime &> /dev/null || :
+%{_kde4_bindir}/update-mime-database %{_datadir}/mime > /dev/null 2>&1 || :
 
 %package -n libkdepimlibs4
 Summary:        KDE PIM Libraries

++++++ kdepimlibs-4.14.2.tar.xz -> kdepimlibs-4.14.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/CMakeLists.txt 
new/kdepimlibs-4.14.3/CMakeLists.txt
--- old/kdepimlibs-4.14.2/CMakeLists.txt        2014-10-09 22:09:43.000000000 
+0200
+++ new/kdepimlibs-4.14.3/CMakeLists.txt        2014-11-04 22:19:27.000000000 
+0100
@@ -7,7 +7,7 @@
 ############### The kdepimlibs version (used e.g. in KdepimLibsConfig.cmake) 
###############
 set(KDEPIMLIBS_VERSION_MAJOR 4)
 set(KDEPIMLIBS_VERSION_MINOR 14)
-set(KDEPIMLIBS_VERSION_PATCH 2)
+set(KDEPIMLIBS_VERSION_PATCH 3)
 set(KDEPIMLIBS_VERSION 
${KDEPIMLIBS_VERSION_MAJOR}.${KDEPIMLIBS_VERSION_MINOR}.${KDEPIMLIBS_VERSION_PATCH})
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/collection.cpp 
new/kdepimlibs-4.14.3/akonadi/collection.cpp
--- old/kdepimlibs-4.14.2/akonadi/collection.cpp        2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/collection.cpp        2014-11-04 
22:19:27.000000000 +0100
@@ -274,9 +274,7 @@
 {
     Q_D(Collection);
 
-    if (enabled != d->enabled) {
-        d->enabledChanged = true;
-    }
+    d->enabledChanged = true;
     d->enabled = enabled;
 }
 
@@ -341,9 +339,7 @@
 {
     Q_D(Collection);
 
-    if (d->referenced != referenced) {
-        d->referencedChanged = true;
-    }
+    d->referencedChanged = true;
     d->referenced = referenced;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/collectiondialog.h 
new/kdepimlibs-4.14.3/akonadi/collectiondialog.h
--- old/kdepimlibs-4.14.2/akonadi/collectiondialog.h    2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/collectiondialog.h    2014-11-04 
22:19:27.000000000 +0100
@@ -212,6 +212,7 @@
     Q_PRIVATE_SLOT(d, void slotAddChildCollection())
     Q_PRIVATE_SLOT(d, void slotCollectionCreationResult(KJob *job))
     Q_PRIVATE_SLOT(d, void slotFilterFixedString(const QString &))
+    Q_PRIVATE_SLOT(d, void slotDoubleClicked())
     //@endcond
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/akonadi/collectiondialog_desktop.cpp 
new/kdepimlibs-4.14.3/akonadi/collectiondialog_desktop.cpp
--- old/kdepimlibs-4.14.2/akonadi/collectiondialog_desktop.cpp  2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/collectiondialog_desktop.cpp  2014-11-04 
22:19:27.000000000 +0100
@@ -113,7 +113,7 @@
                          mParent, SLOT(slotSelectionChanged()));
 
         mParent->connect(mView, SIGNAL(doubleClicked(QModelIndex)),
-                         mParent, SLOT(accept()));
+                         mParent, SLOT(slotDoubleClicked()));
 
         mSelectionHandler = new AsyncSelectionHandler(mFilterCollection, 
mParent);
         mParent->connect(mSelectionHandler, 
SIGNAL(collectionAvailable(QModelIndex)),
@@ -171,14 +171,35 @@
     KRecursiveFilterProxyModel *mFilterCollection;
     QCheckBox *mUseByDefault;
 
+    void slotDoubleClicked();
     void slotSelectionChanged();
     void slotAddChildCollection();
     void slotCollectionCreationResult(KJob *job);
     bool canCreateCollection(const Akonadi::Collection &parentCollection) 
const;
     void changeCollectionDialogOptions(CollectionDialogOptions options);
-
+    bool canSelectCollection() const;
 };
 
+void CollectionDialog::Private::slotDoubleClicked()
+{
+    if (canSelectCollection()) {
+       mParent->accept();
+    }
+}
+
+bool CollectionDialog::Private::canSelectCollection() const
+{
+    bool result = (mView->selectionModel()->selectedIndexes().count() > 0);
+    if (mAllowToCreateNewChildCollection) {
+        const Akonadi::Collection parentCollection = 
mParent->selectedCollection();
+
+        if (parentCollection.isValid()) {
+            result = (parentCollection.rights() & 
Akonadi::Collection::CanCreateItem);
+        }
+    }
+    return result;
+}
+
 void CollectionDialog::Private::slotSelectionChanged()
 {
     mParent->enableButton(KDialog::Ok, 
mView->selectionModel()->selectedIndexes().count() > 0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/akonadi/collectiondialog_mobile.cpp 
new/kdepimlibs-4.14.3/akonadi/collectiondialog_mobile.cpp
--- old/kdepimlibs-4.14.2/akonadi/collectiondialog_mobile.cpp   2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/collectiondialog_mobile.cpp   2014-11-04 
22:19:27.000000000 +0100
@@ -124,6 +124,10 @@
 {
 }
 
+void CollectionDialog::Private::slotDoubleClicked()
+{
+}
+
 void CollectionDialog::Private::slotCollectionAvailable(const QModelIndex 
&index)
 {
     mSelectionModel->setCurrentIndex(index, 
QItemSelectionModel::ClearAndSelect);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/akonadi/contact/editor/im/kaddressbookimprotocol.desktop 
new/kdepimlibs-4.14.3/akonadi/contact/editor/im/kaddressbookimprotocol.desktop
--- 
old/kdepimlibs-4.14.2/akonadi/contact/editor/im/kaddressbookimprotocol.desktop  
    2014-10-09 22:09:43.000000000 +0200
+++ 
new/kdepimlibs-4.14.3/akonadi/contact/editor/im/kaddressbookimprotocol.desktop  
    2014-11-04 22:19:27.000000000 +0100
@@ -6,7 +6,7 @@
 Name[bs]=Protokol brzih poruka K adresara
 Name[ca]=Protocol de missatgeria instantània del KAddressbook
 Name[ca@valencia]=Protocol de missatgeria instantània del KAddressbook
-Name[cs]=KAddressbook instant messaging protokol
+Name[cs]=KAddressbook pro IM protokol
 Name[da]=KAddressbook instant messaging-protokol
 Name[de]=Instant-Messaging-Protokoll im KDE-Adressbuch
 Name[el]=Πρωτόκολλο στιγμιαίων μηνυμάτων KAddressbook
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/entitytreemodel.cpp 
new/kdepimlibs-4.14.3/akonadi/entitytreemodel.cpp
--- old/kdepimlibs-4.14.2/akonadi/entitytreemodel.cpp   2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/entitytreemodel.cpp   2014-11-04 
22:19:27.000000000 +0100
@@ -314,7 +314,7 @@
             return 
d->m_pendingCollectionRetrieveJobs.contains(collection.id()) ? FetchingState : 
IdleState;
         }
         case CollectionSyncProgressRole: {
-            return d->m_collectionSyncProgress.value(collection.id());
+            return QVariant(); // no longer supported
         }
         case IsPopulatedRole: {
             return d->m_populatedCols.contains(collection.id());
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/entitytreemodel.h 
new/kdepimlibs-4.14.3/akonadi/entitytreemodel.h
--- old/kdepimlibs-4.14.2/akonadi/entitytreemodel.h     2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/entitytreemodel.h     2014-11-04 
22:19:27.000000000 +0100
@@ -349,7 +349,7 @@
         EntityUrlRole,                          ///< The akonadi:/ Url of the 
entity as a string. Item urls will contain the mimetype.
         UnreadCountRole,                        ///< Returns the number of 
unread items in a collection. @since 4.5
         FetchStateRole,                         ///< Returns the FetchState of 
a particular item. @since 4.5
-        CollectionSyncProgressRole,             ///< Returns the progress of 
synchronization in percent for a particular collection. @since 4.6
+        CollectionSyncProgressRole,             ///< Returns the progress of 
synchronization in percent for a particular collection. @since 4.6. Deprecated 
since 4.14.3.
         IsPopulatedRole,                        ///< Returns whether a 
Collection has been populated, i.e. whether its items have been fetched. @since 
4.10
         UserRole = Qt::UserRole + 500,          ///< First role for user 
extensions.
         TerminalUserRole = 2000,                ///< Last role for user 
extensions. Don't use a role beyond this or headerData will break.
@@ -754,7 +754,6 @@
     Q_PRIVATE_SLOT(d_func(), void monitoredItemUnlinked(const Akonadi::Item &, 
const Akonadi::Collection &))
     Q_PRIVATE_SLOT(d_func(), void changeFetchState(const Akonadi::Collection 
&))
 
-    Q_PRIVATE_SLOT(d_func(), void agentInstanceAdvancedStatusChanged(const 
QString &, const QVariantMap &))
     Q_PRIVATE_SLOT(d_func(), void agentInstanceRemoved(Akonadi::AgentInstance))
     Q_PRIVATE_SLOT(d_func(), void monitoredItemsRetrieved(KJob *job))
     //@endcond
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/entitytreemodel_p.cpp 
new/kdepimlibs-4.14.3/akonadi/entitytreemodel_p.cpp
--- old/kdepimlibs-4.14.2/akonadi/entitytreemodel_p.cpp 2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/entitytreemodel_p.cpp 2014-11-04 
22:19:27.000000000 +0100
@@ -90,14 +90,6 @@
     // using collection as a parameter of a queued call in runItemFetchJob()
     qRegisterMetaType<Collection>();
 
-    org::freedesktop::Akonadi::AgentManager *manager =
-        new 
org::freedesktop::Akonadi::AgentManager(ServerManager::serviceName(Akonadi::ServerManager::Control),
-                                                    
QLatin1String("/AgentManager"),
-                                                    
DBusConnectionPool::threadConnection(), q_ptr);
-
-    QObject::connect(manager, 
SIGNAL(agentInstanceAdvancedStatusChanged(QString,QVariantMap)),
-                     q_ptr, 
SLOT(agentInstanceAdvancedStatusChanged(QString,QVariantMap)));
-
     Akonadi::AgentManager *agentManager = Akonadi::AgentManager::self();
     QObject::connect(agentManager, 
SIGNAL(instanceRemoved(Akonadi::AgentInstance)),
                      q_ptr, 
SLOT(agentInstanceRemoved(Akonadi::AgentInstance)));
@@ -221,31 +213,6 @@
     }
 }
 
-void EntityTreeModelPrivate::agentInstanceAdvancedStatusChanged(const QString 
&, const QVariantMap &status)
-{
-    const QString key = status.value(QLatin1String("key")).toString();
-    if (key != QLatin1String("collectionSyncProgress")) {
-        return;
-    }
-
-    const Collection::Id collectionId = 
status.value(QLatin1String("collectionId")).toLongLong();
-    const uint percent = status.value(QLatin1String("percent")).toUInt();
-    if (m_collectionSyncProgress.value(collectionId) == percent) {
-        return;
-    }
-    m_collectionSyncProgress.insert(collectionId, percent);
-
-    const QModelIndex collectionIndex = 
indexForCollection(Collection(collectionId));
-    if (!collectionIndex.isValid()) {
-        return;
-    }
-
-    Q_Q(EntityTreeModel);
-    // This is really slow (80 levels of method calls in proxy models...), and 
called
-    // very often during an imap sync...
-    q->dataChanged(collectionIndex, collectionIndex);
-}
-
 void EntityTreeModelPrivate::fetchItems(const Collection &parent)
 {
     Q_Q(const EntityTreeModel);
@@ -1911,9 +1878,9 @@
     const QList<Collection> collections = m_monitor->collectionsMonitored();
 
     if (collections.isEmpty() &&
-        m_monitor->mimeTypesMonitored().isEmpty() &&
-        m_monitor->resourcesMonitored().isEmpty() &&
-        !m_monitor->itemsMonitoredEx().isEmpty()) {
+        m_monitor->numMimeTypesMonitored() == 0 &&
+        m_monitor->numResourcesMonitored() == 0 &&
+        m_monitor->numItemsMonitored() != 0) {
         m_rootCollection = Collection(-1);
         m_collectionTreeFetched = true;
         emit q_ptr->collectionTreeFetched(collections);     // there are no 
collections to fetch
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/entitytreemodel_p.h 
new/kdepimlibs-4.14.3/akonadi/entitytreemodel_p.h
--- old/kdepimlibs-4.14.2/akonadi/entitytreemodel_p.h   2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/entitytreemodel_p.h   2014-11-04 
22:19:27.000000000 +0100
@@ -124,7 +124,6 @@
     void fillModel();
 
     void changeFetchState(const Collection &parent);
-    void agentInstanceAdvancedStatusChanged(const QString &, const QVariantMap 
&);
     void agentInstanceRemoved(const Akonadi::AgentInstance &instace);
 
     QHash<Collection::Id, Collection> m_collections;
@@ -149,7 +148,6 @@
     bool m_includeStatistics;
     bool m_showRootCollection;
     bool m_collectionTreeFetched;
-    QHash<Collection::Id, uint> m_collectionSyncProgress;
 
     /**
      * Called after the root collection was fetched by fillModel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/akonadi/favoritecollectionsmodel.cpp 
new/kdepimlibs-4.14.3/akonadi/favoritecollectionsmodel.cpp
--- old/kdepimlibs-4.14.2/akonadi/favoritecollectionsmodel.cpp  2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/favoritecollectionsmodel.cpp  2014-11-04 
22:19:27.000000000 +0100
@@ -87,7 +87,7 @@
     }
 
     /**
-     * Stuff changed, reload everything.
+     * Stuff changed (e.g. new rows inserted into sorted model), reload 
everything.
      */
     void reload()
     {
@@ -143,7 +143,7 @@
     void reference(const Collection::Id &collectionId)
     {
         if (referencedCollections.contains(collectionId)) {
-            kWarning() << "already referenced " << collectionId;
+            kWarning() << "already referenced" << collectionId;
             return;
         }
         const QModelIndex index = 
EntityTreeModel::modelIndexForCollection(q->sourceModel(), 
Collection(collectionId));
@@ -160,14 +160,14 @@
     void dereference(const Collection::Id &collectionId)
     {
         if (!referencedCollections.contains(collectionId)) {
-            kWarning() << "not referenced " << collectionId;
+            kWarning() << "not referenced" << collectionId;
             return;
         }
         const QModelIndex index = 
EntityTreeModel::modelIndexForCollection(q->sourceModel(), 
Collection(collectionId));
         if (index.isValid()) {
             q->sourceModel()->setData(index, QVariant(), 
EntityTreeModel::CollectionDerefRole);
         }
-       referencedCollections.remove(collectionId);
+        referencedCollections.remove(collectionId);
     }
 
     void clearReferences()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/monitor.cpp 
new/kdepimlibs-4.14.3/akonadi/monitor.cpp
--- old/kdepimlibs-4.14.2/akonadi/monitor.cpp   2014-10-09 22:09:43.000000000 
+0200
+++ new/kdepimlibs-4.14.3/akonadi/monitor.cpp   2014-11-04 22:19:27.000000000 
+0100
@@ -291,6 +291,12 @@
     return result;
 }
 
+int Monitor::numItemsMonitored() const
+{
+    Q_D(const Monitor);
+    return d->items.size();
+}
+
 QVector<Tag::Id> Monitor::tagsMonitored() const
 {
     Q_D(const Monitor);
@@ -315,12 +321,24 @@
     return d->mimetypes.toList();
 }
 
+int Monitor::numMimeTypesMonitored() const
+{
+    Q_D(const Monitor);
+    return d->mimetypes.count();
+}
+
 QList<QByteArray> Monitor::resourcesMonitored() const
 {
     Q_D(const Monitor);
     return d->resources.toList();
 }
 
+int Monitor::numResourcesMonitored() const
+{
+    Q_D(const Monitor);
+    return d->resources.count();
+}
+
 bool Monitor::isAllMonitored() const
 {
     Q_D(const Monitor);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/monitor.h 
new/kdepimlibs-4.14.3/akonadi/monitor.h
--- old/kdepimlibs-4.14.2/akonadi/monitor.h     2014-10-09 22:09:43.000000000 
+0200
+++ new/kdepimlibs-4.14.3/akonadi/monitor.h     2014-11-04 22:19:27.000000000 
+0100
@@ -337,6 +337,13 @@
     QVector<Item::Id> itemsMonitoredEx() const;
 
     /**
+     * Returns the number of items being monitored.
+     * Optimization.
+     * @since 4.14.3
+     */
+    int numItemsMonitored() const;
+
+    /**
      * Returns the set of mimetypes being monitored.
      *
      * @since 4.3
@@ -344,6 +351,13 @@
     QStringList mimeTypesMonitored() const;
 
     /**
+     * Returns the number of mimetypes being monitored.
+     * Optimization.
+     * @since 4.14.3
+     */
+    int numMimeTypesMonitored() const;
+
+    /**
      * Returns the set of tags being monitored.
      *
      * @since 4.13
@@ -365,6 +379,13 @@
     QList<QByteArray> resourcesMonitored() const;
 
     /**
+     * Returns the number of resources being monitored.
+     * Optimization.
+     * @since 4.14.3
+     */
+    int numResourcesMonitored() const;
+
+    /**
      * Returns true if everything is being monitored.
      *
      * @since 4.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/protocolhelper.cpp 
new/kdepimlibs-4.14.3/akonadi/protocolhelper.cpp
--- old/kdepimlibs-4.14.2/akonadi/protocolhelper.cpp    2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/protocolhelper.cpp    2014-11-04 
22:19:27.000000000 +0100
@@ -377,7 +377,7 @@
     }
 
     if (collection == Collection::root()) {
-        if (requestedItems.isEmpty()) {   // collection content listing
+        if (requestedItems.isEmpty() && !tag.isValid()) {   // collection 
content listing
             throw Exception("Cannot perform item operations on root 
collection.");
         }
     } else {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/resourcebase.cpp 
new/kdepimlibs-4.14.3/akonadi/resourcebase.cpp
--- old/kdepimlibs-4.14.2/akonadi/resourcebase.cpp      2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/resourcebase.cpp      2014-11-04 
22:19:27.000000000 +0100
@@ -81,6 +81,7 @@
         , mAutomaticProgressReporting(true)
         , mDisableAutomaticItemDeliveryDone(false)
         , mItemSyncBatchSize(10)
+        , mCurrentCollectionFetchJob(0)
     {
         Internal::setClientType(Internal::Resource);
         mStatusMessage = defaultReadyMessage();
@@ -137,10 +138,12 @@
     void slotCollectionSyncDone(KJob *job);
     void slotLocalListDone(KJob *job);
     void slotSynchronizeCollection(const Collection &col);
+    void slotItemRetrievalCollectionFetchDone(KJob *job);
     void slotCollectionListDone(KJob *job);
     void slotSynchronizeCollectionAttributes(const Collection &col);
     void slotCollectionListForAttributesDone(KJob *job);
     void slotCollectionAttributesSyncDone(KJob *job);
+    void slotAttributeRetrievalCollectionFetchDone(KJob *job);
 
     void slotItemSyncDone(KJob *job);
 
@@ -455,6 +458,7 @@
     QPointer<RecursiveMover> m_recursiveMover;
     int mItemSyncBatchSize;
     QSet<QByteArray> mKeepLocalCollectionChanges;
+    KJob *mCurrentCollectionFetchJob;
 };
 
 ResourceBase::ResourceBase(const QString &id)
@@ -905,13 +909,30 @@
             if (mAutomaticProgressReporting) {
                 emit q->status(AgentBase::Running, i18nc("@info:status", 
"Syncing folder '%1'", currentCollection.displayName()));
             }
-            q->retrieveItems(currentCollection);
+
+            Akonadi::CollectionFetchJob *fetchJob = new 
Akonadi::CollectionFetchJob(col, CollectionFetchJob::Base, this);
+            
fetchJob->setFetchScope(q->changeRecorder()->collectionFetchScope());
+            connect(fetchJob, SIGNAL(result(KJob*)), q, 
SLOT(slotItemRetrievalCollectionFetchDone(KJob*)));
+            mCurrentCollectionFetchJob = fetchJob;
             return;
         }
     }
     scheduler->taskDone();
 }
 
+void ResourceBasePrivate::slotItemRetrievalCollectionFetchDone(KJob *job)
+{
+    Q_Q(ResourceBase);
+    mCurrentCollectionFetchJob = 0;
+    if (job->error()) {
+        kWarning() << "Failed to retrieve collection for sync: " << 
job->errorString();
+        q->cancelTask(i18n("Failed to retrieve collection for sync."));
+        return;
+    }
+    Akonadi::CollectionFetchJob *fetchJob = 
static_cast<Akonadi::CollectionFetchJob*>(job);
+    q->retrieveItems(fetchJob->collections().first());
+}
+
 int ResourceBase::itemSyncBatchSize() const
 {
     Q_D(const ResourceBase);
@@ -927,7 +948,24 @@
 void ResourceBasePrivate::slotSynchronizeCollectionAttributes(const Collection 
&col)
 {
     Q_Q(ResourceBase);
-    QMetaObject::invokeMethod(q, "retrieveCollectionAttributes", 
Q_ARG(Akonadi::Collection, col));
+    Akonadi::CollectionFetchJob *fetchJob = new 
Akonadi::CollectionFetchJob(col, CollectionFetchJob::Base, this);
+    fetchJob->setFetchScope(q->changeRecorder()->collectionFetchScope());
+    connect(fetchJob, SIGNAL(result(KJob*)), q, 
SLOT(slotAttributeRetrievalCollectionFetchDone(KJob*)));
+    Q_ASSERT(!mCurrentCollectionFetchJob);
+    mCurrentCollectionFetchJob = fetchJob;
+}
+
+void ResourceBasePrivate::slotAttributeRetrievalCollectionFetchDone(KJob *job)
+{
+    mCurrentCollectionFetchJob = 0;
+    Q_Q(ResourceBase);
+    if (job->error()) {
+        kWarning() << "Failed to retrieve collection for attribute sync: " << 
job->errorString();
+        q->cancelTask(i18n("Failed to retrieve collection for attribute 
sync."));
+        return;
+    }
+    Akonadi::CollectionFetchJob *fetchJob = 
static_cast<Akonadi::CollectionFetchJob*>(job);
+    QMetaObject::invokeMethod(q, "retrieveCollectionAttributes", 
Q_ARG(Akonadi::Collection, fetchJob->collections().first()));
 }
 
 void ResourceBasePrivate::slotPrepareItemRetrieval(const Akonadi::Item &item)
@@ -1041,6 +1079,10 @@
 void ResourceBase::cancelTask()
 {
     Q_D(ResourceBase);
+    if (d->mCurrentCollectionFetchJob) {
+        d->mCurrentCollectionFetchJob->kill();
+        d->mCurrentCollectionFetchJob = 0;
+    }
     switch (d->scheduler->currentTask().type) {
     case ResourceScheduler::FetchItem:
         itemRetrieved(Item());   // sends the error reply and
@@ -1107,6 +1149,8 @@
         Q_FOREACH (const Collection &collection, list) {
             //We also get collections that should not be synced but are part 
of the tree.
             if (collection.shouldList(Collection::ListSync)) {
+                // Schedule attribute sync before each collection sync
+                scheduler->scheduleAttributesSync(collection);
                 scheduler->scheduleSync(collection);
             }
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/resourcebase.h 
new/kdepimlibs-4.14.3/akonadi/resourcebase.h
--- old/kdepimlibs-4.14.2/akonadi/resourcebase.h        2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/resourcebase.h        2014-11-04 
22:19:27.000000000 +0100
@@ -781,6 +781,8 @@
     Q_PRIVATE_SLOT(d_func(), void slotSessionReconnected())
     Q_PRIVATE_SLOT(d_func(), void slotRecursiveMoveReplay(RecursiveMover *))
     Q_PRIVATE_SLOT(d_func(), void slotRecursiveMoveReplayResult(KJob *))
+    Q_PRIVATE_SLOT(d_func(), void slotItemRetrievalCollectionFetchDone(KJob 
*));
+    Q_PRIVATE_SLOT(d_func(), void 
slotAttributeRetrievalCollectionFetchDone(KJob *));
 };
 
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/akonadi/specialcollectionshelperjobs.cpp 
new/kdepimlibs-4.14.3/akonadi/specialcollectionshelperjobs.cpp
--- old/kdepimlibs-4.14.2/akonadi/specialcollectionshelperjobs.cpp      
2014-10-09 22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/specialcollectionshelperjobs.cpp      
2014-11-04 22:19:27.000000000 +0100
@@ -199,9 +199,11 @@
 void ResourceScanJob::doStart()
 {
     if (d->mResourceId.isEmpty()) {
-        kError() << "No resource ID given.";
-        setError(Job::Unknown);
-        setErrorText(i18n("No resource ID given."));
+        if(!qobject_cast<DefaultResourceJob *>(this)) {
+            kError() << "No resource ID given.";
+            setError(Job::Unknown);
+            setErrorText(i18n("No resource ID given."));
+        }
         emitResult();
         return;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/tests/itemsynctest.cpp 
new/kdepimlibs-4.14.3/akonadi/tests/itemsynctest.cpp
--- old/kdepimlibs-4.14.2/akonadi/tests/itemsynctest.cpp        2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/tests/itemsynctest.cpp        2014-11-04 
22:19:27.000000000 +0100
@@ -448,6 +448,116 @@
        QCOMPARE(fetchJob->items().first().remoteId(), 
QString::fromLatin1("rid3"));
     }
 
+    /*
+     * This test verifies that ItemSync doesn't prematurly emit it's result if 
a job inside a transaction fails.
+     * ItemSync is supposed to continue the sync but simply ignoring all 
delivered data.
+     */
+    void testFailingJob()
+    {
+      const Collection col = Collection( collectionIdFromPath( "res1/foo" ) );
+      QVERIFY( col.isValid() );
+      Item::List origItems = fetchItems( col );
+
+      ItemSync* syncer = new ItemSync( col );
+      QSignalSpy transactionSpy(syncer, SIGNAL(transactionCommitted()));
+      QVERIFY(transactionSpy.isValid());
+      QSignalSpy spy( syncer, SIGNAL(result(KJob*)) );
+      QVERIFY( spy.isValid() );
+      syncer->setStreamingEnabled( true );
+      syncer->setTransactionMode(ItemSync::MultipleTransactions);
+      QTest::qWait( 0 );
+      QCOMPARE( spy.count(), 0 );
+
+      for ( int i = 0; i < syncer->batchSize(); ++i ) {
+        Item::List l;
+        //Modify to trigger a changed signal
+        Item item = modifyItem(origItems[i]);
+        // item.setRemoteId(QByteArray("foo"));
+        item.setRemoteId(QByteArray());
+        item.setId(-1);
+        l << item;
+        syncer->setIncrementalSyncItems( l, Item::List() );
+        if ( i < (syncer->batchSize() - 1) ) {
+          QTest::qWait( 0 ); // enter the event loop so itemsync actually can 
do something
+        }
+        QCOMPARE( spy.count(), 0 );
+      }
+      QTest::qWait(100);
+      QTRY_COMPARE( spy.count(), 0 );
+
+      for ( int i = syncer->batchSize(); i < origItems.count(); ++i ) {
+        Item::List l;
+        //Modify to trigger a changed signal
+        l << modifyItem(origItems[i]);
+        syncer->setIncrementalSyncItems( l, Item::List() );
+        if ( i < origItems.count() - 1 ) {
+          QTest::qWait( 0 ); // enter the event loop so itemsync actually can 
do something
+        }
+        QCOMPARE( spy.count(), 0 );
+      }
+
+      syncer->deliveryDone();
+      QTRY_COMPARE( spy.count(), 1 );
+    }
+
+    /*
+     * This test verifies that ItemSync doesn't prematurly emit it's result if 
a job inside a transaction fails, due to a duplicate.
+     * This case used to break the TransactionSequence.
+     * ItemSync is supposed to continue the sync but simply ignoring all 
delivered data.
+     */
+    void testFailingDueToDuplicateJob()
+    {
+      const Collection col = Collection( collectionIdFromPath( "res1/foo" ) );
+      QVERIFY( col.isValid() );
+      Item::List origItems = fetchItems( col );
+
+      //Create a duplicate that will trigger an error during the first batch
+      Item duplicate = origItems.first();
+      duplicate.setId(-1);
+      {
+        ItemCreateJob *job = new ItemCreateJob(duplicate, col);
+        AKVERIFYEXEC(job);
+      }
+      origItems = fetchItems( col );
+
+      ItemSync* syncer = new ItemSync( col );
+      QSignalSpy transactionSpy(syncer, SIGNAL(transactionCommitted()));
+      QVERIFY(transactionSpy.isValid());
+      QSignalSpy spy( syncer, SIGNAL(result(KJob*)) );
+      QVERIFY( spy.isValid() );
+      syncer->setStreamingEnabled( true );
+      syncer->setTransactionMode(ItemSync::MultipleTransactions);
+      QTest::qWait( 0 );
+      QCOMPARE( spy.count(), 0 );
+
+      for ( int i = 0; i < syncer->batchSize(); ++i ) {
+        Item::List l;
+        //Modify to trigger a changed signal
+        l << modifyItem(origItems[i]);
+        syncer->setIncrementalSyncItems( l, Item::List() );
+        if ( i < (syncer->batchSize() - 1) ) {
+          QTest::qWait( 0 ); // enter the event loop so itemsync actually can 
do something
+        }
+        QCOMPARE( spy.count(), 0 );
+      }
+      QTest::qWait(100);
+      //Ensure the job hasn't finished yet due to the errors
+      QTRY_COMPARE( spy.count(), 0 );
+
+      for ( int i = syncer->batchSize(); i < origItems.count(); ++i ) {
+        Item::List l;
+        //Modify to trigger a changed signal
+        l << modifyItem(origItems[i]);
+        syncer->setIncrementalSyncItems( l, Item::List() );
+        if ( i < origItems.count() - 1 ) {
+          QTest::qWait( 0 ); // enter the event loop so itemsync actually can 
do something
+        }
+        QCOMPARE( spy.count(), 0 );
+      }
+
+      syncer->deliveryDone();
+      QTRY_COMPARE( spy.count(), 1 );
+    }
 };
 
 QTEST_AKONADIMAIN( ItemsyncTest, NoGUI )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/akonadi/tests/testresource/knutresource.cpp 
new/kdepimlibs-4.14.3/akonadi/tests/testresource/knutresource.cpp
--- old/kdepimlibs-4.14.2/akonadi/tests/testresource/knutresource.cpp   
2014-10-09 22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/tests/testresource/knutresource.cpp   
2014-11-04 22:19:27.000000000 +0100
@@ -283,6 +283,46 @@
   changeProcessed();
 }
 
+void KnutResource::itemMoved(const Item &item, const Collection 
&collectionSource, const Collection &collectionDestination)
+{
+  const QDomElement oldElem = mDocument.itemElementByRemoteId(item.remoteId());
+  if (oldElem.isNull()) {
+    kWarning() << "Moved item not found in DOM tree";
+    changeProcessed();
+    return;
+  }
+
+  QDomElement sourceParentElem = 
mDocument.collectionElementByRemoteId(collectionSource.remoteId());
+  if (sourceParentElem.isNull()) {
+    emit error(i18n("Parent collection '%1' not found in DOM tree.", 
collectionSource.remoteId()));
+    changeProcessed();
+    return;
+  }
+
+  QDomElement destParentElem = 
mDocument.collectionElementByRemoteId(collectionDestination.remoteId());
+  if (destParentElem.isNull()) {
+    emit error(i18n("Parent collection '%1' not found in DOM tree.", 
collectionDestination.remoteId()));
+    changeProcessed();
+    return;
+  }
+
+  QDomElement itemElem = mDocument.itemElementByRemoteId(item.remoteId());
+  if (itemElem.isNull()) {
+    emit error(i18n("No item found for remoteid %1", item.remoteId()));
+  }
+
+  sourceParentElem.removeChild(itemElem);
+  destParentElem.appendChild(itemElem);
+
+  if (XmlWriter::writeItem(item, destParentElem).isNull()) {
+    emit error(i18n("Unable to write item."));
+  } else {
+    save();
+  }
+  changeProcessed();
+}
+
+
 QSet<qint64> KnutResource::parseQuery(const QString &queryString)
 {
   QSet<qint64> resultSet;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/akonadi/tests/testresource/knutresource.h 
new/kdepimlibs-4.14.3/akonadi/tests/testresource/knutresource.h
--- old/kdepimlibs-4.14.2/akonadi/tests/testresource/knutresource.h     
2014-10-09 22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/tests/testresource/knutresource.h     
2014-11-04 22:19:27.000000000 +0100
@@ -35,7 +35,9 @@
 
 class QFileSystemWatcher;
 
-class KnutResource : public Akonadi::ResourceBase, public 
Akonadi::AgentBase::Observer, public Akonadi::AgentSearchInterface
+class KnutResource : public Akonadi::ResourceBase,
+                     public Akonadi::AgentBase::ObserverV2,
+                     public Akonadi::AgentSearchInterface
 {
   Q_OBJECT
 
@@ -58,6 +60,7 @@
     void itemAdded( const Akonadi::Item &item, const Akonadi::Collection 
&collection );
     void itemChanged( const Akonadi::Item &item, const QSet<QByteArray> &parts 
);
     void itemRemoved( const Akonadi::Item &ref );
+    void itemMoved( const Akonadi::Item &item, const Akonadi::Collection 
&collectionSource, const Akonadi::Collection &collectionDestination );
 
     void search(const QString& query, const Akonadi::Collection& collection);
     void addSearch(const QString& query, const QString& queryLanguage, const 
Akonadi::Collection& resultCollection);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/akonadi/transactionsequence.cpp 
new/kdepimlibs-4.14.3/akonadi/transactionsequence.cpp
--- old/kdepimlibs-4.14.2/akonadi/transactionsequence.cpp       2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/akonadi/transactionsequence.cpp       2014-11-04 
22:19:27.000000000 +0100
@@ -84,6 +84,16 @@
 {
     Q_D(TransactionSequence);
 
+    //Don't abort the rollback job, while keeping the state set.
+    if (d->mState == TransactionSequencePrivate::RollingBack) {
+        return Job::addSubjob(job);
+    }
+
+    if (error()) {
+        //This can happen if a rollback is in progress, so make sure we don't 
set the state back to running.
+        job->kill(EmitResult);
+        return false;
+    }
     // TODO KDE5: remove property hack once SpecialCollectionsRequestJob has 
been fixed
     if (d->mState == TransactionSequencePrivate::Idle && 
!property("transactionsDisabled").toBool()) {
         d->mState = TransactionSequencePrivate::Running; // needs to be set 
before creating the transaction job to avoid infinite recursion
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/kalarmcal/kaevent.cpp 
new/kdepimlibs-4.14.3/kalarmcal/kaevent.cpp
--- old/kdepimlibs-4.14.2/kalarmcal/kaevent.cpp 2014-10-09 22:09:43.000000000 
+0200
+++ new/kdepimlibs-4.14.3/kalarmcal/kaevent.cpp 2014-11-04 22:19:27.000000000 
+0100
@@ -329,7 +329,7 @@
         KDateTime          mAtLoginDateTime;   // repeat-at-login end time
         DateTime           mDeferralTime;      // extra time to trigger alarm 
(if alarm or reminder deferred)
         DateTime           mDisplayingTime;    // date/time shown in the alarm 
currently being displayed
-        int                mDisplayingFlags;   // type of alarm which is 
currently being displayed
+        int                mDisplayingFlags;   // type of alarm which is 
currently being displayed (for display alarm)
         int                mReminderMinutes;   // how long in advance reminder 
is to be, or 0 if none (<0 for reminder AFTER the alarm)
         DateTime           mReminderAfterTime; // if mReminderActive true, 
time to trigger reminder AFTER the main alarm, or invalid if not pending
         ReminderType       mReminderActive;    // whether a reminder is due 
(before next, or after last, main alarm/recurrence)
@@ -612,7 +612,8 @@
 
 KAEventPrivate::KAEventPrivate(const KDateTime& dt, const QString& message, 
const QColor& bg, const QColor& fg, const QFont& f,
                                KAEvent::SubAction action, int lateCancel, 
KAEvent::Flags flags, bool changesPending)
-    : mRecurrence(0)
+    : mRevision(0),
+      mRecurrence(0)
 {
     set(dt, message, bg, fg, f, action, lateCancel, flags, changesPending);
 }
@@ -1184,11 +1185,11 @@
     {
         // Convert a repetition with no recurrence into a recurrence
         if (mRepetition.isDaily())
-            recur->setDaily(mRepetition.intervalDays());
+            setRecur(RecurrenceRule::rDaily, mRepetition.intervalDays(), 
mRepetition.count() + 1, QDate());
         else
-            recur->setMinutely(mRepetition.intervalMinutes());
-        recur->setDuration(mRepetition.count() + 1);
+            setRecur(RecurrenceRule::rMinutely, mRepetition.intervalMinutes(), 
mRepetition.count() + 1, KDateTime());
         mRepetition.set(0, 0);
+        mTriggerChanged = true;
     }
 
     if (mRepeatAtLogin)
@@ -2970,22 +2971,18 @@
 void KAEventPrivate::setRecurrence(const KARecurrence& recurrence)
 {
     startChanges();   // prevent multiple trigger time evaluation here
-    delete mRecurrence;
     if (recurrence.recurs())
     {
+        delete mRecurrence;
         mRecurrence = new KARecurrence(recurrence);
         mRecurrence->setStartDateTime(mStartDateTime.effectiveKDateTime(), 
mStartDateTime.isDateOnly());
         mTriggerChanged = true;
+
+        // Adjust sub-repetition values to fit the recurrence.
+        setRepetition(mRepetition);
     }
     else
-    {
-        if (mRecurrence)
-            mTriggerChanged = true;
-        mRecurrence = 0;
-    }
-
-    // Adjust sub-repetition values to fit the recurrence.
-    setRepetition(mRepetition);
+        clearRecur();
 
     endChanges();
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/kholidays/holidays/plan2/holiday_fi_fi 
new/kdepimlibs-4.14.3/kholidays/holidays/plan2/holiday_fi_fi
--- old/kdepimlibs-4.14.2/kholidays/holidays/plan2/holiday_fi_fi        
2014-10-09 22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/kholidays/holidays/plan2/holiday_fi_fi        
2014-11-04 22:19:27.000000000 +0100
@@ -6,9 +6,12 @@
 :: Author:   Steven Wahlberg <[email protected]>
 ::           Lasse Liehu <[email protected]>
 ::
-:: Updated:  2014-05-18
+:: Updated:  2014-07-09
 ::
 :: Source:   University of Helsinki Almanac office 
(http://almanakka.helsinki.fi)
+::           http://fi.wikipedia.org
+::           http://en.wikipedia.org
+::           
http://www.usno.navy.mil/USNO/astronomical-applications/data-services/earth-seasons
 ::
 
 :: Metadata
@@ -21,78 +24,73 @@
 :: Public Holidays
 
 : New Year's Day
-"Uudenvuodenpäivä"                                 public on 1 january
+"Uudenvuodenpäivä"                                 public cultural on 1 january
 : Epiphany
 "Loppiainen"                                       public religious on 6 
january
 : May Day
-"Vappu"                                            public on 1 may
-: Midsummer
-"Juhannuspäivä"                                    public on saturday after 20 
june
-: All Saints
-"Pyhäinpäivä"                                      public religious on first 
saturday in november
+"Vappu, suomalaisen työn päivä"                    public cultural on 1 may
+: Midsummer (Saturday on 20 Jun - 26 Jun)
+"Juhannuspäivä"                                    public cultural on saturday 
after 19 june
+: All Saints (Saturday on 31 Oct - 6 Nov)
+"Pyhäinpäivä"                                      public religious 
commemorative on saturday before 7 november
 : Independence Day
-"Itsenäisyyspäivä"                                 public on 6 december
+"Itsenäisyyspäivä"                                 public historical on 6 
december
 : Christmas Day
 "Joulupäivä"                                       public religious on 25 
december
-: Boxing Day
-"Tapaninpäivä"                                     public on 26 december
+: St. Stephen's Day
+"Tapaninpäivä"                                     public religious on 26 
december
+
+
+: Determined by Easter
 
-: pääsiäisen määräämät - determined by Easter
 : Shrove Sunday
 "Laskiaissunnuntai"                                public religious on easter 
minus 49 days
-: Shrove Tuesday
+: Shrove Tuesday (not a day off)
 "Laskiaistiistai"                                  religious on easter minus 
47 days
-: Annunciation
-"Marianpäivä"                                      public religious on ( (( 
[sunday before ([03/28])] == [easter]) ||
-                                                                          ( 
[sunday before ([03/28])] == ([easter] - 7)) ) ?
+: Annunciation (sunday on 22 Mar - 28 Mar unless said day is Palm Sunday or 
Good Friday)
+"Marian ilmestyspäivä"                             public religious on ( (( 
[sunday before ([03/29])] == [easter]) ||
+                                                                          ( 
[sunday before ([03/29])] == ([easter] - 7)) ) ?
                                                                           
([easter] - 14) :
-                                                                           
[sunday before ([03/28])] )
+                                                                           
[sunday before ([03/29])] )
 : Palm Sunday
 "Palmusunnuntai"                                   public religious on easter 
minus 7 days
 : Good Friday
 "Pitkäperjantai"                                   public religious on easter 
minus 2 days
 : Easter Day
-"Pääsiäinen"                                       public religious on easter
+"Pääsiäispäivä"                                    public religious on easter
 : Easter Monday
 "2. pääsiäispäivä"                                 public on easter plus 1 days
-: Rogation Sunday
-"Rukoussunnuntai"                                  public religious on easter 
plus 35 days
 : Ascension
 "Helatorstai"                                      public religious on easter 
plus 39 days
-: : Whitsunday
+: Pentecost or Whitsunday
 "Helluntaipäivä"                                   public religious on easter 
plus 49 days
 
-
 :: Religious Holidays
 
-: Kynttilänpäivä, Pyhän Kolminaisuuden päivä, Apostolien päivä,
-: Mikkelinpäivä and Valvomisen sunnuntai could be here, but they're always
-: on Sundays and don't know if we really want them here
-
-: Sleepyhead Day (not a holiday)
-"Unikeonpäivä"                                     cultural on 27 july
+: Seven Sleepers Day (not a day off)
+"Unikeonpäivä"                                     religious on 27 july
 : The First Advent Sunday
-"1. adventtisunnuntai"                             public religious on sunday 
before 24 december minus 21 days
+"1. adventtisunnuntai"                             religious on sunday before 
24 december minus 21 days
 : The Second Advent Sunday
-"2. adventtisunnuntai"                             public religious on sunday 
before 24 december minus 14 days
+"2. adventtisunnuntai"                             religious on sunday before 
24 december minus 14 days
 : The Third Advent Sunday
-"3. adventtisunnuntai"                             public religious on sunday 
before 24 december minus 7 days
+"3. adventtisunnuntai"                             religious on sunday before 
24 december minus 7 days
 : The Fourth Advent Sunday
-"4. adventtisunnuntai"                             public religious on sunday 
before 24 december
-: Holy Innocents' Day (not a holiday)
+"4. adventtisunnuntai"                             religious on sunday before 
24 december
+: Holy Innocents' Day (not a day off), refers to Massacre of the Innocents
 "Viattomien lasten päivä"                          religious on 28 december
 
 
-:: Financial
+:: Commemorative
 
-: Enterpreneur's Day
-"Yrittäjän päivä"                                  cultural on 5 september
+: International Holocaust Remembrance Day
+"Vainojen uhrien muistopäivä"                      commemorative on 27 january
+: Remembrance Day
+"Kaatuneitten muistopäivä"                         commemorative on third 
sunday in may
 
 
 :: Cultural
 
-: International Holocaust Remembrance Day
-"Vainojen uhrien muistopäivä"                      cultural on 27 january
 : J. L. Runeberg's Day
 "Runebergin päivä"                                 cultural on 5 february
 : Sami National Day
@@ -105,52 +103,97 @@
 "Naistenpäivä"                                     cultural on 8 march
 : Minna Canth's Day, The Day of Equality
 "Minna Canthin päivä, tasa-arvon päivä"            cultural on 19 march
+: National version of International Romani Day
+"Romanien kansallispäivä"                          cultural on 8 april
 : Michael Agricola' Day, (Finnish Language Day)
-"Agricolan päivä"                                  cultural on 9 april
+"Mikael Agricolan päivä, suomen kielen päivä"      cultural on 9 april
 : National Veteran's Day
-"Veteraanipäivä"                                   cultural on 27 april
+"Kansallinen veteraanipäivä"                       cultural on 27 april
 : Mother's Day
-"Äitienpäivä"                                      cultural on second sunday 
in  may
+"Äitienpäivä"                                      cultural on second sunday 
in may
 : Europe Day
 "Eurooppa-päivä"                                   cultural on 9 may
 : J. V. Snellman's Day, (The Day of Finnishness)
-"Snellmanin päivä"                                 cultural on 12 may
-: Remembrance Day
-"Kaatuneitten muistopäivä"                         cultural on third sunday in 
may
+"J. V. Snellmanin päivä, suomalaisuuden päivä"     cultural on 12 may
 : Flag Day of Defence Forces
-"Puolustusvoimien lippujuhla"                      cultural on 4 june
+"Puolustusvoimien lippujuhlan päivä"               cultural on 4 june
+: Midsummer Eve (Friday on 19 Jun - 25 Jun)
+: Although usually not listed in calendars, it is a day off for many and an 
important day anyway.
+"Juhannusaatto"                                    financial government 
cultural on friday after 18 june
 : Eino Leino's Day, (Summer and Poetry Day)
-"Eino Leinon päivä"                                cultural on 6 july
+"Eino Leinon päivä, runon ja suven päivä"          cultural on 6 july
+: Entrepreneur's Day
+"Yrittäjän päivä"                                  cultural on 5 september
 : Aleksis Kivi's Day, (Finnish Literature Day)
-"Aleksis Kiven päivä"                              cultural on 10 october
-: United Nations Day
-"YK:n päivä"                                       cultural on 24 october
+"Aleksis Kiven päivä, suomalaisen kirjallisuuden päivä" cultural on 10 october
 : Finnish Swedish Heritage Day
 "Svenska dagen"                                    cultural on 6 november
 : Father's Day
 "Isänpäivä"                                        cultural on second sunday 
in november
 : Children's Day
-"Lapsen oikeuksien päivä"                          cultural on 20 november
+"Lasten oikeuksien päivä"                          cultural on 20 november
 : Jean Sibelius's Day, (Finnish Music Day)
-"Jean Sibeliuksen päivä"                           cultural on 8 december
+"Jean Sibeliuksen päivä, suomalaisen musiikin päivä" cultural on 8 december
+: Christmas Eve (listed here even though it is usually not listed in calendars)
+"Jouluaatto"                                       financial government 
cultural on 24 december
 
 
-:: School
-
-:: Daylight Saving
-"Kesäaika alkaa (+1 tunti)"                        seasonal on last sunday in 
march
-"Kesäaika päättyy (-1 tunti)"                      seasonal on last sunday in 
october
+:: Historical
 
+: United Nations Day
+"YK:n päivä"                                       historical on 24 october
 
-:: Seasons
 
+:: School
 
-:: Name Days
+:: Daylight Saving (Winter/Summer Time)
 
-: Name days in Finland are under copyright by University of Helsinki Almanac 
office and not free
+"Kesäaika alkaa (tunti eteenpäin)"                 seasonal on last sunday in 
march
+"Kesäaika päättyy (tunti taaksepäin)"              seasonal on last sunday in 
october
 
 
-:: To be sorted
+:: Seasons
 
 : Leap Day
 "Karkauspäivä"                                     seasonal on 29 february
+: Vernal equinox
+"Kevätpäiväntasaus"                                seasonal on 20 march 2013
+"Kevätpäiväntasaus"                                seasonal on 20 march 2014
+"Kevätpäiväntasaus"                                seasonal on 21 march 2015
+"Kevätpäiväntasaus"                                seasonal on 20 march 2016
+"Kevätpäiväntasaus"                                seasonal on 20 march 2017
+"Kevätpäiväntasaus"                                seasonal on 20 march 2018
+"Kevätpäiväntasaus"                                seasonal on 20 march 2019
+"Kevätpäiväntasaus"                                seasonal on 20 march 2020
+: Summer solstice
+"Kesäpäivänseisaus"                                seasonal on 21 june 2013
+"Kesäpäivänseisaus"                                seasonal on 21 june 2014
+"Kesäpäivänseisaus"                                seasonal on 21 june 2015
+"Kesäpäivänseisaus"                                seasonal on 21 june 2016
+"Kesäpäivänseisaus"                                seasonal on 21 june 2017
+"Kesäpäivänseisaus"                                seasonal on 21 june 2018
+"Kesäpäivänseisaus"                                seasonal on 21 june 2019
+"Kesäpäivänseisaus"                                seasonal on 21 june 2020
+: Autumnal equinox
+"Syyspäiväntasaus"                                 seasonal on 22 september 
2013
+"Syyspäiväntasaus"                                 seasonal on 23 september 
2014
+"Syyspäiväntasaus"                                 seasonal on 23 september 
2015
+"Syyspäiväntasaus"                                 seasonal on 22 september 
2016
+"Syyspäiväntasaus"                                 seasonal on 22 september 
2017
+"Syyspäiväntasaus"                                 seasonal on 23 september 
2018
+"Syyspäiväntasaus"                                 seasonal on 23 september 
2019
+"Syyspäiväntasaus"                                 seasonal on 22 september 
2020
+: Winter solstice
+"Talvipäivänseisaus"                               seasonal on 21 december 2013
+"Talvipäivänseisaus"                               seasonal on 22 december 2014
+"Talvipäivänseisaus"                               seasonal on 22 december 2015
+"Talvipäivänseisaus"                               seasonal on 21 december 2016
+"Talvipäivänseisaus"                               seasonal on 21 december 2017
+"Talvipäivänseisaus"                               seasonal on 22 december 2018
+"Talvipäivänseisaus"                               seasonal on 22 december 2019
+"Talvipäivänseisaus"                               seasonal on 21 december 2020
+
+
+:: Name Days
+
+: Name days in Finland are under copyright by University of Helsinki Almanac 
office and are not free.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/kdepimlibs-4.14.2/kholidays/holidays/plan2/holiday_us_en-us 
new/kdepimlibs-4.14.3/kholidays/holidays/plan2/holiday_us_en-us
--- old/kdepimlibs-4.14.2/kholidays/holidays/plan2/holiday_us_en-us     
2014-10-09 22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/kholidays/holidays/plan2/holiday_us_en-us     
2014-11-04 22:19:27.000000000 +0100
@@ -56,6 +56,7 @@
 "World Poetry Day"               cultural on october 15
 "United Nations' Day"            cultural on october 24
 "Halloween"                      cultural on october 31
+"Election Day"                   cultural on tuesday after 11/2
 "Bill of Rights' Day"            cultural on december 15
 "Wright Brothers' Day"           cultural on december 17
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/kpimtextedit/selectspecialchar.cpp 
new/kdepimlibs-4.14.3/kpimtextedit/selectspecialchar.cpp
--- old/kdepimlibs-4.14.2/kpimtextedit/selectspecialchar.cpp    2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/kpimtextedit/selectspecialchar.cpp    2014-11-04 
22:19:27.000000000 +0100
@@ -31,7 +31,7 @@
       : q( qq )
     {
       q->setCaption( i18n( "Select Special Characters" ) );
-      q->setButtons( KDialog::Ok|KDialog::Cancel|KDialog::User1 );
+      q->setButtons( KDialog::Close|KDialog::User1 );
       q->setButtonText( KDialog::User1, i18n( "Select" ) );
       QWidget *page = new QWidget( q );
       q->setMainWidget( page );
@@ -70,7 +70,7 @@
 void SelectSpecialChar::showSelectButton( bool show )
 {
   if ( show ) {
-    setButtons( Ok|Cancel|User1 );
+    setButtons( Close|User1 );
   } else {
     setButtons( Ok|Cancel );
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/mailtransport/transport.cpp 
new/kdepimlibs-4.14.3/mailtransport/transport.cpp
--- old/kdepimlibs-4.14.2/mailtransport/transport.cpp   2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/mailtransport/transport.cpp   2014-11-04 
22:19:27.000000000 +0100
@@ -232,6 +232,7 @@
 void Transport::usrWriteConfig()
 {
   if ( requiresAuthentication() && storePassword() && d->passwordDirty ) {
+    const QString storePassword = d->password;
     Wallet *wallet = TransportManager::self()->wallet();
     if ( !wallet || wallet->writePassword( QString::number( id() ), 
d->password ) != 0 ) {
       // wallet saving failed, ask if we should store in the config file 
instead
@@ -250,7 +251,7 @@
              KGuiItem( i18n( "Do Not Store Password" ) ) ) == KMessageBox::Yes 
) {
         // write to config file
         KConfigGroup group( config(), currentGroup() );
-        group.writeEntry( "password", KStringHandler::obscure( d->password ) );
+        group.writeEntry( "password", KStringHandler::obscure( storePassword ) 
);
         d->storePasswordInFile = true;
       }
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kdepimlibs-4.14.2/mailtransport/transportmanager.cpp 
new/kdepimlibs-4.14.3/mailtransport/transportmanager.cpp
--- old/kdepimlibs-4.14.2/mailtransport/transportmanager.cpp    2014-10-09 
22:09:43.000000000 +0200
+++ new/kdepimlibs-4.14.3/mailtransport/transportmanager.cpp    2014-11-04 
22:19:27.000000000 +0100
@@ -408,6 +408,12 @@
   d->transports.removeAll( t );
   d->validateDefault();
   QString group = t->currentGroup();
+  if (t->storePassword()) {
+      Wallet *currentWallet = wallet();
+      if ( currentWallet ) {
+          currentWallet->removeEntry( QString::number(t->id()) );
+      }
+  }
   delete t;
   d->config->deleteGroup( group );
   d->writeConfig();

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to