diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2011-12-05 13:46:39 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-12-05 23:03:03 +0100 |
commit | 2c9d042476e04c5045d238859c7b4402fcadf354 (patch) | |
tree | 02612c564cc96a7add0ffc1a3aab5b931217e59b /src/corelib/global | |
parent | d242d78339db2f2443c61dc10b55b6c68ab87f18 (diff) |
Re-add QInternal::EventNotifyCallback
This is needed by QtScript, so we need to keep it for now.
Change-Id: Iee6bd7daf7e86a09242523f5aca72ede413a6981
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib/global')
-rw-r--r-- | src/corelib/global/qglobal.cpp | 41 | ||||
-rw-r--r-- | src/corelib/global/qnamespace.h | 8 |
2 files changed, 49 insertions, 0 deletions
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 8b60cdb5c3..615598b378 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -2831,6 +2831,47 @@ int qrand() with meaningful parameter names in their signatures. */ +struct QInternal_CallBackTable { + QVector<QList<qInternalCallback> > callbacks; +}; + +Q_GLOBAL_STATIC(QInternal_CallBackTable, global_callback_table) + +bool QInternal::registerCallback(Callback cb, qInternalCallback callback) +{ + if (cb >= 0 && cb < QInternal::LastCallback) { + QInternal_CallBackTable *cbt = global_callback_table(); + cbt->callbacks.resize(cb + 1); + cbt->callbacks[cb].append(callback); + return true; + } + return false; +} + +bool QInternal::unregisterCallback(Callback cb, qInternalCallback callback) +{ + if (cb >= 0 && cb < QInternal::LastCallback) { + QInternal_CallBackTable *cbt = global_callback_table(); + return (bool) cbt->callbacks[cb].removeAll(callback); + } + return false; +} + +bool QInternal::activateCallbacks(Callback cb, void **parameters) +{ + Q_ASSERT_X(cb >= 0, "QInternal::activateCallback()", "Callback id must be a valid id"); + + QInternal_CallBackTable *cbt = global_callback_table(); + if (cbt && cb < cbt->callbacks.size()) { + QList<qInternalCallback> callbacks = cbt->callbacks[cb]; + bool ret = false; + for (int i=0; i<callbacks.size(); ++i) + ret |= (callbacks.at(i))(parameters); + return ret; + } + return false; +} + /*! \macro Q_BYTE_ORDER \relates <QtGlobal> diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 16b4b0b093..91bfbfd526 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1599,6 +1599,14 @@ public: BottomDock, DockCount }; + + enum Callback { + EventNotifyCallback, + LastCallback + }; + static bool registerCallback(Callback, qInternalCallback); + static bool unregisterCallback(Callback, qInternalCallback); + static bool activateCallbacks(Callback, void **); }; QT_END_NAMESPACE |