diff options
author | Eike Ziller <[email protected]> | 2024-04-15 08:33:39 +0200 |
---|---|---|
committer | Eike Ziller <[email protected]> | 2024-04-15 08:33:39 +0200 |
commit | 310d3cc041f5617adef10d37605264fda2eda6d3 (patch) | |
tree | 8483160745ce72fd2983fe8ad4f4359a98c0b2df | |
parent | 559c57e29c7fd441f3f859c24f3e1483101ded5d (diff) | |
parent | 25d6c4f4e902e43a2a36e054594cfa16941051fd (diff) |
Merge remote-tracking branch 'origin/13.0'
Conflicts:
src/plugins/remotelinux/linuxdevice.cpp
Change-Id: Iad28a1bfa4632922931d351d2fe27757cf21dec3
27 files changed, 112 insertions, 52 deletions
diff --git a/doc/qtcreator/images/qtcreator-new-project.webp b/doc/qtcreator/images/qtcreator-new-project.webp Binary files differindex 1c0570b8b61..d0736224192 100644 --- a/doc/qtcreator/images/qtcreator-new-project.webp +++ b/doc/qtcreator/images/qtcreator-new-project.webp diff --git a/doc/qtcreator/images/qtcreator-preferences-build-run-general.webp b/doc/qtcreator/images/qtcreator-preferences-build-run-general.webp Binary files differindex c7636894960..4826e22fc62 100644 --- a/doc/qtcreator/images/qtcreator-preferences-build-run-general.webp +++ b/doc/qtcreator/images/qtcreator-preferences-build-run-general.webp diff --git a/doc/qtcreator/images/qtquick-example-setting-breakpoint1.png b/doc/qtcreator/images/qtquick-example-setting-breakpoint1.png Binary files differdeleted file mode 100644 index 67da2556c72..00000000000 --- a/doc/qtcreator/images/qtquick-example-setting-breakpoint1.png +++ /dev/null diff --git a/doc/qtcreator/images/qtquick-example-setting-breakpoint1.webp b/doc/qtcreator/images/qtquick-example-setting-breakpoint1.webp Binary files differnew file mode 100644 index 00000000000..0962179a6e5 --- /dev/null +++ b/doc/qtcreator/images/qtquick-example-setting-breakpoint1.webp diff --git a/doc/qtcreator/images/qtquick-example-setting-breakpoint2.png b/doc/qtcreator/images/qtquick-example-setting-breakpoint2.png Binary files differdeleted file mode 100644 index 788cacaf659..00000000000 --- a/doc/qtcreator/images/qtquick-example-setting-breakpoint2.png +++ /dev/null diff --git a/doc/qtcreator/images/qtquick-example-setting-breakpoint2.webp b/doc/qtcreator/images/qtquick-example-setting-breakpoint2.webp Binary files differnew file mode 100644 index 00000000000..ab4b1c3cdf1 --- /dev/null +++ b/doc/qtcreator/images/qtquick-example-setting-breakpoint2.webp diff --git a/doc/qtcreator/images/qtquick-example-setting-breakpoint3.png b/doc/qtcreator/images/qtquick-example-setting-breakpoint3.png Binary files differdeleted file mode 100644 index 5d197ff92ca..00000000000 --- a/doc/qtcreator/images/qtquick-example-setting-breakpoint3.png +++ /dev/null diff --git a/doc/qtcreator/images/qtquick-example-setting-breakpoint3.webp b/doc/qtcreator/images/qtquick-example-setting-breakpoint3.webp Binary files differnew file mode 100644 index 00000000000..dfee8bc7cc1 --- /dev/null +++ b/doc/qtcreator/images/qtquick-example-setting-breakpoint3.webp diff --git a/doc/qtcreator/images/qtquick-example-stack.png b/doc/qtcreator/images/qtquick-example-stack.png Binary files differdeleted file mode 100644 index 943b0af3d70..00000000000 --- a/doc/qtcreator/images/qtquick-example-stack.png +++ /dev/null diff --git a/doc/qtcreator/images/qtquick-example-stack.webp b/doc/qtcreator/images/qtquick-example-stack.webp Binary files differnew file mode 100644 index 00000000000..2bf986d0047 --- /dev/null +++ b/doc/qtcreator/images/qtquick-example-stack.webp diff --git a/doc/qtcreator/src/android/androiddev.qdoc b/doc/qtcreator/src/android/androiddev.qdoc index c0fe2cedea0..61fbfb5cf75 100644 --- a/doc/qtcreator/src/android/androiddev.qdoc +++ b/doc/qtcreator/src/android/androiddev.qdoc @@ -11,6 +11,9 @@ You can connect Android devices to the development PC using USB cables to build, run, debug, and analyze applications from \QC. + \note \QC only detects a device and connects to it after you + \l{Debugging on Android Devices}{enable USB debugging on it}. + To develop for Android, you must install a tool chain for building applications for Android devices on the development PC. \QC can automatically download and install the tool chain and create a suitable build and run diff --git a/doc/qtcreator/src/debugger/qtquick-debugger-example.qdoc b/doc/qtcreator/src/debugger/qtquick-debugger-example.qdoc index 614219ce634..30aa5c13584 100644 --- a/doc/qtcreator/src/debugger/qtquick-debugger-example.qdoc +++ b/doc/qtcreator/src/debugger/qtquick-debugger-example.qdoc @@ -1,4 +1,4 @@ -// Copyright (C) 2018 The Qt Company Ltd. +// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only // ********************************************************************** @@ -47,13 +47,13 @@ border on the line where the \c startNewGame() function is called (1). - \image qtquick-example-setting-breakpoint1.png + \image qtquick-example-setting-breakpoint1.webp {Breakpoint in the code editor} The red circle indicates that a breakpoint is now set on that line number. - \li Select \uicontrol Debug > \uicontrol {Start Debugging} > - \uicontrol {Start Debugging of Startup Project} or press + \li Go to \uicontrol Debug > \uicontrol {Start Debugging} > + \uicontrol {Start Debugging of Startup Project}, or press \key{F5}. \li Once the Same Game application starts, select \uicontrol {Puzzle} @@ -63,26 +63,26 @@ \li When the debugger hits the breakpoint, it interrupts the application. \QC displays the nested function calls leading to the - current position as a call stack trace (1). + current position as a call stack trace. - \image qtquick-example-setting-breakpoint2.png + \image qtquick-example-setting-breakpoint2.webp {Debugger view} - \li Click the \inlineimage icons/debugger_stepinto_small.png - (\uicontrol {Step Into}) button on the toolbar or press \key F11 to step + \li Select \inlineimage icons/debugger_stepinto_small.png + (\uicontrol {Step Into}) on the toolbar or press \key F11 to step into the code in the stack. The samegame.js file opens in the code editor at the function that starts a new game. - \image qtquick-example-stack.png + \image qtquick-example-stack.webp {Stack view} \li Examine the local variables in the \uicontrol Locals view. Step through the code to see how the information changes in the view. \li Add a breakpoint at the end of the \c {startNewGame()} function, and - click \inlineimage icons/qtcreator-debugging-continue.png + select \inlineimage icons/qtcreator-debugging-continue.png (\uicontrol Continue) to hit the breakpoint. - \image qtquick-example-setting-breakpoint3.png + \image qtquick-example-setting-breakpoint3.webp {Second breakpoint in the Breakpoints view} \li To execute JavaScript commands in the current context, open the \uicontrol {QML Debugger Console}. @@ -97,11 +97,11 @@ \image qtquick-example-qml-inspector.png - \li Select \uicontrol Debug > \uicontrol {Show Application on Top} to + \li Go to \uicontrol Debug > \uicontrol {Show Application on Top} to keep the application visible while you interact with the debugger. - \li Select \uicontrol Debug > \uicontrol Select to activate selection - mode and then click the \uicontrol Menu button to move into the + \li Go to \uicontrol Debug > \uicontrol Select to activate selection + mode, and then select \uicontrol Menu to move into the \uicontrol menuButton component in the \uicontrol Locals view and the code editor. diff --git a/doc/qtcreator/src/editors/creator-code-syntax.qdoc b/doc/qtcreator/src/editors/creator-code-syntax.qdoc index 65f8e5d1151..5a383f9df8d 100644 --- a/doc/qtcreator/src/editors/creator-code-syntax.qdoc +++ b/doc/qtcreator/src/editors/creator-code-syntax.qdoc @@ -79,7 +79,11 @@ If you hide the annotations, you can move the mouse pointer over an icon to view them. - \sa {Analyze code with Clang-Tidy and Clazy}, {JavaScript and QML Checks} + \if defined(qtcreator) + \sa {Analyze code with Clang-Tidy and Clazy} + \endif + + \sa {JavaScript and QML Checks} */ /*! diff --git a/src/libs/qlitehtml b/src/libs/qlitehtml -Subproject 9c7b5d073bf4713250648cf7ea35580f489f7fd +Subproject 4f737256c0a698ff3ba380cbaef1ba80a16fc3a diff --git a/src/libs/utils/namevaluesdialog.cpp b/src/libs/utils/namevaluesdialog.cpp index 35587f87919..0b009c7568e 100644 --- a/src/libs/utils/namevaluesdialog.cpp +++ b/src/libs/utils/namevaluesdialog.cpp @@ -45,7 +45,11 @@ signals: void lostFocus(); private: - void focusOutEvent(QFocusEvent *) override { emit lostFocus(); } + void focusOutEvent(QFocusEvent *e) override + { + QPlainTextEdit::focusOutEvent(e); + emit lostFocus(); + } }; } // namespace Internal diff --git a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp index a0bd4d426e3..a3795369f76 100644 --- a/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp +++ b/src/plugins/cmakeprojectmanager/fileapidataextractor.cpp @@ -209,7 +209,8 @@ static bool isChildOf(const FilePath &path, const FilePaths &prefixes) static CMakeBuildTarget toBuildTarget(const TargetDetails &t, const FilePath &sourceDirectory, const FilePath &buildDirectory, - bool relativeLibs) + bool relativeLibs, + const QSet<FilePath> &artifacts) { const FilePath currentBuildDir = buildDirectory.resolvePath(t.buildDir); @@ -341,14 +342,17 @@ static CMakeBuildTarget toBuildTarget(const TargetDetails &t, librarySeachPaths.append(tmp); if (buildDir.osType() == OsTypeWindows && dllName) { - if (tmp.pathAppended(*dllName).exists()) + const auto validPath = [&artifacts](const FilePath& path) { + return path.exists() || artifacts.contains(path); + }; + if (validPath(tmp.pathAppended(*dllName))) librarySeachPaths.append(tmp); // Libraries often have their import libs in ../lib and the // actual dll files in ../bin on windows. Qt is one example of that. - if (tmp.fileName() == "lib" && buildDir.osType() == OsTypeWindows) { + if (tmp.fileName() == "lib") { const FilePath path = tmp.parentDir().pathAppended("bin"); - if (path.isDir() && path.pathAppended(*dllName).exists()) + if (path.isDir() && validPath(path.pathAppended(*dllName))) librarySeachPaths.append(path); } } @@ -367,12 +371,17 @@ static QList<CMakeBuildTarget> generateBuildTargets(const QFuture<void> &cancelF const FilePath &buildDirectory, bool relativeLibs) { + QSet<FilePath> artifacts; + for (const TargetDetails &t : input.targetDetails) + for (const FilePath &p: t.artifacts) + artifacts.insert(buildDirectory.resolvePath(p)); + QList<CMakeBuildTarget> result; result.reserve(input.targetDetails.size()); for (const TargetDetails &t : input.targetDetails) { if (cancelFuture.isCanceled()) return {}; - result.append(toBuildTarget(t, sourceDirectory, buildDirectory, relativeLibs)); + result.append(toBuildTarget(t, sourceDirectory, buildDirectory, relativeLibs, artifacts)); } return result; } diff --git a/src/plugins/coreplugin/icore.cpp b/src/plugins/coreplugin/icore.cpp index 1ed0987e5ab..8a727494c2d 100644 --- a/src/plugins/coreplugin/icore.cpp +++ b/src/plugins/coreplugin/icore.cpp @@ -1035,12 +1035,57 @@ void ICore::addPreCloseListener(const std::function<bool ()> &listener) d->m_preCloseListeners.append(listener); } +QString uiConfigInformation() +{ + QString info("UI configuration:\n\n"); + info.append(QString("Color: %1\n").arg(StyleHelper::requestedBaseColor().name())); + info.append(QString("Theme: %1 \"%2\"\n").arg(creatorTheme()->id()) + .arg(creatorTheme()->displayName())); + const QString toolbarStyle = + StyleHelper::toolbarStyle() == StyleHelper::ToolbarStyleCompact ? "Compact" : "Relaxed"; + info.append(QString("Toolbar style: Utils::StyleHelper::ToolbarStyle%1\n").arg(toolbarStyle)); + const QString policy = + QVariant::fromValue(QApplication::highDpiScaleFactorRoundingPolicy()).toString(); + QString userInterfaceLanguage = ICore::userInterfaceLanguage(); + if (userInterfaceLanguage.isEmpty()) + userInterfaceLanguage = QLocale::system().name() + " (System Language)"; + info.append(QString("Language: %1\n").arg(userInterfaceLanguage)); + info.append(QString("Device pixel ratio: %1, Qt::HighDpiScaleFactorRoundingPolicy::%2\n") + .arg(qApp->devicePixelRatio()).arg(policy)); + info.append(QString("Font DPI: %1\n").arg(qApp->fontMetrics().fontDpi())); + + info.append(QString("Utils::StyleHelper::UiElement:\n")); +#define QTC_ADD_UIELEMENT_FONT(uiElement) ( \ + info.append(QString(" %1: %2\n").arg(#uiElement) \ + .arg(StyleHelper::uiFont(StyleHelper::UiElement##uiElement).toString())) \ + ); + QTC_ADD_UIELEMENT_FONT(H1); + QTC_ADD_UIELEMENT_FONT(H2); + QTC_ADD_UIELEMENT_FONT(H3); + QTC_ADD_UIELEMENT_FONT(H4); + QTC_ADD_UIELEMENT_FONT(H5); + QTC_ADD_UIELEMENT_FONT(H6); + QTC_ADD_UIELEMENT_FONT(H6Capital); + QTC_ADD_UIELEMENT_FONT(Body1); + QTC_ADD_UIELEMENT_FONT(Body2); + QTC_ADD_UIELEMENT_FONT(ButtonMedium); + QTC_ADD_UIELEMENT_FONT(ButtonSmall); + QTC_ADD_UIELEMENT_FONT(CaptionStrong); + QTC_ADD_UIELEMENT_FONT(Caption); + QTC_ADD_UIELEMENT_FONT(IconStandard); + QTC_ADD_UIELEMENT_FONT(IconActive); +#undef QTC_ADD_UIELEMENT_FONT + + return info; +} + /*! \internal */ QString ICore::systemInformation() { - return PluginManager::systemInformation() + '\n' + aboutInformationCompact() + '\n'; + return PluginManager::systemInformation() + '\n' + uiConfigInformation() + '\n' + + aboutInformationCompact() + '\n'; } static const QString &screenShotsPath() diff --git a/src/plugins/projectexplorer/devicesupport/idevice.cpp b/src/plugins/projectexplorer/devicesupport/idevice.cpp index 115fb0e5faf..1387f9edc44 100644 --- a/src/plugins/projectexplorer/devicesupport/idevice.cpp +++ b/src/plugins/projectexplorer/devicesupport/idevice.cpp @@ -194,10 +194,10 @@ DeviceSettings::DeviceSettings() displayName.setValueAcceptor( [validateDisplayName](const QString &old, const QString &newValue) -> std::optional<QString> { - if (validateDisplayName(old, newValue)) + if (!validateDisplayName(old, newValue)) return std::nullopt; - return old; + return newValue; }); } diff --git a/tests/system/shared/classes.py b/tests/system/shared/classes.py index dcc702295b4..4611a0cefe1 100644 --- a/tests/system/shared/classes.py +++ b/tests/system/shared/classes.py @@ -1,10 +1,7 @@ # Copyright (C) 2016 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 -try: - import __builtin__ # Python 2 -except ImportError: - import builtins as __builtin__ # Python 3 +import builtins # for easier re-usage (because Python hasn't an enum type) class Targets: @@ -128,7 +125,7 @@ class QtPath: @staticmethod def toVersionTuple(versionString): - return tuple(map(__builtin__.int, versionString.split("."))) + return tuple(map(builtins.int, versionString.split("."))) @staticmethod def getQtVersion(target): diff --git a/tests/system/shared/project.py b/tests/system/shared/project.py index 00641e465be..a45d78cfc4b 100644 --- a/tests/system/shared/project.py +++ b/tests/system/shared/project.py @@ -603,7 +603,7 @@ def __writeProjectTreeFile__(projectTree, filename): def __getTestData__(record): return [testData.field(record, "text"), - __builtin__.int(testData.field(record, "nestinglevel"))] + builtins.int(testData.field(record, "nestinglevel"))] def compareProjectTree(rootObject, dataset): root = waitForObject(rootObject) diff --git a/tests/system/shared/qtcreator.py b/tests/system/shared/qtcreator.py index e97c0b025ff..f1d4078fb52 100644 --- a/tests/system/shared/qtcreator.py +++ b/tests/system/shared/qtcreator.py @@ -12,11 +12,7 @@ import subprocess; import sys import errno; from datetime import datetime,timedelta; -if sys.version_info.major > 2: - import builtins as __builtin__ -else: - import __builtin__ - +import builtins srcPath = '' SettingsPath = [] diff --git a/tests/system/shared/utils.py b/tests/system/shared/utils.py index b922b24a798..afb609292c3 100644 --- a/tests/system/shared/utils.py +++ b/tests/system/shared/utils.py @@ -71,15 +71,15 @@ def verifyEnabled(objectSpec, expectedState = True): # param itemName is the item to be selected in the combo box # returns True if selection was changed or False if the wanted value was already selected def selectFromCombo(objectSpec, itemName): - object = verifyEnabled(objectSpec) - if itemName == str(object.currentText): + comboObject = verifyEnabled(objectSpec) + if itemName == str(comboObject.currentText): return False else: - mouseClick(object) + mouseClick(comboObject) snooze(1) # params required here - mouseClick(waitForObjectItem(object, itemName.replace(".", "\\.")), 5, 5, 0, Qt.LeftButton) - test.verify(waitFor("str(object.currentText)==itemName", 5000), + mouseClick(waitForObjectItem(comboObject, itemName.replace(".", "\\."))) + test.verify(waitFor("str(comboObject.currentText)==itemName", 5000), "Switched combo item to '%s'" % itemName) return True @@ -588,15 +588,12 @@ def getHelpTitle(): def isString(sth): - if sys.version_info.major > 2: - return isinstance(sth, str) - else: - return isinstance(sth, (str, unicode)) + return isinstance(sth, str) + # helper function to ensure we get str, converts bytes if necessary def stringify(obj): - stringTypes = (str, unicode) if sys.version_info.major == 2 else (str) - if isinstance(obj, stringTypes): + if isString(obj): return obj if isinstance(obj, bytes): if not platform.system() in ('Microsoft', 'Windows'): diff --git a/tests/system/suite_editors/tst_revert_changes/test.py b/tests/system/suite_editors/tst_revert_changes/test.py index 6ad06b11243..7774faed4b4 100644 --- a/tests/system/suite_editors/tst_revert_changes/test.py +++ b/tests/system/suite_editors/tst_revert_changes/test.py @@ -33,7 +33,7 @@ def main(): __modifyFile__(fileName, modification) test.log("Reverting all files...") fileModifications = dict(zip(fileModifications.keys(), - (__builtin__.bool(v) for v in fileModifications.values()))) + (builtins.bool(v) for v in fileModifications.values()))) revertChanges(fileModifications) invokeMenuItem("File", "Exit") diff --git a/tests/system/suite_general/tst_cmake_speedcrunch/test.py b/tests/system/suite_general/tst_cmake_speedcrunch/test.py index 4f75d43eb9d..4761daaed1b 100644 --- a/tests/system/suite_general/tst_cmake_speedcrunch/test.py +++ b/tests/system/suite_general/tst_cmake_speedcrunch/test.py @@ -12,8 +12,8 @@ def cmakeSupported(): versionLine = next(iter(versionLines)) test.log("Using " + versionLine) matcher = re.match("cmake version (\d+)\.(\d+)\.\d+", versionLine) - major = __builtin__.int(matcher.group(1)) - minor = __builtin__.int(matcher.group(2)) + major = builtins.int(matcher.group(1)) + minor = builtins.int(matcher.group(2)) except: return False diff --git a/tests/system/suite_general/tst_rename_file/test.py b/tests/system/suite_general/tst_rename_file/test.py index 693303553a6..d2abe87ea2b 100644 --- a/tests/system/suite_general/tst_rename_file/test.py +++ b/tests/system/suite_general/tst_rename_file/test.py @@ -79,7 +79,12 @@ def renameFile(projectDir, proFile, branch, oldname, newname): menu = ":Qt Creator.Project.Menu.Folder_QMenu" else: menu = ":Qt Creator.Project.Menu.File_QMenu" - activateItem(waitForObjectItem(menu, "Rename...")) + try: + activateItem(waitForObjectItem(menu, "Rename...", 5000)) + except: + # Try getting an enabled item by reopening the menu + openItemContextMenu(treeview, oldItemText, 5, 5, 0) + activateItem(waitForObjectItem(menu, "Rename...", 5000)) replaceEdit = waitForObject(":Qt Creator_Utils::NavigationTreeView::QExpandingLineEdit") test.compare(replaceEdit.selectedText, oldname.rsplit(".", 1)[0], "Only the filename without the extension is selected?") diff --git a/tests/system/suite_qtquick/tst_qml_outline/test.py b/tests/system/suite_qtquick/tst_qml_outline/test.py index fb3662b8057..5eb9ab3e33e 100644 --- a/tests/system/suite_qtquick/tst_qml_outline/test.py +++ b/tests/system/suite_qtquick/tst_qml_outline/test.py @@ -104,7 +104,7 @@ def __writeOutlineFile__(outlinePseudoTree, filename): def retrieveData(record): return (testData.field(record, "element"), - __builtin__.int(testData.field(record, "nestinglevel")), + builtins.int(testData.field(record, "nestinglevel")), testData.field(record, "value")) def verifyOutline(outlinePseudoTree, datasetFileName): diff --git a/tests/system/suite_tools/tst_codepasting/test.py b/tests/system/suite_tools/tst_codepasting/test.py index ec0d9ee226e..2720b336dfd 100644 --- a/tests/system/suite_tools/tst_codepasting/test.py +++ b/tests/system/suite_tools/tst_codepasting/test.py @@ -243,7 +243,7 @@ def main(): # QString QTextCursor::selectedText () const: # "Note: If the selection obtained from an editor spans a line break, the text will contain a # Unicode U+2029 paragraph separator character instead of a newline \n character." - newParagraph = chr(0x2029) if sys.version_info.major > 2 else unichr(0x2029) + newParagraph = chr(0x2029) selectedText = str(editor.textCursor().selectedText()).replace(newParagraph, "\n") invokeMenuItem("Tools", "Code Pasting", "Paste Snippet...") test.compare(waitForObject(":stackedWidget.plainTextEdit_QPlainTextEdit").plainText, |