Move QWinEventNotifier data members to a private class

This is a binary incompatible change to allow future changes
to QWinEventNotifier to be possible in a binary compatible way.

Change-Id: I268d3e01d8ee237ecbd164ee0f7cae1eb73dd725
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Reviewed-by: Joerg Bornemann <joerg.bornemann@nokia.com>
Reviewed-by: Debao Zhang <dbzhang800@gmail.com>
bb10
Shane Kearns 2012-04-24 13:33:22 +01:00 committed by Qt by Nokia
parent e79d975be4
commit 08cc6901f8
2 changed files with 33 additions and 20 deletions

View File

@ -48,6 +48,19 @@
QT_BEGIN_NAMESPACE
class QWinEventNotifierPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QWinEventNotifier)
public:
QWinEventNotifierPrivate()
: handleToEvent(0), enabled(false) {}
QWinEventNotifierPrivate(HANDLE h, bool e)
: handleToEvent(h), enabled(e) {}
HANDLE handleToEvent;
bool enabled;
};
/*!
\class QWinEventNotifier
\since 5.0
@ -103,7 +116,7 @@ QT_BEGIN_NAMESPACE
*/
QWinEventNotifier::QWinEventNotifier(QObject *parent)
: QObject(parent), handleToEvent(0), enabled(false)
: QObject(*new QWinEventNotifierPrivate, parent)
{}
/*!
@ -118,14 +131,14 @@ QWinEventNotifier::QWinEventNotifier(QObject *parent)
*/
QWinEventNotifier::QWinEventNotifier(HANDLE hEvent, QObject *parent)
: QObject(parent), handleToEvent(hEvent), enabled(false)
: QObject(*new QWinEventNotifierPrivate(hEvent, false), parent)
{
Q_D(QObject);
Q_D(QWinEventNotifier);
QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher);
Q_ASSERT_X(eventDispatcher, "QWinEventNotifier::QWinEventNotifier()",
"Cannot create a win event notifier without a QEventDispatcherWin32");
eventDispatcher->registerEventNotifier(this);
enabled = true;
d->enabled = true;
}
/*!
@ -149,8 +162,9 @@ QWinEventNotifier::~QWinEventNotifier()
void QWinEventNotifier::setHandle(HANDLE hEvent)
{
Q_D(QWinEventNotifier);
setEnabled(false);
handleToEvent = hEvent;
d->handleToEvent = hEvent;
}
/*!
@ -161,7 +175,8 @@ void QWinEventNotifier::setHandle(HANDLE hEvent)
HANDLE QWinEventNotifier::handle() const
{
return handleToEvent;
Q_D(const QWinEventNotifier);
return d->handleToEvent;
}
/*!
@ -172,7 +187,8 @@ HANDLE QWinEventNotifier::handle() const
bool QWinEventNotifier::isEnabled() const
{
return enabled;
Q_D(const QWinEventNotifier);
return d->enabled;
}
/*!
@ -184,16 +200,16 @@ bool QWinEventNotifier::isEnabled() const
void QWinEventNotifier::setEnabled(bool enable)
{
if (enabled == enable) // no change
Q_D(QWinEventNotifier);
if (d->enabled == enable) // no change
return;
enabled = enable;
d->enabled = enable;
Q_D(QObject);
QEventDispatcherWin32 *eventDispatcher = qobject_cast<QEventDispatcherWin32 *>(d->threadData->eventDispatcher);
if (!eventDispatcher) // perhaps application is shutting down
return;
if (enabled)
if (enable)
eventDispatcher->registerEventNotifier(this);
else
eventDispatcher->unregisterEventNotifier(this);
@ -205,16 +221,17 @@ void QWinEventNotifier::setEnabled(bool enable)
bool QWinEventNotifier::event(QEvent * e)
{
Q_D(QWinEventNotifier);
if (e->type() == QEvent::ThreadChange) {
if (enabled) {
if (d->enabled) {
QMetaObject::invokeMethod(this, "setEnabled", Qt::QueuedConnection,
Q_ARG(bool, enabled));
Q_ARG(bool, true));
setEnabled(false);
}
}
QObject::event(e); // will activate filters
if (e->type() == QEvent::WinEventAct) {
emit activated(handleToEvent);
emit activated(d->handleToEvent);
return true;
}
return false;

View File

@ -54,11 +54,11 @@ QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
class QWinEventNotifierPrivate;
class Q_CORE_EXPORT QWinEventNotifier : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QObject)
Q_DECLARE_PRIVATE(QWinEventNotifier)
public:
explicit QWinEventNotifier(QObject *parent = 0);
@ -78,10 +78,6 @@ Q_SIGNALS:
protected:
bool event(QEvent * e);
private:
HANDLE handleToEvent;
bool enabled;
};
QT_END_NAMESPACE