diff options
author | Vikas Pachdha <vikas.pachdha@qt.io> | 2020-04-28 22:05:05 +0200 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2020-04-29 08:37:07 +0000 |
commit | 662c224bab0e2e9a8054cf58671ff0d350713f82 (patch) | |
tree | 22be5d0bdfbd3d78800adadb366ad8d66ecd4b4f /src/plugins/qmldesigner | |
parent | c01fef0a78e61cbf11b044ef342e5fb9d4e2b150 (diff) |
Fix crash with sorting library items
Strict weak ordering relation for the comparison was not followed.
Using shared_ptr and removing QSharedData. The entry data is shared
between instances
Task-number: QDS-2011
Change-Id: Idfcd23b2d458f9c7cada47180cb6ab3b4b090416
Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner')
4 files changed, 6 insertions, 28 deletions
diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp index 020369708a..57f0d7ee94 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarymodel.cpp @@ -289,7 +289,7 @@ void ItemLibraryModel::sortSections() int nullPointerSectionCount = m_sections.removeAll(QPointer<ItemLibrarySection>()); QTC_ASSERT(nullPointerSectionCount == 0,;); auto sectionSort = [](ItemLibrarySection *first, ItemLibrarySection *second) { - return QString::localeAwareCompare(first->sortingName(), second->sortingName()) < 1; + return QString::localeAwareCompare(first->sortingName(), second->sortingName()) < 0; }; std::sort(m_sections.begin(), m_sections.end(), sectionSort); diff --git a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp index 6f7e57763c..413ef7f3e8 100644 --- a/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp +++ b/src/plugins/qmldesigner/components/itemlibrary/itemlibrarysectionmodel.cpp @@ -91,7 +91,7 @@ void ItemLibrarySectionModel::sortItems() int nullPointerSectionCount = m_itemList.removeAll(QPointer<ItemLibraryItem>()); QTC_ASSERT(nullPointerSectionCount == 0,;); auto itemSort = [](ItemLibraryItem *first, ItemLibraryItem *second) { - return QString::localeAwareCompare(first->itemName(), second->itemName()) < 1; + return QString::localeAwareCompare(first->itemName(), second->itemName()) < 0; }; std::sort(m_itemList.begin(), m_itemList.end(), itemSort); diff --git a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h index 6e70169a6a..58d2413787 100644 --- a/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h +++ b/src/plugins/qmldesigner/designercore/include/itemlibraryinfo.h @@ -29,7 +29,7 @@ #include "propertycontainer.h" #include <QPointer> -#include <QSharedDataPointer> +#include <memory> namespace QmlDesigner { @@ -55,7 +55,7 @@ class QMLDESIGNERCORE_EXPORT ItemLibraryEntry public: ItemLibraryEntry(); - ~ItemLibraryEntry(); + ~ItemLibraryEntry() = default; QString name() const; TypeName typeName() const; @@ -69,9 +69,6 @@ public: QString qmlSource() const; QString requiredImport() const; - ItemLibraryEntry(const ItemLibraryEntry &other); - ItemLibraryEntry& operator=(const ItemLibraryEntry &other); - using Property = QmlDesigner::PropertyContainer; QList<Property> properties() const; @@ -89,7 +86,7 @@ public: void addHints(const QHash<QString, QString> &hints); private: - QSharedDataPointer<Internal::ItemLibraryEntryData> m_data; + std::shared_ptr<Internal::ItemLibraryEntryData> m_data; }; class QMLDESIGNERCORE_EXPORT ItemLibraryInfo : public QObject diff --git a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp index 7b3059247f..e76fe609f0 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/itemlibraryinfo.cpp @@ -35,12 +35,9 @@ namespace QmlDesigner { namespace Internal { -class ItemLibraryEntryData : public QSharedData +class ItemLibraryEntryData { public: - ItemLibraryEntryData() - {} - QString name; TypeName typeName; QString category; @@ -57,20 +54,6 @@ public: } // namespace Internal -// -// ItemLibraryEntry -// - -ItemLibraryEntry::ItemLibraryEntry(const ItemLibraryEntry &other) = default; - -ItemLibraryEntry& ItemLibraryEntry::operator=(const ItemLibraryEntry &other) -{ - if (this !=&other) - m_data = other.m_data; - - return *this; -} - void ItemLibraryEntry::setTypeIcon(const QIcon &icon) { m_data->typeIcon = icon; @@ -96,8 +79,6 @@ ItemLibraryEntry::ItemLibraryEntry() : m_data(new Internal::ItemLibraryEntryData m_data->name.clear(); } -ItemLibraryEntry::~ItemLibraryEntry() = default; - QString ItemLibraryEntry::name() const { return m_data->name; |