From 5e26608ae2d724f5e45d9e8667378bf7faf69d8c Mon Sep 17 00:00:00 2001 From: David Faure Date: Sat, 5 Nov 2011 12:09:54 +0100 Subject: Add Q_DECLARE_PRIVATE equivalent for QDir, to be able to subclass it Apply the same solution to QFileInfo (no public detach(), but a non-inline d_func instead). Change-Id: I31c4c759f44a0649b97f7884b078b174c9c00f22 Reviewed-by: Thiago Macieira --- src/corelib/io/qdir.cpp | 14 ++++++++++++++ src/corelib/io/qdir.h | 19 +++++++++++++++---- src/corelib/io/qfileinfo.cpp | 5 ++--- src/corelib/io/qfileinfo.h | 10 ++-------- 4 files changed, 33 insertions(+), 15 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp index e7fdc4ad55..32fd81981b 100644 --- a/src/corelib/io/qdir.cpp +++ b/src/corelib/io/qdir.cpp @@ -507,6 +507,13 @@ inline void QDirPrivate::initFileEngine() \sa QFileInfo, QFile, QFileDialog, QApplication::applicationDirPath(), {Find Files Example} */ +/*! + \internal +*/ +QDir::QDir(QDirPrivate &p) : d_ptr(&p) +{ +} + /*! Constructs a QDir pointing to the given directory \a path. If path is empty the program's working directory, ("."), is used. @@ -2097,6 +2104,13 @@ void QDir::refresh() const d->clearFileLists(); } +/*! \internal +*/ +QDirPrivate* QDir::d_func() +{ + return d_ptr.data(); +} + /*! \internal diff --git a/src/corelib/io/qdir.h b/src/corelib/io/qdir.h index de5fb1bf00..822173dfc8 100644 --- a/src/corelib/io/qdir.h +++ b/src/corelib/io/qdir.h @@ -57,9 +57,6 @@ class QDirPrivate; class Q_CORE_EXPORT QDir { -protected: - QSharedDataPointer d_ptr; - public: enum Filter { Dirs = 0x001, Files = 0x002, @@ -99,7 +96,7 @@ public: Reversed = 0x08, IgnoreCase = 0x10, DirsLast = 0x20, - LocaleAware = 0x40, + LocaleAware = 0x40, Type = 0x80, NoSort = -1 }; @@ -208,6 +205,20 @@ public: static QString cleanPath(const QString &path); void refresh() const; + +protected: + explicit QDir(QDirPrivate &d); + + QSharedDataPointer d_ptr; + +private: + // Q_DECLARE_PRIVATE equivalent for shared data pointers + QDirPrivate* d_func(); + inline const QDirPrivate* d_func() const + { + return d_ptr.constData(); + } + }; Q_DECLARE_OPERATORS_FOR_FLAGS(QDir::Filters) diff --git a/src/corelib/io/qfileinfo.cpp b/src/corelib/io/qfileinfo.cpp index 7d925f380b..1ea6c8d50a 100644 --- a/src/corelib/io/qfileinfo.cpp +++ b/src/corelib/io/qfileinfo.cpp @@ -1275,11 +1275,10 @@ QDateTime QFileInfo::lastRead() const } /*! \internal - Detaches all internal data. */ -void QFileInfo::detach() +QFileInfoPrivate* QFileInfo::d_func() { - d_ptr.detach(); + return d_ptr.data(); } /*! diff --git a/src/corelib/io/qfileinfo.h b/src/corelib/io/qfileinfo.h index ab3d2dc847..ef4573132c 100644 --- a/src/corelib/io/qfileinfo.h +++ b/src/corelib/io/qfileinfo.h @@ -132,20 +132,14 @@ public: QDateTime lastModified() const; QDateTime lastRead() const; - void detach(); - bool caching() const; void setCaching(bool on); protected: QSharedDataPointer d_ptr; -private: - inline QFileInfoPrivate* d_func() - { - detach(); - return const_cast(d_ptr.constData()); - } +private: + QFileInfoPrivate* d_func(); inline const QFileInfoPrivate* d_func() const { return d_ptr.constData(); -- cgit v1.2.3