Make connection to tablet shown signal more consistent, eliminates missed signals

This commit is contained in:
vladest 2017-08-03 20:58:44 +02:00
parent b049b0f415
commit a439cc1837
2 changed files with 11 additions and 14 deletions

View file

@ -187,6 +187,7 @@ TabletProxy::TabletProxy(QObject* parent, const QString& name) : QObject(parent)
if (QThread::currentThread() != qApp->thread()) { if (QThread::currentThread() != qApp->thread()) {
qCWarning(uiLogging) << "Creating tablet proxy on wrong thread " << _name; qCWarning(uiLogging) << "Creating tablet proxy on wrong thread " << _name;
} }
connect(this, &TabletProxy::tabletShownChanged, this, &TabletProxy::onTabletShown);
} }
TabletProxy::~TabletProxy() { TabletProxy::~TabletProxy() {
@ -194,6 +195,7 @@ TabletProxy::~TabletProxy() {
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
qCWarning(uiLogging) << "Destroying tablet proxy on wrong thread" << _name; qCWarning(uiLogging) << "Destroying tablet proxy on wrong thread" << _name;
} }
disconnect(this, &TabletProxy::tabletShownChanged, this, &TabletProxy::onTabletShown);
} }
void TabletProxy::setToolbarMode(bool toolbarMode) { void TabletProxy::setToolbarMode(bool toolbarMode) {
@ -235,8 +237,7 @@ void TabletProxy::setToolbarMode(bool toolbarMode) {
} else { } else {
loadHomeScreen(true); loadHomeScreen(true);
} }
//check if running scripts opened and save it for reopen in Tablet //check if running scripts window opened and save it for reopen in Tablet
qDebug() << __FUNCTION__ << offscreenUi->isVisible("RunningScripts");
if (offscreenUi->isVisible("RunningScripts")) { if (offscreenUi->isVisible("RunningScripts")) {
offscreenUi->hide("RunningScripts"); offscreenUi->hide("RunningScripts");
_showRunningScripts = true; _showRunningScripts = true;
@ -322,6 +323,13 @@ void TabletProxy::emitWebEvent(const QVariant& msg) {
emit webEventReceived(msg); emit webEventReceived(msg);
} }
void TabletProxy::onTabletShown() {
if (_tabletShown && _showRunningScripts) {
_showRunningScripts = false;
pushOntoStack("../../hifi/dialogs/TabletRunningScripts.qml");
}
}
bool TabletProxy::isPathLoaded(const QVariant& path) { bool TabletProxy::isPathLoaded(const QVariant& path) {
if (QThread::currentThread() != thread()) { if (QThread::currentThread() != thread()) {
bool result = false; bool result = false;
@ -377,18 +385,7 @@ void TabletProxy::setQmlTabletRoot(OffscreenQmlSurface* qmlOffscreenSurface) {
_initialScreen = false; _initialScreen = false;
} }
qDebug() << __FUNCTION__ << _showRunningScripts;
if (_showRunningScripts) { if (_showRunningScripts) {
_showRunningScripts = false;
//connect to Tablet shown signal to open running scripts
//we cant just call pushOnStack here since RunningScripts draws incorrectly
auto conn = std::make_shared<QMetaObject::Connection>();
*conn = connect(this, &TabletProxy::tabletShownChanged, this, [this, conn] {
QObject::disconnect(*conn); //not needed anymore, disconnect
if (_tabletShown) {
pushOntoStack("../../hifi/dialogs/TabletRunningScripts.qml");
}
});
//show Tablet. Make sure, setShown implemented in TabletRoot.qml //show Tablet. Make sure, setShown implemented in TabletRoot.qml
QMetaObject::invokeMethod(_qmlTabletRoot, "setShown", Q_ARG(const QVariant&, QVariant(true))); QMetaObject::invokeMethod(_qmlTabletRoot, "setShown", Q_ARG(const QVariant&, QVariant(true)));
} }
@ -491,7 +488,6 @@ void TabletProxy::loadQMLSource(const QVariant& path) {
if (root) { if (root) {
removeButtonsFromHomeScreen(); //works only in Tablet removeButtonsFromHomeScreen(); //works only in Tablet
qDebug() << __FUNCTION__ << path << _currentPathLoaded << (int)_state;
QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, path)); QMetaObject::invokeMethod(root, "loadSource", Q_ARG(const QVariant&, path));
_state = State::QML; _state = State::QML;
if (path != _currentPathLoaded) { if (path != _currentPathLoaded) {

View file

@ -232,6 +232,7 @@ protected slots:
void addButtonsToHomeScreen(); void addButtonsToHomeScreen();
void desktopWindowClosed(); void desktopWindowClosed();
void emitWebEvent(const QVariant& msg); void emitWebEvent(const QVariant& msg);
void onTabletShown();
protected: protected:
void removeButtonsFromHomeScreen(); void removeButtonsFromHomeScreen();
void loadHomeScreen(bool forceOntoHomeScreen); void loadHomeScreen(bool forceOntoHomeScreen);