diff options
| author | 0xd34df00d <0xd34df00d@gmail.com> | 2014-03-03 12:03:52 +0400 |
|---|---|---|
| committer | 0xd34df00d <0xd34df00d@gmail.com> | 2014-03-03 12:03:52 +0400 |
| commit | 8e054830124999a4ebd448e9476cb43bda9ff39f (patch) | |
| tree | e623ac3c0bb9b557647f7c2af67ba392aef14f33 /src/base/QXmppElement.cpp | |
| parent | 3f73de1f0305fb2cd62ef81416c331fbb59d27e7 (diff) | |
| download | qxmpp-8e054830124999a4ebd448e9476cb43bda9ff39f.tar.gz | |
Avoid keeping the source QDomDocument in QXmppElement.
Serialize the node instead of keeping QDomElement with a ref to the original
QDomDOcument.
Diffstat (limited to 'src/base/QXmppElement.cpp')
| -rw-r--r-- | src/base/QXmppElement.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/base/QXmppElement.cpp b/src/base/QXmppElement.cpp index cbb6d8bb..ecb88cad 100644 --- a/src/base/QXmppElement.cpp +++ b/src/base/QXmppElement.cpp @@ -25,6 +25,7 @@ #include "QXmppUtils.h" #include <QDomElement> +#include <QTextStream> class QXmppElementPrivate { @@ -41,7 +42,7 @@ public: QString name; QString value; - QDomElement source; + QByteArray serializedSource; }; QXmppElementPrivate::QXmppElementPrivate() @@ -50,7 +51,7 @@ QXmppElementPrivate::QXmppElementPrivate() } QXmppElementPrivate::QXmppElementPrivate(const QDomElement &element) - : counter(1), parent(NULL), source(element) + : counter(1), parent(NULL) { if (element.isNull()) return; @@ -80,6 +81,9 @@ QXmppElementPrivate::QXmppElementPrivate(const QDomElement &element) } childNode = childNode.nextSibling(); } + + QTextStream stream(&serializedSource); + element.save(stream, 0); } QXmppElementPrivate::~QXmppElementPrivate() @@ -126,9 +130,19 @@ QXmppElement &QXmppElement::operator=(const QXmppElement &other) return *this; } -const QDomElement &QXmppElement::sourceDomElement() const +QDomElement QXmppElement::sourceDomElement() const { - return d->source; + if (d->serializedSource.isEmpty()) + return QDomElement(); + + QDomDocument doc; + if (!doc.setContent(d->serializedSource, true)) + { + qWarning("[QXmpp] QXmppElement::sourceDomElement(): cannot parse source element"); + return QDomElement(); + } + + return doc.documentElement(); } QStringList QXmppElement::attributeNames() const |
