diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake index 3c11c348bf5..003ac10c307 100644 --- a/cmake/QtCreatorAPI.cmake +++ b/cmake/QtCreatorAPI.cmake @@ -364,7 +364,7 @@ function(add_qtc_plugin target_name) cmake_parse_arguments(_arg "EXPERIMENTAL;SKIP_DEBUG_CMAKE_FILE_CHECK;SKIP_INSTALL" "VERSION;COMPAT_VERSION;PLUGIN_JSON_IN;PLUGIN_PATH;PLUGIN_NAME;OUTPUT_NAME" - "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;INCLUDES;PUBLIC_INCLUDES;PLUGIN_DEPENDS;PLUGIN_RECOMMENDS;SOURCES;EXPLICIT_MOC" + "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;PUBLIC_DEFINES;INCLUDES;PUBLIC_INCLUDES;PLUGIN_DEPENDS;PLUGIN_RECOMMENDS;SOURCES;EXPLICIT_MOC" ${ARGN} ) @@ -501,6 +501,7 @@ function(add_qtc_plugin target_name) target_compile_definitions(${target_name} PRIVATE ${EXPORT_SYMBOL} ${DEFAULT_DEFINES} ${_arg_DEFINES} ${TEST_DEFINES} + PUBLIC ${_arg_PUBLIC_DEFINES} ) add_qtc_depends(${target_name} @@ -548,7 +549,7 @@ function(extend_qtc_target target_name) cmake_parse_arguments(_arg "" "SOURCES_PREFIX" - "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;INCLUDES;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC" + "CONDITION;DEPENDS;PUBLIC_DEPENDS;DEFINES;PUBLIC_DEFINES;INCLUDES;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC" ${ARGN} ) @@ -567,7 +568,10 @@ function(extend_qtc_target target_name) PRIVATE ${_arg_DEPENDS} PUBLIC ${_arg_PUBLIC_DEPENDS} ) - target_compile_definitions(${target_name} PRIVATE ${_arg_DEFINES}) + target_compile_definitions(${target_name} + PRIVATE ${_arg_DEFINES} + PUBLIC ${_arg_PUBLIC_DEFINES} + ) target_include_directories(${target_name} PRIVATE ${_arg_INCLUDES}) set_public_includes(${target_name} "${_arg_PUBLIC_INCLUDES}") diff --git a/dist/changes-4.10.0.md b/dist/changes-4.10.0.md index 651c719a328..6022f5aac9e 100644 --- a/dist/changes-4.10.0.md +++ b/dist/changes-4.10.0.md @@ -14,6 +14,7 @@ you can check out from the public Git repository. For example: * Removed support for KDE code paster after removal of official API * Added option for pinning files so they stay open when closing all files (QTCREATORBUG-21899) * Fixed low contrast of hovered folding markers (QTCREATORBUG-21702) +* Fixed infinite global search in case of symlink loop (QTCREATORBUG-22662) ### Generic Highlighter @@ -120,12 +121,22 @@ you can check out from the public Git repository. For example: ## Debugging * Added pretty printer for `QMargin` +* Fixed pretty printer for `std::vector` and `std::basic_string` with custom allocator +* Fixed pretty printer for `std::map::iterator` * Fixed issues with restoring layout (QTCREATORBUG-21669) ### CDB * Fixed loading of custom debugging helpers (QTCREATORBUG-20481) +## Clang Analyzer Tools + +* Fixed display of diagnostic for files outside of project directory (QTCREATORBUG-22213) + +## QML Profiler + +* Improved behavior in case of slow connections (QTCREATORBUG-22641) + ## Perf Profiler * Changed format of saved traces @@ -151,6 +162,7 @@ you can check out from the public Git repository. For example: * Added support for different reset types in `Branches` view * Added choice of build system to `Git Clone` wizard if cloned project supports multiple build systems (QTCREATORBUG-17828) +* Fixed popping stash after checkout from `Branches` view ## Test Integration @@ -182,13 +194,14 @@ you can check out from the public Git repository. For example: in its install step (QTCREATORBUG-21855) * Added support for opening remote terminal with run environment * Added option for `rsync` flags for deployment (QTCREATORBUG-22352) +* Fixed deployment of files with `executable` `CONFIG` value (QTCREATORBUG-22663) +* Fixed `Unexpected stat output for remote file` (QTCREATORBUG-22603) ### Bare Metal * Added include path detection and output parsers for `IAR`, `KEIL` and `SDCC` toolchains ## Credits for these changes go to: - Aleksei German Alessandro Ambrosano Alessandro Portale @@ -221,6 +234,7 @@ Kavindra Palaraja Knud Dollereder Leena Miettinen Luca Carlon +Marc Mutz Marco Bubke Martin Haase Michael Weghorn @@ -230,6 +244,7 @@ Oliver Wolff Orgad Shaneh Przemyslaw Gorszkowski Robert Löhning +Thiago Macieira Thomas Hartmann Thomas Otto Tim Henning @@ -238,4 +253,5 @@ Tobias Hunger Tor Arne Vestbø Uladzislau Paulovich Ulf Hermann +Vikas Pachdha Ville Nummela diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 341ceb71455..14019268586 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -1994,14 +1994,16 @@ class DumperBase: with Children(self): self.putQObjectGutsHelper(0, 0, -1, metaObjectPtr, 'QMetaObject') - with SubItem(self, '[connections]'): + if False: + with SubItem(self, '[connections]'): if connectionListsPtr: typeName = '@QObjectConnectionListVector' self.putItem(self.createValue(connectionListsPtr, typeName)) else: self.putItemCount(0) - with SubItem(self, '[signals]'): + if False: + with SubItem(self, '[signals]'): self.putItemCount(signalCount) if self.isExpanded(): with Children(self): diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 317b3d343ae..a584e24e84f 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -227,7 +227,9 @@ def qdump__QStandardItemData(d, value): def qdump__QStandardItem(d, value): vtable, dptr = value.split('pp') - if d.isMsvcTarget(): + # There used to be a virtual destructor that got removed in + # 88b6abcebf29b455438 on Apr 18 17:01:22 2017 + if d.qtVersion() >= 0x050900 or d.isMsvcTarget(): model, parent, values, children, rows, cols, item = d.split('ppPPIIp', dptr) else: vtable1, model, parent, values, children, rows, cols, item = d.split('pppPPIIp', dptr) @@ -603,7 +605,16 @@ def qdump__QFile(d, value): # 9fc0965 and a373ffcd change the layout of the private structure qtVersion = d.qtVersion() is32bit = d.ptrSize() == 4 - if qtVersion >= 0x050700: + if qtVersion >= 0x050600 and d.qtTypeInfoVersion() >= 17: + # Some QRingBuffer member got removed in 8f92baf5c9 + if d.isWindowsTarget(): + if d.isMsvcTarget(): + offset = 164 if is32bit else 224 + else: + offset = 160 if is32bit else 224 + else: + offset = 156 if is32bit else 224 + elif qtVersion >= 0x050700: if d.isWindowsTarget(): if d.isMsvcTarget(): offset = 176 if is32bit else 248 @@ -1200,7 +1211,8 @@ def qdump__QMetaObject(d, value): d.putMembersItem(value) -def qdump__QObjectPrivate__ConnectionList(d, value): +if False: + def qdump__QObjectPrivate__ConnectionList(d, value): d.putNumChild(1) if d.isExpanded(): i = 0 @@ -1937,7 +1949,8 @@ def qdump__QVector(d, value): d.putItemCount(size) d.putPlotData(data, size, value.type[0]) -def qdump__QObjectConnectionList(d, value): +if False: + def qdump__QObjectConnectionList(d, value): dd = d.extractPointer(value) data, size, alloc = d.vectorDataHelper(dd) d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000) diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp index af5bea0f884..50062818037 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp @@ -67,8 +67,6 @@ #include #include -#include - #include #include #include @@ -460,7 +458,7 @@ void NodeInstanceServer::setupImports(const QVector &contain delete m_importComponent.data(); delete m_importComponentObject.data(); - const QStringList importStatementList = Utils::toList(importStatementSet); + const QStringList importStatementList = QtHelpers::toList(importStatementSet); const QStringList fullImportStatementList(QStringList(qtQuickImport) + importStatementList); // check possible import statements combinations diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h index 2aebef1174c..fb8b081b45b 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h @@ -35,6 +35,18 @@ #include "servernodeinstance.h" #include "debugoutputcommand.h" +namespace QtHelpers { +template +QListtoList(const QSet &set) +{ +#if (QT_VERSION < QT_VERSION_CHECK(5, 14, 0)) + return set.toList(); +#else + return QList(set.begin(), set.end()); +#endif +} +} //QtHelpers + QT_BEGIN_NAMESPACE class QFileSystemWatcher; class QQmlView; diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp index 99688fa7cc7..055e9f9eba1 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5informationnodeinstanceserver.cpp @@ -60,8 +60,6 @@ #include -#include - namespace QmlDesigner { Qt5InformationNodeInstanceServer::Qt5InformationNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) : @@ -169,13 +167,13 @@ void Qt5InformationNodeInstanceServer::collectItemChangesAndSendChangeCommands() if (!informationChangedInstanceSet.isEmpty()) nodeInstanceClient()->informationChanged( - createAllInformationChangedCommand(Utils::toList(informationChangedInstanceSet))); + createAllInformationChangedCommand(QtHelpers::toList(informationChangedInstanceSet))); if (!propertyChangedList.isEmpty()) nodeInstanceClient()->valuesChanged(createValuesChangedCommand(propertyChangedList)); if (!m_parentChangedSet.isEmpty()) { - sendChildrenChangedCommand(Utils::toList(m_parentChangedSet)); + sendChildrenChangedCommand(QtHelpers::toList(m_parentChangedSet)); m_parentChangedSet.clear(); } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp index 19160d9ea9f..08b20ccd223 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5rendernodeinstanceserver.cpp @@ -60,8 +60,6 @@ #include -#include - namespace QmlDesigner { Qt5RenderNodeInstanceServer::Qt5RenderNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) : @@ -96,7 +94,7 @@ void Qt5RenderNodeInstanceServer::collectItemChangesAndSendChangeCommands() clearChangedPropertyList(); if (!m_dirtyInstanceSet.isEmpty()) { - nodeInstanceClient()->pixmapChanged(createPixmapChangedCommand(Utils::toList(m_dirtyInstanceSet))); + nodeInstanceClient()->pixmapChanged(createPixmapChangedCommand(QtHelpers::toList(m_dirtyInstanceSet))); m_dirtyInstanceSet.clear(); } diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp index 1f8540359b8..cb5af3dc800 100644 --- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp +++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5testnodeinstanceserver.cpp @@ -62,8 +62,6 @@ #include -#include - namespace QmlDesigner { Qt5TestNodeInstanceServer::Qt5TestNodeInstanceServer(NodeInstanceClientInterface *nodeInstanceClient) @@ -291,7 +289,7 @@ void QmlDesigner::Qt5TestNodeInstanceServer::collectItemChangesAndSendChangeComm if (!informationChangedInstanceSet.isEmpty()) { InformationChangedCommand command - = createAllInformationChangedCommand(Utils::toList(informationChangedInstanceSet)); + = createAllInformationChangedCommand(QtHelpers::toList(informationChangedInstanceSet)); command.sort(); nodeInstanceClient()->informationChanged(command); } @@ -302,7 +300,7 @@ void QmlDesigner::Qt5TestNodeInstanceServer::collectItemChangesAndSendChangeComm } if (!parentChangedSet.isEmpty()) - sendChildrenChangedCommand(Utils::toList(parentChangedSet)); + sendChildrenChangedCommand(QtHelpers::toList(parentChangedSet)); } } diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GeometrySection.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GeometrySection.qml index 36a46b72bbd..166c9631739 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GeometrySection.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/QtQuick/GeometrySection.qml @@ -53,6 +53,7 @@ Section { maximumValue: 0xffff minimumValue: -0xffff decimals: 0 + realDragRange: 5000 } Item { @@ -70,6 +71,7 @@ Section { maximumValue: 0xffff minimumValue: -0xffff decimals: 0 + realDragRange: 5000 } ExpandingSpacer { @@ -92,6 +94,7 @@ Section { maximumValue: 0xffff minimumValue: 0 decimals: 0 + realDragRange: 5000 } Item { @@ -109,6 +112,7 @@ Section { maximumValue: 0xffff minimumValue: 0 decimals: 0 + realDragRange: 5000 } ExpandingSpacer { diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml index 2ec1052877a..2333a194e7f 100644 --- a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml +++ b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/HelperWidgets/SpinBox.qml @@ -41,6 +41,8 @@ Item { property alias backendValue: spinBox.backendValue property alias sliderIndicatorVisible: spinBox.sliderIndicatorVisible + property alias realDragRange: spinBox.realDragRange + width: 96 implicitHeight: spinBox.height diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp index e89f999a478..6c33b8dafe2 100644 --- a/src/plugins/coreplugin/outputwindow.cpp +++ b/src/plugins/coreplugin/outputwindow.cpp @@ -232,6 +232,12 @@ void OutputWindow::wheelEvent(QWheelEvent *e) if (d->zoomEnabled) { if (e->modifiers() & Qt::ControlModifier) { float delta = e->angleDelta().y() / 120.f; + + // Workaround for QTCREATORBUG-22721, remove when properly fixed in Qt + const float newSize = float(font().pointSizeF()) + delta; + if (delta < 0.f && newSize < 4.f) + return; + zoomInF(delta); emit wheelZoom(); return; diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 40398747b15..eff9ef27783 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -526,7 +526,8 @@ QStringList GccToolChain::gccPrepareArguments(const QStringList &flags, || flag.startsWith("-B") || flag.startsWith("--target=") || (flag.startsWith("-isystem") && flag.length() > 8)) { arguments << flag; - } else if ((flag == "-target" || flag == "-gcc-toolchain" || flag == "-isystem") + } else if ((flag == "-target" || flag == "-gcc-toolchain" || flag == "-isystem" + || flag == "-arch") && i < flags.size() - 1) { arguments << flag << allFlags.at(i + 1); ++i; diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index 5b614860595..4e5db36d366 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -2837,8 +2837,9 @@ void tst_Dumpers::dumper_data() + Check("ob", "\"An Object\"", "@QWidget") + Check("ob1", "\"Another Object\"", "@QObject") + Check("ob2", "\"A Subobject\"", "@QObject") - + Check("ob.[extra].[connections].@1.0.0.receiver", "\"Another Object\"", - "@QObject") % NoCdbEngine % QtVersion(0x50b00); + //+ Check("ob.[extra].[connections].@1.0.0.receiver", "\"Another Object\"", + // "@QObject") % NoCdbEngine % QtVersion(0x50b00) + ; QString senderData = diff --git a/tests/auto/debugger/tst_offsets.cpp b/tests/auto/debugger/tst_offsets.cpp index 4e312173046..90d1cfa3ef8 100644 --- a/tests/auto/debugger/tst_offsets.cpp +++ b/tests/auto/debugger/tst_offsets.cpp @@ -144,6 +144,10 @@ void tst_offsets::offsets() QCOMPARE(actual, expect); } +QT_BEGIN_NAMESPACE +extern quintptr Q_CORE_EXPORT qtHookData[]; +QT_END_NAMESPACE + void tst_offsets::offsets_data() { QTest::addColumn("actual"); @@ -151,8 +155,19 @@ void tst_offsets::offsets_data() QTest::addColumn("expected64"); const int qtVersion = QT_VERSION; + const quintptr qtTypeVersion = qtHookData[6]; - if (qtVersion >= 0x50700) + if (qtVersion > 0x50600 && qtTypeVersion >= 17) +#ifdef Q_OS_WIN +# ifdef Q_CC_MSVC + OFFSET_TEST(QFilePrivate, fileName) << 164 << 224; +# else // MinGW + OFFSET_TEST(QFilePrivate, fileName) << 160 << 224; +# endif +#else + OFFSET_TEST(QFilePrivate, fileName) << 156 << 224; +#endif + else if (qtVersion >= 0x50700) #ifdef Q_OS_WIN # ifdef Q_CC_MSVC OFFSET_TEST(QFilePrivate, fileName) << 176 << 248; diff --git a/tests/system/suite_HELP/tst_HELP06/test.py b/tests/system/suite_HELP/tst_HELP06/test.py index e4cadad9512..96ec0a4e1c8 100755 --- a/tests/system/suite_HELP/tst_HELP06/test.py +++ b/tests/system/suite_HELP/tst_HELP06/test.py @@ -106,7 +106,7 @@ def main(): checkIfObjectExists(bldRunQModelIndex, verboseOnFail = True) and checkIfObjectExists(manualQModelIndex, verboseOnFail = True), "Verifying if all folders and bookmarks are present") - mouseClick(waitForObject(":Qt Creator_Bookmarks_TreeView")) + mouseClick(waitForObject(":Qt Creator_Bookmarks_TreeView"), 5, 5, 0, Qt.LeftButton) for _ in range(6): type(waitForObject(":Qt Creator_Bookmarks_TreeView"), "") type(waitForObject(":Qt Creator_Bookmarks_TreeView"), "")