From ad8edac53c65368f7ff269332bd66bd85e2633b4 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Tue, 29 Nov 2011 10:59:48 +0100 Subject: Remove QInternal callbacks and internal functions After commit 79f675a1e0f628bbc25345ebc1eb1f5809166c6b, the connect and disconnect callback API effectively becomes useless. Now that these callbacks cannot/do not, it makes little sense to keep the backdoors added for Qt Jambi support. Remove them for now. Should the Qt Jambi team want/need to port to Qt 5, we can re-add them, possibly designing a better API for doing so as well. Change-Id: I6209a1d647d683c979d5294b632b8c12c0f9f91c Reviewed-by: Thiago Macieira Reviewed-by: Olivier Goffart Reviewed-by: Lars Knoll --- src/corelib/global/qglobal.cpp | 102 ---------------------- src/corelib/global/qnamespace.h | 26 ------ src/corelib/kernel/qcoreapplication.cpp | 16 ---- src/corelib/kernel/qobject.cpp | 39 --------- src/corelib/thread/qthread.cpp | 7 -- src/corelib/thread/qthread_p.h | 1 - src/corelib/thread/qthread_unix.cpp | 27 ++---- src/corelib/thread/qthread_win.cpp | 32 +++---- tests/auto/corelib/global/qglobal/tst_qglobal.cpp | 73 ---------------- 9 files changed, 19 insertions(+), 304 deletions(-) diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 91ac521a0b..8b60cdb5c3 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -2831,108 +2831,6 @@ int qrand() with meaningful parameter names in their signatures. */ - -struct QInternal_CallBackTable { - QVector > 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 callbacks = cbt->callbacks[cb]; - bool ret = false; - for (int i=0; i= 0, - "QInternal::callFunction()", "Callback id must be a valid id"); -#ifndef QT_NO_QOBJECT - switch (func) { -#ifndef QT_NO_THREAD - case QInternal::CreateThreadForAdoption: - *args = QAdoptedThread::createThreadForAdoption(); - return true; -#endif - case QInternal::RefAdoptedThread: - QThreadData::get2((QThread *) *args)->ref(); - return true; - case QInternal::DerefAdoptedThread: - QThreadData::get2((QThread *) *args)->deref(); - return true; - case QInternal::SetCurrentThreadToMainThread: - qt_set_current_thread_to_main_thread(); - return true; - case QInternal::SetQObjectSender: { - QObject *receiver = (QObject *) args[0]; - QObjectPrivate::Sender *sender = new QObjectPrivate::Sender; - sender->sender = (QObject *) args[1]; - sender->signal = *(int *) args[2]; - sender->ref = 1; - - // Store the old sender as "return value" - args[3] = QObjectPrivate::setCurrentSender(receiver, sender); - args[4] = sender; - return true; - } - case QInternal::GetQObjectSender: { - QObject *receiver = (QObject *) args[0]; - QObjectPrivate *d = QObjectPrivate::get(receiver); - args[1] = d->currentSender ? d->currentSender->sender : 0; - return true; - } - case QInternal::ResetQObjectSender: { - QObject *receiver = (QObject *) args[0]; - QObjectPrivate::Sender *oldSender = (QObjectPrivate::Sender *) args[1]; - QObjectPrivate::Sender *sender = (QObjectPrivate::Sender *) args[2]; - QObjectPrivate::resetCurrentSender(receiver, sender, oldSender); - delete sender; - return true; - } - - default: - break; - } -#else - Q_UNUSED(args); - Q_UNUSED(func); -#endif - - return false; -} - /*! \macro Q_BYTE_ORDER \relates diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 2e266b52f3..16b4b0b093 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1592,26 +1592,6 @@ public: RelayoutDropped }; - - enum Callback { - ConnectCallback, - DisconnectCallback, - AdoptCurrentThread, - EventNotifyCallback, - LastCallback - }; - - enum InternalFunction { - CreateThreadForAdoption, - RefAdoptedThread, - DerefAdoptedThread, - SetCurrentThreadToMainThread, - SetQObjectSender, - GetQObjectSender, - ResetQObjectSender, - LastInternalFunction - }; - enum DockPosition { LeftDock, RightDock, @@ -1619,12 +1599,6 @@ public: BottomDock, DockCount }; - - static bool registerCallback(Callback, qInternalCallback); - static bool unregisterCallback(Callback, qInternalCallback); - - static bool activateCallbacks(Callback, void **); - static bool callFunction(InternalFunction func, void **); }; QT_END_NAMESPACE diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp index de983c2ded..18ec217d2a 100644 --- a/src/corelib/kernel/qcoreapplication.cpp +++ b/src/corelib/kernel/qcoreapplication.cpp @@ -298,14 +298,6 @@ Q_CORE_EXPORT uint qGlobalPostedEventsCount() return currentThreadData->postEventList.size() - currentThreadData->postEventList.startOffset; } - -void qt_set_current_thread_to_main_thread() -{ - QCoreApplicationPrivate::theMainThread = QThread::currentThread(); -} - - - QCoreApplication *QCoreApplication::self = 0; QAbstractEventDispatcher *QCoreApplicationPrivate::eventDispatcher = 0; uint QCoreApplicationPrivate::attribs; @@ -795,14 +787,6 @@ bool QCoreApplication::testAttribute(Qt::ApplicationAttribute attribute) */ bool QCoreApplication::notifyInternal(QObject *receiver, QEvent *event) { - // Make it possible for Qt Jambi and QSA to hook into events even - // though QApplication is subclassed... - bool result = false; - void *cbdata[] = { receiver, event, &result }; - if (QInternal::activateCallbacks(QInternal::EventNotifyCallback, cbdata)) { - return result; - } - // Qt enforces the rule that events can only be sent to objects in // the current thread, so receiver->d_func()->threadData is // equivalent to QThreadData::current(), just without the function diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index b1d2463737..e4ef826ffd 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -2388,13 +2388,6 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign const QObject *receiver, const char *method, Qt::ConnectionType type) { - { - void *result = 0; - const void *cbdata[] = { sender, signal, receiver, method, &type , &result}; - if (QInternal::activateCallbacks(QInternal::ConnectCallback, (void **) cbdata)) - return QMetaObject::Connection(result); - } - #ifndef QT_NO_DEBUG bool warnCompat = true; #endif @@ -2573,18 +2566,6 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMetho signalSignature.append((char)(QSIGNAL_CODE + '0')); signalSignature.append(signal.signature()); - { - QByteArray methodSignature; - methodSignature.reserve(qstrlen(method.signature())+1); - methodSignature.append((char)(method.methodType() == QMetaMethod::Slot ? QSLOT_CODE - : method.methodType() == QMetaMethod::Signal ? QSIGNAL_CODE : 0 + '0')); - methodSignature.append(method.signature()); - void *result = 0; - const void *cbdata[] = { sender, signalSignature.constData(), receiver, methodSignature.constData(), &type, &result }; - if (QInternal::activateCallbacks(QInternal::ConnectCallback, (void **) cbdata)) - return QMetaObject::Connection(result); - } - int signal_index; int method_index; { @@ -2714,12 +2695,6 @@ bool QObject::disconnect(const QObject *sender, const char *signal, return false; } - { - const void *cbdata[] = { sender, signal, receiver, method }; - if (QInternal::activateCallbacks(QInternal::DisconnectCallback, (void **) cbdata)) - return true; - } - const char *signal_arg = signal; QByteArray signal_name; bool signal_found = false; @@ -2868,20 +2843,6 @@ bool QObject::disconnect(const QObject *sender, const QMetaMethod &signal, signalSignature.append(signal.signature()); } - { - QByteArray methodSignature; - if (method.mobj) { - methodSignature.reserve(qstrlen(method.signature())+1); - methodSignature.append((char)(method.methodType() == QMetaMethod::Slot ? QSLOT_CODE - : method.methodType() == QMetaMethod::Signal ? QSIGNAL_CODE : 0 + '0')); - methodSignature.append(method.signature()); - } - const void *cbdata[] = { sender, signal.mobj ? signalSignature.constData() : 0, - receiver, method.mobj ? methodSignature.constData() : 0 }; - if (QInternal::activateCallbacks(QInternal::DisconnectCallback, (void **) cbdata)) - return true; - } - int signal_index; int method_index; { diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 17b0f2cb94..1df768c1ed 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -152,13 +152,6 @@ QAdoptedThread::~QAdoptedThread() // fprintf(stderr, "~QAdoptedThread = %p\n", this); } -QThread *QAdoptedThread::createThreadForAdoption() -{ - QScopedPointer t(new QAdoptedThread(0)); - t->moveToThread(t.data()); - return t.take(); -} - void QAdoptedThread::run() { // this function should never be called diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h index 66dd8db7c7..bbaf664a2d 100644 --- a/src/corelib/thread/qthread_p.h +++ b/src/corelib/thread/qthread_p.h @@ -248,7 +248,6 @@ public: ~QAdoptedThread(); void init(); - static QThread *createThreadForAdoption(); private: void run(); }; diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 8c6fefcfd7..6deae261c6 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -199,28 +199,17 @@ QThreadData *QThreadData::current() { QThreadData *data = get_thread_data(); if (!data) { - void *a; - if (QInternal::activateCallbacks(QInternal::AdoptCurrentThread, &a)) { - QThread *adopted = static_cast(a); - Q_ASSERT(adopted); - data = QThreadData::get2(adopted); + data = new QThreadData; + QT_TRY { set_thread_data(data); - adopted->d_func()->running = true; - adopted->d_func()->finished = false; - static_cast(adopted)->init(); - } else { - data = new QThreadData; - QT_TRY { - set_thread_data(data); - data->thread = new QAdoptedThread(data); - } QT_CATCH(...) { - clear_thread_data(); - data->deref(); - data = 0; - QT_RETHROW; - } + data->thread = new QAdoptedThread(data); + } QT_CATCH(...) { + clear_thread_data(); data->deref(); + data = 0; + QT_RETHROW; } + data->deref(); data->isAdopted = true; data->threadId = (Qt::HANDLE)pthread_self(); if (!QCoreApplicationPrivate::theMainThread) diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp index 5b74bad7ef..0c834cfff2 100644 --- a/src/corelib/thread/qthread_win.cpp +++ b/src/corelib/thread/qthread_win.cpp @@ -101,29 +101,19 @@ QThreadData *QThreadData::current() qt_create_tls(); QThreadData *threadData = reinterpret_cast(TlsGetValue(qt_current_thread_data_tls_index)); if (!threadData) { - QThread *adopted = 0; - if (QInternal::activateCallbacks(QInternal::AdoptCurrentThread, (void **) &adopted)) { - Q_ASSERT(adopted); - threadData = QThreadData::get2(adopted); - TlsSetValue(qt_current_thread_data_tls_index, threadData); - adopted->d_func()->running = true; - adopted->d_func()->finished = false; - static_cast(adopted)->init(); - } else { - threadData = new QThreadData; - // This needs to be called prior to new AdoptedThread() to - // avoid recursion. - TlsSetValue(qt_current_thread_data_tls_index, threadData); - QT_TRY { - threadData->thread = new QAdoptedThread(threadData); - } QT_CATCH(...) { - TlsSetValue(qt_current_thread_data_tls_index, 0); - threadData->deref(); - threadData = 0; - QT_RETHROW; - } + threadData = new QThreadData; + // This needs to be called prior to new AdoptedThread() to + // avoid recursion. + TlsSetValue(qt_current_thread_data_tls_index, threadData); + QT_TRY { + threadData->thread = new QAdoptedThread(threadData); + } QT_CATCH(...) { + TlsSetValue(qt_current_thread_data_tls_index, 0); threadData->deref(); + threadData = 0; + QT_RETHROW; } + threadData->deref(); threadData->isAdopted = true; threadData->threadId = (Qt::HANDLE)GetCurrentThreadId(); diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp index 23ec228c68..3efdbf0433 100644 --- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp +++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp @@ -47,7 +47,6 @@ class tst_QGlobal: public QObject Q_OBJECT private slots: void qIsNull(); - void qInternalCallbacks(); void for_each(); void qassert(); void qtry(); @@ -71,78 +70,6 @@ void tst_QGlobal::qIsNull() QVERIFY(!::qIsNull(f)); } -struct ConnectInfo { - QObject *sender; - QObject *receiver; - QString signal, slot; - int type; - void reset() { - sender = receiver = 0; - signal = slot = QString(); - type = -1; - } -} connect_info; - -bool disconnect_callback(void **data) -{ - connect_info.sender = (QObject *)(data[0]); - connect_info.receiver = (QObject *)(data[2]); - connect_info.signal = QString::fromLatin1((const char *) data[1]); - connect_info.slot = QString::fromLatin1((const char *) data[3]); - return true; -} - -bool connect_callback(void **data) -{ - disconnect_callback(data); - connect_info.type = *(int *) data[4]; - return true; -} - -void tst_QGlobal::qInternalCallbacks() -{ - QInternal::registerCallback(QInternal::ConnectCallback, connect_callback); - QInternal::registerCallback(QInternal::DisconnectCallback, disconnect_callback); - - QObject a, b; - QString signal = QLatin1String("2mysignal(x)"); - QString slot = QLatin1String("1myslot(x)"); - - // Test that connect works as expected... - connect_info.reset(); - bool ok = QObject::connect(&a, signal.toLatin1(), &b, slot.toLatin1(), Qt::AutoConnection); - QVERIFY(!ok); // our dummy callback do not return a valid QMetaObject::Connection - QCOMPARE(&a, connect_info.sender); - QCOMPARE(&b, connect_info.receiver); - QCOMPARE(signal, connect_info.signal); - QCOMPARE(slot, connect_info.slot); - QCOMPARE((int) Qt::AutoConnection, connect_info.type); - - // Test that disconnect works as expected - connect_info.reset(); - ok = QObject::disconnect(&a, signal.toLatin1(), &b, slot.toLatin1()); - QVERIFY(ok); - QCOMPARE(&a, connect_info.sender); - QCOMPARE(&b, connect_info.receiver); - QCOMPARE(signal, connect_info.signal); - QCOMPARE(slot, connect_info.slot); - - // Unregister callbacks and verify that they are not triggered... - QInternal::unregisterCallback(QInternal::ConnectCallback, connect_callback); - QInternal::unregisterCallback(QInternal::DisconnectCallback, disconnect_callback); - - connect_info.reset(); - QTest::ignoreMessage(QtWarningMsg, "Object::connect: No such signal QObject::mysignal(x)"); - ok = QObject::connect(&a, signal.toLatin1(), &b, slot.toLatin1(), Qt::AutoConnection); - QVERIFY(!ok); - QCOMPARE(connect_info.sender, (QObject *) 0); - - QTest::ignoreMessage(QtWarningMsg, "Object::disconnect: No such signal QObject::mysignal(x)"); - ok = QObject::disconnect(&a, signal.toLatin1(), &b, slot.toLatin1()); - QVERIFY(!ok); - QCOMPARE(connect_info.sender, (QObject *) 0); -} - void tst_QGlobal::for_each() { QList list; -- cgit v1.2.3