summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Hartmann <thomas.hartmann@qt.io>2022-12-01 15:18:50 +0100
committerThomas Hartmann <thomas.hartmann@qt.io>2022-12-01 16:15:18 +0000
commit740a65571fd877fb5722443c8172cfdc047aa159 (patch)
treec68b0a163e9ab76481911f0d2823565ac6ba4a91
parent9e9cfeeeac3c55d8141ce33cee448723c5c1fca1 (diff)
downloadqt-creator-740a65571fd877fb5722443c8172cfdc047aa159.tar.gz
StudioWelcome: Use QQuickWindow on macOS
This fixes flickering on macOS introduced by Qt 6.4. Unfortuntly keyboard focus does not work on Windows in this case if the splashscreen flag is set. Therefore we only use QQuickWindow on macOS. Simplfiying code and removing unused code. The variable doNotShowAgain is always true now. The check in delayedInitialize can be removed, since we already show a warning during creation. Task-number: QDS-8113 Change-Id: I8185a58175f4d2eafe92561fbded535d7ae393a2 Reviewed-by: Henning Gründl <henning.gruendl@qt.io> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r--src/plugins/studiowelcome/studiowelcomeplugin.cpp114
-rw-r--r--src/plugins/studiowelcome/studiowelcomeplugin.h1
2 files changed, 70 insertions, 45 deletions
diff --git a/src/plugins/studiowelcome/studiowelcomeplugin.cpp b/src/plugins/studiowelcome/studiowelcomeplugin.cpp
index 24b3254d13..818aeffb9d 100644
--- a/src/plugins/studiowelcome/studiowelcomeplugin.cpp
+++ b/src/plugins/studiowelcome/studiowelcomeplugin.cpp
@@ -43,6 +43,7 @@
#include <QFileInfo>
#include <QFontDatabase>
#include <QGroupBox>
+#include <QMainWindow>
#include <QPointer>
#include <QPushButton>
#include <QQmlContext>
@@ -91,7 +92,8 @@ const char CRASH_REPORTER_SETTING[] = "CrashReportingEnabled";
const char EXAMPLES_DOWNLOAD_PATH[] = "StudioWelcome/ExamplesDownloadPath";
-QPointer<QQuickWidget> s_view = nullptr;
+QPointer<QQuickView> s_viewWindow = nullptr;
+QPointer<QQuickWidget> s_viewWidget = nullptr;
static StudioWelcomePlugin *s_pluginInstance = nullptr;
std::unique_ptr<QSettings> makeUserFeedbackSettings()
@@ -449,22 +451,13 @@ private:
void StudioWelcomePlugin::closeSplashScreen()
{
- if (!s_view.isNull()) {
- const bool doNotShowAgain = s_view->rootObject()->property("doNotShowAgain").toBool();
- if (doNotShowAgain)
- Utils::CheckableMessageBox::doNotAskAgain(Core::ICore::settings(),
- DO_NOT_SHOW_SPLASHSCREEN_AGAIN_KEY);
-
- s_view->deleteLater();
- }
-}
-
-void StudioWelcomePlugin::showSystemSettings()
-{
- Core::ICore::infoBar()->removeInfo("WarnCrashReporting");
- Core::ICore::infoBar()->globallySuppressInfo("WarnCrashReporting");
+ Utils::CheckableMessageBox::doNotAskAgain(Core::ICore::settings(),
+ DO_NOT_SHOW_SPLASHSCREEN_AGAIN_KEY);
+ if (!s_viewWindow.isNull())
+ s_viewWindow->deleteLater();
- Core::ICore::showOptionsDialog(Core::Constants::SETTINGS_ID_SYSTEM);
+ if (!s_viewWidget.isNull())
+ s_viewWidget->deleteLater();
}
StudioWelcomePlugin::StudioWelcomePlugin()
@@ -537,47 +530,80 @@ void StudioWelcomePlugin::extensionsInitialized()
if (showSplashScreen()) {
connect(Core::ICore::instance(), &Core::ICore::coreOpened, this, [this] {
- s_view = new QQuickWidget(Core::ICore::dialogParent());
- s_view->setResizeMode(QQuickWidget::SizeRootObjectToView);
- s_view->setWindowFlag(Qt::SplashScreen, true);
- s_view->setWindowModality(Qt::ApplicationModal);
- s_view->engine()->addImportPath("qrc:/studiofonts");
+ if (Utils::HostOsInfo::isMacHost()) {
+ s_viewWindow = new QQuickView(Core::ICore::mainWindow()->windowHandle());
+
+ s_viewWindow->setFlag(Qt::FramelessWindowHint);
+
+ s_viewWindow->setModality(Qt::ApplicationModal);
+ s_viewWindow->engine()->addImportPath("qrc:/studiofonts");
#ifdef QT_DEBUG
- s_view->engine()->addImportPath(QLatin1String(STUDIO_QML_PATH) + "splashscreen/imports");
- s_view->setSource(
- QUrl::fromLocalFile(QLatin1String(STUDIO_QML_PATH) + "splashscreen/main.qml"));
+ s_viewWindow->engine()->addImportPath(QLatin1String(STUDIO_QML_PATH)
+ + "splashscreen/imports");
+ s_viewWindow->setSource(
+ QUrl::fromLocalFile(QLatin1String(STUDIO_QML_PATH) + "splashscreen/main.qml"));
#else
- s_view->engine()->addImportPath("qrc:/qml/splashscreen/imports");
- s_view->setSource(QUrl("qrc:/qml/splashscreen/main.qml"));
+ s_viewWindow->engine()->addImportPath("qrc:/qml/splashscreen/imports");
+ s_viewWindow->setSource(QUrl("qrc:/qml/splashscreen/main.qml"));
#endif
+ QTC_ASSERT(s_viewWindow->rootObject(),
+ qWarning() << "The StudioWelcomePlugin has a runtime depdendency on "
+ "qt/qtquicktimeline.";
+ return );
+
+ connect(s_viewWindow->rootObject(),
+ SIGNAL(closeClicked()),
+ this,
+ SLOT(closeSplashScreen()));
+
+ auto mainWindow = Core::ICore::mainWindow()->windowHandle();
+ s_viewWindow->setPosition((mainWindow->width() - s_viewWindow->width()) / 2,
+ (mainWindow->height() - s_viewWindow->height()) / 2);
- QTC_ASSERT(s_view->rootObject(),
- qWarning() << "The StudioWelcomePlugin has a runtime depdendency on "
- "qt/qtquicktimeline.";
- return );
+ s_viewWindow->show();
+ s_viewWindow->raise();
- connect(s_view->rootObject(), SIGNAL(closeClicked()), this, SLOT(closeSplashScreen()));
- connect(s_view->rootObject(),
- SIGNAL(configureClicked()),
- this,
- SLOT(showSystemSettings()));
+ s_viewWindow->requestActivate();
+ } else {
+ s_viewWidget = new QQuickWidget(Core::ICore::dialogParent());
- s_view->show();
- s_view->raise();
- s_view->setFocus();
+ s_viewWidget->setWindowFlag(Qt::SplashScreen, true);
+
+ s_viewWidget->setWindowModality(Qt::ApplicationModal);
+ s_viewWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+ s_viewWidget->engine()->addImportPath("qrc:/studiofonts");
+#ifdef QT_DEBUG
+ s_viewWidget->engine()->addImportPath(QLatin1String(STUDIO_QML_PATH)
+ + "splashscreen/imports");
+ s_viewWidget->setSource(
+ QUrl::fromLocalFile(QLatin1String(STUDIO_QML_PATH) + "splashscreen/main.qml"));
+#else
+ s_viewWidget->engine()->addImportPath("qrc:/qml/splashscreen/imports");
+ s_viewWidget->setSource(QUrl("qrc:/qml/splashscreen/main.qml"));
+#endif
+
+ QTC_ASSERT(s_viewWidget->rootObject(),
+ qWarning() << "The StudioWelcomePlugin has a runtime depdendency on "
+ "qt/qtquicktimeline.";
+ return );
+
+ connect(s_viewWidget->rootObject(),
+ SIGNAL(closeClicked()),
+ this,
+ SLOT(closeSplashScreen()));
+
+ s_viewWidget->show();
+ s_viewWidget->raise();
+ s_viewWidget->setFocus();
+ }
});
}
}
bool StudioWelcomePlugin::delayedInitialize()
{
- if (s_view.isNull())
- return false;
-
- QTC_ASSERT(s_view->rootObject(), return true);
-
- return false;
+ return true;
}
Utils::FilePath StudioWelcomePlugin::defaultExamplesPath()
diff --git a/src/plugins/studiowelcome/studiowelcomeplugin.h b/src/plugins/studiowelcome/studiowelcomeplugin.h
index 6368e5dd8d..88a8b0abbb 100644
--- a/src/plugins/studiowelcome/studiowelcomeplugin.h
+++ b/src/plugins/studiowelcome/studiowelcomeplugin.h
@@ -45,7 +45,6 @@ class StudioWelcomePlugin final : public ExtensionSystem::IPlugin
public slots:
void closeSplashScreen();
- void showSystemSettings();
public:
StudioWelcomePlugin();