Merge remote-tracking branch 'origin/15.0'

Change-Id: Ief149bffb53651a539480327552f10f0e20b22a0
This commit is contained in:
Eike Ziller
2024-11-26 10:36:30 +01:00
37 changed files with 365 additions and 188 deletions

View File

@@ -21,18 +21,18 @@ General
([Blog Post](https://www.qt.io/blog/review-new-themes-for-qt-creator)) ([Blog Post](https://www.qt.io/blog/review-new-themes-for-qt-creator))
* Added `Tools > Scripting > New Script` for creating Lua based Qt Creator * Added `Tools > Scripting > New Script` for creating Lua based Qt Creator
scripts scripts
([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-lua-scripts.html)) ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-create-lua-scripts.html))
* Plugins * Plugins
* Added `DocumentationUrl` and new mandatory fields `Id` and `VendorId` * Added `DocumentationUrl` and new mandatory fields `Id` and `VendorId`
to the plugin meta data to the plugin meta data
* Changed the plugin descriptions to Markdown in * Changed the plugin descriptions to Markdown in
`Help > About Plugins > Details` and `Extensions` mode `Help > About Plugins > Details` and `Extensions` mode
* Extended the API available to Lua plugins * Extended the API available to Lua plugins
([Documentation](https://doc-snapshots.qt.io/qtcreator-extending/lua-extensions.html)) ([Documentation](https://doc.qt.io/qtcreator-extending/lua-extensions.html))
* Prebuilt binaries * Prebuilt binaries
* Added opt-in crash reporting to * Added opt-in crash reporting to
`Edit > Preferences > Environment > System` `Edit > Preferences > Environment > System`
([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-turn-on-crash-reports.html)) ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-turn-on-crash-reports.html))
Editing Editing
------- -------
@@ -157,6 +157,7 @@ Projects
([QTCREATORBUG-31141](https://bugreports.qt.io/browse/QTCREATORBUG-31141)) ([QTCREATORBUG-31141](https://bugreports.qt.io/browse/QTCREATORBUG-31141))
* Fixed a focus issue when renaming files * Fixed a focus issue when renaming files
([QTCREATORBUG-30926](https://bugreports.qt.io/browse/QTCREATORBUG-30926)) ([QTCREATORBUG-30926](https://bugreports.qt.io/browse/QTCREATORBUG-30926))
* Fixed that the `default` session could be renamed and deleted
### CMake ### CMake
@@ -183,6 +184,10 @@ Projects
* Added the option of opening `CMakeCache.txt` to open the project * Added the option of opening `CMakeCache.txt` to open the project
([QTCREATORBUG-24439](https://bugreports.qt.io/browse/QTCREATORBUG-24439), ([QTCREATORBUG-24439](https://bugreports.qt.io/browse/QTCREATORBUG-24439),
[QTCREATORBUG-30507](https://bugreports.qt.io/browse/QTCREATORBUG-30507)) [QTCREATORBUG-30507](https://bugreports.qt.io/browse/QTCREATORBUG-30507))
* Made `conanfile.py` and `vcpkg.json` visible in the project tree when used
([QTCREATORBUG-32041](https://bugreports.qt.io/browse/QTCREATORBUG-32041),
[Conan Package Manager](https://doc.qt.io/qtcreator/creator-project-conan.html),
[vcpkg Package Manager](https://doc.qt.io/qtcreator/creator-vcpkg.html))
* Fixed the option `Build Only the Application to Be Run` for the * Fixed the option `Build Only the Application to Be Run` for the
`Build before deploying` preferences `Build before deploying` preferences
([QTCREATORBUG-31416](https://bugreports.qt.io/browse/QTCREATORBUG-31416)) ([QTCREATORBUG-31416](https://bugreports.qt.io/browse/QTCREATORBUG-31416))
@@ -245,6 +250,12 @@ Analyzer
* Added column sorting to the list of issues * Added column sorting to the list of issues
* Added a `Reload` button * Added a `Reload` button
Terminal
--------
* Fixed the flushing of output after a process terminates
([QTCREATORBUG-30733](https://bugreports.qt.io/browse/QTCREATORBUG-30733))
Version Control Systems Version Control Systems
----------------------- -----------------------
@@ -256,8 +267,10 @@ Version Control Systems
* Added actions for blame at the revision, blame of the parent, the file * Added actions for blame at the revision, blame of the parent, the file
from the revision, and the log for the line to the tooltip for `Instant Blame` from the revision, and the log for the line to the tooltip for `Instant Blame`
([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-vcs-git.html#using-instant-blame)) ([Documentation](https://doc.qt.io/qtcreator/creator-vcs-git.html#using-instant-blame))
* Added visual indications that files are modified to the `Projects` view * Added visual indications that files are modified to the `Projects` view
(when you select
`Preferences > Version Control > General > Show VCS file status`)
([QTCREATORBUG-8857](https://bugreports.qt.io/browse/QTCREATORBUG-8857)) ([QTCREATORBUG-8857](https://bugreports.qt.io/browse/QTCREATORBUG-8857))
* Added the option to include all local branches in the log * Added the option to include all local branches in the log
* Gerrit * Gerrit
@@ -269,6 +282,9 @@ Test Integration
* Added test duration information for test frameworks that support it * Added test duration information for test frameworks that support it
([QTCREATORBUG-31242](https://bugreports.qt.io/browse/QTCREATORBUG-31242)) ([QTCREATORBUG-31242](https://bugreports.qt.io/browse/QTCREATORBUG-31242))
* Added support for running auto tests on Android for Qt 6.8.1 and later
* Fixed the execution of tests with multiple test classes
([QTCREATORBUG-31935](https://bugreports.qt.io/browse/QTCREATORBUG-31935))
Extension Manager Extension Manager
----------------- -----------------
@@ -317,7 +333,7 @@ Platforms
### VxWorks ### VxWorks
* Added support for VxWorks 24.03 * Added support for VxWorks 24.03
([Documentation](https://doc-snapshots.qt.io/qtcreator-15.0/creator-how-to-create-vxworks-kits.html)) ([Documentation](https://doc.qt.io/qtcreator/creator-how-to-create-vxworks-kits.html))
Credits for these changes go to: Credits for these changes go to:
-------------------------------- --------------------------------

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -165,8 +165,14 @@
\section2 Add or remove CMake tools \section2 Add or remove CMake tools
To add a path to a CMake executable that \QC does not detect automatically, To add a path to a CMake executable that \QC does not detect automatically,
and to specify settings for it, select \uicontrol Add. To make changes to and to specify settings for it, select \uicontrol Add.
automatically detected installations, select \uicontrol Clone.
To add a CMake executable on a remote Linux device or in Docker, select
\uicontrol Remote in the dropdown menu in \uicontrol Browse
(\uicontrol Choose on \macos) in the \uicontrol Path field.
To make changes to automatically detected installations, select
\uicontrol Clone.
To remove the selected CMake executable from the list, select To remove the selected CMake executable from the list, select
\uicontrol Remove. \uicontrol Remove.
@@ -186,7 +192,8 @@
\image qtcreator-kits-cmake.png {Kits preferences} \image qtcreator-kits-cmake.png {Kits preferences}
\sa {Build with CMake}{How To: Build with CMake}, \sa {Build applications on remote Linux devices}, {Build on Docker devices},
{Build with CMake}{How To: Build with CMake},
{Manage Kits}{How To: Manage Kits}, {CMake}, {Kits} {Manage Kits}{How To: Manage Kits}, {CMake}, {Kits}
*/ */

View File

@@ -462,15 +462,19 @@
\brief Compute values of arithmetic expressions or function calls. \brief Compute values of arithmetic expressions or function calls.
To compute values of arithmetic expressions or function calls, use To access global data that is not visible in the
\l {Local Variables and Function Parameters}{Locals} view or to compute
values of arithmetic expressions or function calls, use
expression evaluators in the \uicontrol Expressions view. expression evaluators in the \uicontrol Expressions view.
You can examine static variables that the debuggers don't pick up as For example, if you define
\e {local variables}. For example, if you define
\c {static int staticVar = 42;} in a source file and then add \c staticVar \c {static int staticVar = 42;} in a source file and then add \c staticVar
as an evaluated expression, you should see \e 42 in the view when the as an evaluated expression, you should see \e 42 in the view when the
debugger stops in the source file. debugger stops in the source file.
You can also use Expression Evaluators as shortcuts to items that are
nested deeply in the locals tree.
\image qtcreator-debugger-expressions.webp {Expressions view} \image qtcreator-debugger-expressions.webp {Expressions view}
\section1 Adding Expression Evaluators \section1 Adding Expression Evaluators
@@ -481,8 +485,8 @@
You can also: You can also:
\list \list
\li Double-click in the \uicontrol {Expressions} or \li Double-click in the \uicontrol {Expressions} or \uicontrol {Locals}
\l {Local Variables and Function Parameters}{Locals} view. view.
\li Select \uicontrol {Add New Expression Evaluator} from the context \li Select \uicontrol {Add New Expression Evaluator} from the context
menu. menu.
\endlist \endlist
@@ -502,21 +506,12 @@
The set of evaluated expressions is saved in your session. The set of evaluated expressions is saved in your session.
\note Expression evaluators are powerful, but slow down debugger operation
significantly. Use them sparingly and remove them when you no longer need
them.
Expression evaluators are re-evaluated whenever the current frame changes. Expression evaluators are re-evaluated whenever the current frame changes.
The functions used in the expressions are called each time, even if The functions used in the expressions are called each time, even if
they have side-effects. they have side-effects.
\if defined(qtcreator) \note Evaluating expressions is slow, so remove expression evaluators after
\section1 Expressions View Actions use.
Right-click the \uicontrol Expressions view to select the following actions:
\include creator-debug-views.qdoc 0
\endif
\section1 JavaScript Expressions \section1 JavaScript Expressions
@@ -526,27 +521,46 @@
\section1 C and C++ Expressions \section1 C and C++ Expressions
GDB, LLDB and CDB support the evaluation of simple C and C++ expressions. CDB, GDB, and LLDB support the evaluation of simple C and C++ expressions,
such as arithmetic expressions made of simple values and pointers.
Depending on the backend and concrete location, some function calls
can be evaluated. CDB is the most limited backend in this respect.
\section2 Function Calls
Functions can be called only if they are actually compiled into the debugged Functions can be called only if they are actually compiled into the debugged
executable or a library used by the executable. Inlined executable or a library used by the executable. Inlined
functions such as most \c{operator[]} implementations of standard containers functions such as most \c{operator[]} implementations of standard containers
are typically \e{not} available. are typically \e{not} available.
\note When an expression has a function call, anything can happen, including
corruption of the application's state, or using the application's permission
to perform arbitrary actions.
\section2 Ranged Syntax
When using GDB or LLDB as backend, you can use a special ranged syntax to When using GDB or LLDB as backend, you can use a special ranged syntax to
display multiple values with one expression. A sub-expression of form display multiple values with one expression. A sub-expression of form
\c{foo[a..b]} is split into a sequence of individually evaluated expressions \c{foo[a..b]} is split into a sequence of individually evaluated expressions
\c{foo[a], ..., foo[b]}. \c{foo[a], ..., foo[b]}.
\section2 Compound Variables
You can expand compound variables of struct or class type to show their You can expand compound variables of struct or class type to show their
members. As you also see the variable value and type, you can examine and members. As you also see the variable value and type, you can examine and
traverse the low-level layout of object data. traverse the low-level layout of object data.
\section2 Optimized Builds
GDB and LLDB, and therefore \QC's debugger, also work for optimized GDB and LLDB, and therefore \QC's debugger, also work for optimized
builds on Linux and \macos. Optimization can lead to re-ordering builds on Linux and \macos. Optimization can lead to re-ordering
of instructions or removal of some local variables, causing the of instructions or removal of some local variables, causing the
\uicontrol {Locals} and \uicontrol {Expressions} views to show \uicontrol {Locals} and \uicontrol {Expressions} views to show
unexpected data. unexpected data.
\section2 GCC
The debug information from GCC does not include enough The debug information from GCC does not include enough
information about the time when a variable is initialized. information about the time when a variable is initialized.
Therefore, \QC can not tell whether the contents of a local Therefore, \QC can not tell whether the contents of a local
@@ -555,6 +569,12 @@
\uicontrol {not in scope}. Not all uninitialized objects, \uicontrol {not in scope}. Not all uninitialized objects,
however, can be recognized as such. however, can be recognized as such.
\section1 Expressions View Actions
Right-click the \uicontrol Expressions view to select the following actions:
\include creator-debug-views.qdoc 0
\sa {Debug}{How To: Debug}, {Debugging}, {Debuggers}, {Debugger} \sa {Debug}{How To: Debug}, {Debugging}, {Debuggers}, {Debugger}
\endif \endif
*/ */

View File

@@ -199,3 +199,22 @@
\sa {Enable and disable plugins}, {Docker}{How To: Develop for Docker}, \sa {Enable and disable plugins}, {Docker}{How To: Develop for Docker},
{Manage Kits}{How To: Manage Kits} {Manage Kits}{How To: Manage Kits}
*/ */
/*!
\page creator-how-to-build-on-docker.html
\previouspage creator-how-tos.html
\ingroup creator-how-to-docker
\title Build on Docker devices
In addition to building applications \e {for} Docker, you can use the
toolchain in Docker to build the applications \e {in} Docker.
\note Enable the Docker plugin to use it.
\include linux-mobile/creator-how-to-build-on-remote-devices.qdocinc {build on remote devices} {Docker device}
\sa {Add CMake tools}, {Enable and disable plugins},
{Docker}{How To: Develop for Docker}, {Manage Kits}{How To: Manage Kits}
*/

View File

@@ -0,0 +1,60 @@
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
//! [build on remote devices]
To build applications on a \1:
\list 1
\li Go to \preferences > \uicontrol Devices > \uicontrol Devices, and
then select \uicontrol Add to add a \1.
\li Go to \uicontrol {Preferences} > \uicontrol CMake >
\uicontrol Tools, and then select \uicontrol Add.
\li In \uicontrol Path, select \uicontrol Remote in the dropdown
menu in \uicontrol Browse (\uicontrol Choose on \macos) to
add the path to the CMake executable on the \1.
\li Go to \uicontrol {Preferences} > \uicontrol Kits >
\uicontrol {Qt Versions}, and then press \key Shift and click the
\uicontrol Add button to add the Qt version on the \1.
\li Go to \uicontrol {Preferences} > \uicontrol Kits >
\uicontrol Compilers, and then select the compiler
type in \uicontrol Add.
\li In \uicontrol {C compiler path}, select \uicontrol Remote in the
dropdown menu in \uicontrol Browse (\uicontrol Choose on \macos) to
add the path to the compiler on the \1.
\li Go to \uicontrol {Preferences} > \uicontrol Kits
to add a kit for building on the device.
\li Select the device, CMake tool, Qt version, and compiler that you
added above.
\li In \uicontrol {Run device type} and \uicontrol {Build device}, select
\uicontrol {\1}.
\li To specify build settings:
\list 1
\li Open a project for an application you want to develop for the
device.
\li Select \uicontrol Projects > \uicontrol {Build & Run} to activate
the kit that you specified above.
\endlist
\li Select \uicontrol Run to specify run settings. Usually, you can use
the default settings.
When you run the project, \QC deploys the application as specified by
the deploy steps.
\endlist
//! [build on remote devices]

View File

@@ -75,16 +75,18 @@
\li Select \uicontrol Add to add the Qt version for embedded Linux. \li Select \uicontrol Add to add the Qt version for embedded Linux.
\li Go to \preferences > \uicontrol Kits > \uicontrol Compilers. \li Go to \uicontrol {Preferences} > \uicontrol Kits >
\uicontrol Compilers.
\li Select \uicontrol Add to add the compiler for building the \li Select \uicontrol Add to add the compiler for building the
applications. applications.
\li Go to \preferences > \uicontrol Devices > \uicontrol Devices. \li Go to \uicontrol {Preferences} > \uicontrol Devices >
\uicontrol Devices.
\li Select \uicontrol Add to add a remote Linux device. \li Select \uicontrol Add to add a remote Linux device.
\li Go to \preferences > \uicontrol Kits. \li Go to \uicontrol {Preferences} > \uicontrol Kits.
\li Select \uicontrol Add to add a kit for building for the device. \li Select \uicontrol Add to add a kit for building for the device.
@@ -150,56 +152,9 @@
In addition to building applications \e {for} a generic Linux device, you can In addition to building applications \e {for} a generic Linux device, you can
use the toolchain on the device to build the applications \e {on} the device. use the toolchain on the device to build the applications \e {on} the device.
To build applications on a remote Linux device: \include creator-how-to-build-on-remote-devices.qdocinc {build on remote devices} {remote Linux device}
\list 1
\li Go to \preferences > \uicontrol Devices > \uicontrol Devices, and
then select \uicontrol Add to add a remote Linux device.
\li Go to \preferences > \uicontrol CMake > \uicontrol {CMake Tools}, and
then select \uicontrol Add to add the path to the CMake executable
on the remote Linux device.
\li Go to \preferences > \uicontrol Kits > \uicontrol {Qt Versions},
and then select \uicontrol Add to add the Qt version on the remote
Linux device
\li Go to \preferences > \uicontrol Kits > \uicontrol Compilers, and
then select \uicontrol Add to add the the compiler on the remote
Linux device.
\li Go to \preferences > \uicontrol Kits, and then select \uicontrol Add
to add a kit for building for the device.
\li Select the device, CMake tool, Qt version, and compiler that you
added above.
\li In \uicontrol {Run device type} and \uicontrol {Build device}, select
\uicontrol {Remote Linux Device}.
\li To specify build settings:
\list 1
\li Open a project for an application you want to develop for the
device.
\li Select \uicontrol Projects > \uicontrol {Build & Run} to activate
the kit that you specified above.
\endlist
\li Select \uicontrol Run to specify run settings. Usually, you can use
the default settings.
When you run the project, \QC deploys the application as specified by
the deploy steps.
\endlist
\sa {Add CMake tools}, {Remote Linux}{How To: Develop for remote Linux}, \sa {Add CMake tools}, {Remote Linux}{How To: Develop for remote Linux},
{Manage Kits}{How To: Manage Kits}, {Developing for Remote Linux Devices}, {Manage Kits}{How To: Manage Kits}, {Developing for Remote Linux Devices},
{Remote Linux Deploy Configuration}, {Remote Linux Run Settings} {Remote Linux Deploy Configuration}, {Remote Linux Run Settings}
*/ */

View File

@@ -217,10 +217,16 @@
\li In \uicontrol {C compiler path}, enter the path to the \li In \uicontrol {C compiler path}, enter the path to the
directory where the C compiler is located. directory where the C compiler is located.
\li In \uicontrol {C++ compiler path}, enter the path Select \uicontrol Remote in the dropdown menu in \uicontrol Browse
to the directory where the C++ compiler is located. Select (\uicontrol Choose on \macos) to add the path to the compiler on a
\uicontrol {Derive from C compiler} to derive the C++ compiler remote Linux device or in Docker.
name from the C compiler name.
\li In \uicontrol {C++ compiler path}, select
\uicontrol {Provide manually} to enter the path
to the directory where the C++ compiler is located.
Select \uicontrol Remote to add the path to the compiler on a
remote Linux device or in Docker.
\li In \uicontrol Initialization, select the \li In \uicontrol Initialization, select the
\c {vcvarsall.bat} file for setting up the command \c {vcvarsall.bat} file for setting up the command
@@ -274,20 +280,30 @@
\uicontrol Custom option. Specify the paths to the directories where the \uicontrol Custom option. Specify the paths to the directories where the
compiler and make tool are located and set preferences for the compiler. compiler and make tool are located and set preferences for the compiler.
\image creator-compilers-custom.png \image qtcreator-preferences-compilers-custom.webp {Compilers in Kit Preferences}
To add other compilers: To add other compilers:
\list 1 \list 1
\li Select \preferences > \uicontrol Kits > \li Select \preferences > \uicontrol Kits >
\uicontrol Compilers > \uicontrol Add > \uicontrol Custom > \uicontrol Compilers > \uicontrol Add > \uicontrol Custom.
\uicontrol C or \uicontrol C++.
\li In \uicontrol Name, enter a name for the compiler. \li In \uicontrol Name, enter a name for the compiler.
\li In \uicontrol {Compiler path}, enter the path to the directory \li In \uicontrol {C compiler path}, enter the path to the
where the compiler is located. directory where the C compiler is located.
Select \uicontrol Remote in the dropdown menu in \uicontrol Browse
(\uicontrol Choose on \macos) to add the path to the compiler on a
remote Linux device or in Docker.
\li In \uicontrol {C++ compiler path}, select
\uicontrol {Provide manually} to enter the path
to the directory where the C++ compiler is located.
Select \uicontrol Remote to add the path to the compiler on a
remote Linux device or in Docker.
\li In \uicontrol {Make path}, enter the path to the directory where \li In \uicontrol {Make path}, enter the path to the directory where
the make tool is located. the make tool is located.

View File

@@ -71,6 +71,9 @@
\li Select \preferences > \uicontrol Kits > \li Select \preferences > \uicontrol Kits >
\uicontrol {Qt Versions} > \uicontrol Add. \uicontrol {Qt Versions} > \uicontrol Add.
To add a Qt version on a remote Linux device or in Docker,
press \key Shift and click \uicontrol Add.
\li Select the qmake executable for the Qt version to add. \li Select the qmake executable for the Qt version to add.
\li Select the Qt version to view and edit it. \li Select the Qt version to view and edit it.

View File

@@ -154,19 +154,34 @@ def extract_file(archive: Path, target: Path) -> None:
async def download(url: str, target: Path) -> None: async def download(url: str, target: Path) -> None:
print('- Starting download {} -> {}'.format(url, str(target))) print(('''
- Starting download {}
-> {}''').strip().format(url, str(target)))
# Since urlretrieve does blocking I/O it would prevent parallel downloads. # Since urlretrieve does blocking I/O it would prevent parallel downloads.
# Run in default thread pool. # Run in default thread pool.
temp_target = target.with_suffix(target.suffix + '-part')
loop = asyncio.get_running_loop() loop = asyncio.get_running_loop()
await loop.run_in_executor(None, urllib.request.urlretrieve, url, str(target)) await loop.run_in_executor(None, urllib.request.urlretrieve, url, str(temp_target))
temp_target.rename(target)
print('+ finished downloading {}'.format(str(target))) print('+ finished downloading {}'.format(str(target)))
def download_and_extract(urls: list[str], target: Path, temp: Path) -> None: def download_and_extract(
download_and_extract_tuples([(url, target) for url in urls], temp) urls: list[str],
target: Path,
temp: Path,
skip_existing: bool = False
) -> None:
download_and_extract_tuples([(url, target) for url in urls],
temp,
skip_existing)
def download_and_extract_tuples(urls_and_targets: list[tuple[str, Path]], temp: Path) -> None: def download_and_extract_tuples(
urls_and_targets: list[tuple[str, Path]],
temp: Path,
skip_existing: bool = False
) -> None:
temp.mkdir(parents=True, exist_ok=True) temp.mkdir(parents=True, exist_ok=True)
target_tuples : list[tuple[Path, Path]] = [] target_tuples : list[tuple[Path, Path]] = []
# TODO make this work with file URLs, which then aren't downloaded # TODO make this work with file URLs, which then aren't downloaded
@@ -178,7 +193,10 @@ def download_and_extract_tuples(urls_and_targets: list[tuple[str, Path]], temp:
filename = Path(u.path).name filename = Path(u.path).name
target_file = temp / filename target_file = temp / filename
target_tuples.append((target_file, target_path)) target_tuples.append((target_file, target_path))
tasks.append(asyncio.create_task(download(url, target_file))) if skip_existing and target_file.exists():
print('Skipping download of {}'.format(url))
else:
tasks.append(asyncio.create_task(download(url, target_file)))
for task in tasks: for task in tasks:
await task await task
asyncio.run(impl()) asyncio.run(impl())

View File

@@ -966,7 +966,10 @@ class DumperBase():
children = [('error', error)] children = [('error', error)]
self.putSpecialValue("notcallable", children=children) self.putSpecialValue("notcallable", children=children)
else: else:
self.putItem(result) if result is None:
self.putSpecialValue("notcallable")
else:
self.putItem(result)
def call(self, rettype, value, func, *args): def call(self, rettype, value, func, *args):
return self.callHelper(rettype, value, func, args) return self.callHelper(rettype, value, func, args)

View File

@@ -737,11 +737,11 @@ class Dumper(DumperBase):
return None if val is None else self.fromNativeValue(val) return None if val is None else self.fromNativeValue(val)
def nativeParseAndEvaluate(self, exp): def nativeParseAndEvaluate(self, exp):
# FIXME: This breaks symbol discovery
if not self.allowInferiorCalls:
return None
#self.warn('EVALUATE "%s"' % exp) #self.warn('EVALUATE "%s"' % exp)
try: try:
if not self.allowInferiorCalls:
return None
val = gdb.parse_and_eval(exp) val = gdb.parse_and_eval(exp)
return val return val
except RuntimeError as error: except RuntimeError as error:
@@ -1041,6 +1041,10 @@ class Dumper(DumperBase):
except: except:
return 0 return 0
def symbolAddress(self, symbolName):
res = self.findSymbol(symbolName)
return res
def handleNewObjectFile(self, objfile): def handleNewObjectFile(self, objfile):
name = objfile.filename name = objfile.filename
if self.isWindowsTarget(): if self.isWindowsTarget():

View File

@@ -24586,11 +24586,11 @@ Flags: %3</translation>
</message> </message>
<message> <message>
<source>Invalid location for %1.</source> <source>Invalid location for %1.</source>
<translation type="unfinished"></translation> <translation>Ungültiger Pfad für %1.</translation>
</message> </message>
<message> <message>
<source>Could not create &quot;%1&quot;: %2</source> <source>Could not create &quot;%1&quot;: %2</source>
<translation type="unfinished">Konnte &quot;%1&quot; nicht erzeugen: %2</translation> <translation>Konnte &quot;%1&quot; nicht erstellen: %2</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -27373,7 +27373,7 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie
</message> </message>
<message> <message>
<source>Load Last Core File</source> <source>Load Last Core File</source>
<translation type="unfinished"></translation> <translation>Letzte Core-Datei laden</translation>
</message> </message>
<message> <message>
<source>Start and Break on Main</source> <source>Start and Break on Main</source>
@@ -27514,11 +27514,11 @@ Sie werden möglicherweise gebeten, den Inhalt dieses Logs mitzuteilen, wenn Sie
</message> </message>
<message> <message>
<source>coredumpctl did not find any cores created by systemd-coredump.</source> <source>coredumpctl did not find any cores created by systemd-coredump.</source>
<translation type="unfinished"></translation> <translation>coredumpctl hat keine von systemd-coredump erstellten Core-Dateien gefunden.</translation>
</message> </message>
<message> <message>
<source>Last Core file &quot;%1&quot;</source> <source>Last Core file &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation>Letzte Core-Datei &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<source>Reload debugging helpers skipped as no engine is running.</source> <source>Reload debugging helpers skipped as no engine is running.</source>
@@ -28292,11 +28292,11 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve
</message> </message>
<message> <message>
<source>Show warnings for unsupported breakpoints</source> <source>Show warnings for unsupported breakpoints</source>
<translation type="unfinished"></translation> <translation>Warnungen für nicht unterstützte Haltepunkte anzeigen</translation>
</message> </message>
<message> <message>
<source>Shows a warning on debugger start-up when breakpoints are requested which are not supported by the selected debugger engine.</source> <source>Shows a warning on debugger start-up when breakpoints are requested which are not supported by the selected debugger engine.</source>
<translation type="unfinished"></translation> <translation>Zeigt beim Start des Debuggers eine Warnung an, wenn Haltepunkte angefordert werden, die nicht von der gewählten Debugger-Engine unterstützt werden.</translation>
</message> </message>
<message> <message>
<source>Behavior</source> <source>Behavior</source>
@@ -28304,15 +28304,15 @@ Sie können hier eine andere Verbindung wählen, beispielsweise eine serielle Ve
</message> </message>
<message> <message>
<source>User Interface</source> <source>User Interface</source>
<translation type="unfinished">Benutzeroberfläche</translation> <translation>Benutzeroberfläche</translation>
</message> </message>
<message> <message>
<source>When Debugging Stops</source> <source>When Debugging Stops</source>
<translation type="unfinished"></translation> <translation>Wenn das Debuggen beendet wird</translation>
</message> </message>
<message> <message>
<source>Allow inferior calls in debugging helper</source> <source>Allow inferior calls in debugging helper</source>
<translation type="unfinished"></translation> <translation>Aufrufe von der Ausgabe-Hilfsbibliothek in den zu debuggenden Prozess erlauben</translation>
</message> </message>
<message> <message>
<source>Extra Debugging Helpers</source> <source>Extra Debugging Helpers</source>
@@ -29224,11 +29224,11 @@ Das Setzen von Haltepunkten anhand von Dateinamen und Zeilennummern könnte fehl
</message> </message>
<message> <message>
<source>Invalid debugger command</source> <source>Invalid debugger command</source>
<translation type="unfinished"></translation> <translation>Ungültiges Debugger-Kommando</translation>
</message> </message>
<message> <message>
<source>Invalid working directory</source> <source>Invalid working directory</source>
<translation type="unfinished"></translation> <translation>Ungültiges Arbeitsverzeichnis</translation>
</message> </message>
<message> <message>
<source>Type of Debugger Backend</source> <source>Type of Debugger Backend</source>
@@ -30015,7 +30015,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Failed starting Docker container. Exit code: %1, output: %2</source> <source>Failed starting Docker container. Exit code: %1, output: %2</source>
<translation type="unfinished"></translation> <translation>Docker-Container konnte nicht gestartet werden. Rückgabewert: %1, Ausgabe: %2</translation>
</message> </message>
<message> <message>
<source>Docker Image &quot;%1&quot; (%2)</source> <source>Docker Image &quot;%1&quot; (%2)</source>
@@ -30123,11 +30123,11 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Failed to inspect image: %1</source> <source>Failed to inspect image: %1</source>
<translation type="unfinished"></translation> <translation>Untersuchung des Images fehlgeschlagen: %1</translation>
</message> </message>
<message> <message>
<source>Could not parse image inspect output: %1</source> <source>Could not parse image inspect output: %1</source>
<translation type="unfinished"></translation> <translation>Die Ausgabe von image inspect konnte nicht ausgewertet werden: %1</translation>
</message> </message>
<message> <message>
<source>localSource: No mount point found for %1</source> <source>localSource: No mount point found for %1</source>
@@ -30361,7 +30361,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Active</source> <source>Active</source>
<translation type="unfinished"></translation> <translation>Aktiv</translation>
</message> </message>
<message> <message>
<source>Restart Now</source> <source>Restart Now</source>
@@ -30381,15 +30381,15 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>No details to show</source> <source>No details to show</source>
<translation type="unfinished"></translation> <translation>Keine Details verfügbar</translation>
</message> </message>
<message> <message>
<source>Select an extension to see more information about it.</source> <source>Select an extension to see more information about it.</source>
<translation type="unfinished"></translation> <translation>Wählen Sie eine Erweiterung aus, um Informationen darüber anzuzeigen.</translation>
</message> </message>
<message> <message>
<source>Last Update</source> <source>Last Update</source>
<translation type="unfinished"></translation> <translation>Letzte Aktualisierung</translation>
</message> </message>
<message> <message>
<source>Tags</source> <source>Tags</source>
@@ -30433,31 +30433,31 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Inactive</source> <source>Inactive</source>
<translation type="unfinished"></translation> <translation>Inaktiv</translation>
</message> </message>
<message> <message>
<source>Last updated</source> <source>Last updated</source>
<translation type="unfinished"></translation> <translation>Zuletzt aktualisiert</translation>
</message> </message>
<message> <message>
<source>Name</source> <source>Name</source>
<translation type="unfinished">Name</translation> <translation>Name</translation>
</message> </message>
<message> <message>
<source>All</source> <source>All</source>
<translation type="unfinished">Alle</translation> <translation>Alle</translation>
</message> </message>
<message> <message>
<source>Extension packs</source> <source>Extension packs</source>
<translation type="unfinished"></translation> <translation>Erweiterungspakete</translation>
</message> </message>
<message> <message>
<source>Individual extensions</source> <source>Individual extensions</source>
<translation type="unfinished"></translation> <translation>Einzelne Erweiterungen</translation>
</message> </message>
<message> <message>
<source>No extension found!</source> <source>No extension found!</source>
<translation type="unfinished"></translation> <translation>Keine Erweiterungen gefunden!</translation>
</message> </message>
<message> <message>
<source>Manage Extensions</source> <source>Manage Extensions</source>
@@ -30469,11 +30469,11 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Filter by: %1</source> <source>Filter by: %1</source>
<translation type="unfinished"></translation> <translation>Filtern nach: %1</translation>
</message> </message>
<message> <message>
<source>Sort by: %1</source> <source>Sort by: %1</source>
<translation type="unfinished"></translation> <translation>Sortieren nach: %1</translation>
</message> </message>
<message> <message>
<source>Install...</source> <source>Install...</source>
@@ -30485,43 +30485,43 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Server URL:</source> <source>Server URL:</source>
<translation type="unfinished"></translation> <translation>Server-URL:</translation>
</message> </message>
<message> <message>
<source>Note</source> <source>Note</source>
<translation type="unfinished">Hinweis</translation> <translation>Hinweis</translation>
</message> </message>
<message> <message>
<source>%1 does not check extensions from external vendors for security flaws or malicious intent, so be careful when installing them, as it might leave your computer vulnerable to attacks such as hacking, malware, and phishing.</source> <source>%1 does not check extensions from external vendors for security flaws or malicious intent, so be careful when installing them, as it might leave your computer vulnerable to attacks such as hacking, malware, and phishing.</source>
<translation type="unfinished"></translation> <translation>%1 überprüft keine Erweiterungen von externen Anbietern auf Sicherheitsprobleme oder böswillige Absichten. Seien Sie deshalb vorsichtig beim Installieren solcher Erweiterungen, da sie Ihren Computer für Angriffe wie Hacking, Schadsoftware und Phishing anfällig machen könnten.</translation>
</message> </message>
<message> <message>
<source>Use External Repository</source> <source>Use External Repository</source>
<translation type="unfinished"></translation> <translation>Externes Repository benutzen</translation>
</message> </message>
<message> <message>
<source>Install Extension...</source> <source>Install Extension...</source>
<translation type="unfinished"></translation> <translation>Erweiterung installieren...</translation>
</message> </message>
<message> <message>
<source>Plugin changes will take effect after restart.</source> <source>Plugin changes will take effect after restart.</source>
<translation type="unfinished">Änderungen der Plugins werden nach einem Neustart wirksam.</translation> <translation>Änderungen der Plugins werden nach einem Neustart wirksam.</translation>
</message> </message>
<message> <message>
<source>Browser</source> <source>Browser</source>
<translation type="unfinished"></translation> <translation>Browser</translation>
</message> </message>
<message> <message>
<source>Documentation</source> <source>Documentation</source>
<translation type="unfinished">Dokumentation</translation> <translation>Dokumentation</translation>
</message> </message>
<message> <message>
<source>More Information</source> <source>More Information</source>
<translation type="unfinished"></translation> <translation>Mehr Informationen</translation>
</message> </message>
<message> <message>
<source>New</source> <source>New</source>
<translation type="unfinished">Neu</translation> <translation>Neu</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -30536,7 +30536,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Vendor Id:</source> <source>Vendor Id:</source>
<translation type="unfinished"></translation> <translation>Anbieter-ID:</translation>
</message> </message>
<message> <message>
<source>Vendor:</source> <source>Vendor:</source>
@@ -30544,7 +30544,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Documentation:</source> <source>Documentation:</source>
<translation type="unfinished">Dokumentation:</translation> <translation>Dokumentation:</translation>
</message> </message>
<message> <message>
<source>Location:</source> <source>Location:</source>
@@ -30580,7 +30580,7 @@ Versuchen Sie, das Projekt neu zu erstellen.</translation>
</message> </message>
<message> <message>
<source>Id:</source> <source>Id:</source>
<translation type="unfinished"></translation> <translation>ID:</translation>
</message> </message>
<message> <message>
<source>Compatibility version:</source> <source>Compatibility version:</source>
@@ -30710,11 +30710,11 @@ Grund: %3</translation>
</message> </message>
<message> <message>
<source>No callback set to accept terms and conditions</source> <source>No callback set to accept terms and conditions</source>
<translation type="unfinished"></translation> <translation>Es ist kein Callback für das Annehmen von Bedingungen gesetzt</translation>
</message> </message>
<message> <message>
<source>You did not accept the terms and conditions</source> <source>You did not accept the terms and conditions</source>
<translation type="unfinished"></translation> <translation>Sie haben die Bedingungen nicht angenommen</translation>
</message> </message>
<message> <message>
<source>Cannot load plugin because dependency failed to load: %1(%2) <source>Cannot load plugin because dependency failed to load: %1(%2)
@@ -30784,11 +30784,11 @@ Grund: %3</translation>
</message> </message>
<message> <message>
<source>Plugin id &quot;%1&quot; must be lowercase</source> <source>Plugin id &quot;%1&quot; must be lowercase</source>
<translation type="unfinished"></translation> <translation>Plugin-ID &quot;%1&quot; muss kleingeschrieben sein</translation>
</message> </message>
<message> <message>
<source>Terms and conditions: %1</source> <source>Terms and conditions: %1</source>
<translation type="unfinished"></translation> <translation>Bedingungen: %1</translation>
</message> </message>
<message> <message>
<source>Resolving dependencies failed because state != Read</source> <source>Resolving dependencies failed because state != Read</source>
@@ -30864,11 +30864,11 @@ Grund: %3</translation>
</message> </message>
<message> <message>
<source>deprecated</source> <source>deprecated</source>
<translation type="unfinished"></translation> <translation>veraltet</translation>
</message> </message>
<message> <message>
<source>experimental</source> <source>experimental</source>
<translation type="unfinished"></translation> <translation>experimentell</translation>
</message> </message>
<message> <message>
<source>Utilities</source> <source>Utilities</source>
@@ -45873,12 +45873,13 @@ fails because Clang does not understand the target architecture.</source>
</message> </message>
<message> <message>
<source>Qbs Profile Additions</source> <source>Qbs Profile Additions</source>
<translation type="unfinished"></translation> <translation>Ergänzungen zum Qbs-Profil</translation>
</message> </message>
<message> <message>
<source>Additional module properties to set in the Qbs profile corresponding to this kit. <source>Additional module properties to set in the Qbs profile corresponding to this kit.
You will rarely need to do this.</source> You will rarely need to do this.</source>
<translation type="unfinished"></translation> <translation>Zusätzliche Moduleigenschaften, die im Qbs-Profil des entsprechenden Kits gesetzt werden sollen.
Dies ist selten nötig.</translation>
</message> </message>
<message> <message>
<source>Qbs files</source> <source>Qbs files</source>
@@ -46719,7 +46720,7 @@ Weder der Pfad zur Bibliothek noch der Pfad zu den Headerdateien wird zur .pro-D
</message> </message>
<message> <message>
<source>Starting qmake failed with the following error: %1</source> <source>Starting qmake failed with the following error: %1</source>
<translation type="unfinished"></translation> <translation>Das Starten von qmake ist mit folgendem Fehler fehlgeschlagen: %1</translation>
</message> </message>
<message> <message>
<source>The build directory should be at the same level as the source directory.</source> <source>The build directory should be at the same level as the source directory.</source>
@@ -47651,7 +47652,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite &quot;Checking Code
</message> </message>
<message> <message>
<source>A when condition cannot contain an object.</source> <source>A when condition cannot contain an object.</source>
<translation type="unfinished"></translation> <translation>Eine &quot;when&quot;-Bedingung kann kein Objekt enthalten.</translation>
</message> </message>
<message> <message>
<source>JavaScript blocks are not supported in a UI file (.ui.qml).</source> <source>JavaScript blocks are not supported in a UI file (.ui.qml).</source>
@@ -47703,7 +47704,7 @@ Weitere Informationen finden Sie auf der Dokumentationsseite &quot;Checking Code
</message> </message>
<message> <message>
<source>Arbitrary functions and function calls outside of a Connections object are not supported in a UI file (.ui.qml).</source> <source>Arbitrary functions and function calls outside of a Connections object are not supported in a UI file (.ui.qml).</source>
<translation type="unfinished"></translation> <translation>Beliebige Funktionen und Funktionsaufrufe außerhalb des Connections-Objektes werden in einer UI-Datei (.ui.qml) nicht unterstützt.</translation>
</message> </message>
<message> <message>
<source>Duplicate import (%1).</source> <source>Duplicate import (%1).</source>
@@ -48116,7 +48117,7 @@ Sie können eine Annotation &quot;// @uri My.Module.Uri&quot; hinzufügen, um de
</message> </message>
<message> <message>
<source>Enable semantic highlighting (experimental)</source> <source>Enable semantic highlighting (experimental)</source>
<translation type="unfinished"></translation> <translation>Semantische Hervorhebung aktivieren (experimentell)</translation>
</message> </message>
<message> <message>
<source>Enabled</source> <source>Enabled</source>
@@ -48140,11 +48141,11 @@ Sie können eine Annotation &quot;// @uri My.Module.Uri&quot; hinzufügen, um de
</message> </message>
<message> <message>
<source>Enable QML Language Server on this project.</source> <source>Enable QML Language Server on this project.</source>
<translation type="unfinished"></translation> <translation>Aktiviere QML Language Server für dieses Projekt.</translation>
</message> </message>
<message> <message>
<source>Qt Quick</source> <source>Qt Quick</source>
<translation type="unfinished">Qt Quick</translation> <translation>Qt Quick</translation>
</message> </message>
<message> <message>
<source>Open .ui.qml files with:</source> <source>Open .ui.qml files with:</source>
@@ -49438,7 +49439,7 @@ Sind Sie sicher?</translation>
</message> </message>
<message> <message>
<source>Enable CMake Generator</source> <source>Enable CMake Generator</source>
<translation type="unfinished"></translation> <translation>CMake-Generator aktivieren</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -49884,11 +49885,11 @@ wirklich entfernen?</translation>
</message> </message>
<message> <message>
<source>Error</source> <source>Error</source>
<translation type="unfinished">Fehler</translation> <translation>Fehler</translation>
</message> </message>
<message> <message>
<source>Warning</source> <source>Warning</source>
<translation type="unfinished">Warnung</translation> <translation>Warnung</translation>
</message> </message>
<message> <message>
<source>Not all possible target environments can be supported due to missing compilers.</source> <source>Not all possible target environments can be supported due to missing compilers.</source>
@@ -50895,7 +50896,7 @@ Der Steuerprozess konnte nicht gestartet werden.</translation>
</message> </message>
<message> <message>
<source>The process crashed.</source> <source>The process crashed.</source>
<translation type="unfinished">Der Prozess ist abgestürzt.</translation> <translation>Der Prozess ist abgestürzt.</translation>
</message> </message>
<message> <message>
<source>&quot;%1&quot; failed to start: %2</source> <source>&quot;%1&quot; failed to start: %2</source>
@@ -53104,43 +53105,43 @@ Die Datei &quot;%1&quot; konnte nicht geöffnet werden.</translation>
</message> </message>
<message> <message>
<source>Diff Project Directory</source> <source>Diff Project Directory</source>
<translation type="unfinished"></translation> <translation>Diff des Projektverzeichnisses</translation>
</message> </message>
<message> <message>
<source>Diff Directory of Project &quot;%1&quot;</source> <source>Diff Directory of Project &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation>Diff des Projektverzeichnisses von &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<source>Project Directory Status</source> <source>Project Directory Status</source>
<translation type="unfinished"></translation> <translation>Status des Projektverzeichnisses</translation>
</message> </message>
<message> <message>
<source>Status of Directory of Project &quot;%1&quot;</source> <source>Status of Directory of Project &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation>Status des Projektverzeichnisses von &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<source>Log Project Directory</source> <source>Log Project Directory</source>
<translation type="unfinished"></translation> <translation>Log des Projektverzeichnisses</translation>
</message> </message>
<message> <message>
<source>Log Directory of Project &quot;%1&quot;</source> <source>Log Directory of Project &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation>Log des Projektverzeichnisses von &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<source>Update Project Directory</source> <source>Update Project Directory</source>
<translation type="unfinished"></translation> <translation>Projektverzeichnis aktualisieren</translation>
</message> </message>
<message> <message>
<source>Update Directory of Project &quot;%1&quot;</source> <source>Update Directory of Project &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation>Projektverzeichnis von &quot;%1&quot; aktualisieren</translation>
</message> </message>
<message> <message>
<source>Commit Project Directory</source> <source>Commit Project Directory</source>
<translation type="unfinished"></translation> <translation>Commit des Projektverzeichnisses</translation>
</message> </message>
<message> <message>
<source>Commit Directory of Project &quot;%1&quot;</source> <source>Commit Directory of Project &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation>Commit des Projektverzeichnisses von &quot;%1&quot;</translation>
</message> </message>
<message> <message>
<source>Describe...</source> <source>Describe...</source>

View File

@@ -48,8 +48,9 @@
#ifdef ENABLE_CRASHPAD #ifdef ENABLE_CRASHPAD
#define NOMINMAX #define NOMINMAX
#include "client/crashpad_client.h"
#include "client/crash_report_database.h" #include "client/crash_report_database.h"
#include "client/crashpad_client.h"
#include "client/crashpad_info.h"
#include "client/settings.h" #include "client/settings.h"
#endif #endif
@@ -443,6 +444,12 @@ void startCrashpad(const AppInfo &appInfo, bool crashReportingEnabled)
annotations["sha1"] = Core::Constants::IDE_REVISION_STR; annotations["sha1"] = Core::Constants::IDE_REVISION_STR;
#endif #endif
if (HostOsInfo::isWindowsHost()) {
// reduces the size of crash reports, which can be large on Windows
CrashpadInfo::GetCrashpadInfo()
->set_gather_indirectly_referenced_memory(crashpad::TriState::kEnabled, 0);
}
// Optional arguments to pass to the handler // Optional arguments to pass to the handler
std::vector<std::string> arguments; std::vector<std::string> arguments;
arguments.push_back("--no-rate-limit"); arguments.push_back("--no-rate-limit");

View File

@@ -67,7 +67,8 @@ public:
int findInResultInsertPosition(const QString &key) const int findInResultInsertPosition(const QString &key) const
{ {
const auto compare = [](int compareResult) { return compareResult > 0; }; const auto compare = [](int compareResult) { return compareResult > 0; };
return findIndex(m_resultNameValueDictionary, key, compare); const int pos = findIndex(m_resultNameValueDictionary, key, compare);
return pos >= 0 ? pos : m_resultNameValueDictionary.size();
} }
int findInResult(const QString &key) const int findInResult(const QString &key) const
@@ -291,6 +292,7 @@ QModelIndex EnvironmentModel::addVariable(const EnvironmentItem &item)
} else { } else {
// We add something that is not in the base dictionary // We add something that is not in the base dictionary
// Insert a new line! // Insert a new line!
QTC_ASSERT(insertPos >= 0, insertPos = d->m_resultNameValueDictionary.size());
beginInsertRows(QModelIndex(), insertPos, insertPos); beginInsertRows(QModelIndex(), insertPos, insertPos);
Q_ASSERT(changePos < 0); Q_ASSERT(changePos < 0);
d->m_items.append(item); d->m_items.append(item);

View File

@@ -110,7 +110,7 @@ enum class Base { Dec, Hex };
static bool isHex(const QChar &c) static bool isHex(const QChar &c)
{ {
return (c >= 'a' && c <= 'f') || (c >= 'A' && c < 'F'); return (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F');
} }
static bool isDigit(const QChar &c, Base base) static bool isDigit(const QChar &c, Base base)

View File

@@ -520,7 +520,7 @@ void IssuesWidget::updateTable()
for (const Dto::ColumnInfoDto &column : m_currentTableInfo->columns) { for (const Dto::ColumnInfoDto &column : m_currentTableInfo->columns) {
columnHeaders << column.header.value_or(column.key); columnHeaders << column.header.value_or(column.key);
if (!column.showByDefault) if (!column.showByDefault)
hiddenColumns << column.key; hiddenColumns << columnHeaders.last();
IssueHeaderView::ColumnInfo info; IssueHeaderView::ColumnInfo info;
info.key = column.key; info.key = column.key;
info.sortable = column.canSort; info.sortable = column.canSort;

View File

@@ -1014,7 +1014,7 @@ void AxivionPluginPrivate::enableInlineIssues(bool enable)
return; return;
m_inlineIssuesEnabled = enable; m_inlineIssuesEnabled = enable;
if (enable) if (enable && m_dashboardServerId.isValid())
handleOpenedDocs(); handleOpenedDocs();
else else
clearAllMarks(); clearAllMarks();
@@ -1091,6 +1091,8 @@ void switchActiveDashboardId(const Id &toDashboardId)
dd->m_serverAccess = ServerAccess::Unknown; dd->m_serverAccess = ServerAccess::Unknown;
dd->m_apiToken.reset(); dd->m_apiToken.reset();
dd->m_dashboardInfo.reset(); dd->m_dashboardInfo.reset();
dd->m_currentProjectInfo.reset();
updatePerspectiveToolbar();
} }
const std::optional<DashboardInfo> currentDashboardInfo() const std::optional<DashboardInfo> currentDashboardInfo()

View File

@@ -4,7 +4,7 @@
"Name" : "Copilot", "Name" : "Copilot",
"Version" : "${IDE_VERSION}", "Version" : "${IDE_VERSION}",
"CompatVersion" : "${IDE_VERSION_COMPAT}", "CompatVersion" : "${IDE_VERSION_COMPAT}",
"DisabledByDefault" : true, "Experimental" : true,
"VendorId" : "theqtcompany", "VendorId" : "theqtcompany",
"Vendor" : "The Qt Company Ltd", "Vendor" : "The Qt Company Ltd",
"Copyright" : "${IDE_COPYRIGHT}", "Copyright" : "${IDE_COPYRIGHT}",

View File

@@ -1,3 +1,5 @@
As with most solutions that use Generative AI, the Github Copilot extension is considered experimental.
![Writing a function with Copilot](https://qtccache.qt.io/images/copilot/Copilot.gif) ![Writing a function with Copilot](https://qtccache.qt.io/images/copilot/Copilot.gif)
*Copilot in action* *Copilot in action*

View File

@@ -50,11 +50,6 @@ SessionView::SessionView(QWidget *parent)
// Ensure that the full session name is visible. // Ensure that the full session name is visible.
header()->setSectionResizeMode(0, QHeaderView::ResizeToContents); header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
QItemSelection firstRow(m_sessionModel.index(0,0), m_sessionModel.index(
0, m_sessionModel.columnCount() - 1));
selectionModel()->select(firstRow, QItemSelectionModel::QItemSelectionModel::
SelectCurrent);
connect(this, &Utils::TreeView::activated, this, [this](const QModelIndex &index){ connect(this, &Utils::TreeView::activated, this, [this](const QModelIndex &index){
emit sessionActivated(m_sessionModel.sessionAt(index.row())); emit sessionActivated(m_sessionModel.sessionAt(index.row()));
}); });

View File

@@ -236,7 +236,7 @@ void BranchView::slotCustomContextMenu(const QPoint &point)
SetInContext block(m_blockRefresh); SetInContext block(m_blockRefresh);
QMenu contextMenu; QMenu contextMenu;
if (isLocal) if (isLocal || hasActions)
contextMenu.addAction(Tr::tr("&Add..."), this, &BranchView::add); contextMenu.addAction(Tr::tr("&Add..."), this, &BranchView::add);
const std::optional<QString> remote = m_model->remoteName(index); const std::optional<QString> remote = m_model->remoteName(index);

View File

@@ -2768,12 +2768,12 @@ bool GitClient::getCommitData(const FilePath &workingDirectory,
// R old -> new // R old -> new
// D deleted_file // D deleted_file
// ?? untracked_file // ?? untracked_file
if (status != StatusUnchanged) { if (!commitData.parseFilesFromStatus(output)) {
if (!commitData.parseFilesFromStatus(output)) { *errorMessage = msgParseFilesFailed();
*errorMessage = msgParseFilesFailed(); return false;
return false; }
}
if (status != StatusUnchanged) {
// Filter out untracked files that are not part of the project // Filter out untracked files that are not part of the project
QStringList untrackedFiles = commitData.filterFiles(UntrackedFile); QStringList untrackedFiles = commitData.filterFiles(UntrackedFile);

View File

@@ -382,7 +382,7 @@ void InstantBlame::perform()
const Utils::FilePath workingDirectory = Utils::FilePath::fromString(fi.path()); const Utils::FilePath workingDirectory = Utils::FilePath::fromString(fi.path());
const QString lineString = QString("%1,%1").arg(line); const QString lineString = QString("%1,%1").arg(line);
const auto lineDiffHandler = [this](const CommandResult &result) { const auto lineDiffHandler = [this](const CommandResult &result) {
const QString error = result.cleanedStdErr(); const QString error = result.cleanedStdErr().trimmed();
if (!error.isEmpty()) { if (!error.isEmpty()) {
qCWarning(log) << error; qCWarning(log) << error;
} }

View File

@@ -51,6 +51,11 @@
" <glob pattern='*.mkd'/>", " <glob pattern='*.mkd'/>",
" <glob pattern='*.markdown'/>", " <glob pattern='*.markdown'/>",
" </mime-type>", " </mime-type>",
" <mime-type type='text/rust'>",
" <comment>Rust souce file</comment>",
" <sub-class-of type='text/plain'/>",
" <glob pattern='*.rs'/>",
" </mime-type>",
"</mime-info>" "</mime-info>"
] ]
} }

View File

@@ -280,7 +280,7 @@ bool RefactoringFile::apply()
fileChanged(); fileChanged();
if (withUnmodifiedEditor && EditorManager::autoSaveAfterRefactoring()) if (withUnmodifiedEditor && EditorManager::autoSaveAfterRefactoring())
m_editor->textDocument()->save(m_filePath, false); DocumentManager::saveDocument(m_editor->textDocument(), m_filePath);
} }
} }

View File

@@ -343,6 +343,14 @@ protected:
void wheelEvent(QWheelEvent *event) override { void wheelEvent(QWheelEvent *event) override {
QCoreApplication::sendEvent(textEdit->viewport(), event); QCoreApplication::sendEvent(textEdit->viewport(), event);
} }
bool event(QEvent *event) override
{
if (event->type() == QEvent::ToolTip) {
textEdit->extraAreaToolTipEvent(static_cast<QHelpEvent *>(event));
return true;
}
return QWidget::event(event);
}
private: private:
TextEditorWidget *textEdit; TextEditorWidget *textEdit;
@@ -7062,8 +7070,10 @@ void TextEditorWidget::mousePressEvent(QMouseEvent *e)
RefactorMarker refactorMarker = d->m_refactorOverlay->markerAt(e->pos()); RefactorMarker refactorMarker = d->m_refactorOverlay->markerAt(e->pos());
if (refactorMarker.isValid()) { if (refactorMarker.isValid()) {
if (refactorMarker.callback) if (refactorMarker.callback) {
refactorMarker.callback(this); refactorMarker.callback(this);
return;
}
} else { } else {
d->m_linkPressed = d->isMouseNavigationEvent(e); d->m_linkPressed = d->isMouseNavigationEvent(e);
} }
@@ -7370,6 +7380,25 @@ void TextEditorWidget::updateFoldingHighlight(const QTextCursor &cursor)
d->m_highlightBlocksTimer.start(d->m_highlightBlocksInfo.isEmpty() ? 120 : 0); d->m_highlightBlocksTimer.start(d->m_highlightBlocksInfo.isEmpty() ? 120 : 0);
} }
void TextEditorWidget::extraAreaToolTipEvent(QHelpEvent *e)
{
QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y()));
int markWidth = 0;
extraAreaWidth(&markWidth);
const bool inMarkArea = e->pos().x() <= markWidth && e->pos().x() >= 0;
if (!inMarkArea)
return;
int line = cursor.blockNumber() + 1;
if (d->extraAreaPreviousMarkTooltipRequestedLine != line) {
if (auto data = static_cast<TextBlockUserData *>(cursor.block().userData())) {
if (!data->marks().isEmpty())
d->showTextMarksToolTip(mapToGlobal(e->pos()), data->marks());
}
}
d->extraAreaPreviousMarkTooltipRequestedLine = line;
}
void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e) void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
{ {
QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y())); QTextCursor cursor = cursorForPosition(QPoint(0, e->pos().y()));
@@ -7386,16 +7415,14 @@ void TextEditorWidget::extraAreaMouseEvent(QMouseEvent *e)
// Set whether the mouse cursor is a hand or normal arrow // Set whether the mouse cursor is a hand or normal arrow
if (e->type() == QEvent::MouseMove) { if (e->type() == QEvent::MouseMove) {
if (inMarkArea) { if (inMarkArea) {
// tool tips are shown in extraAreaToolTipEvent
int line = cursor.blockNumber() + 1; int line = cursor.blockNumber() + 1;
if (d->extraAreaPreviousMarkTooltipRequestedLine != line) { if (d->extraAreaPreviousMarkTooltipRequestedLine != line) {
if (auto data = static_cast<TextBlockUserData *>(cursor.block().userData())) { if (auto data = static_cast<TextBlockUserData *>(cursor.block().userData())) {
if (data->marks().isEmpty()) if (data->marks().isEmpty())
ToolTip::hide(); ToolTip::hide();
else
d->showTextMarksToolTip(mapToGlobal(e->pos()), data->marks());
} }
} }
d->extraAreaPreviousMarkTooltipRequestedLine = line;
} }
if (!d->m_markDragging && e->buttons() & Qt::LeftButton && !d->m_markDragStart.isNull()) { if (!d->m_markDragging && e->buttons() & Qt::LeftButton && !d->m_markDragStart.isNull()) {

View File

@@ -312,6 +312,7 @@ public:
virtual void extraAreaLeaveEvent(QEvent *); virtual void extraAreaLeaveEvent(QEvent *);
virtual void extraAreaContextMenuEvent(QContextMenuEvent *); virtual void extraAreaContextMenuEvent(QContextMenuEvent *);
virtual void extraAreaMouseEvent(QMouseEvent *); virtual void extraAreaMouseEvent(QMouseEvent *);
virtual void extraAreaToolTipEvent(QHelpEvent *e);
void updateFoldingHighlight(const QPoint &pos); void updateFoldingHighlight(const QPoint &pos);
void updateFoldingHighlight(const QTextCursor &cursor); void updateFoldingHighlight(const QTextCursor &cursor);

View File

@@ -128,6 +128,7 @@ void VcsCommandPrivate::installStdCallbacks(Process *process)
|| m_progressParser || !(m_flags & RunFlags::SuppressStdErr))) { || m_progressParser || !(m_flags & RunFlags::SuppressStdErr))) {
process->setTextChannelMode(Channel::Error, TextChannelMode::MultiLine); process->setTextChannelMode(Channel::Error, TextChannelMode::MultiLine);
connect(process, &Process::textOnStandardError, this, [this](const QString &text) { connect(process, &Process::textOnStandardError, this, [this](const QString &text) {
VcsOutputWindow::setRepository(m_defaultWorkingDirectory);
if (!(m_flags & RunFlags::SuppressStdErr)) if (!(m_flags & RunFlags::SuppressStdErr))
VcsOutputWindow::appendError(text); VcsOutputWindow::appendError(text);
if (m_flags & RunFlags::ProgressiveOutput) if (m_flags & RunFlags::ProgressiveOutput)
@@ -138,6 +139,7 @@ void VcsCommandPrivate::installStdCallbacks(Process *process)
|| m_flags & RunFlags::ShowStdOut) { || m_flags & RunFlags::ShowStdOut) {
process->setTextChannelMode(Channel::Output, TextChannelMode::MultiLine); process->setTextChannelMode(Channel::Output, TextChannelMode::MultiLine);
connect(process, &Process::textOnStandardOutput, this, [this](const QString &text) { connect(process, &Process::textOnStandardOutput, this, [this](const QString &text) {
VcsOutputWindow::setRepository(m_defaultWorkingDirectory);
if (m_flags & RunFlags::ShowStdOut) if (m_flags & RunFlags::ShowStdOut)
VcsOutputWindow::append(text); VcsOutputWindow::append(text);
if (m_flags & RunFlags::ProgressiveOutput) if (m_flags & RunFlags::ProgressiveOutput)
@@ -305,6 +307,7 @@ CommandResult VcsCommand::runBlockingHelper(const CommandLine &command, int time
return {}; return {};
const Internal::VcsCommandPrivate::Job job{command, timeoutS, d->m_defaultWorkingDirectory}; const Internal::VcsCommandPrivate::Job job{command, timeoutS, d->m_defaultWorkingDirectory};
VcsOutputWindow::setRepository(d->m_defaultWorkingDirectory);
d->setupProcess(&process, job); d->setupProcess(&process, job);
const EventLoopMode eventLoopMode = d->eventLoopMode(); const EventLoopMode eventLoopMode = d->eventLoopMode();

View File

@@ -63,6 +63,11 @@ macro(qtc_auto_setup_conan)
option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF) option(QT_CREATOR_SKIP_CONAN_SETUP "Skip Qt Creator's conan package manager auto-setup" OFF)
set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run") set(QT_CREATOR_CONAN_BUILD_POLICY "missing" CACHE STRING "Qt Creator's conan package manager auto-setup build policy. This is used for the BUILD property of cmake_conan_run")
set_property(
DIRECTORY "${CMAKE_SOURCE_DIR}"
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS "${conanfile_txt}")
find_program(conan_program conan) find_program(conan_program conan)
if (NOT conan_program) if (NOT conan_program)
message(WARNING "Qt Creator: conan executable not found. " message(WARNING "Qt Creator: conan executable not found. "
@@ -206,6 +211,11 @@ macro(qtc_auto_setup_vcpkg)
if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP) if (EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json" AND NOT QT_CREATOR_SKIP_VCPKG_SETUP)
option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF) option(QT_CREATOR_SKIP_VCPKG_SETUP "Skip Qt Creator's vcpkg package manager auto-setup" OFF)
set_property(
DIRECTORY "${CMAKE_SOURCE_DIR}"
APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS "${CMAKE_SOURCE_DIR}/vcpkg.json")
find_program(vcpkg_program vcpkg find_program(vcpkg_program vcpkg
PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg ${CMAKE_SOURCE_DIR}/3rdparty/vcpkg PATHS $ENV{VCPKG_ROOT} ${CMAKE_SOURCE_DIR}/vcpkg ${CMAKE_SOURCE_DIR}/3rdparty/vcpkg
NO_DEFAULT_PATH NO_DEFAULT_PATH

View File

@@ -106,6 +106,7 @@ void tst_StringUtils::testParseUsedPortFromNetstatOutput_data()
// Linux // Linux
QTest::newRow("Linux1") << "sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt ..." << -1; QTest::newRow("Linux1") << "sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt ..." << -1;
QTest::newRow("Linux2") << "0: 00000000:2805 00000000:0000 0A 00000000:00000000 00:00000000 00000000 ..." << 10245; QTest::newRow("Linux2") << "0: 00000000:2805 00000000:0000 0A 00000000:00000000 00:00000000 00000000 ..." << 10245;
QTest::newRow("Linux3") << " 1: 0100007F:193F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 ..." << 6463;
// Mac // Mac
QTest::newRow("Mac1") << "Active Internet connections (including servers)" << -1; QTest::newRow("Mac1") << "Active Internet connections (including servers)" << -1;