diff --git a/.github/workflows/build_cmake.yml b/.github/workflows/build_cmake.yml
index 7cbe1ce5b7f..9541c4c7017 100644
--- a/.github/workflows/build_cmake.yml
+++ b/.github/workflows/build_cmake.yml
@@ -744,7 +744,7 @@ jobs:
name: ${{ steps.ccache.outputs.archive_name }}
- name: Upload Release Changelog
- if: contains(github.ref, 'tags/v')
+ if: runner.os == 'macOS' && contains(github.ref, 'tags/v')
uses: actions/upload-artifact@v4
with:
path: ./release/changelog.md
diff --git a/dist/changelog/changes-14.0.0.md b/dist/changelog/changes-14.0.0.md
index e375cb0fa9f..7fe40fd9554 100644
--- a/dist/changelog/changes-14.0.0.md
+++ b/dist/changelog/changes-14.0.0.md
@@ -246,10 +246,12 @@ Version Control Systems
Test Integration
----------------
-* Made the test timeout optional
+* Made the test timeout optional in `Preferences` > `Testing` > `General`
([QTCREATORBUG-30668](https://bugreports.qt.io/browse/QTCREATORBUG-30668))
-* Added a project specific option `Limit Files to Path Patterns` for restricting
- the search for tests
+ ([Documentation](https://doc-snapshots.qt.io/qtcreator-14.0/creator-preferences-testing.html))
+* Added the project specific `Limit Files to Path Patterns` option in `Projects` >
+ `Project Settings` > `Testing` for restricting the search for tests
+ ([Documentation](https://doc-snapshots.qt.io/qtcreator-14.0/creator-how-to-limit-files-to-path-patterns.html))
### Qt Test
diff --git a/doc/qtcreator/images/qtcreator-preferences-testing-general.webp b/doc/qtcreator/images/qtcreator-preferences-testing-general.webp
index 8fb41b64f7d..f82694ccc91 100644
Binary files a/doc/qtcreator/images/qtcreator-preferences-testing-general.webp and b/doc/qtcreator/images/qtcreator-preferences-testing-general.webp differ
diff --git a/doc/qtcreator/images/qtcreator-projects-settings-testing.webp b/doc/qtcreator/images/qtcreator-projects-settings-testing.webp
index 6f8fe53a22f..7af2455f68f 100644
Binary files a/doc/qtcreator/images/qtcreator-projects-settings-testing.webp and b/doc/qtcreator/images/qtcreator-projects-settings-testing.webp differ
diff --git a/doc/qtcreator/src/appman/creator-appman-how-to-run.qdoc b/doc/qtcreator/src/appman/creator-appman-how-to-run.qdoc
index 0df58d12e8c..e43e3320656 100644
--- a/doc/qtcreator/src/appman/creator-appman-how-to-run.qdoc
+++ b/doc/qtcreator/src/appman/creator-appman-how-to-run.qdoc
@@ -141,13 +141,16 @@
\li Always communicates with the default instance.
\endtable
- \section1 Profile Qt Quick applications
+ \section1 Analyze the applications
- You can use the \l{Profiling QML Applications}{QML Profiler} to find causes
- for typical performance problems in your Qt Quick applications, such as
+ Use the \l{Profiling QML Applications}{QML Profiler} to find causes
+ for typical performance problems in Qt Quick applications, such as
slowness and unresponsive, stuttering user interfaces. You cannot profile an
in-process runtime as an individual process.
+ Use the \l{Performance Analyzer} to analyze the CPU and memory usage of an
+ application.
+
\sa {Activate kits for a project}, {Enable and disable plugins},
{\B2Q}{How To: Develop for \B2Q},
{Remote Linux}{How To: Develop for remote Linux},
diff --git a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc
index f6006e8eded..0c3ff91b303 100644
--- a/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc
+++ b/doc/qtcreator/src/howto/creator-only/creator-autotest.qdoc
@@ -515,7 +515,7 @@
By default, \QC groups tests that are in the same directory.
\endtable
- To select the testing framework for the current project, go to
+ To override some preferences for the current project, go to
\uicontrol Projects > \uicontrol {Project Settings} > \uicontrol {Testing}.
\section1 Qt Tests
@@ -715,7 +715,7 @@
\li Disable statistical analysis and bootstrapping.
\endtable
- \section2 Specifying Settings for Running CTest-Based Tests
+ \section1 CTest-Based Tests
To specify settings for running CTest-based tests, go to \preferences >
\uicontrol {Testing} > \uicontrol {CTest}.
diff --git a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc
index 73723857773..2a032dabf75 100644
--- a/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc
+++ b/doc/qtcreator/src/projects/creator-only/creator-projects-settings-overview.qdoc
@@ -96,7 +96,7 @@
\li \l{Link projects with GitLab}{GitLab}
\li \l{Configure language server workspace}{Language Server}
\li \l{Specify settings for quick fixes}{Quick Fixes}
- \li \l{Testing}
+ \li \l{Apply filters before scanning for tests}{Testing}
\li \l{Exclude files from to-do lists}{To-Do} (experimental)
\endlist
diff --git a/doc/qtcreator/src/projects/creator-only/creator-testing-how-to-limit-files-to-path-patterns.qdoc b/doc/qtcreator/src/projects/creator-only/creator-testing-how-to-limit-files-to-path-patterns.qdoc
new file mode 100644
index 00000000000..32d58d028dd
--- /dev/null
+++ b/doc/qtcreator/src/projects/creator-only/creator-testing-how-to-limit-files-to-path-patterns.qdoc
@@ -0,0 +1,32 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page creator-how-to-limit-files-to-path-patterns.html
+ \previouspage creator-how-tos.html
+
+ \ingroup creator-how-to-test
+ \ingroup creator-how-to-projects-configure
+
+ \title Apply filters before scanning for tests
+
+ To override testing preferences for the current project:
+
+ \list 1
+ \li Go to \uicontrol Projects > \uicontrol {Project Settings} >
+ \uicontrol {Testing}.
+ \image qtcreator-projects-settings-testing.webp {Testing settings in Projects mode}
+ \li Clear \uicontrol {Use global settings} to select the tests to handle
+ for the project.
+ \li To automatically run all or selected tests after successfully
+ building the current project, select \uicontrol All or
+ \uicontrol Selected in \uicontrol {Automatically run tests after build}.
+ \li To apply path filters before scanning for tests, select
+ \uicontrol {Limit Files to Path Patterns}.
+ \li Select \uicontrol Add to add the filters as wildcard expressions.
+ \endlist
+
+ To remove the selected filter, select \uicontrol Remove.
+
+ \sa {Test}{How To: Test}, {Test Results}, {Testing}
+*/
diff --git a/doc/qtcreatordev/examples/exampleplugin/Example.json.in b/doc/qtcreatordev/examples/exampleplugin/Example.json.in
index c5faf0a2559..b6867bb5167 100644
--- a/doc/qtcreatordev/examples/exampleplugin/Example.json.in
+++ b/doc/qtcreatordev/examples/exampleplugin/Example.json.in
@@ -8,7 +8,7 @@
"Vendor" : "MyCompany",
"Copyright" : "(C) MyCompany",
"License" : "Put short license information here",
- "Description" : "Put a short description of your plugin here",
+ "Description" : "Put a short description of your plugin here.",
"Url" : "https://www.mycompany.com",
//! [2]
//! [3]
diff --git a/share/qtcreator/debugger/cdbbridge.py b/share/qtcreator/debugger/cdbbridge.py
index 1ce2a5f96fd..afb757ff421 100644
--- a/share/qtcreator/debugger/cdbbridge.py
+++ b/share/qtcreator/debugger/cdbbridge.py
@@ -479,7 +479,7 @@ class Dumper(DumperBase):
else:
val = self.Value(self)
val.laddress = value.pointer()
- val.typeid = self.typeid_for_string(value.type.targetName)
+ val.typeid = self.type_target(value.typeid)
val.nativeValue = value.nativeValue
return val
@@ -501,293 +501,8 @@ class Dumper(DumperBase):
res = self.nativeParseAndEvaluate(symbolName)
return None if res is None else res.address()
- def putItem(self, value: DumperBase.Value):
-
- typeobj = value.type # unqualified()
- typeName = typeobj.name
-
- if not value.lIsInScope:
- self.putSpecialValue('optimizedout')
- #self.putType(typeobj)
- #self.putSpecialValue('outofscope')
- self.putNumChild(0)
- return
-
- if not isinstance(value, self.Value):
- raise RuntimeError('WRONG TYPE IN putItem: %s' % type(self.Value))
-
- # Try on possibly typedefed type first.
- if self.tryPutPrettyItem(typeName, value):
- if typeobj.code == TypeCode.Pointer:
- self.putOriginalAddress(value.address())
- else:
- self.putAddress(value.address())
- return
-
- if typeobj.code == TypeCode.Pointer:
- self.putFormattedPointer(value)
- return
-
- self.putAddress(value.address())
-
- if typeobj.code == TypeCode.Function:
- #DumperBase.warn('FUNCTION VALUE: %s' % value)
- self.putType(typeobj)
- self.putSymbolValue(value.pointer())
- self.putNumChild(0)
- return
-
- if typeobj.code == TypeCode.Enum:
- #DumperBase.warn('ENUM VALUE: %s' % value.stringify())
- self.putType(typeobj.name)
- self.putValue(value.display())
- self.putNumChild(0)
- return
-
- if typeobj.code == TypeCode.Array:
- #DumperBase.warn('ARRAY VALUE: %s' % value)
- self.putCStyleArray(value)
- return
-
- if typeobj.code == TypeCode.Integral:
- #DumperBase.warn('INTEGER: %s %s' % (value.name, value))
- val = value.value()
- self.putNumChild(0)
- self.putValue(val)
- self.putType(typeName)
- return
-
- if typeobj.code == TypeCode.Float:
- #DumperBase.warn('FLOAT VALUE: %s' % value)
- self.putValue(value.value())
- self.putNumChild(0)
- self.putType(typeobj.name)
- return
-
- if typeobj.code in (TypeCode.Reference, TypeCode.RValueReference):
- #DumperBase.warn('REFERENCE VALUE: %s' % value)
- val = value.dereference()
- if val.laddress != 0:
- self.putItem(val)
- else:
- self.putSpecialValue('nullreference')
- self.putBetterType(typeName)
- return
-
- if typeobj.code == TypeCode.Complex:
- self.putType(typeobj)
- self.putValue(value.display())
- self.putNumChild(0)
- return
-
- self.putType(typeName)
-
- if value.summary is not None and self.useFancy:
- self.putValue(self.hexencode(value.summary), 'utf8:1:0')
- self.putNumChild(0)
- return
-
- self.putExpandable()
- self.putEmptyValue()
- #DumperBase.warn('STRUCT GUTS: %s ADDRESS: 0x%x ' % (value.name, value.address()))
- if self.showQObjectNames:
- #with self.timer(self.currentIName):
- self.putQObjectNameValue(value)
- if self.isExpanded():
- self.putField('sortable', 1)
- with Children(self):
- baseIndex = 0
- for item in self.listValueChildren(value):
- if item.name.startswith('__vfptr'):
- with SubItem(self, '[vptr]'):
- # int (**)(void)
- self.putType(' ')
- self.putSortGroup(20)
- self.putValue(item.name)
- n = 100
- if self.isExpanded():
- with Children(self):
- n = self.putVTableChildren(item, n)
- self.putNumChild(n)
- continue
-
- if item.isBaseClass:
- baseIndex += 1
- # We cannot use nativeField.name as part of the iname as
- # it might contain spaces and other strange characters.
- with UnnamedSubItem(self, "@%d" % baseIndex):
- self.putField('iname', self.currentIName)
- self.putField('name', '[%s]' % item.name)
- self.putSortGroup(1000 - baseIndex)
- self.putAddress(item.address())
- self.putItem(item)
- continue
-
-
- with SubItem(self, item.name):
- self.putItem(item)
- if self.showQObjectNames:
- self.tryPutQObjectGuts(value)
-
- def putCStyleArray(self, value: DumperBase.Value):
- arrayType = value.type
- innerType = arrayType.target()
- address = value.address()
- if address:
- self.putValue('@0x%x' % address, priority=-1)
- else:
- self.putEmptyValue()
- self.putType(arrayType)
-
- displayFormat = self.currentItemFormat()
- arrayByteSize = arrayType.size()
- n = self.arrayItemCountFromTypeName(value.type.name, 100)
-
- p = value.address()
- if displayFormat != DisplayFormat.Raw and p:
- if innerType.name.strip() in (
- 'char',
- 'int8_t',
- 'qint8',
- 'wchar_t',
- 'unsigned char',
- 'uint8_t',
- 'quint8',
- 'signed char',
- 'CHAR',
- 'WCHAR',
- 'char8_t',
- 'char16_t',
- 'char32_t'
- ):
- self.putCharArrayHelper(p, n, innerType, self.currentItemFormat(),
- makeExpandable=False)
- else:
- self.tryPutSimpleFormattedPointer(p, arrayType, innerType,
- displayFormat, arrayByteSize)
- self.putNumChild(n)
-
- if self.isExpanded():
- if n > 100:
- addrStep = innerType.size()
- with Children(self, n, innerType, addrBase=address, addrStep=addrStep):
- for i in self.childRange():
- self.putSubItem(i, self.createValue(address + i * addrStep, innerType))
- else:
- with Children(self):
- n = 0
- for item in self.listValueChildren(value):
- with SubItem(self, n):
- n += 1
- self.putItem(item)
-
-
- def putArrayData(self, base, n, innerType, childNumChild=None):
- self.checkIntType(base)
- self.checkIntType(n)
- addrBase = base
- innerType = self.createType(innerType)
- innerSize = innerType.size()
- self.putNumChild(n)
- #DumperBase.warn('ADDRESS: 0x%x INNERSIZE: %s INNERTYPE: %s' % (addrBase, innerSize, innerType))
- enc = self.type_encoding_cache.get(innerType.typeid, None)
- maxNumChild = self.maxArrayCount()
- if enc:
- self.put('childtype="%s",' % innerType.name)
- self.put('addrbase="0x%x",' % addrBase)
- self.put('addrstep="0x%x",' % innerSize)
- self.put('arrayencoding="%s",' % enc)
- self.put('endian="%s",' % self.packCode)
- if n > maxNumChild:
- self.put('childrenelided="%s",' % n)
- n = maxNumChild
- self.put('arraydata="')
- self.put(self.readMemory(addrBase, n * innerSize))
- self.put('",')
- else:
- with Children(self, n, innerType, childNumChild, maxNumChild,
- addrBase=addrBase, addrStep=innerSize):
- for i in self.childRange():
- self.putSubItem(i, self.createValue(addrBase + i * innerSize, innerType))
-
- def tryPutSimpleFormattedPointer(self, ptr, typeName, innerType, displayFormat, limit):
- if isinstance(innerType, self.Type):
- innerType = innerType.name
- if displayFormat == DisplayFormat.Automatic:
- if innerType in ('char', 'signed char', 'unsigned char', 'uint8_t', 'CHAR'):
- # Use UTF-8 as default for char *.
- self.putType(typeName)
- (length, shown, data) = self.readToFirstZero(ptr, 1, limit)
- self.putValue(data, 'utf8', length=length)
- if self.isExpanded():
- self.putArrayData(ptr, shown, innerType)
- return True
-
- if innerType in ('wchar_t', 'WCHAR'):
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 2, limit)
- self.putValue(data, 'utf16', length=length)
- return True
-
- if displayFormat == DisplayFormat.Latin1String:
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 1, limit)
- self.putValue(data, 'latin1', length=length)
- return True
-
- if displayFormat == DisplayFormat.SeparateLatin1String:
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 1, limit)
- self.putValue(data, 'latin1', length=length)
- self.putDisplay('latin1:separate', data)
- return True
-
- if displayFormat == DisplayFormat.Utf8String:
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 1, limit)
- self.putValue(data, 'utf8', length=length)
- return True
-
- if displayFormat == DisplayFormat.SeparateUtf8String:
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 1, limit)
- self.putValue(data, 'utf8', length=length)
- self.putDisplay('utf8:separate', data)
- return True
-
- if displayFormat == DisplayFormat.Local8BitString:
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 1, limit)
- self.putValue(data, 'local8bit', length=length)
- return True
-
- if displayFormat == DisplayFormat.Utf16String:
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 2, limit)
- self.putValue(data, 'utf16', length=length)
- return True
-
- if displayFormat == DisplayFormat.Ucs4String:
- self.putType(typeName)
- (length, data) = self.encodeCArray(ptr, 4, limit)
- self.putValue(data, 'ucs4', length=length)
- return True
-
- return False
-
- def putDerefedPointer(self, value):
- derefValue = value.dereference()
- savedCurrentChildType = self.currentChildType
- self.currentChildType = value.type.targetName
- self.putType(value.type.targetName)
- derefValue.name = '*'
- derefValue.autoDerefCount = value.autoDerefCount + 1
-
- if derefValue.type.code == TypeCode.Pointer:
- self.putField('autoderefcount', '{}'.format(derefValue.autoDerefCount))
-
- self.putItem(derefValue)
- self.currentChildType = savedCurrentChildType
+ def wantQObjectNames(self):
+ return self.showQObjectNames and self.qtCoreModuleName() is not None
def fetchInternalFunctions(self):
coreModuleName = self.qtCoreModuleName()
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 7f704590664..29fa29e0eb0 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -1305,14 +1305,17 @@ class DumperBase():
displayFormat = self.currentItemFormat()
arrayByteSize = arrayType.size()
+ n = self.arrayItemCountFromTypeName(value.type.name, 100)
if arrayByteSize == 0:
# This should not happen. But it does, see QTCREATORBUG-14755.
# GDB/GCC produce sizeof == 0 for QProcess arr[3]
# And in the Nim string dumper.
- itemCount = self.arrayItemCountFromTypeName(value.type.name, 100)
- arrayByteSize = int(itemCount) * innerType.size()
+ arrayByteSize = n * innerType.size()
+ elif not self.isCdb:
+ # Do not check the inner type size for cdb since this requires a potentially expensive
+ # type lookup
+ n = arrayByteSize // innerType.size()
- n = arrayByteSize // innerType.size()
p = value.address()
if displayFormat != DisplayFormat.Raw and p:
if innerType.name in (
@@ -1428,8 +1431,9 @@ class DumperBase():
# This is shared by pointer and array formatting.
def tryPutSimpleFormattedPointer(self, ptr, typename, innerType, displayFormat, limit):
if displayFormat == DisplayFormat.Automatic:
- targetType = innerType
- if innerType.code == TypeCode.Typedef:
+ if self.isCdb or innerType.code is not TypeCode.Typedef:
+ targetType = innerType
+ else:
targetType = innerType.target()
if targetType.name in ('char', 'signed char', 'unsigned char', 'uint8_t', 'CHAR'):
@@ -3407,13 +3411,6 @@ typename))
def target(self):
return self.dumper.Type(self.dumper, self.dumper.type_target(self.typeid))
- @property
- def targetName(self):
- target = self.target()
- if target is None:
- return ''
- return target if isinstance(target, str) else target.name
-
@property
def moduleName(self):
return self.dumper.type_modulename_cache.get(self.typeid, None)
diff --git a/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/qmldir b/share/qtcreator/qmldesigner/propertyEditorQmlSources/imports/StudioTheme/qmldir
old mode 100755
new mode 100644
diff --git a/src/libs/3rdparty/libptyqt/conptyprocess.cpp b/src/libs/3rdparty/libptyqt/conptyprocess.cpp
index 94bb53b5832..c957e0bdd9e 100644
--- a/src/libs/3rdparty/libptyqt/conptyprocess.cpp
+++ b/src/libs/3rdparty/libptyqt/conptyprocess.cpp
@@ -1132,10 +1132,6 @@ qint64 ConPtyProcess::write(const QByteArray &byteArray)
bool ConPtyProcess::isAvailable()
{
-#ifdef TOO_OLD_WINSDK
- return false; //very importnant! ConPty can be built, but it doesn't work if built with old sdk and Win10 < 1903
-#endif
-
qint32 buildNumber = QSysInfo::kernelVersion().split(".").last().toInt();
if (buildNumber < CONPTY_MINIMAL_WINDOWS_VERSION)
return false;
diff --git a/src/libs/3rdparty/libptyqt/conptyprocess.h b/src/libs/3rdparty/libptyqt/conptyprocess.h
index aaf56fe76f1..0f30288dab9 100644
--- a/src/libs/3rdparty/libptyqt/conptyprocess.h
+++ b/src/libs/3rdparty/libptyqt/conptyprocess.h
@@ -20,7 +20,6 @@
typedef VOID* HPCON;
-#define TOO_OLD_WINSDK
#endif
class QWinEventNotifier;
diff --git a/src/plugins/android/Android.json.in b/src/plugins/android/Android.json.in
index f314302842f..92d62903a58 100644
--- a/src/plugins/android/Android.json.in
+++ b/src/plugins/android/Android.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Develop applications for Android devices",
+ "Description" : "Develop applications for Android devices.",
"LongDescription" : [
"Connect devices with USB to run, debug, and analyze applications built for them.",
"You also need:",
diff --git a/src/plugins/appstatisticsmonitor/AppStatisticsMonitor.json.in b/src/plugins/appstatisticsmonitor/AppStatisticsMonitor.json.in
index 757acf5052f..26202be6843 100644
--- a/src/plugins/appstatisticsmonitor/AppStatisticsMonitor.json.in
+++ b/src/plugins/appstatisticsmonitor/AppStatisticsMonitor.json.in
@@ -14,7 +14,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Visualize CPU and Memory consumption for running applications",
+ "Description" : "Visualize CPU and Memory consumption for running applications.",
"LongDescription" : [
"Select an application to monitor its performance in real-time."
],
diff --git a/src/plugins/autotest/AutoTest.json.in b/src/plugins/autotest/AutoTest.json.in
index 041d62a0f43..50a0aa7ef5d 100644
--- a/src/plugins/autotest/AutoTest.json.in
+++ b/src/plugins/autotest/AutoTest.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this file may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this file. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
-"Description" : "Create code based tests and build system based tests",
+"Description" : "Create code based tests and build system based tests.",
"LongDescription" : [
"Code based testing offers special handling for particular testing frameworks that strongly ties to the underlying code models or specialized parsers.",
"Build system based testing is independent from any testing frameworks. It retrieves information directly from the underlying build system and uses it or even the build system as such to execute the respective tests."
diff --git a/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in b/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in
index 008d370d73c..dfb233c23ae 100644
--- a/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in
+++ b/src/plugins/autotoolsprojectmanager/AutotoolsProjectManager.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Build Systems",
- "Description" : "Open Autotools-based projects in Qt Creator",
+ "Description" : "Open Autotools-based projects in Qt Creator.",
"LongDescription" : [
"You also need:",
"- Autotools",
diff --git a/src/plugins/axivion/Axivion.json.in b/src/plugins/axivion/Axivion.json.in
index c83b471b8a2..215b48595bd 100644
--- a/src/plugins/axivion/Axivion.json.in
+++ b/src/plugins/axivion/Axivion.json.in
@@ -15,7 +15,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Code Analyzer",
- "Description" : "Access an Axivion dashboard server",
+ "Description" : "Access an Axivion dashboard server.",
"LongDescription" : [
"Protect software from erosion with static code analysis, architecture analysis, and code-smells-detection."
],
diff --git a/src/plugins/baremetal/BareMetal.json.in b/src/plugins/baremetal/BareMetal.json.in
index 7499c5a773e..f4a7ded8112 100644
--- a/src/plugins/baremetal/BareMetal.json.in
+++ b/src/plugins/baremetal/BareMetal.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Develop applications for bare metal devices",
+ "Description" : "Develop applications for bare metal devices.",
"LongDescription" : [
"Adds a target for bare metal development.",
"Connect devices with debug server providers to run, debug, and analyze applications built for them.",
diff --git a/src/plugins/bazaar/Bazaar.json.in b/src/plugins/bazaar/Bazaar.json.in
index 41d2ff99093..4adb5553c94 100644
--- a/src/plugins/bazaar/Bazaar.json.in
+++ b/src/plugins/bazaar/Bazaar.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access the Bazaar version control system",
+ "Description" : "Access the Bazaar version control system.",
"LongDescription" : [
"You also need:",
"- Bazaar"
diff --git a/src/plugins/beautifier/Beautifier.json.in b/src/plugins/beautifier/Beautifier.json.in
index e00653b6f58..c73bc074150 100644
--- a/src/plugins/beautifier/Beautifier.json.in
+++ b/src/plugins/beautifier/Beautifier.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "C++",
- "Description" : "Apply indentation and style to source code files",
+ "Description" : "Apply indentation and style to source code files.",
"LongDescription" : [
"You also need one of the following tools:",
"- Artistic Style",
diff --git a/src/plugins/bineditor/BinEditor.json.in b/src/plugins/bineditor/BinEditor.json.in
index 8a3bad5e88b..db1f9981df1 100644
--- a/src/plugins/bineditor/BinEditor.json.in
+++ b/src/plugins/bineditor/BinEditor.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Creator",
- "Description" : "Edit binary files",
+ "Description" : "Edit binary files.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/boot2qt/Boot2Qt.json.in b/src/plugins/boot2qt/Boot2Qt.json.in
index c2ece20d50e..ba7146da3d6 100644
--- a/src/plugins/boot2qt/Boot2Qt.json.in
+++ b/src/plugins/boot2qt/Boot2Qt.json.in
@@ -15,7 +15,7 @@
],
"Category" : "Device Support",
- "Description" : "Develop applications for Boot to Qt devices",
+ "Description" : "Develop applications for Boot to Qt devices.",
"LongDescription" : [
"Connect devices with a USB cable, or a wired or wireless connection, depending on the device to run, debug, and analyze applications built for them.",
"You also need:",
diff --git a/src/plugins/clangcodemodel/ClangCodeModel.json.in b/src/plugins/clangcodemodel/ClangCodeModel.json.in
index 6a1dcf77291..56da5a325b8 100644
--- a/src/plugins/clangcodemodel/ClangCodeModel.json.in
+++ b/src/plugins/clangcodemodel/ClangCodeModel.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "C++",
- "Description" : "Use Clang code model instead of the built-in code model",
+ "Description" : "Use Clang code model instead of the built-in code model.",
"LongDescription" : [
"The code model is the part of an IDE that understands the programming language you are using to write your application. With it, Qt Creator can help you code faster and avoid errors."
],
diff --git a/src/plugins/clangformat/ClangFormat.json.in b/src/plugins/clangformat/ClangFormat.json.in
index ba95c1c81d7..d845aff6d18 100644
--- a/src/plugins/clangformat/ClangFormat.json.in
+++ b/src/plugins/clangformat/ClangFormat.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "C++",
- "Description" : "Indent and format C++ code",
+ "Description" : "Indent and format C++ code.",
"LongDescription" : [
"ClangFormat is an alternative for the built-in indenter."
],
diff --git a/src/plugins/clangtools/ClangTools.json.in b/src/plugins/clangtools/ClangTools.json.in
index 04972829c0f..a8c9c6d9ae7 100644
--- a/src/plugins/clangtools/ClangTools.json.in
+++ b/src/plugins/clangtools/ClangTools.json.in
@@ -13,7 +13,7 @@
"Alternatively, this file may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this file. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Code Analyzer",
- "Description" : "Find problems in C, C++, and Objective-C source code",
+ "Description" : "Find problems in C, C++, and Objective-C source code.",
"LongDescription" : [
"Use Clang Tools for static code analysis:",
"- Clang-Tidy has diagnostics and fixes for typical programming errors, such as style violations or interface misuse.",
diff --git a/src/plugins/classview/ClassView.json.in b/src/plugins/classview/ClassView.json.in
index 0c0572a0484..3368fc7375b 100644
--- a/src/plugins/classview/ClassView.json.in
+++ b/src/plugins/classview/ClassView.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "C++",
- "Description" : "View the class hierarchy of currently open projects",
+ "Description" : "View the class hierarchy of currently open projects.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/clearcase/ClearCase.json.in b/src/plugins/clearcase/ClearCase.json.in
index a4f997601d9..c5a9722a2c0 100644
--- a/src/plugins/clearcase/ClearCase.json.in
+++ b/src/plugins/clearcase/ClearCase.json.in
@@ -15,7 +15,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access an IBM Rational ClearCase server",
+ "Description" : "Access an IBM Rational ClearCase server.",
"LongDescription" : [
"You also need:",
"- ClearCase"
diff --git a/src/plugins/cmakeprojectmanager/CMakeProjectManager.json.in b/src/plugins/cmakeprojectmanager/CMakeProjectManager.json.in
index 72621cda105..3a8cceda3e8 100644
--- a/src/plugins/cmakeprojectmanager/CMakeProjectManager.json.in
+++ b/src/plugins/cmakeprojectmanager/CMakeProjectManager.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Build Systems",
- "Description" : "Automate the configuration of build systems with CMake",
+ "Description" : "Automate the configuration of build systems with CMake.",
"LongDescription" : [
"CMake controls the software compilation process by using simple configuration files, called CMakeLists.txt files.",
"You also need:",
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index 178c2a68bfa..c3cae5ff62e 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -158,6 +158,7 @@ private:
QPushButton *m_batchEditButton = nullptr;
QPushButton *m_kitConfiguration = nullptr;
+ CMakeConfig m_configurationChanges;
};
static QModelIndex mapToSource(const QAbstractItemView *view, const QModelIndex &idx)
@@ -416,6 +417,11 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
updateButtonState();
m_showProgressTimer.stop();
m_progressIndicator->hide();
+
+ if (!m_configurationChanges.isEmpty()) {
+ m_configModel->setBatchEditConfiguration(m_configurationChanges);
+ m_configurationChanges.clear();
+ }
updateConfigurationStateSelection();
});
@@ -502,8 +508,9 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
connect(bs, &CMakeBuildSystem::warningOccurred,
this, &CMakeBuildSettingsWidget::setWarning);
- connect(bs, &CMakeBuildSystem::configurationChanged,
- m_configModel, &ConfigModel::setBatchEditConfiguration);
+ connect(bs, &CMakeBuildSystem::configurationChanged, this, [this](const CMakeConfig &config) {
+ m_configurationChanges = config;
+ });
updateFromKit();
connect(m_buildConfig->target(), &Target::kitChanged,
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
index c396bde59a1..540192d2d21 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildsystem.cpp
@@ -1488,6 +1488,11 @@ void CMakeBuildSystem::updateFallbackProjectData()
Tr::tr("Scan \"%1\" project tree")
.arg(project()->displayName()),
"CMake.Scan.Tree");
+
+ // A failed configuration could be the result of an compiler update
+ // which then would cause CMake to fail. Make sure to offer an upgrade path
+ // to the new Kit compiler values.
+ updateInitialCMakeExpandableVars();
}
void CMakeBuildSystem::updateCMakeConfiguration(QString &errorMessage)
@@ -2323,6 +2328,18 @@ void CMakeBuildSystem::updateInitialCMakeExpandableVars()
}
}
+ // Handle MSVC C/C++ compiler update, by udating also the linker, otherwise projects
+ // will fail to compile by using a linker that doesn't exist
+ const FilePath cxxCompiler = config.filePathValueOf("CMAKE_CXX_COMPILER");
+ if (!cxxCompiler.isEmpty() && cxxCompiler.fileName() == "cl.exe") {
+ const FilePath linker = cm.filePathValueOf("CMAKE_LINKER");
+ if (!linker.exists())
+ config << CMakeConfigItem(
+ "CMAKE_LINKER",
+ CMakeConfigItem::FILEPATH,
+ cxxCompiler.parentDir().pathAppended(linker.fileName()).path().toUtf8());
+ }
+
if (!config.isEmpty())
emit configurationChanged(config);
}
diff --git a/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp b/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp
index bfafe8b2ea1..bfc66d763bb 100644
--- a/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakekitaspect.cpp
@@ -97,6 +97,7 @@ public:
private:
QVariant defaultValue(const Kit *k) const;
+ bool isNinjaPresent(const Kit *k, const CMakeTool *tool) const;
};
class CMakeConfigurationKitAspectFactory : public KitAspectFactory
@@ -556,6 +557,17 @@ CMakeGeneratorKitAspectFactory::CMakeGeneratorKitAspectFactory()
setDescription(Tr::tr("CMake generator defines how a project is built when using CMake.
"
"This setting is ignored when using other build systems."));
setPriority(19000);
+
+ auto updateKits = [this] {
+ if (KitManager::isLoaded()) {
+ for (Kit *k : KitManager::kits())
+ fix(k);
+ }
+ };
+
+ //make sure the default value is set if a new default CMake is set
+ connect(CMakeToolManager::instance(), &CMakeToolManager::defaultCMakeChanged,
+ this, updateKits);
}
QString CMakeGeneratorKitAspect::generator(const Kit *k)
@@ -664,18 +676,7 @@ QVariant CMakeGeneratorKitAspectFactory::defaultValue(const Kit *k) const
return g.matches("Ninja");
});
if (it != known.constEnd()) {
- const bool hasNinja = [k, tool] {
- if (Internal::settings(nullptr).ninjaPath().isEmpty()) {
- auto findNinja = [](const Environment &env) -> bool {
- return !env.searchInPath("ninja").isEmpty();
- };
- if (!findNinja(tool->filePath().deviceEnvironment()))
- return findNinja(k->buildEnvironment());
- }
- return true;
- }();
-
- if (hasNinja)
+ if (isNinjaPresent(k, tool))
return GeneratorInfo("Ninja").toVariant();
}
@@ -725,6 +726,18 @@ QVariant CMakeGeneratorKitAspectFactory::defaultValue(const Kit *k) const
return GeneratorInfo(it->name).toVariant();
}
+bool CMakeGeneratorKitAspectFactory::isNinjaPresent(const Kit *k, const CMakeTool *tool) const
+{
+ if (Internal::settings(nullptr).ninjaPath().isEmpty()) {
+ auto findNinja = [](const Environment &env) -> bool {
+ return !env.searchInPath("ninja").isEmpty();
+ };
+ if (!findNinja(tool->filePath().deviceEnvironment()))
+ return findNinja(k->buildEnvironment());
+ }
+ return true;
+}
+
Tasks CMakeGeneratorKitAspectFactory::validate(const Kit *k) const
{
CMakeTool *tool = CMakeKitAspect::cmakeTool(k);
@@ -783,7 +796,7 @@ void CMakeGeneratorKitAspectFactory::fix(Kit *k)
[info](const CMakeTool::Generator &g) {
return g.matches(info.generator);
});
- if (it == known.constEnd()) {
+ if (it == known.constEnd() || (info.generator == "Ninja" && !isNinjaPresent(k, tool))) {
GeneratorInfo dv;
dv.fromVariant(defaultValue(k));
setGeneratorInfo(k, dv);
diff --git a/src/plugins/coco/Coco.json.in b/src/plugins/coco/Coco.json.in
index 4da4961402b..74ad4d34688 100644
--- a/src/plugins/coco/Coco.json.in
+++ b/src/plugins/coco/Coco.json.in
@@ -13,7 +13,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Access the Coco CoverageBrowser",
+ "Description" : "Access the Coco CoverageBrowser.",
"LongDescription" : [
"View the results from the Coco CoverageBrowser to make tests more efficient and complete."
],
diff --git a/src/plugins/compilationdatabaseprojectmanager/CompilationDatabaseProjectManager.json.in b/src/plugins/compilationdatabaseprojectmanager/CompilationDatabaseProjectManager.json.in
index 9dd0696934c..a72026b8a46 100644
--- a/src/plugins/compilationdatabaseprojectmanager/CompilationDatabaseProjectManager.json.in
+++ b/src/plugins/compilationdatabaseprojectmanager/CompilationDatabaseProjectManager.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Build Systems",
- "Description" : "Open compilation databases as projects",
+ "Description" : "Open compilation databases as projects.",
"LongDescription" : [
"The JSON compilation database format replays single builds independently of the build system.",
"A compilation database is a list of files and the compiler flags that are used to compile the files. It feeds the code model with the necessary information for correctly parsing the code when you open a file for editing.",
diff --git a/src/plugins/conan/Conan.json.in b/src/plugins/conan/Conan.json.in
index 4d5fd7412ea..78d1e8d8f7a 100644
--- a/src/plugins/conan/Conan.json.in
+++ b/src/plugins/conan/Conan.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Experimental" : true,
- "Description" : "Integrate C or C++ libraries into projects",
+ "Description" : "Integrate C or C++ libraries into projects.",
"LongDescription" : [
"You also need:",
"- Conan"
diff --git a/src/plugins/copilot/Copilot.json.in b/src/plugins/copilot/Copilot.json.in
index 7e04ed8b0d2..788f26f2e18 100644
--- a/src/plugins/copilot/Copilot.json.in
+++ b/src/plugins/copilot/Copilot.json.in
@@ -13,7 +13,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "View suggestions from GitHub Copilot in code editor",
+ "Description" : "View suggestions from GitHub Copilot in code editor.",
"LongDescription" : [
"You also need:",
"- An active GitHub Copilot subscription",
diff --git a/src/plugins/cpaster/CodePaster.json.in b/src/plugins/cpaster/CodePaster.json.in
index ee852df2162..f5239abe2b5 100644
--- a/src/plugins/cpaster/CodePaster.json.in
+++ b/src/plugins/cpaster/CodePaster.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Access code-pasting services",
+ "Description" : "Access code-pasting services.",
"LongDescription" : [
"Paste snippets of text, such as code or diffs, to a server or fetch them from the server."
],
diff --git a/src/plugins/cppcheck/Cppcheck.json.in b/src/plugins/cppcheck/Cppcheck.json.in
index dd9ba185d1e..47c0804bc64 100644
--- a/src/plugins/cppcheck/Cppcheck.json.in
+++ b/src/plugins/cppcheck/Cppcheck.json.in
@@ -14,7 +14,7 @@
"Alternatively, this file may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this file. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Code Analyzer",
- "Description" : "Find errors in C++ code with static analysis",
+ "Description" : "Find errors in C++ code with static analysis.",
"LongDescription" : [
"You also need:",
"- cppcheck"
diff --git a/src/plugins/cppeditor/CppEditor.json.in b/src/plugins/cppeditor/CppEditor.json.in
index 169df1ed651..9244161993a 100644
--- a/src/plugins/cppeditor/CppEditor.json.in
+++ b/src/plugins/cppeditor/CppEditor.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "C++",
- "Description" : "Edit C++ source and header files",
+ "Description" : "Edit C++ source and header files.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES},
diff --git a/src/plugins/ctfvisualizer/CtfVisualizer.json.in b/src/plugins/ctfvisualizer/CtfVisualizer.json.in
index a887857bc01..1b6f891cb7e 100644
--- a/src/plugins/ctfvisualizer/CtfVisualizer.json.in
+++ b/src/plugins/ctfvisualizer/CtfVisualizer.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Code Analyzer",
- "Description" : "View Chrome Trace Format (CTF) files",
+ "Description" : "View Chrome Trace Format (CTF) files.",
"LongDescription" : [
"You also need:",
"- CTF files (in Trace Event Format)"
diff --git a/src/plugins/cvs/CVS.json.in b/src/plugins/cvs/CVS.json.in
index 9ea0a986ca5..0ac2a7283b4 100644
--- a/src/plugins/cvs/CVS.json.in
+++ b/src/plugins/cvs/CVS.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access the CVS open source version control system",
+ "Description" : "Access the CVS open source version control system.",
"LongDescription" : [],
"DisabledByDefault" : true,
"Url" : "https://www.qt.io",
diff --git a/src/plugins/debugger/Debugger.json.in b/src/plugins/debugger/Debugger.json.in
index ce4282d0ed7..c86d3988bf3 100644
--- a/src/plugins/debugger/Debugger.json.in
+++ b/src/plugins/debugger/Debugger.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Creator",
- "Description" : "Debug applications with native debuggers",
+ "Description" : "Debug applications with native debuggers.",
"LongDescription" : [
"Debug an application to see what happens inside it while it runs or when it crashes.",
"The debugger extension acts as an interface between the Qt Creator core and native debuggers.",
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 6b264911cc4..b5e8a3cba8d 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -125,6 +125,9 @@ public:
// Used by Valgrind
QStringList expectedSignals;
+ // For QNX debugging
+ bool useCtrlCStub = false;
+
// Used by Android to avoid false positives on warnOnRelease
bool skipExecutableValidation = false;
bool useTargetAsync = false;
diff --git a/src/plugins/debugger/debuggerruncontrol.cpp b/src/plugins/debugger/debuggerruncontrol.cpp
index 2ff53099e4b..007d3464bb8 100644
--- a/src/plugins/debugger/debuggerruncontrol.cpp
+++ b/src/plugins/debugger/debuggerruncontrol.cpp
@@ -276,6 +276,11 @@ void DebuggerRunTool::setSkipExecutableValidation(bool on)
m_runParameters.skipExecutableValidation = on;
}
+void DebuggerRunTool::setUseCtrlCStub(bool on)
+{
+ m_runParameters.useCtrlCStub = on;
+}
+
void DebuggerRunTool::setBreakOnMain(bool on)
{
m_runParameters.breakOnMain = on;
diff --git a/src/plugins/debugger/debuggerruncontrol.h b/src/plugins/debugger/debuggerruncontrol.h
index bfd53299a1b..39fb7e9507f 100644
--- a/src/plugins/debugger/debuggerruncontrol.h
+++ b/src/plugins/debugger/debuggerruncontrol.h
@@ -100,6 +100,7 @@ protected:
void setRemoteChannel(const QUrl &url);
void setUseTargetAsync(bool on);
void setSkipExecutableValidation(bool on);
+ void setUseCtrlCStub(bool on);
void setIosPlatform(const QString &platform);
void setDeviceSymbolsRoot(const QString &deviceSymbolsRoot);
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index b31ee7130e4..41d26962c96 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -126,7 +126,6 @@ const char notCompatibleMessage[] = "is not compatible with target architecture"
GdbEngine::GdbEngine()
{
m_gdbProc.setProcessMode(ProcessMode::Writer);
- m_gdbProc.setUseCtrlCStub(true);
setObjectName("GdbEngine");
setDebuggerName("GDB");
@@ -471,7 +470,7 @@ void GdbEngine::handleAsyncOutput(const QStringView asyncClass, const GdbMi &res
Module module;
module.startAddress = 0;
module.endAddress = 0;
- module.hostPath = Utils::FilePath::fromString(result["host-name"].data());
+ module.hostPath = Utils::FilePath::fromUserInput(result["host-name"].data());
const QString target = result["target-name"].data();
module.modulePath = runParameters().inferior.command.executable().withNewPath(target);
module.moduleName = module.hostPath.baseName();
@@ -676,7 +675,28 @@ void GdbEngine::interruptInferior()
} else {
showStatusMessage(Tr::tr("Stop requested..."), 5000);
showMessage("TRYING TO INTERRUPT INFERIOR");
- interruptInferior2();
+ // Ctrl+C events are only handled properly for console applications on Windows
+ // when gdb debugs a GUI application the CTRL+C events are not handled
+ if (HostOsInfo::isWindowsHost() && !m_isQnxGdb) {
+ IDevice::ConstPtr dev = device();
+ QTC_ASSERT(dev, notifyInferiorStopFailed(); return);
+ DeviceProcessSignalOperation::Ptr signalOperation = dev->signalOperation();
+ QTC_ASSERT(signalOperation, notifyInferiorStopFailed(); return);
+ connect(signalOperation.get(), &DeviceProcessSignalOperation::finished,
+ this, [this, signalOperation](const QString &error) {
+ if (error.isEmpty()) {
+ showMessage("Interrupted " + QString::number(inferiorPid()));
+ notifyInferiorStopOk();
+ } else {
+ showMessage(error, LogError);
+ notifyInferiorStopFailed();
+ }
+ });
+ signalOperation->setDebuggerCommand(runParameters().debugger.command.executable());
+ signalOperation->interruptProcess(inferiorPid());
+ } else {
+ interruptInferior2();
+ }
}
}
@@ -1249,11 +1269,9 @@ void GdbEngine::handleStopResponse(const GdbMi &data)
handleStop1(data);
}
-static QStringList stopSignals(const Abi &abi)
+static QString stopSignal(const Abi &abi)
{
- static QStringList winSignals = { "SIGTRAP", "SIGINT" };
- static QStringList unixSignals = { "SIGINT" };
- return abi.os() == Abi::WindowsOS ? winSignals : unixSignals;
+ return QLatin1String(abi.os() == Abi::WindowsOS ? "SIGTRAP" : "SIGINT");
}
void GdbEngine::handleStop1(const GdbMi &data)
@@ -1402,7 +1420,7 @@ void GdbEngine::handleStop2(const GdbMi &data)
QString meaning = data["signal-meaning"].data();
// Ignore these as they are showing up regularly when
// stopping debugging.
- if (stopSignals(rp.toolChainAbi).contains(name) || rp.expectedSignals.contains(name)) {
+ if (name == stopSignal(rp.toolChainAbi) || rp.expectedSignals.contains(name)) {
showMessage(name + " CONSIDERED HARMLESS. CONTINUING.");
} else if (m_isQnxGdb && name == "0" && meaning == "Signal 0") {
showMessage("SIGNAL 0 CONSIDERED BOGUS.");
@@ -3807,6 +3825,9 @@ void GdbEngine::setupEngine()
CHECK_STATE(EngineSetupRequested);
showMessage("TRYING TO START ADAPTER");
+ if (isRemoteEngine())
+ m_gdbProc.setUseCtrlCStub(runParameters().useCtrlCStub); // This is only set for QNX
+
const DebuggerRunParameters &rp = runParameters();
CommandLine gdbCommand = rp.debugger.command;
@@ -4301,6 +4322,7 @@ void GdbEngine::interruptLocalInferior(qint64 pid)
showMessage("TRYING TO INTERRUPT INFERIOR BEFORE PID WAS OBTAINED", LogError);
return;
}
+ QString errorMessage;
if (runParameters().runAsRoot) {
Environment env = Environment::systemEnvironment();
RunControl::provideAskPassEntry(env);
@@ -4309,8 +4331,11 @@ void GdbEngine::interruptLocalInferior(qint64 pid)
proc.setEnvironment(env);
proc.start();
proc.waitForFinished();
+ } else if (interruptProcess(pid, &errorMessage)) {
+ showMessage("Interrupted " + QString::number(pid));
} else {
- m_gdbProc.interrupt();
+ showMessage(errorMessage, LogError);
+ notifyInferiorStopFailed();
}
}
diff --git a/src/plugins/designer/Designer.json.in b/src/plugins/designer/Designer.json.in
index 966becb0d41..5f735730f70 100644
--- a/src/plugins/designer/Designer.json.in
+++ b/src/plugins/designer/Designer.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Creator",
- "Description" : "Design Qt-widgets based UIs",
+ "Description" : "Design Qt-widgets based UIs.",
"LongDescription" : [
"Create widgets and forms that are integrated with Qt C++ code."
],
diff --git a/src/plugins/diffeditor/DiffEditor.json.in b/src/plugins/diffeditor/DiffEditor.json.in
index 754475b537c..4162632dfc4 100644
--- a/src/plugins/diffeditor/DiffEditor.json.in
+++ b/src/plugins/diffeditor/DiffEditor.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Compare two files or two versions of a file",
+ "Description" : "Compare two files or two versions of a file.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/docker/Docker.json.in b/src/plugins/docker/Docker.json.in
index d587e7d0a9e..4cbb6cbb9d9 100644
--- a/src/plugins/docker/Docker.json.in
+++ b/src/plugins/docker/Docker.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Experimental" : true,
- "Description" : "Create Docker devices from Docker images",
+ "Description" : "Create Docker devices from Docker images.",
"LongDescription" : [
"You also need:",
"- Docker CLI"
diff --git a/src/plugins/extensionmanager/ExtensionManager.json.in b/src/plugins/extensionmanager/ExtensionManager.json.in
index e3710427c4f..7e2056ebf5c 100644
--- a/src/plugins/extensionmanager/ExtensionManager.json.in
+++ b/src/plugins/extensionmanager/ExtensionManager.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Core",
- "Description" : "Extension Manager",
+ "Description" : "Manage ${IDE_DISPLAY_NAME} extensions.",
"Experimental": true,
"DisabledByDefault": false,
"Url" : "https://www.qt.io",
diff --git a/src/plugins/extensionmanager/extensionmanager.qbs b/src/plugins/extensionmanager/extensionmanager.qbs
index 1a456824a7c..0d5fa5cb259 100644
--- a/src/plugins/extensionmanager/extensionmanager.qbs
+++ b/src/plugins/extensionmanager/extensionmanager.qbs
@@ -4,6 +4,7 @@ QtcPlugin {
name: "ExtensionManager"
Depends { name: "Core" }
+ Depends { name: "Spinner" }
Depends { name: "Tasking" }
Depends { name: "Qt.network" }
diff --git a/src/plugins/extensionmanager/extensionmanagerwidget.cpp b/src/plugins/extensionmanager/extensionmanagerwidget.cpp
index c2dc396cece..429d9a241f3 100644
--- a/src/plugins/extensionmanager/extensionmanagerwidget.cpp
+++ b/src/plugins/extensionmanager/extensionmanagerwidget.cpp
@@ -53,6 +53,8 @@ using namespace WelcomePageHelpers;
namespace ExtensionManager::Internal {
+Q_LOGGING_CATEGORY(widgetLog, "qtc.extensionmanager.widget", QtWarningMsg)
+
constexpr TextFormat h5TF
{Theme::Token_Text_Default, UiElement::UiElementH5};
constexpr TextFormat h6TF
@@ -111,7 +113,6 @@ private:
class HeadingWidget : public QWidget
{
- static constexpr QSize iconBgS{68, 68};
static constexpr int dividerH = 16;
Q_OBJECT
@@ -121,7 +122,7 @@ public:
: QWidget(parent)
{
m_icon = new QLabel;
- m_icon->setFixedSize(iconBgS);
+ m_icon->setFixedSize(iconBgSizeBig);
static const TextFormat titleTF
{Theme::Token_Text_Default, UiElementH4};
@@ -198,7 +199,7 @@ public:
if (!current.isValid())
return;
- m_icon->setPixmap(icon(current));
+ m_icon->setPixmap(itemIcon(current, SizeBig));
const QString name = current.data(RoleName).toString();
m_title->setText(name);
@@ -234,32 +235,6 @@ signals:
void vendorClicked(const QString &vendor);
private:
- static QPixmap icon(const QModelIndex &index)
- {
- const qreal dpr = qApp->devicePixelRatio();
- QPixmap pixmap(iconBgS * dpr);
- pixmap.fill(Qt::transparent);
- pixmap.setDevicePixelRatio(dpr);
- const QRect bgR(QPoint(), pixmap.deviceIndependentSize().toSize());
-
- QPainter p(&pixmap);
- QLinearGradient gradient(bgR.topRight(), bgR.bottomLeft());
- gradient.setStops(iconGradientStops(index));
- constexpr int iconRectRounding = 4;
- WelcomePageHelpers::drawCardBackground(&p, bgR, gradient, Qt::NoPen, iconRectRounding);
-
- // Icon
- constexpr Theme::Color color = Theme::Token_Basic_White;
- static const QIcon pack = Icon({{":/extensionmanager/images/packbig.png", color}},
- Icon::Tint).icon();
- static const QIcon extension = Icon({{":/extensionmanager/images/extensionbig.png",
- color}}, Icon::Tint).icon();
- const ItemType itemType = index.data(RoleItemType).value();
- (itemType == ItemTypePack ? pack : extension).paint(&p, bgR);
-
- return pixmap;
- }
-
QLabel *m_icon;
QLabel *m_title;
Button *m_vendor;
@@ -735,8 +710,10 @@ void ExtensionManagerWidget::fetchAndDisplayImage(const QUrl &url)
storage->url = url;
query.setRequest(QNetworkRequest(url));
query.setNetworkAccessManager(NetworkAccessManager::instance());
+ qCDebug(widgetLog).noquote() << "Sending image request:" << url.toDisplayString();
};
const auto onFetchDone = [storage](const NetworkQuery &query, DoneWith result) {
+ qCDebug(widgetLog) << "Got image QNetworkReply:" << query.reply()->error();
if (result == DoneWith::Success)
storage->imageData = query.reply()->readAll();
};
@@ -745,6 +722,9 @@ void ExtensionManagerWidget::fetchAndDisplayImage(const QUrl &url)
if (storage->imageData.isEmpty())
return;
m_imageDataBuffer.setData(storage->imageData);
+ qCDebug(widgetLog).noquote() << "Image reponse size:"
+ << QLocale::system().formattedDataSize(
+ m_imageDataBuffer.size());
if (!m_imageDataBuffer.open(QIODevice::ReadOnly))
return;
QImageReader reader(&m_imageDataBuffer);
@@ -756,6 +736,8 @@ void ExtensionManagerWidget::fetchAndDisplayImage(const QUrl &url)
const QPixmap pixmap = QPixmap::fromImage(reader.read());
m_image->setPixmap(pixmap);
}
+ qCDebug(widgetLog) << "Image dimensions:" << reader.size();
+ qCDebug(widgetLog) << "Image is animated:" << animated;
};
Group group{
diff --git a/src/plugins/extensionmanager/extensionsbrowser.cpp b/src/plugins/extensionmanager/extensionsbrowser.cpp
index d88e7f41d3e..da757c0bbfb 100644
--- a/src/plugins/extensionmanager/extensionsbrowser.cpp
+++ b/src/plugins/extensionmanager/extensionsbrowser.cpp
@@ -34,6 +34,7 @@
#include
#include
+#include
#include
#include
#include
@@ -61,7 +62,6 @@ class ExtensionItemDelegate : public QItemDelegate
{
public:
constexpr static QSize dividerS{1, 16};
- constexpr static QSize iconBgS{50, 50};
constexpr static TextFormat itemNameTF
{Theme::Token_Text_Default, UiElement::UiElementH6};
constexpr static TextFormat countTF
@@ -102,15 +102,15 @@ public:
const QRect bgRGlobal = option.rect.adjusted(0, 0, -gapSize, -gapSize);
const QRect bgR = bgRGlobal.translated(-option.rect.topLeft());
- const int middleColumnW = bgR.width() - ExPaddingGapL - iconBgS.width() - ExPaddingGapL
- - ExPaddingGapL;
+ const int middleColumnW = bgR.width() - ExPaddingGapL - iconBgSizeSmall.width()
+ - ExPaddingGapL - ExPaddingGapL;
int x = bgR.x();
int y = bgR.y();
x += ExPaddingGapL;
- const QRect iconBgR(x, y + (bgR.height() - iconBgS.height()) / 2,
- iconBgS.width(), iconBgS.height());
- x += iconBgS.width() + ExPaddingGapL;
+ const QRect iconBgR(x, y + (bgR.height() - iconBgSizeSmall.height()) / 2,
+ iconBgSizeSmall.width(), iconBgSizeSmall.height());
+ x += iconBgSizeSmall.width() + ExPaddingGapL;
y += ExPaddingGapL;
const QRect itemNameR(x, y, middleColumnW, itemNameTF.lineHeight());
const QString itemName = index.data().toString();
@@ -142,18 +142,8 @@ public:
WelcomePageHelpers::drawCardBackground(painter, bgR, fillColor, strokeColor);
}
{
- QLinearGradient gradient(iconBgR.topRight(), iconBgR.bottomLeft());
- gradient.setStops(iconGradientStops(index));
- constexpr int iconRectRounding = 4;
- drawCardBackground(painter, iconBgR, gradient, Qt::NoPen, iconRectRounding);
-
- // Icon
- constexpr Theme::Color color = Theme::Token_Basic_White;
- static const QIcon pack = Icon({{":/extensionmanager/images/packsmall.png", color}},
- Icon::Tint).icon();
- static const QIcon extension = Icon({{":/extensionmanager/images/extensionsmall.png",
- color}}, Icon::Tint).icon();
- (isPack ? pack : extension).paint(painter, iconBgR);
+ const QPixmap icon = itemIcon(index, SizeSmall);
+ painter->drawPixmap(iconBgR.topLeft(), icon);
}
if (isPack) {
constexpr int circleSize = 18;
@@ -241,7 +231,7 @@ public:
+ tagsTF.lineHeight();
const int height =
ExPaddingGapL
- + qMax(iconBgS.height(), middleColumnH)
+ + qMax(iconBgSizeSmall.height(), middleColumnH)
+ ExPaddingGapL;
return {cellWidth, height + gapSize};
}
@@ -341,6 +331,7 @@ ExtensionsBrowser::ExtensionsBrowser(QWidget *parent)
Theme::Token_Background_Default);
d->m_spinner = new SpinnerSolution::Spinner(SpinnerSolution::SpinnerSize::Large, this);
+ d->m_spinner->hide();
auto updateModel = [this] {
d->filterProxyModel->sort(0);
@@ -417,18 +408,20 @@ void ExtensionsBrowser::fetchExtensions()
= R"({"version":"%1","host_os":"%2","host_os_version":"%3","host_architecture":"%4","page_size":200})";
const QString request = url.arg(host) + requestTemplate
.arg(QCoreApplication::applicationVersion())
- .arg(QSysInfo::productType())
+ .arg(osTypeToString(HostOsInfo::hostOs()))
.arg(QSysInfo::productVersion())
.arg(QSysInfo::currentCpuArchitecture());
query.setRequest(QNetworkRequest(QUrl::fromUserInput(request)));
query.setNetworkAccessManager(NetworkAccessManager::instance());
- qCDebug(browserLog).noquote() << "Sending request:" << request;
+ qCDebug(browserLog).noquote() << "Sending JSON request:" << request;
d->m_spinner->show();
};
const auto onQueryDone = [this](const NetworkQuery &query, DoneWith result) {
const QByteArray response = query.reply()->readAll();
- qCDebug(browserLog).noquote() << "Got result" << result;
+ qCDebug(browserLog).noquote() << "Got JSON QNetworkReply:" << query.reply()->error();
if (result == DoneWith::Success) {
+ qCDebug(browserLog).noquote() << "JSON response size:"
+ << QLocale::system().formattedDataSize(response.size());
d->model->setExtensionsJson(response);
} else {
qCDebug(browserLog).noquote() << response;
@@ -459,20 +452,48 @@ QLabel *tfLabel(const TextFormat &tf, bool singleLine)
return label;
}
-QGradientStops iconGradientStops(const QModelIndex &index)
+QPixmap itemIcon(const QModelIndex &index, Size size)
{
- const PluginSpec *ps = pluginSpecForName(index.data(RoleName).toString());
- const bool greenGradient = ps != nullptr && ps->isEffectivelyEnabled();
+ const QSize iconBgS = size == SizeSmall ? iconBgSizeSmall : iconBgSizeBig;
+ const qreal dpr = qApp->devicePixelRatio();
+ QPixmap pixmap(iconBgS * dpr);
+ pixmap.fill(Qt::transparent);
+ pixmap.setDevicePixelRatio(dpr);
+ const QRect iconBgR(QPoint(), pixmap.deviceIndependentSize().toSize());
- const QColor startColor = creatorColor(greenGradient ? Theme::Token_Gradient01_Start
- : Theme::Token_Gradient02_Start);
- const QColor endColor = creatorColor(greenGradient ? Theme::Token_Gradient01_End
- : Theme::Token_Gradient02_End);
- const QGradientStops gradient = {
- {0, startColor},
- {1, endColor},
+ const PluginSpec *ps = pluginSpecForName(index.data(RoleName).toString());
+ const bool isEnabled = ps == nullptr || ps->isEffectivelyEnabled();
+ const QGradientStops gradientStops = {
+ {0, creatorColor(isEnabled ? Theme::Token_Gradient01_Start
+ : Theme::Token_Gradient02_Start)},
+ {1, creatorColor(isEnabled ? Theme::Token_Gradient01_End
+ : Theme::Token_Gradient02_End)},
};
- return gradient;
+
+ const Theme::Color color = Theme::Token_Basic_White;
+ static const QIcon packS = Icon({{":/extensionmanager/images/packsmall.png", color}},
+ Icon::Tint).icon();
+ static const QIcon packB = Icon({{":/extensionmanager/images/packbig.png", color}},
+ Icon::Tint).icon();
+ static const QIcon extensionS = Icon({{":/extensionmanager/images/extensionsmall.png",
+ color}}, Icon::Tint).icon();
+ static const QIcon extensionB = Icon({{":/extensionmanager/images/extensionbig.png",
+ color}}, Icon::Tint).icon();
+ const ItemType itemType = index.data(RoleItemType).value();
+ const QIcon &icon = (itemType == ItemTypePack) ? (size == SizeSmall ? packS : packB)
+ : (size == SizeSmall ? extensionS : extensionB);
+ const int iconRectRounding = 4;
+ const qreal iconOpacityDisabled = 0.6;
+
+ QPainter p(&pixmap);
+ QLinearGradient gradient(iconBgR.topRight(), iconBgR.bottomLeft());
+ gradient.setStops(gradientStops);
+ WelcomePageHelpers::drawCardBackground(&p, iconBgR, gradient, Qt::NoPen, iconRectRounding);
+ if (!isEnabled)
+ p.setOpacity(iconOpacityDisabled);
+ icon.paint(&p, iconBgR);
+
+ return pixmap;
}
} // ExtensionManager::Internal
diff --git a/src/plugins/extensionmanager/extensionsbrowser.h b/src/plugins/extensionmanager/extensionsbrowser.h
index 4e0b87c5936..f132f598810 100644
--- a/src/plugins/extensionmanager/extensionsbrowser.h
+++ b/src/plugins/extensionmanager/extensionsbrowser.h
@@ -40,6 +40,13 @@ private:
};
QLabel *tfLabel(const Core::WelcomePageHelpers::TextFormat &tf, bool singleLine = true);
-QGradientStops iconGradientStops(const QModelIndex &index);
+
+constexpr static QSize iconBgSizeSmall{50, 50};
+constexpr static QSize iconBgSizeBig{68, 68};
+enum Size {
+ SizeSmall,
+ SizeBig,
+};
+QPixmap itemIcon(const QModelIndex &index, Size size);
} // ExtensionManager::Internal
diff --git a/src/plugins/extensionmanager/extensionsmodel.cpp b/src/plugins/extensionmanager/extensionsmodel.cpp
index 2500f8f73f6..2f989df034f 100644
--- a/src/plugins/extensionmanager/extensionsmodel.cpp
+++ b/src/plugins/extensionmanager/extensionsmodel.cpp
@@ -261,7 +261,7 @@ public:
void ExtensionsModelPrivate::setExtensions(const Extensions &extensions)
{
this->extensions = extensions;
- qCDebug(modelLog) << "Number of extensions from json:" << this->extensions.count();
+ qCDebug(modelLog) << "Number of extensions from JSON:" << this->extensions.count();
addUnlistedLocalExtensions();
qCDebug(modelLog) << "Number of extensions with added local ones:" << this->extensions.count();
}
diff --git a/src/plugins/fakevim/FakeVim.json.in b/src/plugins/fakevim/FakeVim.json.in
index b2ae7f2a87b..1bb613fffc3 100644
--- a/src/plugins/fakevim/FakeVim.json.in
+++ b/src/plugins/fakevim/FakeVim.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Run the main editor in a manner similar to the Vim editor",
+ "Description" : "Run the main editor in a manner similar to the Vim editor.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/fossil/Fossil.json.in b/src/plugins/fossil/Fossil.json.in
index 02bc83e599d..644998a6d15 100644
--- a/src/plugins/fossil/Fossil.json.in
+++ b/src/plugins/fossil/Fossil.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access the Fossil version control system",
+ "Description" : "Access the Fossil version control system.",
"LongDescription" : [
"You also need:",
"- Fossil"
diff --git a/src/plugins/git/Git.json.in b/src/plugins/git/Git.json.in
index af1f550a7ad..d02e2d75150 100644
--- a/src/plugins/git/Git.json.in
+++ b/src/plugins/git/Git.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access the Git version control system",
+ "Description" : "Access the Git version control system.",
"LongDescription" : [
"You also need:",
"- Git"
diff --git a/src/plugins/git/gerrit/gerritpushdialog.cpp b/src/plugins/git/gerrit/gerritpushdialog.cpp
index 1a29273d095..02f7ecdb6b7 100644
--- a/src/plugins/git/gerrit/gerritpushdialog.cpp
+++ b/src/plugins/git/gerrit/gerritpushdialog.cpp
@@ -101,7 +101,7 @@ void GerritPushDialog::initRemoteBranches()
int refBranchIndex = ref.indexOf('/');
qint64 timeT = entries.at(1).left(entries.at(1).indexOf(' ')).toLongLong();
BranchDate bd(ref.mid(refBranchIndex + 1), QDateTime::fromSecsSinceEpoch(timeT).date());
- m_remoteBranches.insertMulti(ref.left(refBranchIndex), bd);
+ m_remoteBranches.insert(ref.left(refBranchIndex), bd);
}
m_remoteComboBox->updateRemotes(false);
}
@@ -339,7 +339,7 @@ void GerritPushDialog::setRemoteBranches(bool includeOld)
const QStringList remoteBranches =
gitClient().synchronousRepositoryBranches(remoteName, m_workingDir);
for (const QString &branch : remoteBranches)
- m_remoteBranches.insertMulti(remoteName, {branch, {}});
+ m_remoteBranches.insert(remoteName, {branch, {}});
if (remoteBranches.isEmpty()) {
m_targetBranchComboBox->setEditable(true);
m_targetBranchComboBox->setToolTip(
diff --git a/src/plugins/gitlab/GitLab.json.in b/src/plugins/gitlab/GitLab.json.in
index e446654bc4f..5d58885d608 100644
--- a/src/plugins/gitlab/GitLab.json.in
+++ b/src/plugins/gitlab/GitLab.json.in
@@ -13,7 +13,7 @@
"",
"Alternatively, this file may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this file. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
-"Description" : "Create connections to GitLab servers",
+"Description" : "Create connections to GitLab servers.",
"LongDescription" : [
"You also need:",
"- GitLab account"
diff --git a/src/plugins/glsleditor/GLSLEditor.json.in b/src/plugins/glsleditor/GLSLEditor.json.in
index dd3b7529698..254c53a2cf2 100644
--- a/src/plugins/glsleditor/GLSLEditor.json.in
+++ b/src/plugins/glsleditor/GLSLEditor.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Other Languages",
- "Description" : "Create OpenGL fragment and vertex shaders",
+ "Description" : "Create OpenGL fragment and vertex shaders.",
"LongDescription" : [
"Use the shaders to display hardware-accelerated 3D graphics alongside a more conventional UI."
],
diff --git a/src/plugins/haskell/Haskell.json.in b/src/plugins/haskell/Haskell.json.in
index 1473874ad95..96147540a37 100644
--- a/src/plugins/haskell/Haskell.json.in
+++ b/src/plugins/haskell/Haskell.json.in
@@ -6,7 +6,7 @@
"Vendor" : "Eike Ziller",
"Copyright" : "(C) Eike Ziller",
"License" : "MIT",
- "Description" : "Write source code in the Haskell language",
+ "Description" : "Write source code in the Haskell language.",
"LongDescription" : [],
"Url" : "https://haskell.org",
${IDE_PLUGIN_DEPENDENCIES},
diff --git a/src/plugins/help/Help.json.in b/src/plugins/help/Help.json.in
index cbb172e3b97..a6afd3a12a2 100644
--- a/src/plugins/help/Help.json.in
+++ b/src/plugins/help/Help.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Core",
- "Description" : "Get help for Qt API and read Qt and other documentation",
+ "Description" : "Get help for Qt API and read Qt and other documentation.",
"LongDescription" : [
"You also need:",
"- Qt documentation as help files (.qch)"
diff --git a/src/plugins/imageviewer/ImageViewer.json.in b/src/plugins/imageviewer/ImageViewer.json.in
index 4062ba072b6..4b3e37cb9c8 100644
--- a/src/plugins/imageviewer/ImageViewer.json.in
+++ b/src/plugins/imageviewer/ImageViewer.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "View images, and create pixmaps from SVG images",
+ "Description" : "View images, and create pixmaps from SVG images.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES},
diff --git a/src/plugins/incredibuild/IncrediBuild.json.in b/src/plugins/incredibuild/IncrediBuild.json.in
index a9bdab7ae30..8874505ff5a 100644
--- a/src/plugins/incredibuild/IncrediBuild.json.in
+++ b/src/plugins/incredibuild/IncrediBuild.json.in
@@ -15,7 +15,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Spend less time on building C++ code",
+ "Description" : "Spend less time on building C++ code.",
"LongDescription" : [
"You also need:",
"- IncrediBuild Agent"
diff --git a/src/plugins/insight/Insight.json.in b/src/plugins/insight/Insight.json.in
index 1f60965d80a..509cc361200 100644
--- a/src/plugins/insight/Insight.json.in
+++ b/src/plugins/insight/Insight.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Quick",
- "Description" : "Collect information about how an application is used",
+ "Description" : "Collect information about how an application is used.",
"LongDescription" : [
"Use Qt Insight with Qt Design Studio.",
"You also need:",
diff --git a/src/plugins/ios/Ios.json.in b/src/plugins/ios/Ios.json.in
index 2d3eedfef92..d58f96bc076 100644
--- a/src/plugins/ios/Ios.json.in
+++ b/src/plugins/ios/Ios.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Develop applications for iOS devices",
+ "Description" : "Develop applications for iOS devices.",
"LongDescription" : [
"Connect devices with USB or use the iOS simulator to run, debug, and analyze applications built for iOS.",
"You also need:",
diff --git a/src/plugins/languageclient/LanguageClient.json.in b/src/plugins/languageclient/LanguageClient.json.in
index 7b3ae960522..3c27e907cc8 100644
--- a/src/plugins/languageclient/LanguageClient.json.in
+++ b/src/plugins/languageclient/LanguageClient.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Other Languages",
- "Description" : "Get code editing services",
+ "Description" : "Get code editing services.",
"LongDescription" : [
"Offers code completion, highlighting of the symbol under cursor, and jumping to the symbol definition, as well as diagnostics from the language server."
],
diff --git a/src/plugins/languageclient/lualanguageclient/LuaLanguageClient.json.in b/src/plugins/languageclient/lualanguageclient/LuaLanguageClient.json.in
index 9497e53668b..0ac46c37638 100644
--- a/src/plugins/languageclient/lualanguageclient/LuaLanguageClient.json.in
+++ b/src/plugins/languageclient/lualanguageclient/LuaLanguageClient.json.in
@@ -15,7 +15,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Scripting",
- "Description" : "Lua Language Client scripting support",
+ "Description" : "Lua Language Client scripting support.",
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
}
diff --git a/src/plugins/macros/Macros.json.in b/src/plugins/macros/Macros.json.in
index c43396152b6..32740b0f7ac 100644
--- a/src/plugins/macros/Macros.json.in
+++ b/src/plugins/macros/Macros.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Record and play macros in text editors",
+ "Description" : "Record and play macros in text editors.",
"LongDescription" : [
"When you have a file open in the code editor, you can record a keyboard sequence as a macro. You can then play the macro to repeat the sequence. You can save the latest macro and assign a keyboard shortcut for running it or run it from the locator."
],
diff --git a/src/plugins/marketplace/Marketplace.json.in b/src/plugins/marketplace/Marketplace.json.in
index d6422b2cd90..5d529715878 100644
--- a/src/plugins/marketplace/Marketplace.json.in
+++ b/src/plugins/marketplace/Marketplace.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this file may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this file. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
-"Description" : "Install applications from Qt Marketplace",
+"Description" : "Install applications from Qt Marketplace.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/mcusupport/McuSupport.json.in b/src/plugins/mcusupport/McuSupport.json.in
index 10649759893..80eb3b4eada 100644
--- a/src/plugins/mcusupport/McuSupport.json.in
+++ b/src/plugins/mcusupport/McuSupport.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Develop for microcontrollers",
+ "Description" : "Develop for microcontrollers.",
"LongDescription" : [
"Use subsets of QML and Qt Quick Controls to create user interfaces for devices that are powered by microcontrollers (MCU).",
"You also need:",
diff --git a/src/plugins/mercurial/Mercurial.json.in b/src/plugins/mercurial/Mercurial.json.in
index e6be967df69..bcd6da7610a 100644
--- a/src/plugins/mercurial/Mercurial.json.in
+++ b/src/plugins/mercurial/Mercurial.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access the Mercurial source control management tool",
+ "Description" : "Access the Mercurial source control management tool.",
"LongDescription" : [
"You also need:",
"- Mercurial"
diff --git a/src/plugins/mesonprojectmanager/MesonProjectManager.json.in b/src/plugins/mesonprojectmanager/MesonProjectManager.json.in
index 0dbf60653fa..cd293ce4d75 100644
--- a/src/plugins/mesonprojectmanager/MesonProjectManager.json.in
+++ b/src/plugins/mesonprojectmanager/MesonProjectManager.json.in
@@ -15,7 +15,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Build Systems",
- "Description" : "Generate build systems with Meson",
+ "Description" : "Generate build systems with Meson.",
"LongDescription" : [
"Generate build systems with Meson using Ninja as the main backend.",
"You also need:",
diff --git a/src/plugins/modeleditor/ModelEditor.json.in b/src/plugins/modeleditor/ModelEditor.json.in
index bbf2d204d47..80680306753 100644
--- a/src/plugins/modeleditor/ModelEditor.json.in
+++ b/src/plugins/modeleditor/ModelEditor.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Modeling",
- "Description" : "Create Universal Modeling Language (UML) style models",
+ "Description" : "Create Universal Modeling Language (UML) style models.",
"LongDescription" : [
"Create structured and behavioral diagrams that offer different views to your system. However, the editor uses a variant of UML and has only a subset of properties for specifying the appearance of model elements."
],
diff --git a/src/plugins/nim/Nim.json.in b/src/plugins/nim/Nim.json.in
index 82369b316b9..ea53307e0de 100644
--- a/src/plugins/nim/Nim.json.in
+++ b/src/plugins/nim/Nim.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Other Languages",
- "Description" : "Develop applications using the Nim programming language",
+ "Description" : "Develop applications using the Nim programming language.",
"LongDescription" : [
"You also need:",
"- Nimble packaging manager"
diff --git a/src/plugins/perforce/Perforce.json.in b/src/plugins/perforce/Perforce.json.in
index 1bfaa701edd..69e8f8e5e3e 100644
--- a/src/plugins/perforce/Perforce.json.in
+++ b/src/plugins/perforce/Perforce.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access the Perforce software configuration management system",
+ "Description" : "Access the Perforce software configuration management system.",
"LongDescription" : [
"You also need:",
"- Perforce"
diff --git a/src/plugins/perfprofiler/PerfProfiler.json.in b/src/plugins/perfprofiler/PerfProfiler.json.in
index eeca090e048..6af65d17bdb 100644
--- a/src/plugins/perfprofiler/PerfProfiler.json.in
+++ b/src/plugins/perfprofiler/PerfProfiler.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Code Analyzer",
- "Description" : "Analyze the CPU and memory usage of an application",
+ "Description" : "Analyze the CPU and memory usage of an application.",
"LongDescription" : [
"Works on embedded devices and, to a limited extent, on Linux desktop platforms.",
"You also need:",
diff --git a/src/plugins/projectexplorer/images/run_mask.png b/src/plugins/projectexplorer/images/run_mask.png
index a6f8867950d..37d3802f388 100644
Binary files a/src/plugins/projectexplorer/images/run_mask.png and b/src/plugins/projectexplorer/images/run_mask.png differ
diff --git a/src/plugins/projectexplorer/images/run_mask@2x.png b/src/plugins/projectexplorer/images/run_mask@2x.png
index 0fb3ec7b51c..0be2cd1b3ad 100644
Binary files a/src/plugins/projectexplorer/images/run_mask@2x.png and b/src/plugins/projectexplorer/images/run_mask@2x.png differ
diff --git a/src/plugins/python/Python.json.in b/src/plugins/python/Python.json.in
index 19c46948642..11432e74cca 100644
--- a/src/plugins/python/Python.json.in
+++ b/src/plugins/python/Python.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Other Languages",
- "Description" : "Develop applications using the Qt bindings for the Python programming language",
+ "Description" : "Develop applications using the Qt bindings for the Python programming language.",
"LongDescription" : [
"You also need:",
"- Qt for Python",
diff --git a/src/plugins/qbsprojectmanager/QbsProjectManager.json.in b/src/plugins/qbsprojectmanager/QbsProjectManager.json.in
index 522593366da..3d5f3a07ba5 100644
--- a/src/plugins/qbsprojectmanager/QbsProjectManager.json.in
+++ b/src/plugins/qbsprojectmanager/QbsProjectManager.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Build Systems",
- "Description" : "Build applications with Qbs",
+ "Description" : "Build applications with Qbs.",
"LongDescription" : [
"Generate a build graph from a high-level project description (like with qmake or CMake) and execute the commands in the low-level build graph (like with make)."
],
diff --git a/src/plugins/qmakeprojectmanager/QmakeProjectManager.json.in b/src/plugins/qmakeprojectmanager/QmakeProjectManager.json.in
index 8b2cc0cb385..c3815d405a5 100644
--- a/src/plugins/qmakeprojectmanager/QmakeProjectManager.json.in
+++ b/src/plugins/qmakeprojectmanager/QmakeProjectManager.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Build Systems",
- "Description" : "Build applications with qmake",
+ "Description" : "Build applications with qmake.",
"LongDescription" : [
"Use .pro project configuration files and tools that automate the generation of Makefiles."
],
diff --git a/src/plugins/qmldesignerlite/QmlDesignerLite.json.in b/src/plugins/qmldesignerlite/QmlDesignerLite.json.in
index 80944b30874..0a40a22f77f 100644
--- a/src/plugins/qmldesignerlite/QmlDesignerLite.json.in
+++ b/src/plugins/qmldesignerlite/QmlDesignerLite.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Quick",
- "Description" : "Qml Designer Lite",
+ "Description" : "Qml Designer Lite.",
"LongDescription": "Qml Designer Lite is a lightweight version of Qt Design Studio, providing a subset of the features of the full Qt Design Studio.",
"Url" : "https://www.qt.io",
"Experimental": true,
diff --git a/src/plugins/qmljseditor/QmlJSEditor.json.in b/src/plugins/qmljseditor/QmlJSEditor.json.in
index f12625d6bf3..d57c9cda3da 100644
--- a/src/plugins/qmljseditor/QmlJSEditor.json.in
+++ b/src/plugins/qmljseditor/QmlJSEditor.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Quick",
- "Description" : "Edit QML and JavaScript files",
+ "Description" : "Edit QML and JavaScript files.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/qmlpreview/QmlPreview.json.in b/src/plugins/qmlpreview/QmlPreview.json.in
index 76aec1c762e..1c95dd8b8f8 100644
--- a/src/plugins/qmlpreview/QmlPreview.json.in
+++ b/src/plugins/qmlpreview/QmlPreview.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Quick",
- "Description" : "Preview QML files and Qt Quick applications",
+ "Description" : "Preview QML files and Qt Quick applications.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/qmlprofiler/QmlProfiler.json.in b/src/plugins/qmlprofiler/QmlProfiler.json.in
index 3d34fb9d555..a7bb7c1357a 100644
--- a/src/plugins/qmlprofiler/QmlProfiler.json.in
+++ b/src/plugins/qmlprofiler/QmlProfiler.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Quick",
- "Description" : "Profile Qt Quick applications",
+ "Description" : "Profile Qt Quick applications.",
"LongDescription" : [
"Find causes for typical performance problems, such as slowness and unresponsive, stuttering user interfaces."
],
diff --git a/src/plugins/qmlprojectmanager/QmlProjectManager.json.in b/src/plugins/qmlprojectmanager/QmlProjectManager.json.in
index 18388275f3a..9146e1dcfae 100644
--- a/src/plugins/qmlprojectmanager/QmlProjectManager.json.in
+++ b/src/plugins/qmlprojectmanager/QmlProjectManager.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Quick",
- "Description" : "Qt Quick support",
+ "Description" : "Qt Quick support.",
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES},
diff --git a/src/plugins/qmlprojectmanager/qmlmainfileaspect.cpp b/src/plugins/qmlprojectmanager/qmlmainfileaspect.cpp
index 983b7126336..19f2f194717 100644
--- a/src/plugins/qmlprojectmanager/qmlmainfileaspect.cpp
+++ b/src/plugins/qmlprojectmanager/qmlmainfileaspect.cpp
@@ -49,6 +49,10 @@ QmlMainFileAspect::QmlMainFileAspect(AspectContainer *container)
this, &QmlMainFileAspect::changeCurrentFile);
connect(EditorManager::instance(), &EditorManager::currentDocumentStateChanged,
this, [this] { changeCurrentFile(); });
+ connect(ProjectExplorerPlugin::instance(),
+ &ProjectExplorerPlugin::fileListChanged,
+ this,
+ &QmlMainFileAspect::updateFileComboBox);
}
QmlMainFileAspect::~QmlMainFileAspect()
@@ -63,9 +67,6 @@ void QmlMainFileAspect::addToLayout(Layouting::Layout &parent)
m_fileListCombo->setModel(&m_fileListModel);
updateFileComboBox();
-
- connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::fileListChanged,
- this, &QmlMainFileAspect::updateFileComboBox);
connect(m_fileListCombo, &QComboBox::activated, this, &QmlMainFileAspect::setMainScript);
parent.addItems({Tr::tr("Main QML file:"), m_fileListCombo.data()});
@@ -93,7 +94,7 @@ void QmlMainFileAspect::updateFileComboBox()
const FilePath projectDir = m_target->project()->projectDirectory();
if (mainScriptSource() == FileInProjectFile) {
- const FilePath mainScriptInFilePath = projectDir.relativeChildPath(mainScript());
+ const FilePath mainScriptInFilePath = mainScript().relativePathFrom(projectDir);
m_fileListModel.clear();
m_fileListModel.appendRow(new QStandardItem(mainScriptInFilePath.toString()));
if (m_fileListCombo)
diff --git a/src/plugins/qnx/Qnx.json.in b/src/plugins/qnx/Qnx.json.in
index 0cd5d9f251e..526505401e0 100644
--- a/src/plugins/qnx/Qnx.json.in
+++ b/src/plugins/qnx/Qnx.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Develop for QNX Neutrino devices",
+ "Description" : "Develop for QNX Neutrino devices.",
"LongDescription" : [
"Connect devices with USB or over a network to run, debug, and analyze applications built for them.",
"You also need:",
diff --git a/src/plugins/qnx/qnxdebugsupport.cpp b/src/plugins/qnx/qnxdebugsupport.cpp
index 322c3553071..27c26e269c0 100644
--- a/src/plugins/qnx/qnxdebugsupport.cpp
+++ b/src/plugins/qnx/qnxdebugsupport.cpp
@@ -126,6 +126,7 @@ public:
setStartMode(AttachToRemoteServer);
setCloseMode(KillAtClose);
+ setUseCtrlCStub(true);
setSolibSearchPath(FileUtils::toFilePathList(searchPaths(k)));
if (auto qtVersion = dynamic_cast(QtSupport::QtKitAspect::qtVersion(k))) {
setSysRoot(qtVersion->qnxTarget());
@@ -195,6 +196,7 @@ public:
{
setId("QnxAttachDebugSupport");
setUsePortsGatherer(isCppDebugging(), isQmlDebugging());
+ setUseCtrlCStub(true);
if (isCppDebugging()) {
auto pdebugRunner = new PDebugRunner(runControl, portsGatherer());
diff --git a/src/plugins/qtapplicationmanager/QtApplicationManagerIntegration.json.in b/src/plugins/qtapplicationmanager/QtApplicationManagerIntegration.json.in
index e0979736924..e07a2e40744 100644
--- a/src/plugins/qtapplicationmanager/QtApplicationManagerIntegration.json.in
+++ b/src/plugins/qtapplicationmanager/QtApplicationManagerIntegration.json.in
@@ -15,7 +15,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Run applications in Qt Application Manager",
+ "Description" : "Run applications in Qt Application Manager.",
"LongDescription" : [
"You also need:",
"- Qt Application Manager"
diff --git a/src/plugins/qtsupport/exampleslistmodel.cpp b/src/plugins/qtsupport/exampleslistmodel.cpp
index bb424077855..01c808275d3 100644
--- a/src/plugins/qtsupport/exampleslistmodel.cpp
+++ b/src/plugins/qtsupport/exampleslistmodel.cpp
@@ -28,12 +28,14 @@
#include
#include
-#include
-#include
using namespace Core;
using namespace Utils;
+const int kQtVersionIdRole = Qt::UserRole;
+const int kExtraSetIndexRole = Qt::UserRole + 1;
+const int kVersionRole = Qt::UserRole + 2;
+
namespace QtSupport {
namespace Internal {
@@ -112,43 +114,66 @@ ExampleSetModel::ExampleSetModel()
&ExampleSetModel::helpManagerInitialized);
}
-void ExampleSetModel::recreateModel(const QtVersions &qtVersions)
+void ExampleSetModel::recreateModel(const QtVersions &qtVersionsIn)
{
beginResetModel();
clear();
QHash extraManifestDirs;
- for (int i = 0; i < m_extraExampleSets.size(); ++i) {
+ for (int i = 0; i < m_extraExampleSets.size(); ++i)
+ extraManifestDirs.insert(FilePath::fromUserInput(m_extraExampleSets.at(i).manifestPath), i);
+
+ // Sanitize away qt versions that have already been added through extra sets.
+ // This way we do not have entries for Qt/Android, Qt/Desktop, Qt/MinGW etc pp,
+ // but only the one "QtX X.Y.Z" entry that is registered as an example set by the installer.
+ const QtVersions qtVersions
+ = Utils::filtered(qtVersionsIn, [this, &extraManifestDirs](QtVersion *v) {
+ if (extraManifestDirs.contains(v->docsPath())) {
+ m_extraExampleSets[extraManifestDirs.value(v->docsPath())].qtVersion
+ = v->qtVersion();
+ qCDebug(log) << "Not showing Qt version because manifest path is already added "
+ "through InstalledExamples settings:"
+ << v->displayName();
+ return false;
+ }
+ return true;
+ });
+
+ QList items;
+ for (int i = 0; i < m_extraExampleSets.size(); ++i) {
const ExtraExampleSet &set = m_extraExampleSets.at(i);
auto newItem = new QStandardItem();
newItem->setData(set.displayName, Qt::DisplayRole);
- newItem->setData(set.displayName, Qt::UserRole + 1);
- newItem->setData(QVariant(), Qt::UserRole + 2);
- newItem->setData(i, Qt::UserRole + 3);
- appendRow(newItem);
-
- extraManifestDirs.insert(FilePath::fromUserInput(set.manifestPath), i);
+ newItem->setData(QVariant(), kQtVersionIdRole);
+ newItem->setData(i, kExtraSetIndexRole);
+ newItem->setData(QVariant::fromValue(set.qtVersion), kVersionRole);
+ items.append(newItem);
}
-
- for (QtVersion *version : qtVersions) {
- // Sanitize away qt versions that have already been added through extra sets.
- // This way we do not have entries for Qt/Android, Qt/Desktop, Qt/MinGW etc pp,
- // but only the one "QtX X.Y.Z" entry that is registered as an example set by the installer.
- if (extraManifestDirs.contains(version->docsPath())) {
- m_extraExampleSets[extraManifestDirs.value(version->docsPath())].qtVersion
- = version->qtVersion();
- qCDebug(log) << "Not showing Qt version because manifest path is already added "
- "through InstalledExamples settings:"
- << version->displayName();
- continue;
- }
+ items += Utils::transform(qtVersions, [](QtVersion *v) {
auto newItem = new QStandardItem();
- newItem->setData(version->displayName(), Qt::DisplayRole);
- newItem->setData(version->displayName(), Qt::UserRole + 1);
- newItem->setData(version->uniqueId(), Qt::UserRole + 2);
- newItem->setData(QVariant(), Qt::UserRole + 3);
- appendRow(newItem);
- }
+ newItem->setData(v->displayName(), Qt::DisplayRole);
+ newItem->setData(v->uniqueId(), kQtVersionIdRole);
+ newItem->setData(QVariant(), kExtraSetIndexRole);
+ newItem->setData(QVariant::fromValue(v->qtVersion()), kVersionRole);
+ return newItem;
+ });
+
+ // Sort by Qt version, example sets not associated to Qt last
+ Utils::sort(items, [](QStandardItem *a, QStandardItem *b) {
+ const QVersionNumber versionB = b->data(kVersionRole).value();
+ if (versionB.isNull())
+ return true;
+ const QVersionNumber versionA = a->data(kVersionRole).value();
+ if (versionA.isNull())
+ return false;
+ if (versionA == versionB)
+ return a->data(Qt::DisplayRole).toString() < b->data(Qt::DisplayRole).toString();
+ return versionA < versionB;
+ });
+
+ for (QStandardItem *item : std::as_const(items))
+ appendRow(item);
+
endResetModel();
}
@@ -179,7 +204,7 @@ QVariant ExampleSetModel::getDisplayName(int i) const
{
if (i < 0 || i >= rowCount())
return QVariant();
- return data(index(i, 0), Qt::UserRole + 1);
+ return data(index(i, 0), Qt::DisplayRole);
}
// id is either the Qt version uniqueId, or the display name of the extra example set
@@ -188,7 +213,7 @@ QVariant ExampleSetModel::getId(int i) const
if (i < 0 || i >= rowCount())
return QVariant();
QModelIndex modelIndex = index(i, 0);
- QVariant variant = data(modelIndex, Qt::UserRole + 2);
+ QVariant variant = data(modelIndex, kQtVersionIdRole);
if (variant.isValid()) // set from qt version
return variant;
return getDisplayName(i);
@@ -199,7 +224,7 @@ ExampleSetModel::ExampleSetType ExampleSetModel::getType(int i) const
if (i < 0 || i >= rowCount())
return InvalidExampleSet;
QModelIndex modelIndex = index(i, 0);
- QVariant variant = data(modelIndex, Qt::UserRole + 2); /*Qt version uniqueId*/
+ QVariant variant = data(modelIndex, kQtVersionIdRole); /*Qt version uniqueId*/
if (variant.isValid())
return QtExampleSet;
return ExtraExampleSetType;
@@ -209,7 +234,7 @@ int ExampleSetModel::getQtId(int i) const
{
QTC_ASSERT(i >= 0, return -1);
QModelIndex modelIndex = index(i, 0);
- QVariant variant = data(modelIndex, Qt::UserRole + 2);
+ QVariant variant = data(modelIndex, kQtVersionIdRole);
QTC_ASSERT(variant.isValid(), return -1);
QTC_ASSERT(variant.canConvert(), return -1);
return variant.toInt();
@@ -224,7 +249,7 @@ int ExampleSetModel::getExtraExampleSetIndex(int i) const
{
QTC_ASSERT(i >= 0, return -1);
QModelIndex modelIndex = index(i, 0);
- QVariant variant = data(modelIndex, Qt::UserRole + 3);
+ QVariant variant = data(modelIndex, kExtraSetIndexRole);
QTC_ASSERT(variant.isValid(), return -1);
QTC_ASSERT(variant.canConvert(), return -1);
return variant.toInt();
diff --git a/src/plugins/remotelinux/RemoteLinux.json.in b/src/plugins/remotelinux/RemoteLinux.json.in
index 084f01a20af..944cf8057d3 100644
--- a/src/plugins/remotelinux/RemoteLinux.json.in
+++ b/src/plugins/remotelinux/RemoteLinux.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Develop applications for embedded Linux devices",
+ "Description" : "Develop applications for embedded Linux devices.",
"LongDescription" : [
"Connect devices with USB or over a network to run, debug, and analyze applications built for them.",
"You also need:",
diff --git a/src/plugins/resourceeditor/ResourceEditor.json.in b/src/plugins/resourceeditor/ResourceEditor.json.in
index 349c8b0c969..d5cf9f55958 100644
--- a/src/plugins/resourceeditor/ResourceEditor.json.in
+++ b/src/plugins/resourceeditor/ResourceEditor.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Qt Creator",
- "Description" : "Edit Qt Resource System (.qrc) files",
+ "Description" : "Edit Qt Resource System (.qrc) files.",
"LongDescription" : [
"Store files in the application's executable with the platform-independent Qt Resource System."
],
diff --git a/src/plugins/saferenderer/SafeRenderer.json.in b/src/plugins/saferenderer/SafeRenderer.json.in
index 3b313c7cff5..0823bad8d8d 100644
--- a/src/plugins/saferenderer/SafeRenderer.json.in
+++ b/src/plugins/saferenderer/SafeRenderer.json.in
@@ -14,7 +14,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Render safety-critical items in functional safety systems",
+ "Description" : "Render safety-critical items in functional safety systems.",
"LongDescription" : [
"Qt Safe Renderer separates the safety-critical rendering from the other parts of the system, so it can render safety-critical UI elements even if there are failures in the main UI. Therefore, you can use Qt in a system requiring certification without changing the Qt libraries.",
"You also need:",
diff --git a/src/plugins/screenrecorder/ScreenRecorder.json.in b/src/plugins/screenrecorder/ScreenRecorder.json.in
index f982ee3d83b..e4e2deb214b 100644
--- a/src/plugins/screenrecorder/ScreenRecorder.json.in
+++ b/src/plugins/screenrecorder/ScreenRecorder.json.in
@@ -14,7 +14,7 @@
],
"DisabledByDefault" : true,
"SoftLoadable" : true,
- "Description" : "Record screens",
+ "Description" : "Record screens.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/scxmleditor/ScxmlEditor.json.in b/src/plugins/scxmleditor/ScxmlEditor.json.in
index 2c1c7ad9eaf..56093750dd8 100644
--- a/src/plugins/scxmleditor/ScxmlEditor.json.in
+++ b/src/plugins/scxmleditor/ScxmlEditor.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Modeling",
- "Description" : "Create SCXML (State Chart XML) files",
+ "Description" : "Create SCXML (State Chart XML) files.",
"LongDescription" : [
"Visualize how a system reacts to events. State charts define the states that the system can be in, and how the system can move from one state to another."
],
diff --git a/src/plugins/serialterminal/SerialTerminal.json.in b/src/plugins/serialterminal/SerialTerminal.json.in
index 4cbefbaa20d..ae295ebbcf1 100644
--- a/src/plugins/serialterminal/SerialTerminal.json.in
+++ b/src/plugins/serialterminal/SerialTerminal.json.in
@@ -14,7 +14,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Serial Port Terminal",
+ "Description" : "Serial Port Terminal.",
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
}
diff --git a/src/plugins/silversearcher/SilverSearcher.json.in b/src/plugins/silversearcher/SilverSearcher.json.in
index 8d6aacee699..b4283f1996b 100644
--- a/src/plugins/silversearcher/SilverSearcher.json.in
+++ b/src/plugins/silversearcher/SilverSearcher.json.in
@@ -13,7 +13,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Search with Silver Searcher",
+ "Description" : "Search with Silver Searcher.",
"LongDescription" : [
"Use the Silver Searcher tool to find in files.",
"You also need:",
diff --git a/src/plugins/squish/Squish.json.in b/src/plugins/squish/Squish.json.in
index 3b52e09fbad..3428ea2191e 100644
--- a/src/plugins/squish/Squish.json.in
+++ b/src/plugins/squish/Squish.json.in
@@ -13,7 +13,7 @@
"",
"Alternatively, this file may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this file. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
-"Description" : "Test applications with the Squish automated GUI testing framework",
+"Description" : "Test applications with the Squish automated GUI testing framework.",
"LongDescription" : [
"Map AUTs (application under test) and run Squish test suites and cases.",
"You also need:",
diff --git a/src/plugins/subversion/Subversion.json.in b/src/plugins/subversion/Subversion.json.in
index 0c2f55bd309..2ee61c0a1dc 100644
--- a/src/plugins/subversion/Subversion.json.in
+++ b/src/plugins/subversion/Subversion.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Access the Subversion version control system",
+ "Description" : "Access the Subversion version control system.",
"LongDescription" : [
"You also need:",
"- Subversion"
diff --git a/src/plugins/terminal/Terminal.json.in b/src/plugins/terminal/Terminal.json.in
index e976947407b..f196317fc9c 100644
--- a/src/plugins/terminal/Terminal.json.in
+++ b/src/plugins/terminal/Terminal.json.in
@@ -12,7 +12,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "Open a terminal as an output view",
+ "Description" : "Open a terminal as an output view.",
"LongDescription" : [
"Instead of using an external terminal."
],
diff --git a/src/plugins/todo/Todo.json.in b/src/plugins/todo/Todo.json.in
index 8574d8a7801..7974af12893 100644
--- a/src/plugins/todo/Todo.json.in
+++ b/src/plugins/todo/Todo.json.in
@@ -13,7 +13,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "List keywords from files",
+ "Description" : "List keywords from files.",
"LongDescription" : [
"List the BUG, FIXME, NOTE, TODO, and WARNING keywords from the current file, from all project files, or from a subproject."
],
diff --git a/src/plugins/updateinfo/UpdateInfo.json.in b/src/plugins/updateinfo/UpdateInfo.json.in
index 6e4b699bfb8..33c8ad4d94e 100644
--- a/src/plugins/updateinfo/UpdateInfo.json.in
+++ b/src/plugins/updateinfo/UpdateInfo.json.in
@@ -13,7 +13,7 @@
"",
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
- "Description" : "View information from Qt Installer Framework-based updaters",
+ "Description" : "View information from Qt Installer Framework-based updaters.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES}
diff --git a/src/plugins/valgrind/Valgrind.json.in b/src/plugins/valgrind/Valgrind.json.in
index ff35fa05772..6d1dd059bf9 100644
--- a/src/plugins/valgrind/Valgrind.json.in
+++ b/src/plugins/valgrind/Valgrind.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Code Analyzer",
- "Description" : "Analyze code with Valgrind's Tool Suite",
+ "Description" : "Analyze code with Valgrind's Tool Suite.",
"LongDescription" : [
"Detect problems in memory management with Memcheck and find cache misses in the code with Callgrind.",
"You also need:",
diff --git a/src/plugins/vcpkg/Vcpkg.json.in b/src/plugins/vcpkg/Vcpkg.json.in
index 64dc6a9acc7..9efd5bf023e 100644
--- a/src/plugins/vcpkg/Vcpkg.json.in
+++ b/src/plugins/vcpkg/Vcpkg.json.in
@@ -14,7 +14,7 @@
],
"Experimental" : true,
"SoftLoadable" : true,
- "Description" : "Get and manage libraries from the vcpkg package manager",
+ "Description" : "Get and manage libraries from the vcpkg package manager.",
"LongDescription" : [],
"Url" : "https://www.qt.io",
${IDE_PLUGIN_DEPENDENCIES},
diff --git a/src/plugins/vcsbase/VcsBase.json.in b/src/plugins/vcsbase/VcsBase.json.in
index a1717a9138a..d764c2f3ab7 100644
--- a/src/plugins/vcsbase/VcsBase.json.in
+++ b/src/plugins/vcsbase/VcsBase.json.in
@@ -13,7 +13,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Version Control",
- "Description" : "Provides the technical basis for version control system (VCS) extensions",
+ "Description" : "Provides the technical basis for version control system (VCS) extensions.",
"LongDescription" : [
"You also need:",
"- An extension for a VCS tool, such as Git, and the tool"
diff --git a/src/plugins/webassembly/WebAssembly.json.in b/src/plugins/webassembly/WebAssembly.json.in
index 4947a709839..d72f8512e7a 100644
--- a/src/plugins/webassembly/WebAssembly.json.in
+++ b/src/plugins/webassembly/WebAssembly.json.in
@@ -15,7 +15,7 @@
"Alternatively, this plugin may be used under the terms of the GNU General Public License version 3 as published by the Free Software Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT included in the packaging of this plugin. Please review the following information to ensure the GNU General Public License requirements will be met: https://www.gnu.org/licenses/gpl-3.0.html."
],
"Category" : "Device Support",
- "Description" : "Integrate Qt applications into web browsers",
+ "Description" : "Integrate Qt applications into web browsers.",
"LongDescription" : [
"WebAssembly is a binary format that allows sand-boxed executable code in web pages.",
"You also need:",
diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg
index 714b37601b6..f56f4b08053 100644
--- a/src/tools/icons/qtcreatoricons.svg
+++ b/src/tools/icons/qtcreatoricons.svg
@@ -8937,7 +8937,7 @@
height="100%" />