diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index cd9f60aa82..89ec70ca22 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -59,10 +59,9 @@ Web3DOverlay::~Web3DOverlay() { if (_webSurface) { QQuickItem* rootItem = _webSurface->getRootItem(); - // TABLET_UI_HACK: TODO: update this with rootTablet - if (rootItem && rootItem->objectName() == "tablet") { + if (rootItem && rootItem->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); - tabletScriptingInterface->setQmlTablet("com.highfidelity.interface.tablet.system", nullptr); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", nullptr); } // Fix for crash in QtWebEngineCore when rapidly switching domains @@ -137,10 +136,9 @@ void Web3DOverlay::loadSourceURL() { _webSurface->load(_url, [&](QQmlContext* context, QObject* obj) {}); _webSurface->resume(); - // TABLET_UI_HACK: TODO: update this to use rootTablet. - if (_webSurface->getRootItem() && _webSurface->getRootItem()->objectName() == "tablet") { + if (_webSurface->getRootItem() && _webSurface->getRootItem()->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); - tabletScriptingInterface->setQmlTablet("com.highfidelity.interface.tablet.system", _webSurface->getRootItem()); + tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem()); } } } diff --git a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp index 534f06bfc3..a4eb3cbf7b 100644 --- a/libraries/entities-renderer/src/RenderableWebEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderableWebEntityItem.cpp @@ -258,7 +258,6 @@ void RenderableWebEntityItem::loadSourceURL() { _webSurface->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath())); _webSurface->load(_sourceUrl, [&](QQmlContext* context, QObject* obj) {}); - // TABLET_UI_HACK: move this to overlays as well! if (_webSurface->getRootItem() && _webSurface->getRootItem()->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem()); @@ -360,7 +359,6 @@ void RenderableWebEntityItem::destroyWebSurface() { QQuickItem* rootItem = _webSurface->getRootItem(); - // TABLET_UI_HACK: move this to overlays as well! if (rootItem && rootItem->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get(); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", nullptr); diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 86ee706e0f..bafa9ab4b4 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -10,6 +10,8 @@ #include +#include "ScriptEngineLogging.h" + QObject* TabletScriptingInterface::getTablet(const QString& tabletId) { std::lock_guard guard(_mutex); @@ -32,7 +34,7 @@ void TabletScriptingInterface::setQmlTabletRoot(QString tabletId, QQuickItem* qm if (tablet) { tablet->setQmlTabletRoot(qmlTabletRoot); } else { - qWarning() << "TabletScriptingInterface::setupTablet() bad tablet object"; + qCWarning(scriptengine) << "TabletScriptingInterface::setupTablet() bad tablet object"; } } @@ -57,13 +59,13 @@ static void addButtonProxyToQmlTablet(QQuickItem* qmlTablet, TabletButtonProxy* bool hasResult = QMetaObject::invokeMethod(qmlTablet, "addButtonProxy", connectionType, Q_RETURN_ARG(QVariant, resultVar), Q_ARG(QVariant, buttonProxy->getProperties())); if (!hasResult) { - qWarning() << "TabletScriptingInterface addButtonProxyToQmlTablet has no result"; + qCWarning(scriptengine) << "TabletScriptingInterface addButtonProxyToQmlTablet has no result"; return; } QObject* qmlButton = qvariant_cast(resultVar); if (!qmlButton) { - qWarning() << "TabletScriptingInterface addButtonProxyToQmlTablet result not a QObject"; + qCWarning(scriptengine) << "TabletScriptingInterface addButtonProxyToQmlTablet result not a QObject"; return; } QObject::connect(qmlButton, SIGNAL(clicked()), buttonProxy, SLOT(clickedSlot())); @@ -107,36 +109,40 @@ QObject* TabletProxy::addButton(const QVariant& properties) { std::lock_guard guard(_mutex); _tabletButtonProxies.push_back(tabletButtonProxy); if (_qmlTabletRoot) { - addButtonProxyToQmlTablet(_qmlTabletRoot, tabletButtonProxy.data()); + auto tablet = getQmlTablet(); + if (tablet) { + addButtonProxyToQmlTablet(tablet, tabletButtonProxy.data()); + } else { + qCCritical(scriptengine) << "Could not find tablet in TabletRoot.qml"; + } } return tabletButtonProxy.data(); } void TabletProxy::removeButton(QObject* tabletButtonProxy) { std::lock_guard guard(_mutex); + + auto tablet = getQmlTablet(); + if (!tablet) { + qCCritical(scriptengine) << "Could not find tablet in TabletRoot.qml"; + } + auto iter = std::find(_tabletButtonProxies.begin(), _tabletButtonProxies.end(), tabletButtonProxy); if (iter != _tabletButtonProxies.end()) { if (_qmlTabletRoot) { (*iter)->setQmlButton(nullptr); - QMetaObject::invokeMethod(_qmlTabletRoot, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, (*iter)->getProperties())); + if (tablet) { + QMetaObject::invokeMethod(tablet, "removeButtonProxy", Qt::AutoConnection, Q_ARG(QVariant, (*iter)->getProperties())); + } } _tabletButtonProxies.erase(iter); } else { - qWarning() << "TabletProxy::removeButton() could not find button " << tabletButtonProxy; + qCWarning(scriptengine) << "TabletProxy::removeButton() could not find button " << tabletButtonProxy; } } void TabletProxy::addButtonsToHomeScreen() { - if (!_qmlTabletRoot) { - return; - } - - auto loader = _qmlTabletRoot->findChild("loader"); - if (!loader) { - return; - } - - auto tablet = loader->findChild("tablet"); + auto tablet = getQmlTablet(); if (!tablet) { return; } @@ -154,6 +160,24 @@ void TabletProxy::removeButtonsFromHomeScreen() { } } +QQuickItem* TabletProxy::getQmlTablet() const { + if (!_qmlTabletRoot) { + return nullptr; + } + + auto loader = _qmlTabletRoot->findChild("loader"); + if (!loader) { + return nullptr; + } + + auto tablet = loader->findChild("tablet"); + if (!tablet) { + return nullptr; + } + + return tablet; +} + // // TabletButtonProxy // diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index b9482ca8a4..9739066c17 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -89,6 +89,7 @@ protected: void addButtonsToHomeScreen(); void removeButtonsFromHomeScreen(); + QQuickItem* getQmlTablet() const; QString _name; std::mutex _mutex;