From f85b7e4b28288962f8428e372d7a19fc63ad230646ce1ebc0b94b05ed4cc4928 Mon Sep 17 00:00:00 2001 From: OBS User buildservice-autocommit Date: Wed, 17 Jan 2018 20:57:12 +0000 Subject: [PATCH] Updating link to change in openSUSE:Factory/digikam revision 165.0 OBS-URL: https://build.opensuse.org/package/show/KDE:Extra/digikam?expand=0&rev=0517b7e8e8fff9ee0a4c8bc00012fa50 --- ...vert-replace-obsolete-qSort-function.patch | 635 ++++++++++++++++++ ...vert-replace-obsolete-qSort-function.patch | 105 +++ Adapt-to-KCalCore-API-changes.patch | 77 --- digikam-5.7.0.tar.xz | 3 - digikam-5.8.0.tar.xz | 3 + digikam.changes | 28 + digikam.spec | 26 +- fix-Qt-5.9.3-empty-album-problem.patch | 31 - fix-italian-docs-with-older-kdoctools.patch | 21 + 9 files changed, 808 insertions(+), 121 deletions(-) create mode 100644 0001-Revert-replace-obsolete-qSort-function.patch create mode 100644 0002-Revert-replace-obsolete-qSort-function.patch delete mode 100644 Adapt-to-KCalCore-API-changes.patch delete mode 100644 digikam-5.7.0.tar.xz create mode 100644 digikam-5.8.0.tar.xz delete mode 100644 fix-Qt-5.9.3-empty-album-problem.patch create mode 100644 fix-italian-docs-with-older-kdoctools.patch diff --git a/0001-Revert-replace-obsolete-qSort-function.patch b/0001-Revert-replace-obsolete-qSort-function.patch new file mode 100644 index 0000000..2535c48 --- /dev/null +++ b/0001-Revert-replace-obsolete-qSort-function.patch @@ -0,0 +1,635 @@ +From 87d90549a5db7c309228697652a4608ee774be74 Mon Sep 17 00:00:00 2001 +From: Wolfgang Bauer +Date: Sun, 14 Jan 2018 00:17:04 +0100 +Subject: [PATCH] Revert "replace obsolete qSort() function" + +This reverts commit 1fdff40d7efaf9ab9d8fe716970e02a18bdb73f7. +It breaks compilation with GCC 4.8. +--- + app/utils/tooltipfiller.cpp | 2 +- + app/views/tableview/tableview_model.cpp | 6 ++-- + libs/album/albummanager.cpp | 6 ++-- + libs/database/collection/collectionscanner.cpp | 2 +- + .../imagehistory/imagehistorygraph_boost.h | 2 +- + .../imagehistory/imagehistorygraphmodel.cpp | 2 +- + libs/database/models/imagemodel.cpp | 2 +- + libs/database/tags/facetags.cpp | 2 +- + libs/dimg/imagehistory/dimagehistory.cpp | 2 +- + libs/dmetadata/dmetadatasettingscontainer.cpp | 2 +- + libs/dtrash/dtrashitemmodel.cpp | 32 +++++++++++----------- + libs/imageproperties/disjointmetadata.cpp | 2 +- + libs/tags/tagfolderview.cpp | 18 ++++++------ + libs/tags/tagsmanager/tagmngrtreeview.cpp | 10 +++---- + libs/widgets/fonts/dfontproperties.cpp | 4 +-- + libs/widgets/iccprofiles/iccprofilescombobox.cpp | 2 +- + showfoto/thumbbar/showfotoimagemodel.cpp | 2 +- + tests/dimg/dimghistorygraphtest.cpp | 18 ++++++------ + utilities/advancedrename/advancedrenamemanager.cpp | 6 ++-- + .../editor/correlator/track_correlator_thread.cpp | 2 +- + .../editor/searches/searchresultmodel.cpp | 4 +-- + .../geolocation/geoiface/tracks/trackreader.cpp | 2 +- + utilities/importui/models/importimagemodel.cpp | 2 +- + utilities/maintenance/imageinfojob.cpp | 2 +- + utilities/searchwindow/searchutilities.cpp | 6 ++-- + 25 files changed, 70 insertions(+), 70 deletions(-) + +diff --git a/core/app/utils/tooltipfiller.cpp b/core/app/utils/tooltipfiller.cpp +index 0371cdfe73..e40cefd18f 100644 +--- a/core/app/utils/tooltipfiller.cpp ++++ b/core/app/utils/tooltipfiller.cpp +@@ -677,7 +677,7 @@ QString ToolTipFiller::filterActionTipContents(const FilterAction& action) + + const QHash& params = action.parameters(); + QList keys = params.keys(); +- std::sort(keys.begin(), keys.end()); ++ qSort(keys); + + foreach(const QString& key, keys) + { +diff --git a/core/app/views/tableview/tableview_model.cpp b/core/app/views/tableview/tableview_model.cpp +index 6047462023..f168f577f1 100644 +--- a/core/app/views/tableview/tableview_model.cpp ++++ b/core/app/views/tableview/tableview_model.cpp +@@ -1144,9 +1144,9 @@ QList TableViewModel::sortItems(const QList sortedList = itemList; + +- std::sort(sortedList.begin(), +- sortedList.end(), +- LessThan(this)); ++ qSort(sortedList.begin(), ++ sortedList.end(), ++ LessThan(this)); + + return sortedList; + } +diff --git a/core/libs/album/albummanager.cpp b/core/libs/album/albummanager.cpp +index ea0726eab3..f41f3faeac 100644 +--- a/core/libs/album/albummanager.cpp ++++ b/core/libs/album/albummanager.cpp +@@ -1290,7 +1290,7 @@ void AlbumManager::scanPAlbums() + QList currentAlbums = CoreDbAccess().db()->scanAlbums(); + + // sort by relative path so that parents are created before children +- std::sort(currentAlbums.begin(), currentAlbums.end()); ++ qSort(currentAlbums); + + QList newAlbums; + +@@ -1342,7 +1342,7 @@ void AlbumManager::scanPAlbums() + } + + // sort by relative path so that parents are created before children +- std::sort(newAlbums.begin(), newAlbums.end()); ++ qSort(newAlbums); + + // create all new albums + foreach(const AlbumInfo& info, newAlbums) +@@ -1924,7 +1924,7 @@ void AlbumManager::setCurrentAlbums(QList albums) + /** + * Sort is needed to identify selection correctly, ex AlbumHistory + */ +- std::sort(albums.begin(), albums.end()); ++ qSort(albums.begin(),albums.end()); + d->currentAlbums.clear(); + d->currentAlbums+=albums; + +diff --git a/core/libs/database/collection/collectionscanner.cpp b/core/libs/database/collection/collectionscanner.cpp +index b3284c8d99..b98d2d799a 100644 +--- a/core/libs/database/collection/collectionscanner.cpp ++++ b/core/libs/database/collection/collectionscanner.cpp +@@ -531,7 +531,7 @@ void CollectionScanner::finishCompleteScan(const QStringList& albumPaths) + + // remove subalbums from list if parent album is already contained + QStringList sortedPaths = albumPaths; +- std::sort(sortedPaths.begin(), sortedPaths.end()); ++ qSort(sortedPaths); + QStringList::iterator it, it2; + + for (it = sortedPaths.begin(); it != sortedPaths.end(); ) +diff --git a/core/libs/database/imagehistory/imagehistorygraph_boost.h b/core/libs/database/imagehistory/imagehistorygraph_boost.h +index 5c4c49ac5f..affdf48466 100644 +--- a/core/libs/database/imagehistory/imagehistorygraph_boost.h ++++ b/core/libs/database/imagehistory/imagehistorygraph_boost.h +@@ -1454,7 +1454,7 @@ protected: + outEdges = toList(boost::out_edges(u, g)); + // Sort edges. The lessThan we have takes vertices, so we use a lessThan which + // maps the given edges to their targets, and calls our vertex lessThan. +- std::sort(outEdges.begin(), outEdges.end(), lessThanMapEdgeToTarget(g, lessThan)); ++ qSort(outEdges.begin(), outEdges.end(), lessThanMapEdgeToTarget(g, lessThan)); + + foreach(const edge_descriptor& e, outEdges) + { +diff --git a/core/libs/database/imagehistory/imagehistorygraphmodel.cpp b/core/libs/database/imagehistory/imagehistorygraphmodel.cpp +index fbe53b0af9..930bc9eab4 100644 +--- a/core/libs/database/imagehistory/imagehistorygraphmodel.cpp ++++ b/core/libs/database/imagehistory/imagehistorygraphmodel.cpp +@@ -521,7 +521,7 @@ void ImageHistoryGraphModel::Private:: + { + parentItem->addItem(new CategoryItem(title)); + +- std::sort(vertices.begin(), vertices.end(), sortBy(oldestInfoFirst)); ++ qSort(vertices.begin(), vertices.end(), sortBy(oldestInfoFirst)); + bool isFirst = true; + VertexItem* item = 0; + +diff --git a/core/libs/database/models/imagemodel.cpp b/core/libs/database/models/imagemodel.cpp +index cd4dde5520..db30e93a5b 100644 +--- a/core/libs/database/models/imagemodel.cpp ++++ b/core/libs/database/models/imagemodel.cpp +@@ -1197,7 +1197,7 @@ QList > ImageModelIncrementalUpdater::toContiguousPairs(const QL + } + + QList indices(unsorted); +- std::sort(indices.begin(), indices.end()); ++ qSort(indices); + + QPair pair(indices.first(), indices.first()); + +diff --git a/core/libs/database/tags/facetags.cpp b/core/libs/database/tags/facetags.cpp +index dc1f965ce2..cdf08c6613 100644 +--- a/core/libs/database/tags/facetags.cpp ++++ b/core/libs/database/tags/facetags.cpp +@@ -398,7 +398,7 @@ int FaceTags::personParentTag() + QList mosttoplevelTags = tiers.values(tiers.begin().key()); + + // as a pretty weak criterion, take the largest id which usually corresponds to the latest tag creation. +- std::sort(mosttoplevelTags.begin(), mosttoplevelTags.end()); ++ qSort(mosttoplevelTags); + return TagsCache::instance()->parentTag(mosttoplevelTags.last()); + } + +diff --git a/core/libs/dimg/imagehistory/dimagehistory.cpp b/core/libs/dimg/imagehistory/dimagehistory.cpp +index ee24dc206c..2eb2b2ea17 100644 +--- a/core/libs/dimg/imagehistory/dimagehistory.cpp ++++ b/core/libs/dimg/imagehistory/dimagehistory.cpp +@@ -534,7 +534,7 @@ QString DImageHistory::toXml() const + if (!params.isEmpty()) + { + QList keys = params.keys(); +- std::sort(keys.begin(), keys.end()); ++ qSort(keys); + + foreach(const QString& key, keys) + { +diff --git a/core/libs/dmetadata/dmetadatasettingscontainer.cpp b/core/libs/dmetadata/dmetadatasettingscontainer.cpp +index 32def9519b..4789f7543a 100644 +--- a/core/libs/dmetadata/dmetadatasettingscontainer.cpp ++++ b/core/libs/dmetadata/dmetadatasettingscontainer.cpp +@@ -440,7 +440,7 @@ void DMetadataSettingsContainer::readOneGroup(KConfigGroup& group, const QString + container.append(ns); + } + +- std::sort(container.begin(), container.end(), Digikam::dmcompare); ++ qSort(container.begin(), container.end(), Digikam::dmcompare); + } + + void DMetadataSettingsContainer::writeOneGroup(KConfigGroup& group, const QString& name, QList& container) const +diff --git a/core/libs/dtrash/dtrashitemmodel.cpp b/core/libs/dtrash/dtrashitemmodel.cpp +index b21ac32446..0abbe7d223 100644 +--- a/core/libs/dtrash/dtrashitemmodel.cpp ++++ b/core/libs/dtrash/dtrashitemmodel.cpp +@@ -146,28 +146,28 @@ void DTrashItemModel::sort(int column, Qt::SortOrder order) + return; + } + +- std::sort(d->data.begin(), d->data.end(), +- [column, order](const DTrashItemInfo& a, const DTrashItemInfo& b) ++ qSort(d->data.begin(), d->data.end(), ++ [column, order](const DTrashItemInfo& a, const DTrashItemInfo& b) ++ { ++ if (column == 2 && a.deletionTimestamp != b.deletionTimestamp) + { +- if (column == 2 && a.deletionTimestamp != b.deletionTimestamp) ++ if (order == Qt::DescendingOrder) + { +- if (order == Qt::DescendingOrder) +- { +- return a.deletionTimestamp > b.deletionTimestamp; +- } +- else +- { +- return a.deletionTimestamp < b.deletionTimestamp; +- } ++ return a.deletionTimestamp > b.deletionTimestamp; + } +- +- if (order == Qt::DescendingOrder) ++ else + { +- return a.collectionRelativePath > b.collectionRelativePath; ++ return a.deletionTimestamp < b.deletionTimestamp; + } ++ } ++ ++ if (order == Qt::DescendingOrder) ++ { ++ return a.collectionRelativePath > b.collectionRelativePath; ++ } + +- return a.collectionRelativePath < b.collectionRelativePath; +- }); ++ return a.collectionRelativePath < b.collectionRelativePath; ++ }); + + const QModelIndex topLeft = index(0, 0, QModelIndex()); + const QModelIndex bottomRight = index(rowCount(QModelIndex())-1, +diff --git a/core/libs/imageproperties/disjointmetadata.cpp b/core/libs/imageproperties/disjointmetadata.cpp +index 3f3cd56bbc..53d5cb2cf0 100644 +--- a/core/libs/imageproperties/disjointmetadata.cpp ++++ b/core/libs/imageproperties/disjointmetadata.cpp +@@ -609,7 +609,7 @@ void DisjointMetadata::loadTags( QList &loadedTagIds) + return; + } + +- std::sort(loadedTagIds.begin(), loadedTagIds.end()); ++ qSort(loadedTagIds.begin(),loadedTagIds.end()); + // We search for metadata available tags, and + // it is not present in current list, set it to + // disjoint +diff --git a/core/libs/tags/tagfolderview.cpp b/core/libs/tags/tagfolderview.cpp +index d4e1c09dfc..a194af0a5a 100644 +--- a/core/libs/tags/tagfolderview.cpp ++++ b/core/libs/tags/tagfolderview.cpp +@@ -136,7 +136,7 @@ void TagFolderView::addCustomContextMenuActions(ContextMenuHelper& cmh, Album* a + cmh.addSeparator(); + if (d->showDeleteFaceTagsAction) + { +- cmh.addActionDeleteFaceTag(tagModificationHelper(), tag); ++ cmh.addActionDeleteFaceTag(tagModificationHelper(),tag); + cmh.addSeparator(); + } + else +@@ -146,7 +146,7 @@ void TagFolderView::addCustomContextMenuActions(ContextMenuHelper& cmh, Album* a + // If the tag is no face tag, add the option to set it as face tag. + if (!FaceTags::isPerson(tag->id())) + { +- cmh.addActionTagToFaceTag(tagModificationHelper(), tag); ++ cmh.addActionTagToFaceTag(tagModificationHelper(),tag); + } + } + cmh.addActionEditTag(tagModificationHelper(), tag); +@@ -199,7 +199,7 @@ void TagFolderView::slotExpandNode() + { + expand(child); + greyNodes.enqueue(child); +- child = current.child(it++, 0); ++ child = current.child(it++,0); + } + } + } +@@ -234,7 +234,7 @@ void TagFolderView::slotCollapseNode() + { + collapse(child); + greyNodes.enqueue(child); +- child = current.child(it++, 0); ++ child = current.child(it++,0); + } + } + } +@@ -294,18 +294,18 @@ void TagFolderView::setContexMenuItems(ContextMenuHelper& cmh, QList< TAlbum* > + cmh.addSeparator(); + if (d->showDeleteFaceTagsAction) + { +- cmh.addActionDeleteFaceTags(tagModificationHelper(), albums); ++ cmh.addActionDeleteFaceTags(tagModificationHelper(),albums); + } + else + { +- cmh.addActionDeleteTags(tagModificationHelper(), albums); ++ cmh.addActionDeleteTags(tagModificationHelper(),albums); + // If one of the selected tags is no face tag, add the action to mark them as face tags. + foreach (TAlbum * const tag, albums) + { + if (!FaceTags::isPerson(tag->id())) + { + cmh.addSeparator(); +- cmh.addActionTagToFaceTag(tagModificationHelper(), tag); ++ cmh.addActionTagToFaceTag(tagModificationHelper(),tag); + break; + } + } +@@ -342,7 +342,7 @@ void TagFolderView::contextMenuEvent(QContextMenuEvent* event) + + QModelIndexList selectedItems = selectionModel()->selectedIndexes(); + +- std::sort(selectedItems.begin(), selectedItems.end()); ++ qSort(selectedItems.begin(),selectedItems.end()); + QList items; + + foreach(const QModelIndex& mIndex, selectedItems) +@@ -356,7 +356,7 @@ void TagFolderView::contextMenuEvent(QContextMenuEvent* event) + */ + if(items.isEmpty()) + { +- QModelIndex root = this->model()->index(0, 0); ++ QModelIndex root = this->model()->index(0,0); + items.append(static_cast(albumForIndex(root))); + } + +diff --git a/core/libs/tags/tagsmanager/tagmngrtreeview.cpp b/core/libs/tags/tagsmanager/tagmngrtreeview.cpp +index 6dec5c6eb7..fb2a6991ba 100644 +--- a/core/libs/tags/tagsmanager/tagmngrtreeview.cpp ++++ b/core/libs/tags/tagsmanager/tagmngrtreeview.cpp +@@ -71,7 +71,7 @@ void TagMngrTreeView::contextMenuEvent(QContextMenuEvent* event) + { + QModelIndexList selectedItems = selectionModel()->selectedIndexes(); + +- std::sort(selectedItems.begin(), selectedItems.end()); ++ qSort(selectedItems.begin(),selectedItems.end()); + QList items; + + foreach(const QModelIndex& mIndex, selectedItems) +@@ -85,7 +85,7 @@ void TagMngrTreeView::contextMenuEvent(QContextMenuEvent* event) + */ + if(items.isEmpty()) + { +- QModelIndex root = this->model()->index(0, 0); ++ QModelIndex root = this->model()->index(0,0); + items.append(static_cast(albumForIndex(root))); + } + +@@ -130,7 +130,7 @@ void TagMngrTreeView::setContexMenuItems(ContextMenuHelper& cmh, QList + + if (!isRoot) + { +- cmh.addActionDeleteTags(tagModificationHelper(), albums); ++ cmh.addActionDeleteTags(tagModificationHelper(),albums); + } + else + { +@@ -194,7 +194,7 @@ void TagMngrTreeView::slotExpandSelected() + + void TagMngrTreeView::slotExpandTree() + { +- QModelIndex root = this->model()->index(0, 0); ++ QModelIndex root = this->model()->index(0,0); + QItemSelectionModel* const model = this->selectionModel(); + QModelIndexList selected = model->selectedIndexes(); + +@@ -227,7 +227,7 @@ void TagMngrTreeView::slotExpandTree() + expand(child); + } + +- child = current.child(it++, 0); ++ child = current.child(it++,0); + } + } + else +diff --git a/core/libs/widgets/fonts/dfontproperties.cpp b/core/libs/widgets/fonts/dfontproperties.cpp +index c78f8e5cb2..7466b62477 100644 +--- a/core/libs/widgets/fonts/dfontproperties.cpp ++++ b/core/libs/widgets/fonts/dfontproperties.cpp +@@ -1037,7 +1037,7 @@ qreal DFontProperties::Private::fillSizeList(const QList& sizes_) + + // Insert sizes into the listbox. + sizeListBox->clear(); +- std::sort(sizes.begin(), sizes.end()); ++ qSort(sizes); + + Q_FOREACH (qreal size, sizes) + { +@@ -1400,7 +1400,7 @@ QStringList DFontProperties::Private::translateFontNameList(const QStringList& n + + // Sort real fonts alphabetically. + +- std::sort(trNames.begin(), trNames.end(), localeLessThan); ++ qSort(trNames.begin(), trNames.end(), localeLessThan); + + // Prepend generic fonts, in the predefined order. + +diff --git a/core/libs/widgets/iccprofiles/iccprofilescombobox.cpp b/core/libs/widgets/iccprofiles/iccprofilescombobox.cpp +index 779be49aec..3be93a04a8 100644 +--- a/core/libs/widgets/iccprofiles/iccprofilescombobox.cpp ++++ b/core/libs/widgets/iccprofiles/iccprofilescombobox.cpp +@@ -97,7 +97,7 @@ static void formatProfiles(const QList& givenProfiles, QList > ShowfotoImageModel::toContiguousPairs(const QList& + } + + QList indices(unsorted); +- std::sort(indices.begin(), indices.end()); ++ qSort(indices); + + QPair pair(indices.first(), indices.first()); + +diff --git a/core/tests/dimg/dimghistorygraphtest.cpp b/core/tests/dimg/dimghistorygraphtest.cpp +index e9204954cd..335d8192a5 100644 +--- a/core/tests/dimg/dimghistorygraphtest.cpp ++++ b/core/tests/dimg/dimghistorygraphtest.cpp +@@ -183,7 +183,7 @@ void DImgHistoryGraphTest::testEditing() + controlCloud << IdPair(two.id(), orig.id()); + controlCloud << IdPair(three.id(), orig.id()); + controlCloud << IdPair(four.id(), orig.id()); +- std::sort(controlCloud.begin(), controlCloud.end()); ++ qSort(controlCloud); + + ImageHistoryGraph graph1 = ImageHistoryGraph::fromInfo(three); + qDebug() << graph1; +@@ -198,7 +198,7 @@ void DImgHistoryGraphTest::testEditing() + QVERIFY(graph3.data().vertexCount() == 5); + + QList cloud = graph3.relationCloud(); +- std::sort(cloud.begin(), cloud.end()); ++ qSort(cloud); + QVERIFY(cloud == controlCloud); + + int needResolvingTag = TagsCache::instance()->getOrCreateInternalTag(InternalTagName::needResolvingHistory()); +@@ -301,7 +301,7 @@ void DImgHistoryGraphTest::testGraph() + + QList controlLeaves; + controlLeaves << 8 << 19 << 20 << 21 << 10 << 3 << 11 << 22 << 24 << 14 << 15 << 16 << 17 << 18; +- std::sort(controlLeaves.begin(), controlLeaves.end()); ++ qSort(controlLeaves); + + QList controlRoots; + controlRoots << 1; +@@ -429,11 +429,11 @@ void DImgHistoryGraphTest::testGraph() + } + + QList leaves = mapList(graph.data().leaves(), vertexToId); +- std::sort(leaves.begin(), leaves.end()); ++ qSort(leaves); + QVERIFY(leaves == controlLeaves); + + QList roots = mapList(graph.data().roots(), vertexToId); +- std::sort(roots.begin(), roots.end()); ++ qSort(roots); + QVERIFY(roots == controlRoots); + + QList longestPath1 = mapList(graph.data().longestPathTouching(idToVertex.value(18)), vertexToId); +@@ -444,13 +444,13 @@ void DImgHistoryGraphTest::testGraph() + // depth-first + QList subgraphTwo = mapList(graph.data().verticesDominatedBy(idToVertex.value(2), idToVertex.value(1), + HistoryGraph::DepthFirstOrder), vertexToId); +- std::sort(subgraphTwo.begin(), subgraphTwo.end()); ++ qSort(subgraphTwo); + QVERIFY(subgraphTwo == controlSubgraphTwo); + + // breadth-first + QList subgraphFour = mapList(graph.data().verticesDominatedBy(idToVertex.value(4), idToVertex.value(1)), vertexToId); + QVERIFY(subgraphFour.indexOf(22) > subgraphFour.indexOf(13)); +- std::sort(subgraphFour.begin(), subgraphFour.end()); ++ qSort(subgraphFour); + QVERIFY(subgraphFour == controlSubgraphFour); + + // depth-first +@@ -461,10 +461,10 @@ void DImgHistoryGraphTest::testGraph() + QVERIFY(subgraphTwoSorted == controlSubgraphTwoSorted); + + QList rootsOfEighteen = mapList(graph.data().rootsOf(idToVertex.value(18)), vertexToId); +- std::sort(rootsOfEighteen.begin(), rootsOfEighteen.end()); ++ qSort(rootsOfEighteen); + QVERIFY(rootsOfEighteen == controlRootsOfEighteen); + QList leavesFromTwo = mapList(graph.data().leavesFrom(idToVertex.value(2)), vertexToId); +- std::sort(leavesFromTwo.begin(), leavesFromTwo.end()); ++ qSort(leavesFromTwo); + QVERIFY(leavesFromTwo == controlLeavesFromTwo); + } + +diff --git a/core/utilities/advancedrename/advancedrenamemanager.cpp b/core/utilities/advancedrename/advancedrenamemanager.cpp +index 1c0c207af7..9f83887f80 100644 +--- a/core/utilities/advancedrename/advancedrenamemanager.cpp ++++ b/core/utilities/advancedrename/advancedrenamemanager.cpp +@@ -331,19 +331,19 @@ void AdvancedRenameManager::initializeFileList() + { + case SortName: + { +- std::sort(tmpFiles.begin(), tmpFiles.end(), SortByNameCaseInsensitive()); ++ qSort(tmpFiles.begin(), tmpFiles.end(), SortByNameCaseInsensitive()); + break; + } + + case SortDate: + { +- std::sort(tmpFiles.begin(), tmpFiles.end(), SortByDate()); ++ qSort(tmpFiles.begin(), tmpFiles.end(), SortByDate()); + break; + } + + case SortSize: + { +- std::sort(tmpFiles.begin(), tmpFiles.end(), SortBySize()); ++ qSort(tmpFiles.begin(), tmpFiles.end(), SortBySize()); + break; + } + +diff --git a/core/utilities/geolocation/editor/correlator/track_correlator_thread.cpp b/core/utilities/geolocation/editor/correlator/track_correlator_thread.cpp +index 8dc7b7df66..a5b818b6ea 100644 +--- a/core/utilities/geolocation/editor/correlator/track_correlator_thread.cpp ++++ b/core/utilities/geolocation/editor/correlator/track_correlator_thread.cpp +@@ -50,7 +50,7 @@ TrackCorrelatorThread::~TrackCorrelatorThread() + void TrackCorrelatorThread::run() + { + // sort the items to correlate by time: +- std::sort(itemsToCorrelate.begin(), itemsToCorrelate.end(), TrackCorrelationLessThan); ++ qSort(itemsToCorrelate.begin(), itemsToCorrelate.end(), TrackCorrelationLessThan); + + // now perform the correlation + // we search all loaded gpx data files in parallel for the points with the best match +diff --git a/core/utilities/geolocation/editor/searches/searchresultmodel.cpp b/core/utilities/geolocation/editor/searches/searchresultmodel.cpp +index aea4dc0346..412488ea38 100644 +--- a/core/utilities/geolocation/editor/searches/searchresultmodel.cpp ++++ b/core/utilities/geolocation/editor/searches/searchresultmodel.cpp +@@ -315,7 +315,7 @@ void SearchResultModel::removeRowsByIndexes(const QModelIndexList& rowsList) + return; + } + +- std::sort(rowNumbers.begin(), rowNumbers.end()); ++ qSort(rowNumbers.begin(), rowNumbers.end()); + + // now delete the rows, starting with the last row: + for (int i = rowNumbers.count()-1; i >= 0; i--) +@@ -340,7 +340,7 @@ void SearchResultModel::removeRowsBySelection(const QItemSelection& selectionLis + } + + // we expect the ranges to be sorted here +- std::sort(rowRanges.begin(), rowRanges.end(), RowRangeLessThan); ++ qSort(rowRanges.begin(), rowRanges.end(), RowRangeLessThan); + + // now delete the rows, starting with the last row: + for (int i = rowRanges.count()-1; i >= 0; i--) +diff --git a/core/utilities/geolocation/geoiface/tracks/trackreader.cpp b/core/utilities/geolocation/geoiface/tracks/trackreader.cpp +index 71fef9804e..cb58917c08 100644 +--- a/core/utilities/geolocation/geoiface/tracks/trackreader.cpp ++++ b/core/utilities/geolocation/geoiface/tracks/trackreader.cpp +@@ -330,7 +330,7 @@ TrackReader::TrackReadResult TrackReader::loadTrackFile(const QUrl& url) + } + + // the correlation algorithm relies on sorted data, therefore sort now +- std::sort(parsedData.track.points.begin(), parsedData.track.points.end(), TrackManager::TrackPoint::EarlierThan); ++ qSort(parsedData.track.points.begin(), parsedData.track.points.end(), TrackManager::TrackPoint::EarlierThan); + + return parsedData; + } +diff --git a/core/utilities/importui/models/importimagemodel.cpp b/core/utilities/importui/models/importimagemodel.cpp +index 644f436a2a..ce351efa10 100644 +--- a/core/utilities/importui/models/importimagemodel.cpp ++++ b/core/utilities/importui/models/importimagemodel.cpp +@@ -926,7 +926,7 @@ QList > ImportImageModelIncrementalUpdater::toContiguousPairs(co + } + + QList indices(unsorted); +- std::sort(indices.begin(), indices.end()); ++ qSort(indices); + + QPair pair(indices.first(), indices.first()); + +diff --git a/core/utilities/maintenance/imageinfojob.cpp b/core/utilities/maintenance/imageinfojob.cpp +index d3915ceebe..8277e14368 100644 +--- a/core/utilities/maintenance/imageinfojob.cpp ++++ b/core/utilities/maintenance/imageinfojob.cpp +@@ -175,7 +175,7 @@ void ImageInfoJob::slotData(const QList& records) + } + + // Sort the itemList based on name +- std::sort(itemsList.begin(), itemsList.end(), ImageInfoList::namefileLessThan); ++ qSort(itemsList.begin(), itemsList.end(), ImageInfoList::namefileLessThan); + + emit signalItemsInfo(itemsList); + } +diff --git a/core/utilities/searchwindow/searchutilities.cpp b/core/utilities/searchwindow/searchutilities.cpp +index 3a7fe43410..622a0a73ad 100644 +--- a/core/utilities/searchwindow/searchutilities.cpp ++++ b/core/utilities/searchwindow/searchutilities.cpp +@@ -296,7 +296,7 @@ void CustomStepsDoubleSpinBox::setSuggestedValues(const QList& values) + this, SLOT(slotValueChanged(double))); + + d->values = values; +- std::sort(d->values.begin(), d->values.end()); ++ qSort(d->values); + } + + void CustomStepsDoubleSpinBox::setSuggestedInitialValue(double initialValue) +@@ -469,7 +469,7 @@ void CustomStepsIntSpinBox::setSuggestedValues(const QList& values) + this, SLOT(slotValueChanged(int))); + + d->values = values; +- std::sort(d->values.begin(), d->values.end()); ++ qSort(d->values); + } + + void CustomStepsIntSpinBox::setSuggestedInitialValue(int initialValue) +@@ -491,7 +491,7 @@ void CustomStepsIntSpinBox::setInvertStepping(bool invert) + void CustomStepsIntSpinBox::enableFractionMagic(const QString& prefix) + { + d->fractionPrefix = prefix; +- std::sort(d->values.begin(), d->values.end(), qGreater()); ++ qSort(d->values.begin(), d->values.end(), qGreater()); + } + + void CustomStepsIntSpinBox::reset() +-- +2.13.6 + diff --git a/0002-Revert-replace-obsolete-qSort-function.patch b/0002-Revert-replace-obsolete-qSort-function.patch new file mode 100644 index 0000000..0f4f9fd --- /dev/null +++ b/0002-Revert-replace-obsolete-qSort-function.patch @@ -0,0 +1,105 @@ +From d19d149b55c3f25c3c7f1c69c0b777acf0c83024 Mon Sep 17 00:00:00 2001 +From: Wolfgang Bauer +Date: Sun, 14 Jan 2018 01:47:45 +0100 +Subject: [PATCH] Revert "replace obsolete qSort() function" + +This reverts commit 734b9d685f458e5f4dadc61216fbf12f9dc59ca6. +It breaks compilation with GCC 4.8. +--- + facebook/fbtalker.cpp | 3 ++- + flashexport/simpleviewer.cpp | 2 +- + googleservices/gdtalker.cpp | 2 +- + googleservices/gptalker.cpp | 2 +- + piwigo/piwigotalker.cpp | 2 +- + smug/smugtalker.cpp | 2 +- + 6 files changed, 7 insertions(+), 6 deletions(-) + +diff --git a/extra/kipi-plugins/facebook/fbtalker.cpp b/extra/kipi-plugins/facebook/fbtalker.cpp +index 24d8b9723..71d704ee0 100644 +--- a/extra/kipi-plugins/facebook/fbtalker.cpp ++++ b/extra/kipi-plugins/facebook/fbtalker.cpp +@@ -43,6 +43,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -863,7 +864,7 @@ void FbTalker::parseResponseListAlbums(const QByteArray& data) + errMsg = obj[QString::fromLatin1("message")].toString(); + } + +- std::sort(albumsList.begin(), albumsList.end()); ++ qSort(albumsList.begin(), albumsList.end()); + + emit signalBusy(false); + emit signalListAlbumsDone(errCode, errorToText(errCode, errMsg), +diff --git a/extra/kipi-plugins/flashexport/simpleviewer.cpp b/extra/kipi-plugins/flashexport/simpleviewer.cpp +index 618f1b30a..b60f7fdda 100644 +--- a/extra/kipi-plugins/flashexport/simpleviewer.cpp ++++ b/extra/kipi-plugins/flashexport/simpleviewer.cpp +@@ -530,7 +530,7 @@ void SimpleViewer::processQUrlList(QList& images, QDomDocument& xmlDoc, + QUrl imagesDir = QUrl::fromLocalFile(d->tempDir->path()); + imagesDir.setPath(imagesDir.path() + QLatin1String("/images/")); + +- std::sort(images.begin(), images.end(), cmpUrl); ++ qSort(images.begin(), images.end(), cmpUrl); + + for (QList::ConstIterator it = images.constBegin(); + !d->canceled && (it != images.constEnd()) ; ++it) +diff --git a/extra/kipi-plugins/googleservices/gdtalker.cpp b/extra/kipi-plugins/googleservices/gdtalker.cpp +index b7ba5295f..d719089f1 100644 +--- a/extra/kipi-plugins/googleservices/gdtalker.cpp ++++ b/extra/kipi-plugins/googleservices/gdtalker.cpp +@@ -355,7 +355,7 @@ void GDTalker::parseResponseListFolders(const QByteArray& data) + albumList.append(fps); + } + +- std::sort(albumList.begin(), albumList.end(), gdriveLessThan); ++ qSort(albumList.begin(), albumList.end(), gdriveLessThan); + emit signalBusy(false); + emit signalListAlbumsDone(1,QString(),albumList); + } +diff --git a/extra/kipi-plugins/googleservices/gptalker.cpp b/extra/kipi-plugins/googleservices/gptalker.cpp +index fe839a7d2..264acfa79 100644 +--- a/extra/kipi-plugins/googleservices/gptalker.cpp ++++ b/extra/kipi-plugins/googleservices/gptalker.cpp +@@ -745,7 +745,7 @@ void GPTalker::parseResponseListAlbums(const QByteArray& data) + node = node.nextSibling(); + } + +- std::sort(albumList.begin(), albumList.end(), gphotoLessThan); ++ qSort(albumList.begin(), albumList.end(), gphotoLessThan); + emit signalListAlbumsDone(1, QString::fromLatin1(""), albumList); + } + +diff --git a/extra/kipi-plugins/piwigo/piwigotalker.cpp b/extra/kipi-plugins/piwigo/piwigotalker.cpp +index 3fbfbec66..81c8368e0 100644 +--- a/extra/kipi-plugins/piwigo/piwigotalker.cpp ++++ b/extra/kipi-plugins/piwigo/piwigotalker.cpp +@@ -569,7 +569,7 @@ void PiwigoTalker::parseResponseListAlbums(const QByteArray& data) + } + + // We need parent albums to come first for rest of the code to work +- std::sort(albumList.begin(), albumList.end()); ++ qSort(albumList); + + emit signalAlbums(albumList); + } +diff --git a/extra/kipi-plugins/smug/smugtalker.cpp b/extra/kipi-plugins/smug/smugtalker.cpp +index 873a1f061..9349be00f 100644 +--- a/extra/kipi-plugins/smug/smugtalker.cpp ++++ b/extra/kipi-plugins/smug/smugtalker.cpp +@@ -846,7 +846,7 @@ void SmugTalker::parseResponseListAlbums(const QByteArray& data) + if (errCode == 15) // 15: empty list + errCode = 0; + +- std::sort(albumsList.begin(), albumsList.end(), SmugAlbum::lessThan); ++ qSort(albumsList.begin(), albumsList.end(), SmugAlbum::lessThan); + + emit signalBusy(false); + emit signalListAlbumsDone(errCode, errorToText(errCode, errMsg), albumsList); +-- +2.13.6 + diff --git a/Adapt-to-KCalCore-API-changes.patch b/Adapt-to-KCalCore-API-changes.patch deleted file mode 100644 index 5c8ba11..0000000 --- a/Adapt-to-KCalCore-API-changes.patch +++ /dev/null @@ -1,77 +0,0 @@ -From dad750fadc926b62603cc9d64009ee5072a46d97 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= -Date: Wed, 13 Sep 2017 16:51:14 +0200 -Subject: Adapt to KCalCore API changes - -This change supports both old (pre-QDateTime) and new version. - -Differential Revision: https://phabricator.kde.org/D7802 ---- - core/CMakeLists.txt | 3 +++ - core/app/utils/digikam_config.h.cmake.in | 3 +++ - core/utilities/assistants/calendar/print/calsettings.cpp | 14 ++++++++++---- - 3 files changed, 16 insertions(+), 4 deletions(-) - -diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt -index 3ad686d..e2f28a7 100644 ---- a/core/CMakeLists.txt -+++ b/core/CMakeLists.txt -@@ -174,6 +174,9 @@ find_package(KF5 ${CALENDAR_MIN_VERSION} QUIET - OPTIONAL_COMPONENTS - CalendarCore # For Calendar tool. - ) -+if ("${KF5CalendarCore_VERSION}" VERSION_GREATER 5.6.40) -+ set(HAVE_KCALENDAR_QDATETIME TRUE) -+endif() - - if(ENABLE_AKONADICONTACTSUPPORT AND NOT KF5AkonadiContact_FOUND) - set(ENABLE_KFILEMETADATASUPPORT OFF) -diff --git a/core/app/utils/digikam_config.h.cmake.in b/core/app/utils/digikam_config.h.cmake.in -index 8a2e8e5..ffd3a22 100644 ---- a/core/app/utils/digikam_config.h.cmake.in -+++ b/core/app/utils/digikam_config.h.cmake.in -@@ -75,6 +75,9 @@ - /* Define to 1 if you have KCalendar core shared libraries installed */ - #cmakedefine HAVE_KCALENDAR 1 - -+/* Define to 1 if you have KCalendar core shared libraries with QDateTime support installed */ -+#cmakedefine HAVE_KCALENDAR_QDATETIME 1 -+ - /* Define to 1 if Panorama tool is supported */ - #cmakedefine HAVE_PANORAMA 1 - -diff --git a/core/utilities/assistants/calendar/print/calsettings.cpp b/core/utilities/assistants/calendar/print/calsettings.cpp -index 46e995d..c6554ef 100644 ---- a/core/utilities/assistants/calendar/print/calsettings.cpp -+++ b/core/utilities/assistants/calendar/print/calsettings.cpp -@@ -290,7 +290,13 @@ void CalSettings::loadSpecial(const QUrl& url, const QColor& color) - return; - } - -- KCalCore::MemoryCalendar::Ptr memCal(new KCalCore::MemoryCalendar(QString::fromLatin1("UTC"))); -+#if HAVE_KCALENDAR_QDATETIME -+ KCalCore::MemoryCalendar::Ptr memCal(new KCalCore::MemoryCalendar(QTimeZone::utc())); -+ using DateTime = QDateTime; -+#else -+ KCalCore::MemoryCalendar::Ptr memCal(new KCalCore::MemoryCalendar(QString::fromLatin1("UTC"))); -+ using DateTime = KDateTime; -+#endif - KCalCore::FileStorage::Ptr fileStorage(new KCalCore::FileStorage(memCal, url.toLocalFile(), new KCalCore::ICalFormat)); - - qCDebug(DIGIKAM_GENERAL_LOG) << "Loading calendar from file " << url.toLocalFile(); -@@ -308,9 +314,9 @@ void CalSettings::loadSpecial(const QUrl& url, const QColor& color) - qLast = calSys.date(params.year + 1, 1, 1); - qLast = qLast.addDays(-1); - -- KDateTime dtFirst(qFirst); -- KDateTime dtLast(qLast); -- KDateTime dtCurrent; -+ DateTime dtFirst(qFirst, QTime(0, 0)); -+ DateTime dtLast(qLast, QTime(0, 0)); -+ DateTime dtCurrent; - - int counter = 0; - KCalCore::Event::List list = memCal->rawEvents(qFirst, qLast); --- -cgit v0.11.2 - diff --git a/digikam-5.7.0.tar.xz b/digikam-5.7.0.tar.xz deleted file mode 100644 index 9f0b6d3..0000000 --- a/digikam-5.7.0.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3605ffb5b6e8fbd6b725e5075f74f505d7edee7531789c2882d11df2d20150f5 -size 123315064 diff --git a/digikam-5.8.0.tar.xz b/digikam-5.8.0.tar.xz new file mode 100644 index 0000000..d669a09 --- /dev/null +++ b/digikam-5.8.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:194a44cc3ca229d501acfba67a38d483d1d64069a85e0491dd28dc2b57091c6e +size 127361060 diff --git a/digikam.changes b/digikam.changes index 19b837c..e08df7d 100644 --- a/digikam.changes +++ b/digikam.changes @@ -1,3 +1,31 @@ +------------------------------------------------------------------- +Mon Jan 15 19:33:44 UTC 2018 - wbauer@tmo.at + +- Update to 5.8.0: + * https://www.digikam.org/news/2018-01-14-5.8.0_release_announcement/ +- New features (from NEWS): +General : Add support to OpenCV 3.4.x. +General : Updated internal Libraw to last 0.18.6. +General : New Upnp/Dlna media server to share collections on local network. +Image Editor : New clone tool to replace old CImg in-painting tool. +DropBox : tool ported AuthO2 API. + +- 231 bugs fixed +- Remove unneeded libkface-devel build requirement, it's not used + anymore since over 2 years +- Add 0001-Revert-replace-obsolete-qSort-function.patch and + 0002-Revert-replace-obsolete-qSort-function.patch to fix build + with gcc 4.8 on Leap 42 +- Add fix-italian-docs-with-older-kdoctools.patch to make it build + on Leap 42.2 +- Pass --without-kde to %find_lang to prevent the docs being added + to the lang package, we have a separate docs subpackage + (it supports the KF5 docs location starting with rpm 4.14.0, and + that would break the build) +- Drop upstream patches: + * Adapt-to-KCalCore-API-changes.patch + * fix-Qt-5.9.3-empty-album-problem.patch + ------------------------------------------------------------------- Fri Dec 8 19:48:19 UTC 2017 - wbauer@tmo.at diff --git a/digikam.spec b/digikam.spec index 466794c..6e5a0d8 100644 --- a/digikam.spec +++ b/digikam.spec @@ -1,7 +1,7 @@ # # spec file for package digikam # -# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: digikam -Version: 5.7.0 +Version: 5.8.0 Release: 0 Summary: A KDE Photo Manager License: GPL-2.0+ @@ -26,10 +26,12 @@ Url: http://www.digikam.org/ Source0: http://download.kde.org/stable/%{name}/%{name}-%{version}.tar.xz # PATCH-FIX-OPENSUSE 0001-Disable-detection-of-OpenGL-for-GLES-platforms.patch -- The OpenGL slideshow depends on Desktop GL, see kde#383715 Patch0: 0001-Disable-detection-of-OpenGL-for-GLES-platforms.patch -# PATCH-FIX-UPSTREAM -Patch1: Adapt-to-KCalCore-API-changes.patch -# PATCH-FIX-UPSTREAM -Patch2: fix-Qt-5.9.3-empty-album-problem.patch +# PATCH-FIX-OPENSUSE +Patch1: 0001-Revert-replace-obsolete-qSort-function.patch +# PATCH-FIX-OPENSUSE +Patch2: 0002-Revert-replace-obsolete-qSort-function.patch +# PATCH-FIX-OPENSUSE fix-italian-docs-with-older-kdoctools.patch -- fix build with the old kdoctools in Leap 42.2 that misses two necessary entities for italian +Patch3: fix-italian-docs-with-older-kdoctools.patch #This pulls in QWebEngine, which is not available on ppc64 %ifarch %ix86 x86_64 %arm aarch64 mips mips64 BuildRequires: akonadi-contact-devel @@ -61,7 +63,6 @@ BuildRequires: libgpod-devel BuildRequires: libjasper-devel BuildRequires: libkdcraw-devel >= 15.12.0 BuildRequires: libkexiv2-devel >= 15.12.0 -BuildRequires: libkface-devel >= 15.12.0 BuildRequires: libkgeomap-devel > 15.12.0 BuildRequires: libkipi-devel >= 16.04.0 BuildRequires: libksane-devel >= 15.12.0 @@ -173,8 +174,13 @@ The main digikam libraries that are being shared between showfoto and digikam # Disable OpenGL slideshow on embedded platforms %patch0 -p1 %endif +%if 0%{?suse_version} < 1320 %patch1 -p1 %patch2 -p1 +%if 0%{?sle_version} <= 120200 +%patch3 -p1 +%endif +%endif # Remove build time references so build-compare can do its work FAKE_BUILDDATE=$(LC_ALL=C date -u -r %{_sourcedir}/%{name}.changes '+%%b %%e %%Y') @@ -216,8 +222,8 @@ rm -rf $RPM_BUILD_ROOT/usr/share/locale/x-test %suse_update_desktop_file -r org.kde.showfoto Qt KDE Graphics Photography %endif -%find_lang %{name} -%find_lang kipiplugins kipiplugin.lang +%find_lang %{name} --without-kde +%find_lang kipiplugins kipiplugin.lang --without-kde for i in dropbox googleservices sendimages facebook flashexport flickr imageshack imgur kmlexport piwigo printimages rajce remotestorage sendimages smug vkontakte yandexfotki do @@ -236,7 +242,7 @@ done %files %defattr(-,root,root,-) -%doc core/{AUTHORS,COPYING,COPYING-CMAKE-SCRIPTS,COPYING.LIB,ChangeLog,NEWS,README} +%doc core/{AUTHORS,COPYING,COPYING-CMAKE-SCRIPTS,COPYING.LIB,ChangeLog,NEWS,README.md} %{_bindir}/digikam %{_bindir}/digitaglinktree %{_bindir}/cleanup_digikamdb diff --git a/fix-Qt-5.9.3-empty-album-problem.patch b/fix-Qt-5.9.3-empty-album-problem.patch deleted file mode 100644 index afafc16..0000000 --- a/fix-Qt-5.9.3-empty-album-problem.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 855ba5b7d4bc6337234720a72ea824ddd3b32e5b Mon Sep 17 00:00:00 2001 -From: Maik Qualmann -Date: Tue, 28 Nov 2017 21:29:00 +0100 -Subject: try to fix the Qt-5.9.3 empty album problem CCBUGS: 387373 - ---- - core/libs/database/coredb/coredburl.cpp | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/core/libs/database/coredb/coredburl.cpp b/core/libs/database/coredb/coredburl.cpp -index 2c0d0eb..b1bdf71 100644 ---- a/core/libs/database/coredb/coredburl.cpp -+++ b/core/libs/database/coredb/coredburl.cpp -@@ -88,8 +88,13 @@ CoreDbUrl CoreDbUrl::fromAlbumAndName(const QString& name, - const DbEngineParameters& parameters) - { - CoreDbUrl url; -+ QString path(album); - url.setScheme(QLatin1String("digikamalbums")); -- url.setPath(QLatin1Char('/') + album + QLatin1Char('/') + name); -+ -+ if (path != QLatin1String("/")) -+ path += QLatin1Char('/'); -+ -+ url.setPath(path + name); - - QUrlQuery q(url); - q.addQueryItem(QLatin1String("albumRoot"), albumRoot.adjusted(QUrl::StripTrailingSlash).toLocalFile()); --- -cgit v0.11.2 - diff --git a/fix-italian-docs-with-older-kdoctools.patch b/fix-italian-docs-with-older-kdoctools.patch new file mode 100644 index 0000000..958c6ff --- /dev/null +++ b/fix-italian-docs-with-older-kdoctools.patch @@ -0,0 +1,21 @@ +diff -ur a/doc-translated/it/digikam/menu-mainwindow.docbook b/doc-translated/it/digikam/menu-mainwindow.docbook +--- a/doc-translated/it/digikam/menu-mainwindow.docbook 2018-01-09 15:13:48.000000000 +0100 ++++ b/doc-translated/it/digikam/menu-mainwindow.docbook 2018-01-15 17:11:37.000000000 +0100 +@@ -578,7 +578,7 @@ + >Voce del menu per ruotare senza perdita l'immagine attualmente selezionata &Ctrl;&Shift;&Left;&Ctrl;&Shift; Sinistra oppure &Ctrl;&Shift;&Right;&Ctrl;&Shift; Destra