From 70f47b01d375ab1d3687b2d448c601fdc15fab20 Mon Sep 17 00:00:00 2001 From: Ronan Abhamon Date: Wed, 20 Jun 2018 14:56:53 +0200 Subject: [PATCH] fix(App): do not create windows later to avoid warning and abort (QQmlComponent: Cannot create new component instance before completing the previous) --- src/app/App.cpp | 40 +++++++++++++++++++--------------------- src/app/App.hpp | 4 ++-- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/app/App.cpp b/src/app/App.cpp index 36b68590c..12661dd48 100644 --- a/src/app/App.cpp +++ b/src/app/App.cpp @@ -146,8 +146,6 @@ void App::initContentApp () { qInfo() << QStringLiteral("Restarting app..."); delete mEngine; - mCallsWindow = nullptr; - mSettingsWindow = nullptr; mNotifier = nullptr; mColors = nullptr; mSystemTrayIcon = nullptr; @@ -228,10 +226,24 @@ void App::initContentApp () { if (mEngine->rootObjects().isEmpty()) qFatal("Unable to open main window."); - QObject::connect(CoreManager::getInstance()->getHandlers().get(), - &CoreHandlers::coreStarted, [this, mustBeIconified]() { + QObject::connect( + CoreManager::getInstance()->getHandlers().get(), + &CoreHandlers::coreStarted, + [this, mustBeIconified]() { openAppAfterInit(mustBeIconified); - }); + + // Create other windows. + mCallsWindow = createSubWindow(mEngine, QmlViewCallsWindow); + mSettingsWindow = createSubWindow(mEngine, QmlViewSettingsWindow); + QObject::connect(mSettingsWindow, &QWindow::visibilityChanged, this, [](QWindow::Visibility visibility) { + if (visibility == QWindow::Hidden) { + qInfo() << QStringLiteral("Update nat policy."); + shared_ptr core = CoreManager::getInstance()->getCore(); + core->setNatPolicy(core->getNatPolicy()); + } + }); + } + ); } // ----------------------------------------------------------------------------- @@ -263,15 +275,12 @@ QString App::getCommandArgument () { // ----------------------------------------------------------------------------- -QQuickWindow *App::getCallsWindow () { +QQuickWindow *App::getCallsWindow () const { if (CoreManager::getInstance()->getCore()->getConfig()->getInt( SettingsModel::UiSection, "disable_calls_window", 0 )) return nullptr; - if (!mCallsWindow) - mCallsWindow = createSubWindow(mEngine, QmlViewCallsWindow); - return mCallsWindow; } @@ -281,18 +290,7 @@ QQuickWindow *App::getMainWindow () const { ); } -QQuickWindow *App::getSettingsWindow () { - if (!mSettingsWindow) { - mSettingsWindow = createSubWindow(mEngine, QmlViewSettingsWindow); - QObject::connect(mSettingsWindow, &QWindow::visibilityChanged, this, [](QWindow::Visibility visibility) { - if (visibility == QWindow::Hidden) { - qInfo() << QStringLiteral("Update nat policy."); - shared_ptr core = CoreManager::getInstance()->getCore(); - core->setNatPolicy(core->getNatPolicy()); - } - }); - } - +QQuickWindow *App::getSettingsWindow () const { return mSettingsWindow; } diff --git a/src/app/App.hpp b/src/app/App.hpp index cdae4a068..21ad96179 100644 --- a/src/app/App.hpp +++ b/src/app/App.hpp @@ -92,8 +92,8 @@ public: exit(RestartCode); } - Q_INVOKABLE QQuickWindow *getCallsWindow (); - Q_INVOKABLE QQuickWindow *getSettingsWindow (); + Q_INVOKABLE QQuickWindow *getCallsWindow () const; + Q_INVOKABLE QQuickWindow *getSettingsWindow () const; Q_INVOKABLE static void smartShowWindow (QQuickWindow *window);