on xenial help sign in
use QSignalMapper instead of sender()
commit9fcd9bc948beffb25b33572dc451f44671a10f65 authorMichael Zanetti <michael.zanetti@canonical.com> dateWed 7 Dec 2016, 11:21 (10 years ago) parent2ca06eb
2 files changed+12−7
src/DebuggingController.cpp+9−6 src/DebuggingController.h+3−1
src/DebuggingController.cpp+9−6
@@ -28,6 +28,7 @@
2828DebuggingController::DebuggingController(QObject *parent):
2929 UnityDBusObject(QStringLiteral("/com/canonical/Unity8/Debugging"), QStringLiteral("com.canonical.Unity8"), true, parent)
3030{
31+ connect(&m_mapper, SIGNAL(mapped(QObject*)), this, SLOT(applyRenderMode(QObject*)), Qt::DirectConnection);
3132}
3233
3334void DebuggingController::SetSceneGraphVisualizer(const QString &visualizer)
@@ -43,7 +44,9 @@ void DebuggingController::SetSceneGraphVisualizer(const QString &visualizer)
4344 // We do this by simply recreating the renderer.
4445 QMutexLocker lock(&m_renderModeMutex);
4546 m_pendingRenderMode = visualizer;
46− connect(qquickWindow, &QQuickWindow::beforeSynchronizing, this, &DebuggingController::applyRenderMode, Qt::DirectConnection);
47+ qDebug() << "connecting to mapper";
48+ connect(qquickWindow, SIGNAL(beforeSynchronizing()), &m_mapper, SLOT(map()), Qt::DirectConnection);
49+ m_mapper.setMapping(qquickWindow, qquickWindow);
4750#else
4851 QQuickWindowPrivate *winPriv = QQuickWindowPrivate::get(qquickWindow);
4952 winPriv->customRenderMode = visualizer.toLatin1();
@@ -53,13 +56,13 @@ void DebuggingController::SetSceneGraphVisualizer(const QString &visualizer)
5356 }
5457}
5558
56−void DebuggingController::applyRenderMode() {
57− qDebug() << "applyRenderMode called" << sender();
58− QQuickWindow *qquickWindow = dynamic_cast<QQuickWindow*>(sender());
59− qDebug() << "window is" << qquickWindow << sender() << sender()->metaObject()->className();
59+void DebuggingController::applyRenderMode(QObject* sender) {
60+ qDebug() << "applyRenderMode called" << sender;
61+ QQuickWindow *qquickWindow = dynamic_cast<QQuickWindow*>(sender);
62+ qDebug() << "window is" << qquickWindow;
6063
6164 QMutexLocker lock(&m_renderModeMutex);
62− disconnect(qquickWindow, &QQuickWindow::beforeSynchronizing, this, &DebuggingController::applyRenderMode);
65+ disconnect(qquickWindow, SIGNAL(beforeSynchronizing()), &m_mapper, SLOT(map()));
6366
6467 qDebug() << "mutex locked";
6568#if QT_VERSION >= QT_VERSION_CHECK(5, 5, 0)
src/DebuggingController.h+3−1
@@ -24,6 +24,7 @@
2424#include <QQmlExtensionPlugin>
2525#include <QQuickWindow>
2626#include <QMutex>
27+#include <QSignalMapper>
2728
2829#include "unitydbusobject.h"
2930
@@ -54,10 +55,11 @@ public Q_SLOTS:
5455 Q_SCRIPTABLE void SetLoggingFilterRules(const QString &filterRules);
5556
5657private Q_SLOTS:
57− void applyRenderMode();
58+ void applyRenderMode(QObject *sender);
5859
5960private:
6061 QMutex m_renderModeMutex;
6162 QString m_pendingRenderMode;
63+ QSignalMapper m_mapper;
6264};
6365#endif // DEBUGGINGCONTROLLER_H