From 009f3d14045e2e2a6eff8c87a8da9eaa621c5249 Mon Sep 17 00:00:00 2001 From: Aaron Kennedy Date: Fri, 19 Aug 2011 22:05:50 +1000 Subject: Add a signal emitted callback to QAbstractDeclarativeData For property notify signals, QtDeclarative can manage connections in a more special case - and more performant - way. This patch adds a callback hook so that QtDeclarative can intercept signals being emitted by declarative objects. Change-Id: I72554e80df0a4257da65d81cc1c5db88a11446a4 Reviewed-on: http://codereview.qt.nokia.com/3363 Reviewed-by: Martin Jones --- src/corelib/kernel/qobject.cpp | 5 +++++ src/corelib/kernel/qobject_p.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index dce78393d0..b769beac03 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -147,6 +147,7 @@ private: void (*QAbstractDeclarativeData::destroyed)(QAbstractDeclarativeData *, QObject *) = 0; void (*QAbstractDeclarativeData::parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *) = 0; void (*QAbstractDeclarativeData::objectNameChanged)(QAbstractDeclarativeData *, QObject *) = 0; +void (*QAbstractDeclarativeData::signalEmitted)(QAbstractDeclarativeData *, QObject *, int, void **) = 0; QObjectData::~QObjectData() {} @@ -3270,6 +3271,10 @@ void QMetaObject::activate(QObject *sender, const QMetaObject *m, int local_sign int signal_index = signalOffset + local_signal_index; + if (sender->d_func()->declarativeData && QAbstractDeclarativeData::signalEmitted) + QAbstractDeclarativeData::signalEmitted(sender->d_func()->declarativeData, sender, + methodOffset + local_signal_index, argv); + if (!sender->d_func()->isSignalConnected(signal_index)) return; // nothing connected to these signals, and no spy diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h index 9151e8eb7b..e7233c5ba9 100644 --- a/src/corelib/kernel/qobject_p.h +++ b/src/corelib/kernel/qobject_p.h @@ -91,6 +91,7 @@ public: static void (*destroyed)(QAbstractDeclarativeData *, QObject *); static void (*parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *); static void (*objectNameChanged)(QAbstractDeclarativeData *, QObject *); + static void (*signalEmitted)(QAbstractDeclarativeData *, QObject *, int, void **); }; class Q_CORE_EXPORT QObjectPrivate : public QObjectData -- cgit v1.2.3