summaryrefslogtreecommitdiffstats
path: root/src/gui/painting
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2014-04-05 00:51:43 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-04-08 22:06:50 +0200
commit0de0f494bd75786ff361da2ac05c85d8aeac3b37 (patch)
treea0c0ea36e2819a2c521087935f1dda18e711d9e1 /src/gui/painting
parent7b3d9bbdf22a2bed499fa1056ae1c66545c4f0cd (diff)
QPageLayout: use QExplicitlySharedDataPointer
Many setters check for an actual change before making changes to data members, but because of QSharedDataPointer, the detach had already happened by the time the comparison returned false. Change-Id: I320806e74de4a64fa3a340831621c1f5120ebb0f Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: John Layt <jlayt@kde.org>
Diffstat (limited to 'src/gui/painting')
-rw-r--r--src/gui/painting/qpagelayout.cpp11
-rw-r--r--src/gui/painting/qpagelayout.h2
2 files changed, 12 insertions, 1 deletions
diff --git a/src/gui/painting/qpagelayout.cpp b/src/gui/painting/qpagelayout.cpp
index 3da550a411..5589a4364c 100644
--- a/src/gui/painting/qpagelayout.cpp
+++ b/src/gui/painting/qpagelayout.cpp
@@ -466,6 +466,7 @@ bool QPageLayout::isValid() const
void QPageLayout::setMode(Mode mode)
{
+ d.detach();
d->m_mode = mode;
}
@@ -494,6 +495,7 @@ void QPageLayout::setPageSize(const QPageSize &pageSize, const QMarginsF &minMar
{
if (!pageSize.isValid())
return;
+ d.detach();
d->m_pageSize = pageSize;
d->m_fullSize = d->fullSizeUnits(d->m_units);
d->setDefaultMargins(minMargins);
@@ -522,6 +524,7 @@ QPageSize QPageLayout::pageSize() const
void QPageLayout::setOrientation(Orientation orientation)
{
if (orientation != d->m_orientation) {
+ d.detach();
d->m_orientation = orientation;
d->m_fullSize = d->fullSizeUnits(d->m_units);
// Adust the max margins to reflect change in max page size
@@ -549,6 +552,7 @@ QPageLayout::Orientation QPageLayout::orientation() const
void QPageLayout::setUnits(Unit units)
{
if (units != d->m_units) {
+ d.detach();
d->m_margins = qt_convertMargins(d->m_margins, d->m_units, units);
d->m_minMargins = qt_convertMargins(d->m_minMargins, d->m_units, units);
d->m_maxMargins = qt_convertMargins(d->m_maxMargins, d->m_units, units);
@@ -585,6 +589,7 @@ QPageLayout::Unit QPageLayout::units() const
bool QPageLayout::setMargins(const QMarginsF &margins)
{
if (d->m_mode == FullPageMode) {
+ d.detach();
d->m_margins = margins;
return true;
} else if (margins.left() >= d->m_minMargins.left()
@@ -595,6 +600,7 @@ bool QPageLayout::setMargins(const QMarginsF &margins)
&& margins.right() <= d->m_maxMargins.right()
&& margins.top() <= d->m_maxMargins.top()
&& margins.bottom() <= d->m_maxMargins.bottom()) {
+ d.detach();
d->m_margins = margins;
return true;
}
@@ -621,6 +627,7 @@ bool QPageLayout::setLeftMargin(qreal leftMargin)
{
if (d->m_mode == FullPageMode
|| (leftMargin >= d->m_minMargins.left() && leftMargin <= d->m_maxMargins.left())) {
+ d.detach();
d->m_margins.setLeft(leftMargin);
return true;
}
@@ -647,6 +654,7 @@ bool QPageLayout::setRightMargin(qreal rightMargin)
{
if (d->m_mode == FullPageMode
|| (rightMargin >= d->m_minMargins.right() && rightMargin <= d->m_maxMargins.right())) {
+ d.detach();
d->m_margins.setRight(rightMargin);
return true;
}
@@ -673,6 +681,7 @@ bool QPageLayout::setTopMargin(qreal topMargin)
{
if (d->m_mode == FullPageMode
|| (topMargin >= d->m_minMargins.top() && topMargin <= d->m_maxMargins.top())) {
+ d.detach();
d->m_margins.setTop(topMargin);
return true;
}
@@ -699,6 +708,7 @@ bool QPageLayout::setBottomMargin(qreal bottomMargin)
{
if (d->m_mode == FullPageMode
|| (bottomMargin >= d->m_minMargins.bottom() && bottomMargin <= d->m_maxMargins.bottom())) {
+ d.detach();
d->m_margins.setBottom(bottomMargin);
return true;
}
@@ -764,6 +774,7 @@ QMargins QPageLayout::marginsPixels(int resolution) const
void QPageLayout::setMinimumMargins(const QMarginsF &minMargins)
{
+ d.detach();
d->setDefaultMargins(minMargins);
}
diff --git a/src/gui/painting/qpagelayout.h b/src/gui/painting/qpagelayout.h
index 6e2752c3a1..c636ca7476 100644
--- a/src/gui/painting/qpagelayout.h
+++ b/src/gui/painting/qpagelayout.h
@@ -137,7 +137,7 @@ public:
private:
friend class QPageLayoutPrivate;
- QSharedDataPointer<QPageLayoutPrivate> d;
+ QExplicitlySharedDataPointer<QPageLayoutPrivate> d;
};
Q_DECLARE_SHARED(QPageLayout)