aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppElement.cpp
diff options
context:
space:
mode:
author0xd34df00d <0xd34df00d@gmail.com>2014-03-03 12:03:52 +0400
committer0xd34df00d <0xd34df00d@gmail.com>2014-03-03 12:03:52 +0400
commit8e054830124999a4ebd448e9476cb43bda9ff39f (patch)
treee623ac3c0bb9b557647f7c2af67ba392aef14f33 /src/base/QXmppElement.cpp
parent3f73de1f0305fb2cd62ef81416c331fbb59d27e7 (diff)
downloadqxmpp-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.cpp22
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