From 53abb8267bfa4c261a1aa543f1ad50ed0851bcbf Mon Sep 17 00:00:00 2001
From: Marc Mutz <marc.mutz@kdab.com>
Date: Sun, 5 Jul 2015 22:37:40 +0200
Subject: [PATCH] QtGui: mark some more types as movable/primitive
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

These are already held in QVectors.

Public API types need to wait until Qt 6, for BC reasons. Even
though Q_RELOCATABLE_TYPE deals with most of them, we lack a way
to mark a type as primitive, but still isStatic - for QList.

Change-Id: I91392b01ae6f94cc847007636e12d4e64c43b2bc
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
---
 src/gui/image/qicon_p.h                    | 1 +
 src/gui/itemmodels/qstandarditemmodel_p.h  | 1 +
 src/gui/kernel/qevent.h                    | 2 ++
 src/gui/painting/qpathclipper.cpp          | 1 +
 src/gui/painting/qpdf.cpp                  | 1 +
 src/gui/text/qabstracttextdocumentlayout.h | 2 ++
 src/gui/text/qfontdatabase.cpp             | 1 +
 src/gui/text/qfontengine_p.h               | 1 +
 src/gui/text/qstatictext_p.h               | 1 +
 src/gui/text/qtextdocumentfragment_p.h     | 8 ++++++++
 src/gui/text/qtextformat.cpp               | 1 +
 src/gui/text/qtextformat.h                 | 1 +
 src/gui/text/qtexthtmlparser_p.h           | 2 ++
 src/gui/text/qtextlayout.h                 | 1 +
 14 files changed, 24 insertions(+)

diff --git a/src/gui/image/qicon_p.h b/src/gui/image/qicon_p.h
index 1df91edeb6e..cfae9b3e52e 100644
--- a/src/gui/image/qicon_p.h
+++ b/src/gui/image/qicon_p.h
@@ -96,6 +96,7 @@ struct QPixmapIconEngineEntry
     QIcon::State state;
     bool isNull() const {return (fileName.isEmpty() && pixmap.isNull()); }
 };
+Q_DECLARE_TYPEINFO(QPixmapIconEngineEntry, Q_MOVABLE_TYPE);
 
 inline QPixmapIconEngineEntry::QPixmapIconEngineEntry(const QString &file, const QImage &image, QIcon::Mode m, QIcon::State s)
     : fileName(file), size(image.size()), mode(m), state(s)
diff --git a/src/gui/itemmodels/qstandarditemmodel_p.h b/src/gui/itemmodels/qstandarditemmodel_p.h
index 6ef7bfb412a..1849e1a8500 100644
--- a/src/gui/itemmodels/qstandarditemmodel_p.h
+++ b/src/gui/itemmodels/qstandarditemmodel_p.h
@@ -72,6 +72,7 @@ public:
     QVariant value;
     inline bool operator==(const QStandardItemData &other) const { return role == other.role && value == other.value; }
 };
+Q_DECLARE_TYPEINFO(QStandardItemData, Q_MOVABLE_TYPE);
 
 #ifndef QT_NO_DATASTREAM
 
diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h
index 029b76b2bdb..5752869cab9 100644
--- a/src/gui/kernel/qevent.h
+++ b/src/gui/kernel/qevent.h
@@ -575,8 +575,10 @@ private:
         Qt::InputMethodQuery query;
         QVariant value;
     };
+    friend QTypeInfo<QueryPair>;
     QVector<QueryPair> m_values;
 };
+Q_DECLARE_TYPEINFO(QInputMethodQueryEvent::QueryPair, Q_MOVABLE_TYPE);
 
 #endif // QT_NO_INPUTMETHOD
 
diff --git a/src/gui/painting/qpathclipper.cpp b/src/gui/painting/qpathclipper.cpp
index cdc9838dbec..861d6517562 100644
--- a/src/gui/painting/qpathclipper.cpp
+++ b/src/gui/painting/qpathclipper.cpp
@@ -1761,6 +1761,7 @@ struct QCrossingEdge
         return x < edge.x;
     }
 };
+Q_DECLARE_TYPEINFO(QCrossingEdge, Q_PRIMITIVE_TYPE);
 
 static bool bool_op(bool a, bool b, QPathClipper::Operation op)
 {
diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp
index 52bf44c64aa..0c3069db976 100644
--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -1976,6 +1976,7 @@ struct QGradientBound {
     int function;
     bool reverse;
 };
+Q_DECLARE_TYPEINFO(QGradientBound, Q_PRIMITIVE_TYPE);
 
 int QPdfEnginePrivate::createShadingFunction(const QGradient *gradient, int from, int to, bool reflect, bool alpha)
 {
diff --git a/src/gui/text/qabstracttextdocumentlayout.h b/src/gui/text/qabstracttextdocumentlayout.h
index e83f4fc0c94..01704fe37b3 100644
--- a/src/gui/text/qabstracttextdocumentlayout.h
+++ b/src/gui/text/qabstracttextdocumentlayout.h
@@ -128,6 +128,8 @@ private:
     Q_PRIVATE_SLOT(d_func(), int _q_dynamicPageCountSlot())
     Q_PRIVATE_SLOT(d_func(), QSizeF _q_dynamicDocumentSizeSlot())
 };
+Q_DECLARE_TYPEINFO(QAbstractTextDocumentLayout::Selection,    Q_RELOCATABLE_TYPE);
+Q_DECLARE_TYPEINFO(QAbstractTextDocumentLayout::PaintContext, Q_RELOCATABLE_TYPE);
 
 class Q_GUI_EXPORT QTextObjectInterface
 {
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 32cf1b0e830..629a098fb7f 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -499,6 +499,7 @@ public:
 
     void invalidate();
 };
+Q_DECLARE_TYPEINFO(QFontDatabasePrivate::ApplicationFont, Q_MOVABLE_TYPE);
 
 void QFontDatabasePrivate::invalidate()
 {
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index f97f91da50e..059b3df88ec 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -334,6 +334,7 @@ private:
     mutable qreal m_minRightBearing;
 
 };
+Q_DECLARE_TYPEINFO(QFontEngine::KernPair, Q_PRIMITIVE_TYPE);
 
 Q_DECLARE_OPERATORS_FOR_FLAGS(QFontEngine::ShaperFlags)
 
diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h
index d27d5a8725d..7fdf46c101a 100644
--- a/src/gui/text/qstatictext_p.h
+++ b/src/gui/text/qstatictext_p.h
@@ -119,6 +119,7 @@ private: // private to avoid abuse
                                                                   // ================
                                                                   // 43 bytes per item
 };
+Q_DECLARE_TYPEINFO(QStaticTextItem, Q_MOVABLE_TYPE);
 
 class QStaticText;
 class Q_AUTOTEST_EXPORT QStaticTextPrivate
diff --git a/src/gui/text/qtextdocumentfragment_p.h b/src/gui/text/qtextdocumentfragment_p.h
index 4cc4f0429f5..56dff011498 100644
--- a/src/gui/text/qtextdocumentfragment_p.h
+++ b/src/gui/text/qtextdocumentfragment_p.h
@@ -148,6 +148,7 @@ private:
         int listNode;
         QPointer<QTextList> list;
     };
+    friend class QTypeInfo<List>;
     QVector<List> lists;
     int indent;
 
@@ -187,6 +188,7 @@ private:
         int row;
         int column;
     };
+    friend class QTypeInfo<TableCellIterator>;
 
     friend struct Table;
     struct Table
@@ -200,6 +202,7 @@ private:
         TableCellIterator currentCell;
         int lastIndent;
     };
+    friend class QTypeInfo<Table>;
     QVector<Table> tables;
 
     struct RowColSpanInfo
@@ -207,6 +210,7 @@ private:
         int row, col;
         int rowSpan, colSpan;
     };
+    friend class QTypeInfo<RowColSpanInfo>;
 
     enum WhiteSpace
     {
@@ -227,6 +231,10 @@ private:
     int currentNodeIdx;
     const QTextHtmlParserNode *currentNode;
 };
+Q_DECLARE_TYPEINFO(QTextHtmlImporter::List, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(QTextHtmlImporter::TableCellIterator, Q_PRIMITIVE_TYPE);
+Q_DECLARE_TYPEINFO(QTextHtmlImporter::Table, Q_MOVABLE_TYPE);
+Q_DECLARE_TYPEINFO(QTextHtmlImporter::RowColSpanInfo, Q_PRIMITIVE_TYPE);
 
 QT_END_NAMESPACE
 #endif // QT_NO_TEXTHTMLPARSER
diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp
index 58049399efa..49ec9ca768b 100644
--- a/src/gui/text/qtextformat.cpp
+++ b/src/gui/text/qtextformat.cpp
@@ -263,6 +263,7 @@ private:
     friend QDataStream &operator<<(QDataStream &, const QTextFormat &);
     friend QDataStream &operator>>(QDataStream &, QTextFormat &);
 };
+Q_DECLARE_TYPEINFO(QTextFormatPrivate::Property, Q_MOVABLE_TYPE);
 
 static inline uint hash(const QColor &color)
 {
diff --git a/src/gui/text/qtextformat.h b/src/gui/text/qtextformat.h
index 9dd83ab678e..bc627521ff1 100644
--- a/src/gui/text/qtextformat.h
+++ b/src/gui/text/qtextformat.h
@@ -116,6 +116,7 @@ private:
     friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &, const QTextLength &);
     friend Q_GUI_EXPORT QDataStream &operator>>(QDataStream &, QTextLength &);
 };
+Q_DECLARE_TYPEINFO(QTextLength, QT_VERSION >= QT_VERSION_CHECK(6,0,0) ? Q_PRIMITIVE_TYPE : Q_RELOCATABLE_TYPE);
 
 inline QTextLength::QTextLength(Type atype, qreal avalue)
     : lengthType(atype), fixedValueOrPercentage(avalue) {}
diff --git a/src/gui/text/qtexthtmlparser_p.h b/src/gui/text/qtexthtmlparser_p.h
index a8a849ca7fe..8e5a90be0b9 100644
--- a/src/gui/text/qtexthtmlparser_p.h
+++ b/src/gui/text/qtexthtmlparser_p.h
@@ -328,12 +328,14 @@ protected:
         QString url;
         QCss::StyleSheet sheet;
     };
+    friend class QTypeInfo<ExternalStyleSheet>;
     QVector<ExternalStyleSheet> externalStyleSheets;
     QVector<QCss::StyleSheet> inlineStyleSheets;
 #endif
 
     const QTextDocument *resourceProvider;
 };
+Q_DECLARE_TYPEINFO(QTextHtmlParser::ExternalStyleSheet, Q_MOVABLE_TYPE);
 
 QT_END_NAMESPACE
 
diff --git a/src/gui/text/qtextlayout.h b/src/gui/text/qtextlayout.h
index d9afb1ed4ba..1cbb5ac8d8e 100644
--- a/src/gui/text/qtextlayout.h
+++ b/src/gui/text/qtextlayout.h
@@ -203,6 +203,7 @@ private:
                                QPainter *painter);
     QTextEngine *d;
 };
+Q_DECLARE_TYPEINFO(QTextLayout::FormatRange, Q_RELOCATABLE_TYPE);
 
 
 class Q_GUI_EXPORT QTextLine
-- 
GitLab