Merge remote-tracking branch 'origin/13.0' into qds/dev

Change-Id: I524162811ad42e406d7b8e5f38e7043e776005e1
This commit is contained in:
Tim Jenssen
2024-05-07 14:59:51 +02:00
42 changed files with 563 additions and 270 deletions

131
dist/changelog/changes-13.0.1.md vendored Normal file
View File

@@ -0,0 +1,131 @@
Qt Creator 13.0.1
=================
Qt Creator version 13.0.1 contains bug fixes.
The most important changes are listed in this document. For a complete list of
changes, see the Git log for the Qt Creator sources that you can check out from
the public Git repository. For example:
git clone git://code.qt.io/qt-creator/qt-creator.git
git log --cherry-pick --pretty=oneline origin/v13.0.0..v13.0.1
General
-------
* Fixed a crash when hiding tool tips
([QTCREATORBUG-30738](https://bugreports.qt.io/browse/QTCREATORBUG-30738))
Help
----
* Examples Browser
* Fixed that two columns were shown for the wrong category
([QTCREATORBUG-30634](https://bugreports.qt.io/browse/QTCREATORBUG-30634))
* Fixed that the clear button was missing after typing in the filter input
* Fixed links to QML properties
([QTCREATORBUG-30625](https://bugreports.qt.io/browse/QTCREATORBUG-30625))
Editing
-------
* Fixed that backspace could delete more than one whitespace in the middle of a line
([QTCREATORBUG-30725](https://bugreports.qt.io/browse/QTCREATORBUG-30725))
### C++
* Fixed that completion was shown for number literals
([QTCREATORBUG-30607](https://bugreports.qt.io/browse/QTCREATORBUG-30607))
* Fixed that Flex and Bison files were opened in the C++ editor
([QTCREATORBUG-30686](https://bugreports.qt.io/browse/QTCREATORBUG-30686))
### QML
* Fixed a crash when creating a `Qt Quick Application` when the QML language server is enabled
([QTCREATORBUG-30739](https://bugreports.qt.io/browse/QTCREATORBUG-30739))
### Models
* Fixed a crash when selecting elements
([QTCREATORBUG-30413](https://bugreports.qt.io/browse/QTCREATORBUG-30413))
Projects
--------
* Fixed that the text editor for environment changes showed a blinking cursor even when not focused
([QTCREATORBUG-30640](https://bugreports.qt.io/browse/QTCREATORBUG-30640))
* Fixed that the option `Start build processes with low priority` did not persist
([QTCREATORBUG-30696](https://bugreports.qt.io/browse/QTCREATORBUG-30696))
### CMake
* Fixed that `Add build library search path to PATH` missed paths to libraries that were built by
the project
([QTCREATORBUG-30644](https://bugreports.qt.io/browse/QTCREATORBUG-30644))
* Fixed the handling of `source_group`
([QTCREATORBUG-30602](https://bugreports.qt.io/browse/QTCREATORBUG-30602),
[QTCREATORBUG-30620](https://bugreports.qt.io/browse/QTCREATORBUG-30620))
* Fixed that renaming files did not adapt `set_source_file_properties` calls
([QTCREATORBUG-30174](https://bugreports.qt.io/browse/QTCREATORBUG-30174))
* Fixed a crash when combining presets
([QTCREATORBUG-30755](https://bugreports.qt.io/browse/QTCREATORBUG-30755))
Debugging
---------
* Fixed a crash when enabling QML debugging
([QTCREATORBUG-30706](https://bugreports.qt.io/browse/QTCREATORBUG-30706))
* LLDB
* Fixed that `Additional Attach Commands` were not used
Analyzer
--------
### Clang
* Fixed the documentation link for `clang-tidy` checks
([QTCREATORBUG-30658](https://bugreports.qt.io/browse/QTCREATORBUG-30658))
Terminal
--------
* Fixed the `TERM` environment variable, which broke the functioning of certain command line tools
([QTCREATORBUG-30737](https://bugreports.qt.io/browse/QTCREATORBUG-30737))
Platforms
---------
### Android
* Updated the command line tools that are installed with `Set Up SDK`
* Fixed that Qt ABI detection was wrong directly after `Set Up SDK`
([QTCREATORBUG-30568](https://bugreports.qt.io/browse/QTCREATORBUG-30568))
### iOS
* Fixed a crash when starting multiple applications in Simulators
([QTCREATORBUG-30666](https://bugreports.qt.io/browse/QTCREATORBUG-30666))
### Remote Linux
* Fixed that deployment could block Qt Creator until finished
* Fixed that it was not possible to change the device name
([QTCREATORBUG-30622](https://bugreports.qt.io/browse/QTCREATORBUG-30622))
Credits for these changes go to:
--------------------------------
Ahmad Samir
Alessandro Portale
BogDan Vatra
Christian Kandeler
Christian Stenger
Cristian Adam
David Faure
David Schulz
Eike Ziller
Jaroslaw Kobus
Jussi Witick
Leena Miettinen
Marcus Tillmanns
Robert Löhning

View File

@@ -51,6 +51,7 @@
<li><a href="creator-how-tos.html#create-models-and-diagrams">Create Models and Diagrams</a></li>
<li><a href="creator-how-tos.html#debug">Debug</a></li>
<li><a href="creator-how-tos.html#design-uis">Design UIs</a></li>
<li><a href="creator-how-tos.html#develop-for-devices">Develop for Devices</a></li>
<li><a href="creator-how-tos.html#edit-code">Edit Code</a></li>
<li><a href="creator-how-tos.html#manage-kits">Manage Kits</a></li>
<li><a href="creator-how-tos.html#manage-projects">Manage Projects</a></li>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@@ -25,6 +25,10 @@
\externalpage https://doc.qt.io/QtForMCUs/qtul-supported-platforms.html
\title \QMCU - Supported Target Platforms
*/
/*!
\externalpage https://doc.qt.io/QtForMCUs/qtul-prerequisites.html
\title \QMCU - Prerequisites
*/
/*!
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-renesas.html
\title Getting Started on Renesas
@@ -37,6 +41,10 @@
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-nxp.html
\title Getting Started on NXP
*/
/*!
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-on-infineon.html
\title Getting Started on Infineon
*/
/*!
\externalpage https://doc.qt.io/QtForMCUs/qtul-getting-started-windows.html
\title Getting Started on Windows

View File

@@ -80,6 +80,21 @@
\generatelist creator-how-to-design
\section1 Develop for Devices
Install the toolchain for building applications for the targeted
embedded or mobile platform on the computer, and use \QOI to
install Qt libraries that are built for the platform. Then add a
kit with the toolchain and the Qt version for the device's architecture.
When possible, \QOI creates suitable kits for you.
\section2 MCUs
Install \l {Qt for MCUs} and connect devices to the computer to run and
debug applications on them.
\generatelist creator-how-to-mcu
\section1 Edit Code
The code editor offers useful features for editing C++ and QML code, such

View File

@@ -85,7 +85,7 @@
\list
\li \l{Connecting MCUs}
\li \l{Running Applications on MCUs}
\li \l{MCUs}{How To: Develop for MCUs}
\li \l{https://doc.qt.io/QtForMCUs/index.html}{\QMCU}
\endlist
@@ -107,5 +107,5 @@
\li \l{Qt for QNX}
\endlist
\sa {Supported Platforms}
\sa {Develop for Devices}{How To: Develop for Devices}, {Supported Platforms}
*/

View File

@@ -1,31 +1,29 @@
// Copyright (C) 2020 The Qt Company Ltd.
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
/*!
\previouspage creator-developing-ios.html
\page creator-developing-mcu.html
\nextpage creator-developing-qnx.html
\previouspage creator-reference.html
\title Connecting MCUs
\ingroup creator-reference-devices
\QMCU enables you to use subsets of QML and Qt Quick Controls
to create user interfaces for devices that are powered by microcontroller
units (MCU). It includes a new graphics rendering engine that has a low
memory footprint and is optimized for MCUs and other resource-constrained
devices.
\title Developing for MCUs
You can connect MCU boards to a development host to build applications for
them using the GNU Arm Embedded GCC compiler, libraries, and other GNU tools
necessary for bare metal software development on devices based on the Arm
Cortex-M processors. You can deploy the applications on MCUs to run and
debug them using \QC.
\brief Connect MCU devices to the computer to run and debug applications on
them.
The toolchains are available for cross-compilation on Microsoft Windows,
Linux, and macOS. However, the Qt for \QMCU SDK is currently only available
for Windows and Linux.
\note Enable the McuSupport plugin to develop for MCUs.
For a list of \QMCU reference implementations, see the
\l{\QMCU - Supported Target Platforms}{\QMCU} documentation.
Use subsets of QML and Qt Quick Controls to create user interfaces for
devices that are powered by microcontroller units (MCU). \QMCU has a
new graphics rendering engine with a low memory footprint and optimization
for MCUs and other resource-constrained devices.
Connect MCU boards to a computer to build applications for them. Deploy the
applications on MCUs to run and debug them.
For a list of \QMCU reference implementations, see
\l{\QMCU - Supported Target Platforms}.
\section1 Requirements
@@ -33,157 +31,46 @@
\list
\li \QMCU SDK (only available for Windows and Linux)
\li \l{https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm}
{GNU ARM Embedded Toolchain}
\li \l {\QMCU - Prerequisites}{Suitable toolchain}
\endlist
The toolchains are available for cross-compilation on Microsoft Windows,
Linux, and macOS. However, the Qt for \QMCU SDK is currently only available
for Windows and Linux.
The hardware-specific requirements vary depending on the hardware platform you are developing for.
For more information see:
\list
\li \l{Getting Started on NXP}
\li \l{Getting Started on STM}
\li \l{Getting Started on Renesas}
\li \l{Getting Started on Infineon}
\endlist
\section1 Setting Up the Development Environment
\section1 \QMCU SDKs
You must download and install the required software and create connections
between \QC and MCUs. The following subsections guide you through the
setup process.
\section2 MCU Plugin
To be able to develop applications for MCUs, you need the MCU plugin.
This plugin is enabled automatically by \QOI when you
install \QMCU.
\section2 Specifying MCU Settings
To configure a connection between \QC and your MCU board, select
\preferences > \uicontrol Devices > \uicontrol MCU:
\image qtcreator-mcu-options.png "MCU preferences"
\list 1
\li In the \uicontrol {\QMCU SDK} field, specify the path
to the directory where you installed \QMCU SDK.
\li In the \uicontrol {Targets supported by the \QMCU SDK}
field, select your MCU board.
\li In the \uicontrol Requirements section, ensure that the
platform-specific requirements are met. This varies depending
on the target chosen:
\list
\li For STM32 targets:
\list
\li The \uicontrol {GNU ARM Embedded Toolchain} or
\uicontrol {IAR ARM Compiler} path.
\li The \uicontrol {STM32CubeProgrammer} install path.
\li The \uicontrol {MCU SDK} for the chosen target.
\li The \uicontrol {FreeRTOS Sources} for the chosen target.
\endlist
\li For NXP targets:
\list
\li The \uicontrol {GNU ARM Embedded Toolchain} or
\uicontrol {IAR ARM Compiler} path.
\li The \uicontrol {MCUXpresso IDE} install path.
\li The \uicontrol {MCU SDK} for the chosen target.
\li The \uicontrol {FreeRTOS Sources} for the chosen target.
\endlist
\li For Renesas targets:
\list
\li The \uicontrol {Green Hills Compiler} path.
\li The \uicontrol {Renesas Graphics Library} path.
\endlist
\endlist
\li Select the
\uicontrol {Automatically create kits for all available targets on start}
option to create kits automatically the next time Qt Creator is
started.
\note You could also use \uicontrol {Create Kit} to manually
create kits for the chosen target.
\li Select \uicontrol Apply to save the settings.
\endlist
\note When updating to other versions of the \QMCU SDK, \QC will
ask you if you want to replace the existing kits, or create new ones
alongside. This can also be done manually, for each individual target,
via \uicontrol {Update Kit} and \uicontrol {Create Kit}, respectively.
\section2 Adding MCU Devices
\note This optional step is not necessary if you have already
set up the MCU SDK as outlined in \l{Specifying MCU Settings}.
\QC automatically adds a default MCU device when you select
\uicontrol Apply in the \uicontrol MCU tab after configuring the
MCU tool chain.
\image qtcreator-mcu-device.png "MCU devices"
To add MCU devices, select \preferences > \uicontrol Devices > \uicontrol Add
> \uicontrol {MCU Device} > \uicontrol {Start Wizard}:
\list 1
\li In the \uicontrol Name field, give the device a name.
\li In the \uicontrol Type field, select the board type.
\li Select \uicontrol Apply to add the device.
\endlist
\section2 Managing MCU Kits
\QC automatically adds kits for all the available targets, if the
\uicontrol {Automatically create kits for all available targets on start}
option is enabled under the \uicontrol MCU settings tab. You can also
create kits for individual targets manually, as outlined
in \l{Specifying MCU Settings}.
\image qtcreator-mcu-kit.png "MCU kits"
You can edit and/or remove individual kits in \preferences > \uicontrol Kits.
However, for adding new kits you should use the \uicontrol {Create Kit}
button in the {\QMCU} settings tab. This method adds the paths to
the kit's toolkits and SDKs, and keeps them synchronized when selecting
\uicontrol Apply or \uicontrol OK.
The \uicontrol {MCU dependencies} field displays paths to 3rd party
software required for MCU development with the current kit.
\section1 Running Applications on MCUs
You can use a wizard to set up a project for developing an application that
you can run on MCUs. The project uses a subset of QML and Qt Quick Controls
that are supported by \QMCU. For more information about developing
applications for MCUs, see the \QMCU documentation.
To create an application and run it on a MCU board:
\list 1
\li Select \uicontrol File > \uicontrol {New Project} >
\uicontrol {Application (\QMCU)} >
\uicontrol {MCU Support Application} > \uicontrol Choose.
\li Follow the instructions of the wizard to create the project.
\li Select \uicontrol Projects > \uicontrol {Build & Run}, and then
select the kit for building the application and running it on the
MCU board specified in the kit.
\li Select \uicontrol Run to specify run settings.
Usually, you can use the default settings.
\endlist
\section1 Supported \QMCU SDKs
\note The \QMCU SDK 2.3 requires \QC 9.0.0, or later.
The following table lists the \QC versions you can use to develop
applications with particular \QMCU SDK versions.
While you can use the latest \QC version to develop with any \QMCU SDK, the
following combinations have been tested to work well.
\table
\header
\li \QC version
\li \QMCU SDK version
\row
\li 9.0.0 or later
\li 2.0 or later
\li 12.0.2 or later
\li 2.7 or later
\row
\li 11.0.3
\li 2.6
\row
\li 10.0.2
\li 2.5
\row
\li 10.0.0
\li 2.4
\row
\li 9.0.0
\li 2.3
\row
\li 7.0.0 up to 8.0.2
\li 2.0 up to 2.2
@@ -203,4 +90,159 @@
\li 4.11.x
\li 1.0
\endtable
\sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs}
*/
/*!
\page creator-how-to-create-mcu-kits.html
\previouspage creator-how-tos.html
\ingroup creator-how-to-mcu
\title Connect MCU devices
\note Enable the McuSupport plugin to develop for MCUs.
To configure a connection between \QC and your MCU board:
\list 1
\li Go to \preferences > \uicontrol Devices > \uicontrol MCU.
\li In \uicontrol {\QMCU SDK}, specify the path to the directory where
you installed \QMCU SDK.
\image qtcreator-preferences-mcu.webp {MCU preferences}
\li In \uicontrol {Targets supported by the \QMCU SDK}, select your MCU
board.
\li In \uicontrol Requirements, check that the platform-specific
requirements are met. This depends on the target:
\list
\li For STM32 targets:
\list
\li The \uicontrol {GNU ARM Embedded Toolchain} or
\uicontrol {IAR ARM Compiler} path.
\li The \uicontrol {STM32CubeProgrammer} install path.
\li The \uicontrol {Board SDK} for the chosen target.
\li The \uicontrol {FreeRTOS Sources} for the chosen target.
\endlist
\li For NXP targets:
\list
\li The \uicontrol {GNU ARM Embedded Toolchain} or
\uicontrol {IAR ARM Compiler} path.
\li The \uicontrol {MCUXpresso IDE} install path.
\li The \uicontrol {Board SDK} for the chosen target.
\li The \uicontrol {FreeRTOS Sources} for the chosen target.
\endlist
\li For Renesas targets:
\list
\li The \uicontrol {Green Hills Compiler} path.
\li The \uicontrol {Renesas Graphics Library} path.
\endlist
\li For Infineon targets:
\list
\li The \uicontrol {Green Hills Compiler for ARM} path.
\li The \uicontrol {Graphics Driver for Traveo II Cluster Series}
path.
\li The \uicontrol {Infineon Auto Flash Utility} path.
\endlist
\endlist
\li Select
\uicontrol {Automatically create kits for all available targets on start}
to create kits automatically the next time \QC starts.
\note Select \uicontrol {Create Kit} to manually create kits for the
target.
\li Select \uicontrol Apply to save the preferences.
\endlist
\section1 Add MCU devices
\QC automatically adds a default MCU device when you select
\uicontrol Apply in the \uicontrol MCU tab after configuring the
MCU tool chain.
\image qtcreator-mcu-device.png {MCU devices}
To add MCU devices, select \preferences > \uicontrol Devices > \uicontrol Add
> \uicontrol {MCU Device} > \uicontrol {Start Wizard}:
\list 1
\li In \uicontrol Name, give the device a name.
\li In \uicontrol Type, select the board type.
\li Select \uicontrol Apply to add the device.
\endlist
\sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs},
{Developing for MCUs}
*/
/*!
\page creator-how-to-manage-mcu-kits.html
\previouspage creator-how-tos.html
\ingroup creator-how-to-mcu
\title Manage MCU Kits
\note Enable the McuSupport plugin to develop for MCUs.
\QC automatically adds kits for all the available MCU targets if you select
\uicontrol {Automatically create kits for all available targets on start}
in \preferences > \uicontrol Devices > \uicontrol MCU.
\image qtcreator-preferences-kits-mcu.webp {MCU kit}
\note When you update the \QMCU SDK, \QC asks you whether you want to replace
the existing kits or create additional kits. To do this manually for each
target, select \uicontrol {Update Kit} or \uicontrol {Create Kit}.
To add new kits, go to \preferences > \uicontrol Devices > \uicontrol MCU,
and select \uicontrol {Create Kit}. This adds the paths to the kit's toolkits
and SDKs, and keeps them synchronized when you select \uicontrol Apply or
\uicontrol OK.
\section1 Change or remove MCU kits
To change or remove individual kits, go to \preferences > \uicontrol Kits.
The \uicontrol {MCU dependencies} field displays paths to 3rd party
software required for MCU development with the current kit.
\sa {Enable and disable plugins}, {MCUs}{How To: Develop for MCUs},
{Developing for MCUs}
*/
/*!
\page creator-how-to-run-on-mcu-devices.html
\previouspage creator-how-tos.html
\ingroup creator-how-to-mcu
\title Create MCU projects
\note Enable the McuSupport plugin to develop for MCUs.
Create a project for developing an application that you can run on MCUs.
The project imports a subset of QML and Qt Quick Controls types
that are supported by \QMCU. For more information about developing
applications for MCUs, see \l {Qt for MCUs}.
To create an application and run it on a MCU board:
\list 1
\li Go to \uicontrol File > \uicontrol {New Project}.
\image qtcreator-mcu-new-project.webp {New Project dialog}
\li Select \uicontrol {QmlProject Application (\QMCU)} >
\uicontrol {Qt for MCUs Empty Application} or
\uicontrol {Qt for MCUs Example Application} > \uicontrol Choose.
\li Follow the instructions of the wizard to create the project.
\li Select \uicontrol Projects > \uicontrol {Build & Run}, and then
select the kit for building the application and running it on the
MCU board specified in the kit.
\li Select \uicontrol Run to specify run settings.
Usually, you can use the default settings.
\endlist
\sa {Configure projects for running}, {Enable and disable plugins},
{MCUs}{How To: Develop for MCUs}, {Use project wizards},
{Developing for MCUs}
*/

View File

@@ -61,7 +61,7 @@
\QC detects the tools and configured devices automatically and uses
the tools to build, deploy, and run applications.
\li \l{Connecting MCUs}
\li \l{Developing for MCUs}
You can connect MCU boards to a development host to deploy, run, and
debug applications on them from \QC.

View File

@@ -36,6 +36,15 @@
\annotatedlist creator-reference-build-configurations
\section1 Devices
Connect devices to the computer to run, debug, and analyze applications
built for them from \QC. When you install Qt for a target platform, such
as Android or QNX, the build and run configurations for the development
targets might be set up automatically in \QC.
\annotatedlist creator-reference-devices
\section1 Editors
When you open files, \QC chooses a suitable editor according to the file

View File

@@ -42,7 +42,6 @@
\li \l{Connecting Boot2Qt Devices}
\li \l{Adding Docker Devices}
\li \l{Connecting iOS Devices}
\li \l{Connecting MCUs}
\li \l{Connecting QNX Devices}
\li \l{Connecting Remote Linux Devices}
\li \l{Building Applications for the Web}
@@ -109,6 +108,11 @@
\generatelist creator-how-to-debug
\li Design UIs
\generatelist creator-how-to-design
\li Develop for Devices
\list
\li MCUs
\generatelist creator-how-to-mcu
\endlist
\li Edit Code
\generatelist creator-how-to-edit
\list
@@ -148,6 +152,10 @@
\list
\li Build Configurations
\generatelist creator-reference-build-configurations
\endlist
\li Devices
\generatelist creator-reference-devices
\list
\li Run Configurations
\generatelist creator-reference-run-configurations
\endlist

View File

@@ -1456,6 +1456,21 @@ class Dumper(DumperBase):
if bp is not None:
self.reportBreakpointUpdate(bp)
def wantAutoContinue(self, frame):
if self.platform_ != 'remote-android':
return False
funcname = frame.GetFunctionName()
if funcname and funcname.startswith('java.'):
return True
module = frame.GetModule()
filespec = module.GetPlatformFileSpec() # Not GetFileSpec
filename = filespec.GetFilename()
if filename == 'libart.so':
return True
if funcname == None and not frame.line_entry.file.IsValid() and filename == None:
return True
return False
def handleEvent(self, event):
if lldb.SBBreakpoint.EventIsBreakpointEvent(event):
self.handleBreakpointEvent(event)
@@ -1490,8 +1505,12 @@ class Dumper(DumperBase):
if state == lldb.eStateStopped:
stoppedThread = self.firstStoppedThread()
if stoppedThread:
#self.report("STOPPED THREAD: %s" % stoppedThread)
frame = stoppedThread.GetFrameAtIndex(0)
if self.wantAutoContinue(frame):
#self.warn("AUTO CONTINUE")
error = self.process.Continue()
return
#self.report("FRAME: %s" % frame)
function = frame.GetFunction()
functionName = function.GetName()

View File

@@ -20,7 +20,13 @@ Token_Foreground_Subtle=ff2A2A2A
Token_Text_Default=ffF8F8F8
Token_Text_Muted=ffAEAEAE
Token_Text_Subtle=ff595959
Token_Text_Accent=ff23B26A
; Token_Text_Accent value from Figma is still too dark. Therefore, it is modified, here.
; Text (consisting of thin lines) needs to be substantially brighter than accent colors used for
; larger-area elements like the filled button.
; Token_Text_Accent=ff23B26A
Token_Text_Accent=ff30C06A
Token_Stroke_Strong=ffeeeeee
Token_Stroke_Muted=ff727272

View File

@@ -10,7 +10,12 @@ Token_Accent_Muted=ff1f9b5d
Token_Accent_Subtle=ff1a8550
Token_Background_Default=fffcfcfc
Token_Background_Muted=ffF2F2F2
; Token_Background_Muted value from Figma is too dark to ensure proper contrast when used as
; text bachground. Therefore, it is modified, here.
;Token_Background_Muted=ffF2F2F2
Token_Background_Muted=ffF6F6F6
Token_Background_Subtle=ffe7e7e7
Token_Foreground_Default=ffD8D8D8
@@ -20,7 +25,7 @@ Token_Foreground_Subtle=ffEFEFEF
Token_Text_Default=ff393939
Token_Text_Muted=ff6a6a6a
Token_Text_Subtle=ffbebebe
Token_Text_Accent=ff28C878
Token_Text_Accent=ff1F9B5D
Token_Stroke_Strong=ff464646
Token_Stroke_Muted=ff727272

View File

@@ -197,7 +197,8 @@ FileSaver::FileSaver(const FilePath &filePath, QIODevice::OpenMode mode)
m_file.reset(tf);
} else {
const bool readOnlyOrAppend = mode & (QIODevice::ReadOnly | QIODevice::Append);
m_isSafe = !readOnlyOrAppend && !filePath.hasHardLinks();
m_isSafe = !readOnlyOrAppend && !filePath.hasHardLinks()
&& !qtcEnvironmentVariableIsSet("QTC_DISABLE_ATOMICSAVE");
if (m_isSafe)
m_file.reset(new SaveFile(filePath));
else

View File

@@ -89,12 +89,10 @@ QTCREATOR_UTILS_EXPORT FileDeletedPromptAnswer
"Do you want to save it under a different name, or close "
"the editor?").arg(QDir::toNativeSeparators(fileName));
QMessageBox box(QMessageBox::Question, title, msg, QMessageBox::NoButton, parent);
QPushButton *close =
box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole);
QPushButton *saveas = box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole);
QPushButton *close = box.addButton(Tr::tr("&Close"), QMessageBox::RejectRole);
QPushButton *closeAll =
box.addButton(Tr::tr("C&lose All"), QMessageBox::RejectRole);
QPushButton *saveas =
box.addButton(Tr::tr("Save &as..."), QMessageBox::ActionRole);
QPushButton *save =
box.addButton(Tr::tr("&Save"), QMessageBox::AcceptRole);
box.setDefaultButton(saveas);

View File

@@ -1010,6 +1010,12 @@ QFont StyleHelper::uiFont(UiElement element)
const qreal qrealPointSize = metrics.pixelSize * pixelsToPointSizeFactor;
font.setPointSizeF(qrealPointSize);
// Intermediate font weights can produce blurry rendering and are harder to read.
// For "non-retina" screens, apply the weight only for some fonts.
static const bool isHighDpi = qApp->devicePixelRatio() >= 2;
const bool setWeight = isHighDpi || element == UiElementCaptionStrong
|| element <= UiElementH4;
if (setWeight)
font.setWeight(metrics.weight);
return font;

View File

@@ -288,9 +288,11 @@ void ToolTip::hideTipWithDelay()
void ToolTip::hideTipImmediately()
{
if (m_tip) {
m_tip->close();
m_tip->deleteLater();
m_tip = nullptr;
TipLabel *tip = m_tip.data();
m_tip.clear();
tip->close();
tip->deleteLater();
}
m_showTimer.stop();
m_hideDelayTimer.stop();

View File

@@ -254,7 +254,7 @@ static expected_str<void> testJavaC(const FilePath &jdkPath)
jdkVersion = QVersionNumber::fromString(stdOut.mid(outputPrefix.length()).split('\n').first());
if (jdkVersion.isNull() || jdkVersion.majorVersion() != requiredJavaMajorVersion) {
if (jdkVersion.isNull() /* || jdkVersion.majorVersion() != requiredJavaMajorVersion */ ) {
return make_unexpected(Tr::tr("Unsupported JDK version (needs to be %1): %2 (parsed: %3)")
.arg(requiredJavaMajorVersion)
.arg(stdOut)
@@ -813,6 +813,7 @@ void AndroidSettingsWidget::updateUI()
}
}
m_makeDefaultNdkButton->setEnabled(m_ndkListWidget->count() > 0);
m_makeDefaultNdkButton->setText(isDefaultNdkSelected() ? Tr::tr("Unset Default")
: Tr::tr("Make Default"));
}

View File

@@ -65,7 +65,11 @@ static void adjustFormatStyleForLineBreak(clang::format::FormatStyle &style,
static llvm::StringRef clearExtraNewline(llvm::StringRef text)
{
#if LLVM_VERSION_MAJOR >= 16
while (text.starts_with("\n\n"))
#else
while (text.startswith("\n\n"))
#endif
text = text.drop_front();
return text;
}

View File

@@ -127,7 +127,11 @@ public:
/// Gets real path of \p Path e.g. collapse all . and .. patterns, resolve
/// symlinks. For real file system, this uses `llvm::sys::fs::real_path`.
/// This returns errc::operation_not_permitted if not implemented by subclass.
std::error_code getRealPath(const Twine &Path, SmallVectorImpl<char> &Output) const override
std::error_code getRealPath(const Twine &Path, SmallVectorImpl<char> &Output)
#if LLVM_VERSION_MAJOR < 19
const
#endif
override
{
Q_UNUSED(Path);
Q_UNUSED(Output);

View File

@@ -1354,12 +1354,10 @@ void CMakeBuildSystem::updateProjectData()
return QtMajorVersion::None;
};
QtMajorVersion qtVersion = kitInfo.projectPartQtVersion;
if (qtVersion == QtMajorVersion::None)
qtVersion = qtVersionFromCMake({{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}},
QtMajorVersion qtVersion = qtVersionFromCMake(
{{QtMajorVersion::Qt6, {"Qt6", "Qt6Core"}},
{QtMajorVersion::Qt5, {"Qt5", "Qt5Core"}},
{QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}}
});
{QtMajorVersion::Qt4, {"Qt4", "Qt4Core"}}});
QString errorMessage;
RawProjectParts rpps = m_reader.createRawProjectParts(errorMessage);
@@ -1368,7 +1366,7 @@ void CMakeBuildSystem::updateProjectData()
qCDebug(cmakeBuildSystemLog) << "Raw project parts created." << errorMessage;
for (RawProjectPart &rpp : rpps) {
rpp.setQtVersion(qtVersion); // TODO: Check if project actually uses Qt.
rpp.setQtVersion(qtVersion);
const FilePath includeFileBaseDir = buildConfiguration()->buildDirectory();
QStringList cxxFlags = rpp.flagsForCxx.commandLineFlags;
QStringList cFlags = rpp.flagsForC.commandLineFlags;

View File

@@ -136,6 +136,8 @@ Internal::PresetsData CMakeProject::combinePresets(Internal::PresetsData &cmakeP
&& left.inherits.value().contains(right.name);
const bool inheritsGreater = left.inherits && right.inherits
&& !left.inherits.value().isEmpty()
&& !right.inherits.value().isEmpty()
&& left.inherits.value().first()
> right.inherits.value().first();

View File

@@ -1473,6 +1473,7 @@ bool EditorManagerPrivate::activateEditorForEntry(EditorView *view, DocumentMode
void EditorManagerPrivate::closeEditorOrDocument(IEditor *editor)
{
QTC_ASSERT(editor, return);
EditorManager::addCurrentPositionToNavigationHistory();
QList<IEditor *> visible = EditorManager::visibleEditors();
if (Utils::contains(visible,
[&editor](IEditor *other) {
@@ -2690,7 +2691,6 @@ void EditorManager::slotCloseCurrentEditorOrDocument()
{
if (!d->m_currentEditor)
return;
addCurrentPositionToNavigationHistory();
d->closeEditorOrDocument(d->m_currentEditor);
}

View File

@@ -32,10 +32,28 @@
#include <QTextStream>
#include <QTextCodec>
#ifdef Q_OS_WIN
#ifdef QTCREATOR_PCH_H
#define CALLBACK WINAPI
#endif
#include <qt_windows.h>
#include <shlobj.h>
#endif
using namespace Utils;
namespace Core {
static FilePath windowsDirectory()
{
#ifdef Q_OS_WIN
wchar_t str[UNICODE_STRING_MAX_CHARS] = {};
if (SUCCEEDED(SHGetFolderPath(nullptr, CSIDL_WINDOWS, nullptr, 0, str)))
return FilePath::fromUserInput(QString::fromUtf16(reinterpret_cast<char16_t *>(str)));
#endif
return {};
}
// Show error with option to open settings.
static void showGraphicalShellError(QWidget *parent, const QString &app, const QString &error)
{
@@ -56,13 +74,7 @@ void FileUtils::showInGraphicalShell(QWidget *parent, const FilePath &pathIn)
const QFileInfo fileInfo = pathIn.toFileInfo();
// Mac, Windows support folder or file.
if (HostOsInfo::isWindowsHost()) {
const FilePath explorer = FilePath("explorer.exe").searchInPath();
if (explorer.isEmpty()) {
QMessageBox::warning(parent,
Tr::tr("Launching Windows Explorer Failed"),
Tr::tr("Could not find explorer.exe in path to launch Windows Explorer."));
return;
}
const FilePath explorer = windowsDirectory().pathAppended("explorer.exe");
QStringList param;
if (!pathIn.isDir())
param += QLatin1String("/select,");

View File

@@ -287,7 +287,7 @@ static const QPixmap &searchBoxIcon()
}
SearchBox::SearchBox(QWidget *parent)
: QLineEdit(parent)
: Utils::FancyLineEdit(parent)
{
setAttribute(Qt::WA_MacShowFocusRect, false);
setAutoFillBackground(false);
@@ -301,10 +301,9 @@ SearchBox::SearchBox(QWidget *parent)
pal.setColor(QPalette::Text, searchBoxTextTF.color());
setPalette(pal);
const QSize iconSize = searchBoxIcon().deviceIndependentSize().toSize();
setContentsMargins({HPaddingXs, ExPaddingGapM,
HPaddingXs + iconSize.width() + HPaddingXs, ExPaddingGapM});
setContentsMargins({HPaddingXs, ExPaddingGapM, 0, ExPaddingGapM});
setFixedHeight(ExPaddingGapM + searchBoxTextTF.lineHeight() + ExPaddingGapM);
setFiltering(true);
}
QSize SearchBox::minimumSizeHint() const
@@ -351,10 +350,12 @@ void SearchBox::paintEvent(QPaintEvent *event)
QPainter p(this);
paintCommonBackground(&p, rect(), this);
if (text().isEmpty()) {
const QPixmap icon = searchBoxIcon();
const QSize iconS = icon.deviceIndependentSize().toSize();
const QPoint iconPos(width() - HPaddingXs - iconS.width(), (height() - iconS.height()) / 2);
p.drawPixmap(iconPos, icon);
}
QLineEdit::paintEvent(event);
}

View File

@@ -25,8 +25,6 @@
#include <functional>
#include <optional>
namespace Utils { class FancyLineEdit; }
namespace Core {
namespace WelcomePageHelpers {
@@ -113,7 +111,7 @@ private:
const Role m_role = Primary;
};
class CORE_EXPORT SearchBox : public QLineEdit
class CORE_EXPORT SearchBox : public Utils::FancyLineEdit
{
public:
explicit SearchBox(QWidget *parent = nullptr);

View File

@@ -30,6 +30,7 @@
#include <projectexplorer/runcontrol.h>
#include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/qtcprocess.h>
#include <utils/processinterface.h>
@@ -328,6 +329,16 @@ void LldbEngine::handleLldbStarted()
runEngine();
};
runCommand(cmd3);
// Execute post attach commands
QStringList commands = settings().gdbPostAttachCommands().split('\n');
commands = Utils::filtered(commands, [](const QString line) {
const QString trimmed = line.trimmed();
return !trimmed.isEmpty() && !trimmed.startsWith('#');
});
for (const QString &cmd : commands) {
executeDebuggerCommand(cmd);
}
} else {
notifyEngineSetupFailed();
}

View File

@@ -235,8 +235,8 @@ void updateEditorToolBar(Core::IEditor *editor)
TextDocument *document = textEditor->textDocument();
Client *client = LanguageClientManager::clientForDocument(textEditor->textDocument());
ClientExtras *extras = widget->findChild<ClientExtras *>(clientExtrasName,
Qt::FindDirectChildrenOnly);
ClientExtras *extras = dynamic_cast<ClientExtras *>(
widget->findChild<QObject *>(clientExtrasName, Qt::FindDirectChildrenOnly));
if (!extras) {
if (!client)
return;

View File

@@ -47,10 +47,9 @@ const char PROJECT_BASE_ID[] = "Welcome.OpenRecentProject";
namespace ProjectExplorer {
namespace Internal {
constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH6};
constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementCaptionStrong};
constexpr TextFormat sessionNameTF = {projectNameTF.themeColor, projectNameTF.uiElement,
Qt::AlignVCenter | Qt::TextDontClip};
constexpr TextFormat projectNameTF {Theme::Token_Text_Accent, StyleHelper::UiElementH5};
constexpr TextFormat projectPathTF {Theme::Token_Text_Muted, StyleHelper::UiElementH6};
constexpr TextFormat sessionNameTF = projectNameTF;
constexpr TextFormat sessionProjectNameTF {Theme::Token_Text_Default, projectNameTF.uiElement};
constexpr TextFormat shortcutNumberTF {Theme::Token_Text_Default,
StyleHelper::UiElementCaptionStrong,
@@ -59,7 +58,7 @@ constexpr TextFormat actionTF {Theme::Token_Text_Default, StyleHelper::UiElement
Qt::AlignCenter | Qt::TextDontClip};
constexpr TextFormat actionDisabledTF {Theme::Token_Text_Subtle, actionTF.uiElement,
actionTF.drawTextFlags};
constexpr int shortcutNumberWidth = 16;
constexpr int shortcutNumberWidth = 6;
constexpr int actionSepWidth = 1;
constexpr int sessionScrollBarGap = HPaddingXs;
@@ -318,16 +317,16 @@ public:
{
// visible on withIcon() Gap + arrow visible on hover Extra margin right of project item
// | | |
// +-----------+----------+ +--------+-------+ +----------+----------+
// +----------+----------+ +--------+-------+ +----------+----------+
// | | | | | |
//
// +------------+--------+---------+------------+---------+-------------+--------+-------+------------+---------------------+ --+
// +------------+--------+--------+------------+--------+-------------+--------+-------+------------+---------------------+ --+
// | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
// | | | +------------+ +-------------+ | | | | |
// |(HPaddingXs)|<number>|(HGapXxs)| <icon> |(HGapXxs)|<sessionName>|(HGapXs)|<arrow>| | | +-- Header
// | |(16x16) | +------------+ +-------------+ | | | | |
// |(HPaddingXs)|<number>|(HGapXs)| <icon> |(HGapXs)|<sessionName>|(HGapXs)|<arrow>| | | +-- Header
// | |(w:6) | +------------+ +-------------+ | | | | |
// | | | |(VPaddingXs)| |(VPaddingXs) | | | | | |
// |------------+--------+---------+------------+---------+-------------+--------+-------+ | | --+
// |------------+--------+--------+------------+--------+-------------+--------+-------+ | | --+
// | +-- | (VPaddingXxs) | | | |
// | | +------------------------------+(HPaddingXs)| | |
// | | | <projectName> | | | |
@@ -337,15 +336,15 @@ public:
// | | | <projectPath> | | | |
// | | +------------------------------+ | | +-- Expansion
// | +-- | (VPaddingXxs) | | | |
// +------------------------------------------------------+------------------------------+------------+ | |
// +----------------------------------------------------+------------------------------+------------+ | |
// | (VPaddingXs) | | |
// +-----------------------------------------+--------------+-----------------------------------------+ | |
// +---------------------------------------+--------------+-----------------------------------------+ | |
// +-- | <cloneButton>|<renameButton>|<deleteButton> | | |
// | +-----------------------------------------+--------------+-----------------------------------------+ | |
// | +---------------------------------------+--------------+-----------------------------------------+ | |
// | | (VPaddingXs) | | |
// | +--------------------------------------------------------------------------------------------------+---------------------+ --+
// | +------------------------------------------------------------------------------------------------+---------------------+ --+
// | | (VGapL) | +-- Gap between session items
// | +------------------------------------------------------------------------------------------------------------------------+ --+
// | +----------------------------------------------------------------------------------------------------------------------+ --+
// |
// \ session action "buttons" and dividers
// +-----------------------------------------------+--------+---------+--------+
@@ -381,11 +380,11 @@ public:
const int y = bgR.y();
const int numberX = x + s(HPaddingXs);
const int iconX = numberX + shortcutNumberWidth + s(HGapXxs);
const int iconX = numberX + shortcutNumberWidth + s(HGapXs);
const int arrowX = bgR.right() - s(HPaddingXs) - arrowS.width();
const QRect arrowHoverR(arrowX - s(HGapXs) + 1, y,
s(HGapXs) + arrowS.width() + s(HPaddingXs), hdR.height());
const int textX = withIcon() ? iconX + iconS.width() + s(HGapXxs) : iconX;
const int textX = withIcon() ? iconX + iconS.width() + s(HGapXs) : iconX;
const int iconY = y + (hdR.height() - iconS.height()) / 2;
const int arrowY = y + (hdR.height() - arrowS.height()) / 2;
@@ -627,19 +626,19 @@ public:
// +--------+-------+ +------+-----+
// | | | |
//
// +------------+--------+---------+------+---------+-------------+------------+------------+
// +------------+--------+--------+------+---------+-------------+------------+------------+
// | | | | | | (VPaddingXs)| | |
// | | | | | +-------------+ | |
// | | | | | |<projectName>| | |
// | | | | | +-------------+ | |
// |(HPaddingXs)|<number>|(HGapXxs)|<icon>|(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)|
// | |(16x16) | | | +-------------+ | |
// |(HPaddingXs)|<number>|(HGapXs)|<icon>|(HGapXxs)| (VGapXs) |(HPaddingXs)|(HPaddingXs)|
// | |(w:6) | | | +-------------+ | |
// | | | | | |<projectPath>| | |
// | | | | | +-------------+ | |
// | | | | | | (VPaddingXs)| | |
// +------------+--------+---------+------+---------+-------------+------------+------------+ --+
// +------------+--------+--------+------+---------+-------------+------------+------------+ --+
// | (VGapL) | +-- Gap between project items
// +----------------------------------------------------------------------------------------+ --+
// +---------------------------------------------------------------------------------------+ --+
const bool hovered = option.widget->isActiveWindow()
&& option.state & QStyle::State_MouseOver;
@@ -651,9 +650,9 @@ public:
const int x = bgR.x();
const int numberX = x + s(HPaddingXs);
const int iconX = numberX + shortcutNumberWidth + s(HGapXxs);
const int iconX = numberX + shortcutNumberWidth + s(HGapXs);
const int iconWidth = iconS.width();
const int textX = withIcon() ? iconX + iconWidth + s(HGapXxs) : iconX;
const int textX = withIcon() ? iconX + iconWidth + s(HGapXs) : iconX;
const int textWidth = bgR.width() - s(HPaddingXs) - textX;
const int y = bgR.y();

View File

@@ -404,7 +404,6 @@ static const QStringList &plugins()
"pydocstyle",
"pyflakes",
"pylint",
"rope_completion",
"yapf"};
return plugins;
}
@@ -610,7 +609,6 @@ static QString defaultPylsConfiguration()
plugins.insert("pydocstyle", disabled);
plugins.insert("pyflakes", enabled);
plugins.insert("pylint", disabled);
plugins.insert("rope_completion", enabled);
plugins.insert("yapf", enabled);
QJsonObject pylsp;
pylsp.insert("plugins", plugins);

View File

@@ -750,6 +750,9 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file,
void QmlJSEditorDocumentPrivate::settingsChanged()
{
if (q->isTemporary())
return;
Utils::FilePath newQmlls = qmllsForFile(q->filePath(), ModelManagerInterface::instance());
if (m_qmllsStatus.qmllsPath == newQmlls)
return;

View File

@@ -11,6 +11,8 @@
#include "qtversionfactory.h"
#include "qtversionmanager.h"
#include <android/androidconstants.h>
#include <coreplugin/icore.h>
#include <coreplugin/progressmanager/progressmanager.h>
@@ -837,8 +839,11 @@ bool QtVersion::hasQtAbisSet() const
Abis QtVersion::qtAbis() const
{
if (!d->m_data.qtAbis)
if (!d->m_data.qtAbis
// QTCREATORBUG-30568 give AndroidQtVersion a "second chance" to detect Qt Abis
|| (d->m_type == Android::Constants::ANDROID_QT_TYPE && d->m_data.qtAbis->isEmpty())) {
d->m_data.qtAbis = detectQtAbis();
}
return *d->m_data.qtAbis;
}

View File

@@ -119,8 +119,12 @@ void TerminalWidget::setupPty()
Environment env = m_openParameters.environment.value_or(Environment{})
.appliedToEnvironment(shellCommand.executable().deviceEnvironment());
// Some OS/Distros set a default value for TERM such as "dumb", which then breaks
// command line tools such as "clear" which try to figure out what terminal they are
// running in. Therefore we have to force-set our own TERM value here.
env.set("TERM", "xterm-256color");
// Set some useful defaults
env.setFallback("TERM", "xterm-256color");
env.setFallback("TERM_PROGRAM", QCoreApplication::applicationName());
env.setFallback("COLORTERM", "truecolor");
env.setFallback("COMMAND_MODE", "unix2003");

View File

@@ -216,8 +216,10 @@ void CodeStyleSelectorWidget::slotImportClicked()
void CodeStyleSelectorWidget::slotExportClicked()
{
ICodeStylePreferences *currentPreferences = m_codeStyle->currentPreferences();
const FilePath filePath = FileUtils::getSaveFilePath(this, Tr::tr("Export Code Style"),
FilePath::fromString(QString::fromUtf8(currentPreferences->id() + ".xml")),
const FilePath filePath = FileUtils::getSaveFilePath(
this,
Tr::tr("Export Code Style"),
FileUtils::homePath().pathAppended(QString::fromUtf8(currentPreferences->id() + ".xml")),
Tr::tr("Code styles (*.xml);;All files (*)"));
if (!filePath.isEmpty()) {
CodeStylePool *codeStylePool = m_codeStyle->delegatingPool();

View File

@@ -6876,7 +6876,8 @@ void TextEditorWidgetPrivate::handleBackspaceKey()
}
}
} else if (typingSettings.m_smartBackspaceBehavior == TypingSettings::BackspaceUnindents) {
if (c.positionInBlock() > TabSettings::firstNonSpace(c.block().text())) {
if (c.positionInBlock() == 0
|| c.positionInBlock() > TabSettings::firstNonSpace(c.block().text())) {
if (cursorWithinSnippet)
c.beginEditBlock();
c.deletePreviousChar();

View File

@@ -113,10 +113,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
return
fixedBuildSystems = list(availableBuildSystems)
if template == 'Qt Quick Application':
fixedBuildSystems.remove('qmake')
test.log("Skipped qmake (not supported).")
elif template == 'Qt Quick 2 Extension Plugin':
if template == 'Qt Quick 2 Extension Plugin':
fixedBuildSystems.remove('Qbs')
test.log("Skipped Qbs (not supported).")
@@ -126,7 +123,7 @@ def handleBuildSystemVerifyKits(category, template, kits, displayedPlatforms,
clickButton(waitForObject(":Next_QPushButton"))
if specialHandlingFunc:
specialHandlingFunc(displayedPlatforms, *args)
if not ('Plain C' in template or template == 'Qt Quick Application'):
if not ('Plain C' in template):
__createProjectHandleTranslationSelection__()
verifyKitCheckboxes(kits, displayedPlatforms)
safeClickButton("Cancel")

View File

@@ -25,7 +25,9 @@ def main():
openContextMenu(waitForObject("{container=':*Qt Creator.FormEditorStack_Designer::Internal::FormEditorStack'"
"text='PushButton' type='QPushButton' visible='1'}"), 5, 5, 1)
activateItem(waitForObjectItem("{type='QMenu' unnamed='1' visible='1'}", "Change objectName..."))
typeLines(waitForObject(":FormEditorStack_qdesigner_internal::PropertyLineEdit"), buttonName)
buttonNameEdit = waitForObject(":FormEditorStack_qdesigner_internal::PropertyLineEdit")
replaceEditorContent(buttonNameEdit, buttonName)
type(buttonNameEdit, "<Return>")
else:
# Verify that everything works without ever changing the name
buttonName = "pushButton"