From 6eca31c4243b859401f6660dad21c34e5e456460 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 24 Oct 2023 08:43:11 -0700 Subject: [PATCH 01/15] Add missing includes for QPointer qtbase removed some indirect include somewhere. Change-Id: I477e6dccebda4fbb81f6fffd179115840c67002f Reviewed-by: Christian Stenger --- src/plugins/coreplugin/locator/commandlocator.cpp | 1 + src/plugins/qmlprojectmanager/qmlproject.h | 2 ++ src/shared/qtsingleapplication/qtsingleapplication.cpp | 1 + 3 files changed, 4 insertions(+) diff --git a/src/plugins/coreplugin/locator/commandlocator.cpp b/src/plugins/coreplugin/locator/commandlocator.cpp index b740bdeeacd..6fd21a524ba 100644 --- a/src/plugins/coreplugin/locator/commandlocator.cpp +++ b/src/plugins/coreplugin/locator/commandlocator.cpp @@ -8,6 +8,7 @@ #include #include +#include using namespace Utils; diff --git a/src/plugins/qmlprojectmanager/qmlproject.h b/src/plugins/qmlprojectmanager/qmlproject.h index b716d442d05..a41b05e57bb 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.h +++ b/src/plugins/qmlprojectmanager/qmlproject.h @@ -7,6 +7,8 @@ #include "qmlprojectmanager_global.h" #include +#include + namespace QmlProjectManager { class QmlProject; diff --git a/src/shared/qtsingleapplication/qtsingleapplication.cpp b/src/shared/qtsingleapplication/qtsingleapplication.cpp index b791d1875f7..c38d568004c 100644 --- a/src/shared/qtsingleapplication/qtsingleapplication.cpp +++ b/src/shared/qtsingleapplication/qtsingleapplication.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include From 22693e32811a3cf041607a5703cebdd5d0a60fe1 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Tue, 24 Oct 2023 18:17:32 +0200 Subject: [PATCH 02/15] Doc: Add links to documentation to the change log Task-number: QTCREATORBUG-29392 Change-Id: Ic5233954320447e7ef3152e25f4ddce43936fbc6 Reviewed-by: Eike Ziller --- dist/changelog/changes-12.0.0.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dist/changelog/changes-12.0.0.md b/dist/changelog/changes-12.0.0.md index 8ab1abf9cc2..6e7a8f496e4 100644 --- a/dist/changelog/changes-12.0.0.md +++ b/dist/changelog/changes-12.0.0.md @@ -212,6 +212,7 @@ Projects * Added auto-detection of PySide from the installer ([PYSIDE-2153](https://bugreports.qt.io/browse/PYSIDE-2153)) + ([Documentation](https://doc-snapshots.qt.io/qtcreator-12.0/creator-python-development.html#set-up-pyside6)) * Added the option to forward the display for remote Linux * Fixed PySide wheels installation on macOS @@ -224,6 +225,7 @@ Projects ### Qt Safe Renderer * Added a wizard for Qt Safe Renderer 2.1 and later + ([Documentation](https://doc.qt.io/QtSafeRenderer/qtsr-safety-project.html#using-qt-safe-renderer-project-template-in-qt-creator)) Debugging --------- From 3d95bafdbbee0a7350779f834972ade2095c9acd Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 24 Oct 2023 13:54:55 +0200 Subject: [PATCH 03/15] Axivion: Support building without ssl Change-Id: I027317410321725e8e295d236243e50e1ea6019d Reviewed-by: Christian Stenger --- src/plugins/axivion/axivionplugin.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/plugins/axivion/axivionplugin.cpp b/src/plugins/axivion/axivionplugin.cpp index 0c09ecb475d..a22885afb01 100644 --- a/src/plugins/axivion/axivionplugin.cpp +++ b/src/plugins/axivion/axivionplugin.cpp @@ -158,12 +158,15 @@ bool AxivionPlugin::handleCertificateIssue() AxivionPluginPrivate::AxivionPluginPrivate() { +#if QT_CONFIG(ssl) connect(&m_networkAccessManager, &QNetworkAccessManager::sslErrors, this, &AxivionPluginPrivate::handleSslErrors); +#endif // ssl } void AxivionPluginPrivate::handleSslErrors(QNetworkReply *reply, const QList &errors) { +#if QT_CONFIG(ssl) const QList accepted{ QSslError::CertificateNotYetValid, QSslError::CertificateExpired, QSslError::InvalidCaCertificate, QSslError::CertificateUntrusted, @@ -174,6 +177,10 @@ void AxivionPluginPrivate::handleSslErrors(QNetworkReply *reply, const QListignoreSslErrors(errors); } +#else // ssl + Q_UNUSED(reply) + Q_UNUSED(errors) +#endif // ssl } void AxivionPluginPrivate::onStartupProjectChanged() From 0bf69bc499b64fe2cb29ac2c32213cf8644c9554 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 25 Oct 2023 09:18:49 +0200 Subject: [PATCH 04/15] NavigationWidgets: Fix the side that shortcuts open The activationsMap logs were a specific view was opened last. We need to clear outdated information from the navigation widgets' (left|right) settings (if a view was opened last in the left widget, that was written to the left widget's settings, but it was not cleared from the right widget's settings, so if it ever was opened last on the right side, that information stuck). When restoring the state of the left|right widgets, we may not overwrite the previously restored activationsMap. Fixes: QTCREATORBUG-29770 Change-Id: I14c85c24f279208fb94707514cc4a8cba184e03c Reviewed-by: Christian Kandeler --- src/plugins/coreplugin/navigationwidget.cpp | 19 +++++++++++++------ src/plugins/coreplugin/navigationwidget.h | 4 +++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/plugins/coreplugin/navigationwidget.cpp b/src/plugins/coreplugin/navigationwidget.cpp index 382a290bc6d..d2b1dafcd51 100644 --- a/src/plugins/coreplugin/navigationwidget.cpp +++ b/src/plugins/coreplugin/navigationwidget.cpp @@ -7,7 +7,6 @@ #include "coreplugintr.h" #include "icontext.h" #include "icore.h" -#include "imode.h" #include "inavigationwidgetfactory.h" #include "modemanager.h" #include "navigationsubwidget.h" @@ -297,7 +296,9 @@ static QIcon closeIconForSide(Side side, int itemCount) : Utils::Icons::CLOSE_SPLIT_RIGHT.icon(); } -Internal::NavigationSubWidget *NavigationWidget::insertSubItem(int position, int factoryIndex) +Internal::NavigationSubWidget *NavigationWidget::insertSubItem(int position, + int factoryIndex, + bool updateActivationsMap) { for (int pos = position + 1; pos < d->m_subWidgets.size(); ++pos) { Internal::NavigationSubWidget *nsw = d->m_subWidgets.at(pos); @@ -323,7 +324,8 @@ Internal::NavigationSubWidget *NavigationWidget::insertSubItem(int position, int d->m_subWidgets.insert(position, nsw); d->m_subWidgets.at(0)->setCloseIcon(closeIconForSide(d->m_side, d->m_subWidgets.size())); - NavigationWidgetPrivate::updateActivationsMap(nsw->factory()->id(), {d->m_side, position}); + if (updateActivationsMap) + NavigationWidgetPrivate::updateActivationsMap(nsw->factory()->id(), {d->m_side, position}); return nsw; } @@ -400,8 +402,11 @@ void NavigationWidget::saveSettings(QtcSettings *settings) const auto keys = NavigationWidgetPrivate::s_activationsMap.keys(); for (const auto &factoryId : keys) { const auto &info = NavigationWidgetPrivate::s_activationsMap[factoryId]; + const Utils::Key key = settingsKey(activationKey + factoryId.name()); if (info.side == d->m_side) - settings->setValue(settingsKey(activationKey + factoryId.name()), info.position); + settings->setValue(key, info.position); + else + settings->remove(key); } } @@ -434,7 +439,7 @@ void NavigationWidget::restoreSettings(QtcSettings *settings) int index = factoryIndex(Id::fromString(id)); if (index >= 0) { // Only add if the id was actually found! - insertSubItem(position, index); + insertSubItem(position, index, /*updateActivationsMap=*/false); ++position; } else { restoreSplitterState = false; @@ -443,7 +448,9 @@ void NavigationWidget::restoreSettings(QtcSettings *settings) if (d->m_subWidgets.isEmpty()) // Make sure we have at least the projects widget or outline widget - insertSubItem(0, qMax(0, factoryIndex(Id::fromString(defaultFirstView(d->m_side))))); + insertSubItem(0, + qMax(0, factoryIndex(Id::fromString(defaultFirstView(d->m_side)))), + /*updateActivationsMap=*/false); setShown(settings->value(settingsKey("Visible"), defaultVisible(d->m_side)).toBool()); diff --git a/src/plugins/coreplugin/navigationwidget.h b/src/plugins/coreplugin/navigationwidget.h index d89105e75d9..40ea1a5fa0c 100644 --- a/src/plugins/coreplugin/navigationwidget.h +++ b/src/plugins/coreplugin/navigationwidget.h @@ -97,7 +97,9 @@ protected: private: void closeSubWidget(Internal::NavigationSubWidget *subWidget); void updateToggleText(); - Internal::NavigationSubWidget *insertSubItem(int position, int factoryIndex); + Internal::NavigationSubWidget *insertSubItem(int position, + int factoryIndex, + bool updateActivationsMap = true); int factoryIndex(Utils::Id id); Utils::Key settingsKey(const Utils::Key &key) const; From 99c749043dfb1bf9d7381be21234525cfbde5789 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 24 Oct 2023 17:48:25 +0200 Subject: [PATCH 05/15] SshProcessInterface: Ensure non-zero PID when destructing Fixes: QTCREATORBUG-29788 Change-Id: Ia906469526ebeaea6421f1f27a74e66d59bcaea3 Reviewed-by: Christian Kandeler --- src/plugins/remotelinux/linuxdevice.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 8386175e82c..565b0675503 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -427,7 +427,7 @@ void SshProcessInterface::emitStarted(qint64 processId) void SshProcessInterface::killIfRunning() { - if (d->m_killed || d->m_process.state() != QProcess::Running) + if (d->m_killed || d->m_process.state() != QProcess::Running || d->m_processId == 0) return; sendControlSignal(ControlSignal::Kill); d->m_killed = true; @@ -449,9 +449,12 @@ bool SshProcessInterface::runInShell(const CommandLine &command, const QByteArra process.setCommand(cmd); process.setWriteData(data); process.start(); - bool isFinished = process.waitForFinished(2000); // TODO: it may freeze on some devices - // otherwise we may start producing killers for killers - QTC_CHECK(isFinished); + bool isFinished = process.waitForFinished(2000); // It may freeze on some devices + if (!isFinished) { + Core::MessageManager::writeFlashing(tr("Can't send control signal to the %1 device. " + "The device might have been disconnected.") + .arg(d->m_device->displayName())); + } return isFinished; } From d72fa048339b4d3b9bd69706aca7fe27baa647f5 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Fri, 20 Oct 2023 14:37:20 +0200 Subject: [PATCH 06/15] Doc: Update QML Language Server preferences docs - Some labels changed - "Use QML Language Server advanced features" was added Task-number: QTCREATORBUG-29392 Change-Id: I2c4f4d43b8f8e9d74186439e31a9d8cf13ec4967 Reviewed-by: Reviewed-by: David Schulz --- .../images/qtcreator-qml-js-editing.webp | Bin 14272 -> 11266 bytes .../src/editors/creator-code-syntax.qdoc | 2 ++ .../creator-only/creator-language-server.qdoc | 17 ++++++++++++----- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/doc/qtcreator/images/qtcreator-qml-js-editing.webp b/doc/qtcreator/images/qtcreator-qml-js-editing.webp index 7e759cf2da686bc283be4719150ff4b29c0bc850..c0b56264dd1e7b274fb66e8888a8ae0373676b6f 100644 GIT binary patch literal 11266 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 OudFg_?TyM|R~Z32I=1)# diff --git a/doc/qtcreator/src/editors/creator-code-syntax.qdoc b/doc/qtcreator/src/editors/creator-code-syntax.qdoc index 15c4fa47229..ad86edbf2d9 100644 --- a/doc/qtcreator/src/editors/creator-code-syntax.qdoc +++ b/doc/qtcreator/src/editors/creator-code-syntax.qdoc @@ -712,6 +712,8 @@ \uicontrol {Disable messages for non Qt Quick UI}. You cannot enable messages just for non-Qt Quick UI files. + \sa {QML Language Server} + \section1 Resetting the Code Model If you change the build and run kit when you have QML files open in the code diff --git a/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc b/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc index aca41d7c835..8ebbaa74d4b 100644 --- a/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc +++ b/doc/qtcreator/src/editors/creator-only/creator-language-server.qdoc @@ -143,15 +143,22 @@ \section2 QML Language Server - Since Qt 6.4, the \c qmlls language server offers code completion and - issues warnings for QML. To enable QML language server support, select - \preferences > \uicontrol {Qt Quick} > - \uicontrol {QML/JS Editing} > \uicontrol {Use qmlls (EXPERIMENTAL!)}. + Since Qt 6.4, the QML language server offers code completion and + issues warnings for QML. To use it, select \preferences > + \uicontrol {Qt Quick} > \uicontrol {QML/JS Editing} > + \uicontrol {Enable QML Language Server}. + + To use advanced features, such as renaming and finding usages, select the + \uicontrol {Use QML Language Server advanced features} check box. + To use the latest version of the language server installed on your - system, select the \uicontrol {Always use latest qmlls} check box. + system, select the + \uicontrol {Use QML Language Server from latest Qt version} check box. \image qtcreator-qml-js-editing.webp {QML/JS Editing preferences} + \sa {Enabling and Disabling Messages} + \section1 Supported Locator Filters The locator enables you to browse not only files, but any items defined by From ea1a745813a3f4e492ce01c3253a7d990fde724a Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Tue, 24 Oct 2023 19:31:21 +0200 Subject: [PATCH 07/15] Utils: Restore the prior edit-clear-locationbar icon direction On left-to-right KDE systems, the clear icon on the right was originally (up to QtC 11) pointing to the left. In Qt Creator 12 it started pointing to the right. Reproducible with KDE Plasma 5.27. This change restores the prior mapping of "writing direction" to "clear icon direction". It also restores the fall back to the freedesktop standard name "clear-icon". Amends: 67212a31ee4cc5c026b677329ace9f1fdaa3320c Change-Id: I3d1340195a82422ac310128b9e81982e0d57a6ca Reviewed-by: Eike Ziller Reviewed-by: Qt CI Bot --- src/libs/utils/fancylineedit.cpp | 14 ++++++++------ src/libs/utils/icon.cpp | 11 ++++++----- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/libs/utils/fancylineedit.cpp b/src/libs/utils/fancylineedit.cpp index f1e177e0633..a3acaad0f44 100644 --- a/src/libs/utils/fancylineedit.cpp +++ b/src/libs/utils/fancylineedit.cpp @@ -428,12 +428,14 @@ void FancyLineEdit::setFiltering(bool on) d->m_isFiltering = on; if (on) { d->m_lastFilterText = text(); - // KDE has custom icons for this. Notice that icon namings are counter intuitive. - // If these icons are not available we use the freedesktop standard name before - // falling back to a bundled resource. - static const QIcon rtl = Icon::fromTheme("edit-clear-locationbar-rtl"); - static const QIcon ltr = Icon::fromTheme("edit-clear-locationbar-ltr"); - setButtonIcon(Right, layoutDirection() == Qt::LeftToRight ? ltr : rtl); + // KDE has custom icons for this. The "ltr" and "rtl" suffixes describe the direction + // into which the arrows are pointing. They do not describe which writing direction they + // are intended to be used for. + const QLatin1String pointingWest("edit-clear-locationbar-rtl"); + const QLatin1String pointingEast("edit-clear-locationbar-ltr"); + const QIcon icon = Icon::fromTheme(layoutDirection() == Qt::LeftToRight ? pointingWest + : pointingEast); + setButtonIcon(Right, icon); setButtonVisible(Right, true); setPlaceholderText(Tr::tr("Filter")); setButtonToolTip(Right, Tr::tr("Clear text")); diff --git a/src/libs/utils/icon.cpp b/src/libs/utils/icon.cpp index e4945efa9bd..5bd862c8f14 100644 --- a/src/libs/utils/icon.cpp +++ b/src/libs/utils/icon.cpp @@ -268,13 +268,14 @@ QIcon Icon::fromTheme(const QString &name) cache.insert(name, !icon.isNull() ? icon : Icons::ZOOMOUT_TOOLBAR.icon()); } else if (name == "zoom-original") { cache.insert(name, !icon.isNull() ? icon : Icons::EYE_OPEN_TOOLBAR.icon()); + } else if (name == "edit-clear") { + cache.insert(name, !icon.isNull() ? icon : Icons::EDIT_CLEAR.icon()); } else if (name == "edit-clear-locationbar-rtl") { - // KDE has custom icons for this. Notice that icon namings are counter intuitive. - // If these icons are not available we use the freedesktop standard name before - // falling back to a bundled resource. - cache.insert(name, !icon.isNull() ? icon : Icons::EDIT_CLEAR.icon()); + // KDE has custom icons for this. If these icons are not available we use the freedesktop + // standard name "edit-clear" before falling back to a bundled resource. + cache.insert(name, !icon.isNull() ? icon : fromTheme("edit-clear")); } else if (name == "edit-clear-locationbar-ltr") { - cache.insert(name, !icon.isNull() ? icon : Icons::EDIT_CLEAR.icon()); + cache.insert(name, !icon.isNull() ? icon : fromTheme("edit-clear")); } else { cache.insert(name, icon); } From 8b2d676ae87699a0ed78d79051e5dccd30f1ed85 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 25 Oct 2023 12:51:11 +0200 Subject: [PATCH 08/15] Designer: Ignore layout name changes from property editor As it turns out, changes to "objectName" and "layoutName" both result in the objectNameChanged() signal getting emitted. We must handle these the same way. Fixes: QTCREATORBUG-29644 Change-Id: I41ecc4867f3df8eedf325eda750b947a57c90c10 Reviewed-by: David Schulz --- src/plugins/designer/qtcreatorintegration.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/designer/qtcreatorintegration.cpp b/src/plugins/designer/qtcreatorintegration.cpp index fb4c1afd5d6..31a5336342a 100644 --- a/src/plugins/designer/qtcreatorintegration.cpp +++ b/src/plugins/designer/qtcreatorintegration.cpp @@ -134,7 +134,8 @@ QtCreatorIntegration::QtCreatorIntegration(QDesignerFormEditorInterface *core, Q connect(this, &QtCreatorIntegration::propertyChanged, this, [this](QDesignerFormWindowInterface *formWindow, const QString &name, const QVariant &) { - if (name == "objectName") { + qCDebug(log) << "got propertyChanged() signal" << name; + if (name.endsWith("Name")) { if (const auto extraCompiler = d->extraCompilers.find(formWindow); extraCompiler != d->extraCompilers.end()) { (*extraCompiler)->unblock(); From 2ad3520e5a29338ca237b4c5408b4c6d88ef4cb8 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Wed, 25 Oct 2023 10:47:26 +0200 Subject: [PATCH 09/15] CppEditor/LanguageClient: Do not rename in generated files by default Fixes: QTCREATORBUG-29778 Change-Id: I4e56b6bda4e22c71995ab19ac6469ea88d22ee11 Reviewed-by: David Schulz Reviewed-by: Reviewed-by: Qt CI Bot --- src/plugins/clangcodemodel/clangdfindreferences.cpp | 7 ++++--- src/plugins/cppeditor/cppfindreferences.cpp | 3 ++- .../languageclient/languageclientsymbolsupport.cpp | 10 ++++++---- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdfindreferences.cpp b/src/plugins/clangcodemodel/clangdfindreferences.cpp index c3ba6c2b8f6..19e1df4dd16 100644 --- a/src/plugins/clangcodemodel/clangdfindreferences.cpp +++ b/src/plugins/clangcodemodel/clangdfindreferences.cpp @@ -456,9 +456,10 @@ void ClangdFindReferences::Private::addSearchResultsForFile(const FilePath &file item.setContainingFunctionName(getContainingFunction(astPath, range).detail()); if (search->supportsReplace()) { - const bool fileInSession = ProjectManager::projectForFile(file); - item.setSelectForReplacement(fileInSession); - if (fileInSession && file.baseName().compare(replacementData->oldSymbolName, + const Node * const node = ProjectTree::nodeForFile(file); + item.setSelectForReplacement(!ProjectManager::hasProjects() + || (node && !node->isGenerated())); + if (node && file.baseName().compare(replacementData->oldSymbolName, Qt::CaseInsensitive) == 0) { replacementData->fileRenameCandidates << file; } diff --git a/src/plugins/cppeditor/cppfindreferences.cpp b/src/plugins/cppeditor/cppfindreferences.cpp index a894c3ffe06..25b3e110d53 100644 --- a/src/plugins/cppeditor/cppfindreferences.cpp +++ b/src/plugins/cppeditor/cppfindreferences.cpp @@ -577,8 +577,9 @@ static void displayResults(SearchResult *search, item.setStyle(colorStyleForUsageType(result.tags)); item.setUseTextEditorFont(true); if (search->supportsReplace()) { + const Node * const node = ProjectTree::nodeForFile(result.path); item.setSelectForReplacement(!ProjectManager::hasProjects() - || ProjectManager::projectForFile(result.path)); + || (node && !node->isGenerated())); } search->addResult(item); diff --git a/src/plugins/languageclient/languageclientsymbolsupport.cpp b/src/plugins/languageclient/languageclientsymbolsupport.cpp index 13dddd38e23..867137fcc07 100644 --- a/src/plugins/languageclient/languageclientsymbolsupport.cpp +++ b/src/plugins/languageclient/languageclientsymbolsupport.cpp @@ -14,6 +14,8 @@ #include #include +#include +#include #include #include @@ -308,10 +310,10 @@ Utils::SearchResultItems generateSearchResultItems( item.setFilePath(filePath); item.setUseTextEditorFont(true); if (renaming && limitToProjects) { - const bool fileBelongsToProject = ProjectExplorer::ProjectManager::projectForFile( - filePath); - item.setSelectForReplacement(fileBelongsToProject); - if (fileBelongsToProject + const ProjectExplorer::Node * const node + = ProjectExplorer::ProjectTree::nodeForFile(filePath); + item.setSelectForReplacement(node && !node->isGenerated()); + if (node && filePath.baseName().compare(oldSymbolName, Qt::CaseInsensitive) == 0) { fileRenameCandidates << filePath; } From 9d4c31cb7445e211bc402c9bf27f6ccebea774a2 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 25 Oct 2023 15:04:12 +0200 Subject: [PATCH 10/15] Doc: Describe using the locator to go to tabs in Preferences dialog Change-Id: I9644cdc830494c4e02599b72c584eb02aed1f4f8 Reviewed-by: Eike Ziller --- .../images/qtcreator-locator-filter-t.webp | Bin 0 -> 3256 bytes .../howto/creator-how-to-find-preferences.qdoc | 11 +++++++++++ 2 files changed, 11 insertions(+) create mode 100644 doc/qtcreator/images/qtcreator-locator-filter-t.webp diff --git a/doc/qtcreator/images/qtcreator-locator-filter-t.webp b/doc/qtcreator/images/qtcreator-locator-filter-t.webp new file mode 100644 index 0000000000000000000000000000000000000000..d201f0672e12b4711e4f3ac6eb00b249c5af6f21 GIT binary patch literal 3256 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 v@B7 \uicontrol Preferences \endtable + \section1 Filter preferences + To find a particular preference, use the filter located at the top left of the \uicontrol Preferences dialog. \image qtcreator-preferences.webp {Filtering preferences} + + \section1 Go to tabs in Preferences + + To go to a tab in the \uicontrol Preferences dialog from anywhere in \QC, + use the \c t \l{Searching with the Locator}{locator} filter. For example, + to open the \uicontrol Interface tab, enter \c {t preferences interface} + in the locator. + + \image qtcreator-locator-filter-t.webp {Using the locator to open a tab in Preferences} */ From 70ed0aaa820da09351434d42cb9dd87c9f812d81 Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 25 Oct 2023 14:02:57 +0200 Subject: [PATCH 11/15] Doc: Describe using variables in "Default build directory" field In Preferences > Build & Run > Default Build Properties Fixes: QTCREATORBUG-29779 Change-Id: Ic893058d081655e21a294b0dcc25ccb0184f4564 Reviewed-by: Reviewed-by: Christian Kandeler --- .../qtcreator-build-settings-default.webp | Bin 0 -> 5322 bytes .../images/qtcreator-projectpane.webp | Bin 0 -> 5690 bytes .../src/debugger/qtquick-debugging.qdoc | 2 +- .../creator-build-settings-qmake.qdoc | 30 +++++++++++++----- .../creator-projects-settings-build.qdoc | 3 +- 5 files changed, 25 insertions(+), 10 deletions(-) create mode 100644 doc/qtcreator/images/qtcreator-build-settings-default.webp create mode 100644 doc/qtcreator/images/qtcreator-projectpane.webp diff --git a/doc/qtcreator/images/qtcreator-build-settings-default.webp b/doc/qtcreator/images/qtcreator-build-settings-default.webp new file mode 100644 index 0000000000000000000000000000000000000000..32d59fc9d239ce2125b52251a77f11ad03fcae9b GIT binary patch literal 5322 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 Ulg`bF0|kNP=lO>JIjgi70J8HeGXMYp literal 0 HcmV?d00001 diff --git a/doc/qtcreator/images/qtcreator-projectpane.webp b/doc/qtcreator/images/qtcreator-projectpane.webp new file mode 100644 index 0000000000000000000000000000000000000000..a8391a678d2451ab05be4eb353bc7fc7cf53f0e0 GIT binary patch literal 5690 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/debugger/qtquick-debugging.qdoc b/doc/qtcreator/src/debugger/qtquick-debugging.qdoc index 29589073f9a..56cefd70e62 100644 --- a/doc/qtcreator/src/debugger/qtquick-debugging.qdoc +++ b/doc/qtcreator/src/debugger/qtquick-debugging.qdoc @@ -94,7 +94,7 @@ You can enable or disable QML debugging globally in \preferences > \uicontrol {Build & Run} > \uicontrol {Default Build Properties}. - \image qtcreator-build-settings-default.png "Default Build Properties tab in Build & Run Preferences" + \image qtcreator-build-settings-default.webp "Default Build Properties tab in Build & Run Preferences" The value of the \uicontrol {QML debugging} field determines what happens when creating new build configurations. The values \uicontrol Enable diff --git a/doc/qtcreator/src/projects/creator-only/creator-build-settings-qmake.qdoc b/doc/qtcreator/src/projects/creator-only/creator-build-settings-qmake.qdoc index 17a1b43c9c3..2d427ee15aa 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-build-settings-qmake.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-build-settings-qmake.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2021 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only /*! @@ -8,15 +8,22 @@ \title qmake Build Configuration - \image qtcreator-projectpane.png "qmake build settings" + Specify build settings for the selected \l{glossary-buildandrun-kit} + {build and run kit} in \uicontrol Projects > \uicontrol {Build & Run} + > \uicontrol Build > \uicontrol {Build Settings}. + + \image qtcreator-projectpane.webp {qmake build settings} By default, \QC builds qmake projects in a separate directory from the source directory, as \l{glossary-shadow-build} {shadow builds}. This - keeps the files generated for each \l{glossary-buildandrun-kit} - {build and run kit} separate. If you only build and run with a single - \l{glossary-buildandrun-kit}{kit}, you can deselect the - \uicontrol {Shadow build} checkbox. Select the build directory in the - \uicontrol {Build Directory} field. + keeps the files generated for each kit separate. If you only build and + run with a single kit, you can deselect the \uicontrol {Shadow build} + checkbox. + + Select the build directory in the \uicontrol {Build Directory} field. You + can use the \l{Using Qt Creator Variables}{variables} that are listed when + you select the \inlineimage icons/replace.png (\uicontrol {Variables}) + button. To make in-source builds the default option for all projects, select \preferences > \uicontrol {Build & Run} > @@ -54,7 +61,14 @@ To set the default build properties, select \preferences > \uicontrol {Build & Run} > \uicontrol {Default Build Properties}. - \image qtcreator-build-settings-default.png "Default Build Properties tab in Build & Run Preferences" + \image qtcreator-build-settings-default.webp {Default Build Properties tab in Build & Run Preferences} + + In the \uicontrol {Default build directory} field, you can use the variables + that are listed when you select \inlineimage icons/replace.png, as well as + variables that are available for a particular kit. Those you can see when + you select the button in the \uicontrol Projects > \uicontrol {Build & Run} > + \uicontrol Build > \uicontrol {Build Settings} > \uicontrol {Build Directory} + field for a kit. \section1 Compiling QML diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc index 73a2f34bbab..5cde8af4c03 100644 --- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc +++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-build.qdoc @@ -35,7 +35,8 @@ \section1 Managing Build Configurations - Specify build settings in \uicontrol Projects > \uicontrol {Build & Run} + Specify build settings for the selected \l{glossary-buildandrun-kit} + {build and run kit} in \uicontrol Projects > \uicontrol {Build & Run} > \uicontrol Build > \uicontrol {Build Settings}. \image qtcreator-build-configurations.png "Build Settings" From 9936eeba1349685cdbd1b710beedb4944f039cd2 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Thu, 26 Oct 2023 08:05:18 +0200 Subject: [PATCH 12/15] Utils: Handle filePathInfo() like other path tests filePathInfo() should not result in warning messages if the path is for a non existing device, just like exists etc. Fixes: QTCREATORBUG-28439 Change-Id: I47a66bd38a40a86460c4769c1a2156167e467c1b Reviewed-by: Christian Stenger --- src/libs/utils/filepath.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/libs/utils/filepath.cpp b/src/libs/utils/filepath.cpp index 1a34bd038c8..8b898344278 100644 --- a/src/libs/utils/filepath.cpp +++ b/src/libs/utils/filepath.cpp @@ -628,11 +628,6 @@ expected_str FilePath::writeFileContents(const QByteArray &data, qint64 return fileAccess()->writeFileContents(*this, data, offset); } -FilePathInfo FilePath::filePathInfo() const -{ - return fileAccess()->filePathInfo(*this); -} - FileStreamHandle FilePath::asyncCopy(const FilePath &target, QObject *context, const CopyContinuation &cont) const { @@ -1188,6 +1183,14 @@ bool FilePath::hasFileAccess() const return access.has_value(); } +FilePathInfo FilePath::filePathInfo() const +{ + const expected_str access = getFileAccess(*this); + if (!access) + return {}; + return (*access)->filePathInfo(*this); +} + /*! Returns a bool indicating whether a file or directory with this FilePath exists. */ From 1b82616f350043e96311d91d6525583d304211dd Mon Sep 17 00:00:00 2001 From: Leena Miettinen Date: Wed, 25 Oct 2023 16:38:32 +0200 Subject: [PATCH 13/15] Doc: Describe the "Forward to local display" check box In the run settings for a remote linux device. Task-number: QTCREATORBUG-29392 Change-Id: Ib46241b62b4b0208f4f1e52419cc1b2a18e40295 Reviewed-by: Christian Kandeler --- dist/changelog/changes-12.0.0.md | 1 + .../images/qtcreator-run-settings-linux.png | Bin 8497 -> 0 bytes .../qtcreator-run-settings-remote-linux.webp | Bin 0 -> 7964 bytes .../creator-projects-settings-run-linux.qdocinc | 5 ++++- 4 files changed, 5 insertions(+), 1 deletion(-) delete mode 100644 doc/qtcreator/images/qtcreator-run-settings-linux.png create mode 100644 doc/qtcreator/images/qtcreator-run-settings-remote-linux.webp diff --git a/dist/changelog/changes-12.0.0.md b/dist/changelog/changes-12.0.0.md index 6e7a8f496e4..944a3451aec 100644 --- a/dist/changelog/changes-12.0.0.md +++ b/dist/changelog/changes-12.0.0.md @@ -214,6 +214,7 @@ Projects ([PYSIDE-2153](https://bugreports.qt.io/browse/PYSIDE-2153)) ([Documentation](https://doc-snapshots.qt.io/qtcreator-12.0/creator-python-development.html#set-up-pyside6)) * Added the option to forward the display for remote Linux + ([Documentation](https://doc-snapshots.qt.io/qtcreator-12.0/creator-run-settings.html#specifying-run-settings-for-linux-based-devices)) * Fixed PySide wheels installation on macOS ### vcpkg diff --git a/doc/qtcreator/images/qtcreator-run-settings-linux.png b/doc/qtcreator/images/qtcreator-run-settings-linux.png deleted file mode 100644 index 14e4d5f9695e1e693c9d9a27deb099acf9c27542..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8497 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 Q4l2<-UHx3vIVCg!0M^I&cmMzZ diff --git a/doc/qtcreator/images/qtcreator-run-settings-remote-linux.webp b/doc/qtcreator/images/qtcreator-run-settings-remote-linux.webp new file mode 100644 index 0000000000000000000000000000000000000000..0c2b00e89b01ff21d13712f3ef2e7c23ba1b1fbb GIT binary patch literal 7964 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 literal 0 HcmV?d00001 diff --git a/doc/qtcreator/src/linux-mobile/creator-projects-settings-run-linux.qdocinc b/doc/qtcreator/src/linux-mobile/creator-projects-settings-run-linux.qdocinc index 017163c3eeb..ea58383ea44 100644 --- a/doc/qtcreator/src/linux-mobile/creator-projects-settings-run-linux.qdocinc +++ b/doc/qtcreator/src/linux-mobile/creator-projects-settings-run-linux.qdocinc @@ -21,10 +21,13 @@ command in the \uicontrol {Alternate executable on device} field and select the \uicontrol {Use this command instead} check box. - \image qtcreator-run-settings-linux.png "Run settings for Linux-based devices" + \image qtcreator-run-settings-remote-linux.webp {Run settings for Linux-based devices} You can specify arguments to pass to your application in the \uicontrol {Command line arguments} field. + Select the \uicontrol {Forward to local display} check box to show a remotely + running X11 client on a local display. + //! [run settings linux] */ From 042aa1aa25e3dadd5b94c3a926058820a1e2bf53 Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Mon, 16 Oct 2023 13:15:17 +0200 Subject: [PATCH 14/15] LogViewer: Add Filter Change-Id: I3df36ad7dcbe4a28fb5430397063d70bbc61c80b Reviewed-by: Christian Stenger --- src/plugins/coreplugin/loggingviewer.cpp | 197 ++++++++++++++++------- 1 file changed, 137 insertions(+), 60 deletions(-) diff --git a/src/plugins/coreplugin/loggingviewer.cpp b/src/plugins/coreplugin/loggingviewer.cpp index bf1f8b736f0..1cb95ae8b7f 100644 --- a/src/plugins/coreplugin/loggingviewer.cpp +++ b/src/plugins/coreplugin/loggingviewer.cpp @@ -7,7 +7,9 @@ #include "coreplugintr.h" #include "icore.h" +#include #include +#include #include #include #include @@ -31,7 +33,6 @@ #include #include #include - namespace Core::Internal { static QColor colorForCategory(const QString &category); @@ -209,6 +210,13 @@ public: return false; } + bool isEnabledOriginally(QtMsgType msgType) const + { + if (m_originalSettings) + return (*m_originalSettings)[msgType]; + return isEnabled(msgType); + } + void setEnabled(QtMsgType msgType, bool isEnabled) { QTC_ASSERT(!m_useOriginal, return); @@ -308,6 +316,8 @@ public: ~LoggingCategoryModel() override; enum Column { Color, Name, Debug, Warning, Critical, Fatal, Info }; + enum Role { OriginalStateRole = Qt::UserRole + 1 }; + void append(const LoggingCategoryEntry &entry); int columnCount(const QModelIndex &) const final { return 7; } int rowCount(const QModelIndex & = QModelIndex()) const final { return m_categories.size(); } @@ -363,12 +373,18 @@ QVariant LoggingCategoryModel::data(const QModelIndex &index, int role) const static const QColor defaultColor = Utils::creatorTheme()->palette().text().color(); return defaultColor; - } else if (role == Qt::CheckStateRole && index.column() >= Column::Debug - && index.column() <= Column::Info) { - const LoggingCategoryEntry &entry = m_categories.at(index.row()); - return entry.isEnabled(static_cast(index.column() - Column::Debug)) - ? Qt::Checked - : Qt::Unchecked; + } else if (index.column() >= Column::Debug && index.column() <= Column::Info) { + if (role == Qt::CheckStateRole) { + const LoggingCategoryEntry &entry = m_categories.at(index.row()); + const bool isEnabled = entry.isEnabled( + static_cast(index.column() - Column::Debug)); + return isEnabled ? Qt::Checked : Qt::Unchecked; + } else if (role == OriginalStateRole) { + const LoggingCategoryEntry &entry = m_categories.at(index.row()); + return entry.isEnabledOriginally(static_cast(index.column() - Column::Debug)) + ? Qt::Checked + : Qt::Unchecked; + } } return {}; } @@ -609,9 +625,8 @@ LoggingViewManagerWidget::LoggingViewManagerWidget(QWidget *parent) auto qtInternal = new QToolButton; qtInternal->setIcon(Core::Icons::QTLOGO.icon()); - qtInternal->setToolTip(Tr::tr("Toggle Qt Internal Logging")); - qtInternal->setCheckable(true); - qtInternal->setChecked(false); + qtInternal->setToolTip(Tr::tr("Filter Qt Internal Log Categories")); + qtInternal->setCheckable(false); auto autoScroll = new QToolButton; autoScroll->setIcon(Utils::Icons::ARROW_DOWN.icon()); @@ -663,26 +678,52 @@ LoggingViewManagerWidget::LoggingViewManagerWidget(QWidget *parent) for (int i = LoggingCategoryModel::Column::Color; i < LoggingCategoryModel::Column::Info; i++) m_categoryView->resizeColumnToContents(i); + auto filterEdit = new Utils::FancyLineEdit; + filterEdit->setHistoryCompleter("LogFilterCompletionHistory"); + filterEdit->setFiltering(true); + filterEdit->setPlaceholderText(Tr::tr("Filter categories by regular expression")); + filterEdit->setText("^(?!qt\\.).+"); + filterEdit->setValidationFunction( + [](const QString &input) { + return Utils::asyncRun([input]() -> Utils::expected_str { + QRegularExpression re(input); + if (re.isValid()) + return input; + + return Utils::make_unexpected( + Tr::tr("Invalid regular expression: %1").arg(re.errorString())); + }); + }); + QSplitter *splitter{nullptr}; using namespace Layouting; // clang-format off Column { - Row { - spacing(0), - save, - clean, - m_stopLog, - qtInternal, - autoScroll, - m_timestamps, - m_messageTypes, - st, - }, Splitter { bindTo(&splitter), - m_logView, - m_categoryView, + Column { + noMargin(), + Row { + spacing(0), + save, + clean, + m_stopLog, + autoScroll, + m_timestamps, + m_messageTypes, + st, + }, + m_logView + }, + Column { + noMargin(), + Row { + qtInternal, + filterEdit, + }, + m_categoryView, + } } }.attachTo(this); // clang-format on @@ -746,14 +787,19 @@ LoggingViewManagerWidget::LoggingViewManagerWidget(QWidget *parent) m_sortFilterModel->setFilterRegularExpression("^(?!qt\\.).+"); - connect(qtInternal, &QToolButton::toggled, m_sortFilterModel, [this](bool checked) { - if (checked) { - m_sortFilterModel->setFilterRegularExpression(""); - } else { - m_sortFilterModel->setFilterRegularExpression("^(?!qt\\.).+"); - } + connect(qtInternal, &QToolButton::clicked, filterEdit, [filterEdit] { + filterEdit->setText("^(?!qt\\.).+"); }); + connect(filterEdit, + &Utils::FancyLineEdit::textChanged, + m_sortFilterModel, + [this](const QString &f) { + QRegularExpression re(f); + if (re.isValid()) + m_sortFilterModel->setFilterRegularExpression(f); + }); + connect(m_timestamps, &QToolButton::toggled, this, [this](bool checked) { m_logView->setColumnHidden(0, !checked); }); @@ -802,40 +848,70 @@ void LoggingViewManagerWidget::showLogCategoryContextMenu(const QPoint &pos) con QMenu m; auto uncheckAll = new QAction(Tr::tr("Uncheck All"), &m); + auto resetAll = new QAction(Tr::tr("Reset All"), &m); - int column = 0; + auto isTypeColumn = [](int column) { + return column >= LoggingCategoryModel::Column::Debug + && column <= LoggingCategoryModel::Column::Info; + }; - if (idx.isValid()) { - column = idx.column(); - if (column >= LoggingCategoryModel::Column::Debug - && column <= LoggingCategoryModel::Column::Info) { - bool isChecked = idx.data(Qt::CheckStateRole).toBool(); - - QString text = isChecked ? Tr::tr("Uncheck All %1") : Tr::tr("Check All %1"); - - uncheckAll->setText(text.arg(messageTypeToString( - static_cast(column - LoggingCategoryModel::Column::Debug)))); - - connect(uncheckAll, &QAction::triggered, m_sortFilterModel, [this, idx, isChecked] { - for (int i = 0; i < m_sortFilterModel->rowCount(); ++i) { - m_sortFilterModel->setData(m_sortFilterModel->index(i, idx.column()), - !isChecked, - Qt::CheckStateRole); - } - }); - } else { - connect(uncheckAll, &QAction::triggered, m_sortFilterModel, [this] { - for (int i = 0; i < m_sortFilterModel->rowCount(); ++i) { - for (int c = LoggingCategoryModel::Column::Debug; - c <= LoggingCategoryModel::Column::Info; - ++c) { - m_sortFilterModel->setData(m_sortFilterModel->index(i, c), - false, - Qt::CheckStateRole); - } - } - }); + auto setChecked = [this](std::initializer_list columns, + Qt::CheckState checked) { + for (int row = 0, count = m_sortFilterModel->rowCount(); row < count; ++row) { + for (int column : columns) { + m_sortFilterModel->setData(m_sortFilterModel->index(row, column), + checked, + Qt::CheckStateRole); + } } + }; + auto resetToOriginal = [this](std::initializer_list columns) { + for (int row = 0, count = m_sortFilterModel->rowCount(); row < count; ++row) { + for (int column : columns) { + const QModelIndex id = m_sortFilterModel->index(row, column); + m_sortFilterModel->setData(id, + id.data(LoggingCategoryModel::OriginalStateRole), + Qt::CheckStateRole); + } + } + }; + + if (idx.isValid() && isTypeColumn(idx.column())) { + const LoggingCategoryModel::Column column = static_cast( + idx.column()); + bool isChecked = idx.data(Qt::CheckStateRole).toInt() == Qt::Checked; + const QString uncheckText = isChecked ? Tr::tr("Uncheck All %1") : Tr::tr("Check All %1"); + + uncheckAll->setText(uncheckText.arg(messageTypeToString( + static_cast(column - LoggingCategoryModel::Column::Debug)))); + resetAll->setText(Tr::tr("Reset All %1") + .arg(messageTypeToString(static_cast( + column - LoggingCategoryModel::Column::Debug)))); + + Qt::CheckState newState = isChecked ? Qt::Unchecked : Qt::Checked; + + connect(uncheckAll, + &QAction::triggered, + m_sortFilterModel, + [setChecked, column, newState]() { setChecked({column}, newState); }); + + connect(resetAll, &QAction::triggered, m_sortFilterModel, [resetToOriginal, column]() { + resetToOriginal({column}); + }); + + } else { + // No need to add Fatal here, as it is read-only + static auto allColumns = {LoggingCategoryModel::Column::Debug, + LoggingCategoryModel::Column::Warning, + LoggingCategoryModel::Column::Critical, + LoggingCategoryModel::Column::Info}; + + connect(uncheckAll, &QAction::triggered, m_sortFilterModel, [setChecked]() { + setChecked(allColumns, Qt::Unchecked); + }); + connect(resetAll, &QAction::triggered, m_sortFilterModel, [resetToOriginal]() { + resetToOriginal(allColumns); + }); } // minimal load/save - plugins could later provide presets on their own? @@ -844,6 +920,7 @@ void LoggingViewManagerWidget::showLogCategoryContextMenu(const QPoint &pos) con auto loadPreset = new QAction(Tr::tr("Update from Preset..."), &m); m.addAction(loadPreset); m.addAction(uncheckAll); + m.addAction(resetAll); connect(savePreset, &QAction::triggered, m_categoryModel, From 1a398a83b51b9e220fd95993d0872bf4baba0723 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Wed, 25 Oct 2023 14:23:57 +0200 Subject: [PATCH 15/15] Core: Fix dialogParent for separate windows The dialog parent is supposed to fall back to the main window, if there is no modal window and the active window is not a popup or a splash screen. But testing for "popup or splash screen" does not work with `testAnyFlags(Popup | SplashScreen)` because these flags are combined flags - e.g. "Popup" is "Window + something", so when using testAnyFlags(Popup), that returns true for _any_ Window, regardless of popup or not. Amends 60f11cf6371fd6f482d257c54a48070874dc4b73 Fixes: QTCREATORBUG-29741 Change-Id: I9e8defc6dd7193f5008decda0eda04dedc62f9df Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/coreplugin/icore.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index eaf94e45cf5..1c04ebd2b6d 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -874,8 +874,10 @@ QWidget *ICore::dialogParent() QWidget *active = QApplication::activeModalWidget(); if (!active) active = QApplication::activeWindow(); - if (!active || (active && active->windowFlags().testAnyFlags(Qt::SplashScreen | Qt::Popup))) + if (!active || active->windowFlags().testFlag(Qt::SplashScreen) + || active->windowFlags().testFlag(Qt::Popup)) { active = d->m_mainwindow; + } return active; }