Merge remote-tracking branch 'origin/4.9'

Change-Id: I95c56cc9371959f96afde3677fc82481f36f66c8
This commit is contained in:
Eike Ziller
2019-04-12 14:31:01 +02:00
33 changed files with 165 additions and 125 deletions

12
dist/changes-4.9.0.md vendored
View File

@@ -46,6 +46,7 @@ All Projects
(QTCREATORBUG-20577) (QTCREATORBUG-20577)
* Fixed that dragging file from `Projects` view to desktop moved the file * Fixed that dragging file from `Projects` view to desktop moved the file
(QTCREATORBUG-14494) (QTCREATORBUG-14494)
* Fixed regression with `QTC_EXTENSION` environment variable
QMake Projects QMake Projects
@@ -96,11 +97,13 @@ C++ Support
* Added option to format code instead of only indenting code * Added option to format code instead of only indenting code
* Added `Open Used .clang-format Configuration File` to editor's * Added `Open Used .clang-format Configuration File` to editor's
context menu context menu
* Fixed indentation issue after empty line (QTCREATORBUG-22238)
QML Support QML Support
* Updated to parser from Qt 5.12, adding support for ECMAScript 7 * Updated to parser from Qt 5.12, adding support for ECMAScript 7
(QTCREATORBUG-20341, QTCREATORBUG-21301) (QTCREATORBUG-20341, QTCREATORBUG-21301)
* Added Qt 5.13 as option to the wizards
* Improved error handling in Qt Quick Application project template (QTBUG-39469) * Improved error handling in Qt Quick Application project template (QTBUG-39469)
* Fixed crash on `Find Usages` * Fixed crash on `Find Usages`
@@ -114,15 +117,19 @@ Nim Support
Debugging Debugging
* Added pretty printing of `QSizePolicy`
* Fixed that debugger toolbar could force large minimum window size * Fixed that debugger toolbar could force large minimum window size
(QTCREATORBUG-21885) (QTCREATORBUG-21885)
* Added pretty printing of `QSizePolicy` * Fixed restoring of debugger layout (QTCREATORBUG-21083)
* Fixed pretty printing of standard maps and sets from `libc++` * Fixed pretty printing of standard maps and sets from `libc++`
(QTCREATORBUG-18536) (QTCREATORBUG-18536)
* GDB * GDB
* Added support for rvalue references in function arguments * Added support for rvalue references in function arguments
* Fixed `Break on Abort` with GDB > 8.1 (QTBUG-73993)
* LLDB * LLDB
* Fixed `Source Paths Mappings` functionality (QTCREATORBUG-17468) * Fixed `Source Paths Mappings` functionality (QTCREATORBUG-17468)
* QML
* Fixed loading QML stack (QTCREATORBUG-22209)
Clang Analyzer Tools Clang Analyzer Tools
@@ -142,6 +149,8 @@ Qt Quick Designer
* Made QML Live Preview integration opensource * Made QML Live Preview integration opensource
* Added support for `Dialog` (QTCREATORBUG-22120) * Added support for `Dialog` (QTCREATORBUG-22120)
* Fixed layout icons (QDS-538)
* Fixed crash when creating item inside `TabView` tab (QTCREATORBUG-21542)
Version Control Systems Version Control Systems
@@ -192,6 +201,7 @@ Windows
* Fixed issue with UNC paths in `.pro` files (QTCREATORBUG-21881) * Fixed issue with UNC paths in `.pro` files (QTCREATORBUG-21881)
* Fixed language version detections with MSVC and precompiled headers * Fixed language version detections with MSVC and precompiled headers
(QTCREATORBUG-21860) (QTCREATORBUG-21860)
* Fixed submenu arrow styling (QTCREATORBUG-21376)
Linux Linux

View File

@@ -39,7 +39,6 @@ depends += qtwidgets \
qtgui \ qtgui \
qthelp \ qthelp \
qtquickcontrols \ qtquickcontrols \
qtquickcontrols2 \
qtquickextras \ qtquickextras \
qtlinguist \ qtlinguist \
qtscxml \ qtscxml \

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -489,7 +489,8 @@
\li M222 \li M222
\li Error \li Error
\li Functions are not supported in a Qt Quick UI form. \li Functions are not supported in a Qt Quick UI form.
\li \li For a list of supported JavaScript functions, see
\l{Supported Methods}.
\row \row
\li M223 \li M223

View File

@@ -52,6 +52,8 @@
\image studio-edit-mode.png \image studio-edit-mode.png
\endif \endif
\section2 Navigating Between Open Files and Symbols
Use the toolbar to navigate between open files and symbols in use. To browse Use the toolbar to navigate between open files and symbols in use. To browse
backward or forward through your location history, click backward or forward through your location history, click
\inlineimage prev.png \inlineimage prev.png
@@ -59,8 +61,12 @@
(\uicontrol {Go Forward}). (\uicontrol {Go Forward}).
To go to any open file, select it from the \uicontrol {Open files} drop-down To go to any open file, select it from the \uicontrol {Open files} drop-down
menu (1). Right-click the menu title and select \uicontrol {Copy Full Path} menu (1). To open a context menu that contains commands for managing open
to copy the path and name of the current file to the clipboard. files, right-click the file name or icon on the toolbar. In addition to the
commands also available in the \uicontrol File menu, you can copy the path
and name of the current file and the number of the line where the cursor is
currently located to the clipboard by selecting \uicontrol {Copy Full Path},
\uicontrol {Copy File Name}, or \uicontrol {Copy Path and Line Number}.
To jump to any symbol used in the current file, select it from the To jump to any symbol used in the current file, select it from the
\uicontrol Symbols drop-down menu (2). By default, the symbols are displayed \uicontrol Symbols drop-down menu (2). By default, the symbols are displayed
@@ -70,10 +76,16 @@
To jump to a line and column in the current file, select the line and column To jump to a line and column in the current file, select the line and column
indicator (3) or press \key {Ctrl+K} (or \key {Cmd+K} on \macos) to open the indicator (3) or press \key {Ctrl+K} (or \key {Cmd+K} on \macos) to open the
locator. Enter the line number and column number in the locator, separated \l{Searching with the Locator}{locator}. Enter the line number and column
by a colon (:). number in the locator, separated by a colon (:).
\note Other convenient ways of navigating in \QC are provided
by the \l{Keyboard Shortcuts} {keyboard shortcuts} and the
\l{Browsing Project Contents}{sidebar}.
\if defined(qtcreator) \if defined(qtcreator)
\section2 Selecting Parse Context
Code might be interpreted differently in different contexts. A file can be Code might be interpreted differently in different contexts. A file can be
used by different projects or subprojects with different defines, or it can used by different projects or subprojects with different defines, or it can
be included in the context of C, C++, Objective-C, or Objective-C++. To be included in the context of C, C++, Objective-C, or Objective-C++. To
@@ -86,19 +98,22 @@
incorrect, select \uicontrol {Additional Preprocessor Directives} to incorrect, select \uicontrol {Additional Preprocessor Directives} to
add preprocessor directives. add preprocessor directives.
\section2 Changing Text Encoding
To show the file encoding of the current file on the editor toolbar (5), To show the file encoding of the current file on the editor toolbar (5),
select \uicontrol Tools > \uicontrol Options > \uicontrol {Text Editor} > select \uicontrol Tools > \uicontrol Options > \uicontrol {Text Editor} >
\uicontrol Display > \uicontrol {Display file encoding}. To change the \uicontrol Display > \uicontrol {Display file encoding}.
encoding, click it on the toolbar and select new encoding in the
\uicontrol {Text Encoding} dialog. To reload the file with the selected To change the text encoding, click it on the toolbar and select new
encoding, select \uicontrol {Reload with Encoding}. To save the file with encoding in the \uicontrol {Text Encoding} dialog:
\image qtcreator-text-encoding.png "Text Encoding dialog"
To reload the file with the selected encoding, select
\uicontrol {Reload with Encoding}. To save the file with
the new encoding, select \uicontrol {Save with Encoding}. the new encoding, select \uicontrol {Save with Encoding}.
\endif \endif
\note Other convenient ways of navigating in \QC are provided by the
\l{Searching with the Locator}{locator}, \l{Keyboard Shortcuts}
{keyboard shortcuts}, and the \l{Browsing Project Contents}{sidebar}.
\section1 Splitting the Editor View \section1 Splitting the Editor View
Split the editor view or open the editor in a new window when you want to Split the editor view or open the editor in a new window when you want to

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2018 The Qt Company Ltd. ** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/ ** Contact: https://www.qt.io/licensing/
** **
** This file is part of the Qt Creator documentation. ** This file is part of the Qt Creator documentation.
@@ -55,7 +55,7 @@
\li \l{Creating a Mobile Application} \li \l{Creating a Mobile Application}
Learn how to create a Qt Quick application using Qt Quick Controls 2 Learn how to create a Qt Quick application using Qt Quick Controls
for Android and iOS devices. for Android and iOS devices.
\endlist \endlist

View File

@@ -118,7 +118,7 @@
Create a Qt Quick application that uses Create a Qt Quick application that uses
\l{http://doc.qt.io/qt-5/qtquickcontrols2-index.html} \l{http://doc.qt.io/qt-5/qtquickcontrols2-index.html}
{Qt Quick Controls 2} to implement a scrollable list (requires {Qt Quick Controls} to implement a scrollable list (requires
Qt 5.9 or later) or a set of pages with a stack-based or Qt 5.9 or later) or a set of pages with a stack-based or
swipe-based navigation model (requires Qt 5.7 or later). swipe-based navigation model (requires Qt 5.7 or later).

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2018 The Qt Company Ltd. ** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/ ** Contact: https://www.qt.io/licensing/
** **
** This file is part of the Qt Creator documentation. ** This file is part of the Qt Creator documentation.
@@ -792,7 +792,7 @@
"data": "data":
{ {
"wordWrap": true, "wordWrap": true,
"trText": "Creates a deployable Qt Quick 2 application using Qt Quick Controls 2.", "trText": "Creates a deployable Qt Quick 2 application using Qt Quick Controls.",
} }
}, },
\endcode \endcode

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2018 The Qt Company Ltd. ** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/ ** Contact: https://www.qt.io/licensing/
** **
** This file is part of the Qt Creator documentation. ** This file is part of the Qt Creator documentation.
@@ -38,7 +38,7 @@
\title Creating a Mobile Application \title Creating a Mobile Application
This tutorial describes developing Qt Quick applications for Android and iOS This tutorial describes developing Qt Quick applications for Android and iOS
devices using Qt Quick Controls 2. devices using Qt Quick Controls.
We use \QC to implement a Qt Quick application We use \QC to implement a Qt Quick application
that accelerates an SVG (Scalable Vector Graphics) image based on the that accelerates an SVG (Scalable Vector Graphics) image based on the
changing accelerometer values. changing accelerometer values.

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2017 The Qt Company Ltd. ** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/ ** Contact: https://www.qt.io/licensing/
** **
** This file is part of the Qt Creator documentation. ** This file is part of the Qt Creator documentation.
@@ -44,7 +44,7 @@
use for building and running the project: \l qmake, use for building and running the project: \l qmake,
\l {Setting Up CMake}{CMake}, or \l {Setting Up Qbs}{Qbs}. \l {Setting Up CMake}{CMake}, or \l {Setting Up Qbs}{Qbs}.
\li In the \uicontrol {Qt Quick Controls 2 Style} field, select one of \li In the \uicontrol {Qt Quick Controls Style} field, select one of
the predefined \l{Styling Qt Quick Controls 2}{UI styles} to use, the predefined \l{Styling Qt Quick Controls 2}{UI styles} to use,
and then select \uicontrol Next. and then select \uicontrol Next.

View File

@@ -59,7 +59,7 @@
\li \l {Creating Components} \li \l {Creating Components}
You can use basic QML types to create your own components that you You can use basic QML types to create your own components that you
can combine with ready-made Qt Quick Controls 2 and Layouts can combine with ready-made Qt Quick Controls and Layouts
(available since Qt 5.7). (available since Qt 5.7).
\li \l {Managing Item Hierarchy} \li \l {Managing Item Hierarchy}

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2018 The Qt Company Ltd. ** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/ ** Contact: https://www.qt.io/licensing/
** **
** This file is part of the Qt Creator documentation. ** This file is part of the Qt Creator documentation.
@@ -51,8 +51,7 @@
For more information about developing Qt Quick applications in the Design For more information about developing Qt Quick applications in the Design
mode, see \l{Developing Qt Quick Applications}. mode, see \l{Developing Qt Quick Applications}.
For examples of using Qt Quick Controls 2, see For examples of using Qt Quick Controls, see \l{Qt Quick Controls Examples}.
\l{Qt Quick Controls 2 Examples}.
\include creator-tutorial-create-qq-project.qdocinc qt quick application \include creator-tutorial-create-qq-project.qdocinc qt quick application

View File

@@ -1,6 +1,6 @@
/**************************************************************************** /****************************************************************************
** **
** Copyright (C) 2018 The Qt Company Ltd. ** Copyright (C) 2019 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/ ** Contact: https://www.qt.io/licensing/
** **
** This file is part of the Qt Creator documentation. ** This file is part of the Qt Creator documentation.
@@ -120,6 +120,12 @@
support for \l{http://doc.qt.io/qt-5/qtvirtualkeyboard-index.html} support for \l{http://doc.qt.io/qt-5/qtvirtualkeyboard-index.html}
{Qt Virtual Keyboard} to the application. {Qt Virtual Keyboard} to the application.
\note If you have not installed the Qt Virtual Keyboard module when
you installed Qt, an error message will appear when you try to open
the \e main.qml in the \uicontrol {Form Editor} in the Design mode.
You can use the \l {Installing Qt}{Qt Maintenance Tool} to install
Qt Virtual Keyboard.
\li Select \uicontrol Next. \li Select \uicontrol Next.
\li Select \l{glossary-buildandrun-kit}{kits} for running and building \li Select \l{glossary-buildandrun-kit}{kits} for running and building
@@ -136,7 +142,7 @@
\QC generates a QML file, \e main.qml, that you can modify in the Design \QC generates a QML file, \e main.qml, that you can modify in the Design
mode. mode.
\section1 Creating Qt Quick Controls 2 Applications \section1 Creating Qt Quick Controls Applications
\list 1 \list 1
@@ -155,7 +161,7 @@
use for building and running the project: \l qmake, use for building and running the project: \l qmake,
\l {Setting Up CMake}{CMake}, or \l {Setting Up Qbs}{Qbs}. \l {Setting Up CMake}{CMake}, or \l {Setting Up Qbs}{Qbs}.
\li In the \uicontrol {Qt Quick Controls 2 Style} field, select one of \li In the \uicontrol {Qt Quick Controls Style} field, select one of
the predefined \l{Styling Qt Quick Controls 2}{UI styles} to use, the predefined \l{Styling Qt Quick Controls 2}{UI styles} to use,
and then select \uicontrol Next. and then select \uicontrol Next.

View File

@@ -179,6 +179,6 @@
qmlDesignerImportPaths in your product (for Qbs projects). qmlDesignerImportPaths in your product (for Qbs projects).
Modules in the import paths defined in \c{QML_DESIGNER_IMPORT_PATH} will be Modules in the import paths defined in \c{QML_DESIGNER_IMPORT_PATH} will be
used only in the Design mode. used only in the Design mode.
For an example, see \l {Qt Quick Controls 2 - Contact List}. For an example, see \l {Qt Quick Controls - Contact List}.
*/ */

View File

@@ -92,6 +92,9 @@
You can use the following QML types to create components: You can use the following QML types to create components:
\list \list
\li \l [QML]{AnimatedImage}{Animated Image} provides a way to play
animations stored as images containing a series of frames, such
as those stored in GIF files.
\li \l [QML]{BorderImage}{Border Image} uses an image as a border or \li \l [QML]{BorderImage}{Border Image} uses an image as a border or
background. background.
\li \l [QML]{Image} adds a bitmap to the scene. You can stretch and \li \l [QML]{Image} adds a bitmap to the scene. You can stretch and
@@ -119,13 +122,13 @@
\li \l{GridView}{Grid View} provides a grid vizualization of a model. \li \l{GridView}{Grid View} provides a grid vizualization of a model.
\li \l{ListView}{List View} provides a list vizualization of a model. \li \l{ListView}{List View} provides a list vizualization of a model.
\li \l{PathView}{Path View} visualizes the contents of a model along a \li \l{PathView}{Path View} visualizes the contents of a model along a
path. path. For more information, see \l{Editing PathView Properties}.
\li \l [QtQuickControls2] {ScrollView}{Scroll View} provides scrolling \li \l [QtQuickControls] {ScrollView}{Scroll View} provides scrolling
for user-defined content. It can be used instead of a \l Flickable for user-defined content. It can be used instead of a \l Flickable
item. item.
\li \l [QtQuickControls2] {StackView}{Stack View} provides a stack-based \li \l [QtQuickControls] {StackView}{Stack View} provides a stack-based
navigation model. navigation model.
\li \l[QtQuickControls2] {SwipeView}{Swipe View} enables users to \li \l[QtQuickControls] {SwipeView}{Swipe View} enables users to
navigate pages by swiping sideways. navigate pages by swiping sideways.
\endlist \endlist
@@ -333,21 +336,21 @@
\section2 Organizing Items \section2 Organizing Items
Since Qt 5.7, you can use the following \l{Qt Quick Controls 2} types to Since Qt 5.7, you can use the following \l{Qt Quick Controls} types to
organize items on screens: organize items on screens:
\list \list
\li \l [QtQuickControls2]{Frame} places a logical group of controls \li \l [QtQuickControls]{Frame} places a logical group of controls
within a visual frame. within a visual frame.
\li \l [QtQuickControls2]{GroupBox}{Group Box} is used to lay out a \li \l [QtQuickControls]{GroupBox}{Group Box} is used to lay out a
logical group of controls together, within a titled visual frame. logical group of controls together, within a titled visual frame.
\li \l [QtQuickControls2]{Label} is a text label with inherited styling \li \l [QtQuickControls]{Label} is a text label with inherited styling
and font. and font.
\li \l [QtQuickControls2]{Page} provides a styled page control with \li \l [QtQuickControls]{Page} provides a styled page control with
support for a header and footer. support for a header and footer.
\li \l [QtQuickControls2]{PageIndicator}{Page Indicator} indicates the \li \l [QtQuickControls]{PageIndicator}{Page Indicator} indicates the
currently active page. currently active page.
\li \l [QtQuickControls2]{Pane} provides a background matching with the \li \l [QtQuickControls]{Pane} provides a background matching with the
application style and theme. application style and theme.
\endlist \endlist
@@ -365,62 +368,62 @@
\li \l [QML]{MouseArea}{Mouse Area} enables simple mouse handling. \li \l [QML]{MouseArea}{Mouse Area} enables simple mouse handling.
\endlist \endlist
Since Qt 5.7, you can also use the following \l{Qt Quick Controls 2} types Since Qt 5.7, you can also use the following \l{Qt Quick Controls} types
to inform users about the progress of the application or to gather input to inform users about the progress of the application or to gather input
from the user: from the user:
\list \list
\li \l [QtQuickControls2]{BusyIndicator}{Busy Indicator} indicates \li \l [QtQuickControls]{BusyIndicator}{Busy Indicator} indicates
activity while content is being loaded. activity while content is being loaded.
\li \l [QtQuickControls2]{Button} provides a push button that you can \li \l [QtQuickControls]{Button} provides a push button that you can
associate with an action. associate with an action.
\li \l [QtQuickControls2]{CheckBox}{Check Box} provides an option button \li \l [QtQuickControls]{CheckBox}{Check Box} provides an option button
that can be toggled on (checked) or off (unchecked). that can be toggled on (checked) or off (unchecked).
\li \l [QtQuickControls2]{CheckDelegate}{Check Delegate} presents an \li \l [QtQuickControls]{CheckDelegate}{Check Delegate} presents an
item delegate that can be toggled on (checked) or off (unchecked). item delegate that can be toggled on (checked) or off (unchecked).
\li \l [QtQuickControls2]{ComboBox}{Combo Box} is a combined button and \li \l [QtQuickControls]{ComboBox}{Combo Box} is a combined button and
popup list that is populated by using a data model. popup list that is populated by using a data model.
\li \l [QtQuickControls2]{DelayButton}{Delay Button} provides an option \li \l [QtQuickControls]{DelayButton}{Delay Button} provides an option
button that is triggered when held down long enough. button that is triggered when held down long enough.
\li \l [QtQuickControls2]{Dial} is a circular dial that is rotated to \li \l [QtQuickControls]{Dial} is a circular dial that is rotated to
set a value. set a value.
\li \l [QtQuickControls2]{ProgressBar}{Progress Bar} indicates the \li \l [QtQuickControls]{ProgressBar}{Progress Bar} indicates the
progress of an operation. progress of an operation.
\li \l [QtQuickControls2]{RadioButton}{Radio Button} provides an option \li \l [QtQuickControls]{RadioButton}{Radio Button} provides an option
button that can be switched on (checked) or off (unchecked). button that can be switched on (checked) or off (unchecked).
\li \l [QtQuickControls2]{RadioDelegate}{Radio Delegate} presents an \li \l [QtQuickControls]{RadioDelegate}{Radio Delegate} presents an
item delegate that can be toggled on (checked) or off (unchecked). item delegate that can be toggled on (checked) or off (unchecked).
\li \l [QtQuickControls2]{RangeSlider}{Range Slider} enables users to \li \l [QtQuickControls]{RangeSlider}{Range Slider} enables users to
select a range of values by sliding two handles along a track. select a range of values by sliding two handles along a track.
\li \l [QtQuickControls2]{RoundButton}{Round Button} provides a push \li \l [QtQuickControls]{RoundButton}{Round Button} provides a push
button with rounded corners that you can associate with an action. button with rounded corners that you can associate with an action.
\li \l [QtQuickControls2]{Slider} selects a value by sliding a handle \li \l [QtQuickControls]{Slider} selects a value by sliding a handle
along a track. along a track.
\li \l [QtQuickControls2]{SpinBox}{Spin Box} enables the user to specify \li \l [QtQuickControls]{SpinBox}{Spin Box} enables the user to specify
a value by clicking the up or down buttons, by pressing up or down a value by clicking the up or down buttons, by pressing up or down
on the keyboard, or by entering a value in the box. on the keyboard, or by entering a value in the box.
\li \l [QtQuickControls2]{Switch} is an option button that can be \li \l [QtQuickControls]{Switch} is an option button that can be
toggled on or off. toggled on or off.
\li \l [QtQuickControls2]{SwitchDelegate}{SwitchDelegate} presents an \li \l [QtQuickControls]{SwitchDelegate}{Switch Delegate} presents an
item delegate with a switch indicator that can be toggled on or off. item delegate with a switch indicator that can be toggled on or off.
\li \l [QtQuickControls2] {TabBar}{Tab Bar} enables users to switch \li \l [QtQuickControls] {TabBar}{Tab Bar} enables users to switch
between different views or subtasks. between different views or subtasks.
\li \l [QtQuickControls2]{TabButton}{Tab Button} is a button \li \l [QtQuickControls]{TabButton}{Tab Button} is a button
that is functionally similar to \uicontrol Button, but provides a that is functionally similar to \uicontrol Button, but provides a
look that is more suitable for a \uicontrol {Tab Bar}. look that is more suitable for a \uicontrol {Tab Bar}.
\li \l [QtQuickControls2]{TextArea}{Text Area} displays multiple lines \li \l [QtQuickControls]{TextArea}{Text Area} displays multiple lines
of editable formatted text. of editable formatted text.
\li \l [QtQuickControls2]{TextField}{Text Field} displays a single line \li \l [QtQuickControls]{TextField}{Text Field} displays a single line
of editable plain text. of editable plain text.
\li \l [QtQuickControls2]{ToolBar}{Tool Bar} is a container of \li \l [QtQuickControls]{ToolBar}{Tool Bar} is a container of
application-wide and context sensitive actions and controls, such as application-wide and context sensitive actions and controls, such as
navigation buttons and search fields. navigation buttons and search fields.
\li \l [QtQuickControls2]{ToolButton}{Tool Button} is a button \li \l [QtQuickControls]{ToolButton}{Tool Button} is a button
that is functionally similar to \uicontrol Button, but provides a that is functionally similar to \uicontrol Button, but provides a
look that is more suitable for a \uicontrol {Tool Bar}. look that is more suitable for a \uicontrol {Tool Bar}.
\li \l [QtQuickControls2]{ToolSeparator}{Tool Separator} separates a \li \l [QtQuickControls]{ToolSeparator}{Tool Separator} separates a
group of items from adjacent items on a \uicontrol {Tool Bar}. group of items from adjacent items on a \uicontrol {Tool Bar}.
\li \l [QtQuickControls2]{Tumbler} is a spinnable wheel of items that \li \l [QtQuickControls]{Tumbler} is a spinnable wheel of items that
can be selected. can be selected.
\endlist \endlist

View File

@@ -73,7 +73,7 @@
\li \uicontrol {Library} (2) displays the building blocks that you \li \uicontrol {Library} (2) displays the building blocks that you
can use to design applications: predefined QML types, your own can use to design applications: predefined QML types, your own
QML components, or Qt Quick Controls 2 that you import to the QML components, or Qt Quick Controls that you import to the
project, and other resources. For more information, see project, and other resources. For more information, see
\l {Creating Components}. \l {Creating Components}.

View File

@@ -52,10 +52,9 @@
When you copy an item, all its child items are also copied. When When you copy an item, all its child items are also copied. When
you remove an item, the child items are also removed. you remove an item, the child items are also removed.
You can show and hide items on the canvas to focus on specific parts of the To show and hide items on the canvas when focusing on specific parts of the
application. Click the \inlineimage icon_color_none.png application, click \inlineimage eye_open.png
(\uicontrol Transparent) button to change the visibility of an item on the . To change the visibility of an item in the application code, select the
canvas. To change the visibility of an item in the application, select the
\uicontrol Visibility check box in the \uicontrol Properties pane or select \uicontrol Visibility check box in the \uicontrol Properties pane or select
\uicontrol Edit > \uicontrol Visibility in the context menu. \uicontrol Edit > \uicontrol Visibility in the context menu.
@@ -86,16 +85,14 @@
Items with the same stacking value are drawn in the order they are listed, Items with the same stacking value are drawn in the order they are listed,
from the last item up. from the last item up.
To raise or lower the stack value of an item, select \inlineimage raise.png
(\uicontrol Raise) or \inlineimage lower.png
(\uicontrol Lower) on the toolbar.
To move an item to the front or back of all its siblings, right-click it in To move an item to the front or back of all its siblings, right-click it in
the navigator or the \uicontrol {Form Editor} and select the navigator or the \uicontrol {Form Editor} and select
\uicontrol {Stack (z)}. To remove the \c z property, select \uicontrol {Stack (z)} > \uicontrol {To Front} or \uicontrol {To Back}.
To raise or lower the stack value of an item, select \uicontrol Raise
or \uicontrol Lower. To remove the \c z property, select
\uicontrol {Reset z Property}. \uicontrol {Reset z Property}.
You can also use a \uicontrol StackLayout item (Qt Quick Controls 2) to You can also use a \uicontrol StackLayout item (Qt Quick Controls) to
create a stacked view. For more information, see \l {Using Layouts}. create a stacked view. For more information, see \l {Using Layouts}.
\section1 Switching Parent Items \section1 Switching Parent Items

View File

@@ -122,7 +122,7 @@ def main():
copy_regexp(build_include_regexp, arguments.build, arguments.target_directory, arguments.verbose) copy_regexp(build_include_regexp, arguments.build, arguments.target_directory, arguments.verbose)
if arguments.sevenzip_target: if arguments.sevenzip_target:
subprocess.check_call([arguments.sevenzip, 'a', '-mx9', arguments.sevenzip_target, subprocess.check_call([arguments.sevenzip, 'a', '-mx9', '-mmt2', arguments.sevenzip_target,
os.path.join(arguments.target_directory, '*')]) os.path.join(arguments.target_directory, '*')])
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -58,7 +58,7 @@ def main():
common.codesign(tempdir) common.codesign(tempdir)
# package # package
zip_source = os.path.join(tempdir, '*') if arguments.exclude_toplevel else tempdir zip_source = os.path.join(tempdir, '*') if arguments.exclude_toplevel else tempdir
subprocess.check_call([arguments.sevenzip, 'a', subprocess.check_call([arguments.sevenzip, 'a', '-mmt2',
arguments.target_archive, zip_source]) arguments.target_archive, zip_source])
finally: finally:
shutil.rmtree(tempdir_base) shutil.rmtree(tempdir_base)

View File

@@ -1,13 +1,13 @@
{ {
"version": 1, "version": 1,
"supportedProjectTypes": [ "Qt4ProjectManager.Qt4Project" ], "supportedProjectTypes": [ "CMakeProjectManager.CMakeProject", "Qbs.QbsProject", "Qt4ProjectManager.Qt4Project" ],
"id": "R.AutoTest", "id": "R.AutoTest",
"category": "H.Project", "category": "H.Project",
"trDescription": "Creates a new unit test project. Unit tests allow you to verify that the code is fit for use and that there are no regressions.", "trDescription": "Creates a new unit test project. Unit tests allow you to verify that the code is fit for use and that there are no regressions.",
"trDisplayName": "Auto Test Project", "trDisplayName": "Auto Test Project",
"trDisplayCategory": "Other Project", "trDisplayCategory": "Other Project",
"icon": "autotest.png", "icon": "autotest.png",
"featuresRequired": [ "QtSupport.Wizards.FeatureQt", "QtSupport.Wizards.FeatureDesktop" ], "featuresRequired": [ "QtSupport.Wizards.FeatureDesktop" ],
"enabled": "%{JS: [ %{Plugins} ].indexOf('AutoTest') >= 0}", "enabled": "%{JS: [ %{Plugins} ].indexOf('AutoTest') >= 0}",
"options": "options":
@@ -187,7 +187,7 @@
"enabled": "%{IsTopLevelProject}", "enabled": "%{IsTopLevelProject}",
"data": { "data": {
"projectFilePath": "%{ProjectFilePath}", "projectFilePath": "%{ProjectFilePath}",
"requiredFeatures": [ "%{JS: (('%{BuildSystem}' === 'cmake' && '%{TestFrameWork}' === 'QtTest') || '%{TestFrameWork}' === 'QtQuickTest') ? 'QtSupport.Wizards.FeatureQt.5' : 'QtSupport.Wizards.FeatureQt' }" ] "requiredFeatures": [ "%{JS: ('%{TestFrameWork}' === 'QtQuickTest' ? 'QtSupport.Wizards.FeatureQt.5' : (('%{BuildSystem}' === 'qmake' || '%{TestFrameWork}' === 'QtTest') ? 'QtSupport.Wizards.FeatureQt' : 'DeviceType.Desktop' )) }" ]
} }
}, },
{ {

View File

@@ -194,8 +194,6 @@
</array> </array>
<key>NSPrincipalClass</key> <key>NSPrincipalClass</key>
<string>NSApplication</string> <string>NSApplication</string>
<key>NSSupportsAutomaticGraphicsSwitching</key>
<true/>
<key>CFBundleDocumentTypes</key> <key>CFBundleDocumentTypes</key>
<array> <array>
<dict> <dict>

View File

@@ -55,19 +55,7 @@ Rectangle {
onRangeChanged: { onRangeChanged: {
zoomSliderToolBar.updateZoomLevel(); zoomSliderToolBar.updateZoomLevel();
content.scroll(); content.scroll();
selectionRange.update();
// If you select something in the main view and then resize the current range by some
// other means, the selection should stay where it was.
var oldTimePerPixel = selectionRange.viewTimePerPixel;
selectionRange.viewTimePerPixel = zoomControl.rangeDuration / content.width;
if (selectionRange.creationState === selectionRange.creationFinished &&
oldTimePerPixel != selectionRange.viewTimePerPixel) {
var newWidth = selectionRange.rangeWidth * oldTimePerPixel /
selectionRange.viewTimePerPixel;
selectionRange.rangeLeft = selectionRange.rangeLeft * oldTimePerPixel /
selectionRange.viewTimePerPixel;
selectionRange.rangeRight = selectionRange.rangeLeft + newWidth;
}
} }
onWindowChanged: { onWindowChanged: {
content.scroll(); content.scroll();
@@ -216,6 +204,8 @@ Rectangle {
buttonsBar.updateLockButton(selectionLocked); buttonsBar.updateLockButton(selectionLocked);
} }
onWidthChanged: selectionRange.update();
onPropagateSelection: { onPropagateSelection: {
if (lockItemSelection || (newModel === selectedModel && newItem === selectedItem)) if (lockItemSelection || (newModel === selectedModel && newItem === selectedItem))
return; return;
@@ -314,6 +304,18 @@ Rectangle {
root.selectionRangeMode = false; root.selectionRangeMode = false;
} }
function update() {
// If you select something in the main view and then resize the current range by some
// other means, the selection should stay where it was.
var oldTimePerPixel = viewTimePerPixel;
viewTimePerPixel = zoomControl.rangeDuration / content.width;
if (creationState === creationFinished && oldTimePerPixel != viewTimePerPixel) {
var newWidth = rangeWidth * oldTimePerPixel / viewTimePerPixel;
rangeLeft = rangeLeft * oldTimePerPixel / viewTimePerPixel;
rangeRight = rangeLeft + newWidth;
}
}
} }
} }

View File

@@ -5,6 +5,7 @@ QtcPlugin {
Depends { name: "Core" } Depends { name: "Core" }
Depends { name: "TextEditor" } Depends { name: "TextEditor" }
Depends { name: "CppEditor" }
Depends { name: "CppTools" } Depends { name: "CppTools" }
Depends { name: "ProjectExplorer" } Depends { name: "ProjectExplorer" }
Depends { name: "Utils" } Depends { name: "Utils" }

View File

@@ -2031,14 +2031,18 @@ void BreakHandler::setWatchpointAtExpression(const QString &exp)
void BreakHandler::releaseAllBreakpoints() void BreakHandler::releaseAllBreakpoints()
{ {
GlobalBreakpoints gbps;
for (Breakpoint bp : breakpoints()) { for (Breakpoint bp : breakpoints()) {
bp->removeChildren(); bp->removeChildren();
bp->destroyMarker(); bp->destroyMarker();
if (GlobalBreakpoint gbp = bp->globalBreakpoint()) gbps.append(bp->globalBreakpoint());
gbp->updateMarker();
} }
clear(); clear();
// The now-unclaimed breakpoints are globally visible again. // Make now-unclaimed breakpoints globally visible again.
for (GlobalBreakpoint gbp: qAsConst(gbps)) {
if (gbp)
gbp->updateMarker();
}
} }
QString BreakpointItem::msgWatchpointByExpressionTriggered(const QString &expr) const QString BreakpointItem::msgWatchpointByExpressionTriggered(const QString &expr) const

View File

@@ -444,7 +444,10 @@ void DebuggerMainWindow::restorePersistentSettings()
qCDebug(perspectivesLog) << "LOADED DOCKS:" << theMainWindow->d->m_persistentChangedDocks; qCDebug(perspectivesLog) << "LOADED DOCKS:" << theMainWindow->d->m_persistentChangedDocks;
QTC_ASSERT(theMainWindow, return);
QTC_ASSERT(theMainWindow->d, return);
for (Perspective *perspective : theMainWindow->d->m_perspectives) { for (Perspective *perspective : theMainWindow->d->m_perspectives) {
QTC_ASSERT(perspective, continue);
qCDebug(perspectivesLog) << "RESTORING PERSPECTIVE" << perspective->d->m_id; qCDebug(perspectivesLog) << "RESTORING PERSPECTIVE" << perspective->d->m_id;
for (DockOperation &op : perspective->d->m_dockOperations) { for (DockOperation &op : perspective->d->m_dockOperations) {
if (op.operationType != Perspective::Raise) { if (op.operationType != Perspective::Raise) {
@@ -477,6 +480,7 @@ void DebuggerMainWindow::savePersistentSettings()
QSet<QString> changedDocks = theMainWindow->d->m_persistentChangedDocks; QSet<QString> changedDocks = theMainWindow->d->m_persistentChangedDocks;
for (Perspective *perspective : theMainWindow->d->m_perspectives) { for (Perspective *perspective : theMainWindow->d->m_perspectives) {
QTC_ASSERT(perspective, continue);
qCDebug(perspectivesLog) << "SAVE PERSPECTIVE" << perspective->d->m_id; qCDebug(perspectivesLog) << "SAVE PERSPECTIVE" << perspective->d->m_id;
for (const DockOperation &op : perspective->d->m_dockOperations) { for (const DockOperation &op : perspective->d->m_dockOperations) {
if (op.operationType != Perspective::Raise) { if (op.operationType != Perspective::Raise) {

View File

@@ -168,6 +168,7 @@ PerfProfilerTool::PerfProfilerTool()
m_delayLabel->setProperty("panelwidget", true); m_delayLabel->setProperty("panelwidget", true);
m_perspective.setAboutToActivateCallback([this]() { createViews(); }); m_perspective.setAboutToActivateCallback([this]() { createViews(); });
updateRunActions();
} }
void PerfProfilerTool::createViews() void PerfProfilerTool::createViews()

View File

@@ -382,6 +382,11 @@ void TargetSetupPage::handleKitUpdate(Kit *k)
m_importer->makePersistent(k); m_importer->makePersistent(k);
bool acceptable = !m_requiredPredicate || m_requiredPredicate(k); bool acceptable = !m_requiredPredicate || m_requiredPredicate(k);
const bool wasAcceptable = Utils::contains(m_widgets, [k](const TargetSetupWidget *w) {
return w->kit() == k;
});
if (acceptable == wasAcceptable)
return;
if (!acceptable) if (!acceptable)
removeWidget(k); removeWidget(k);

View File

@@ -441,7 +441,7 @@ void ToolChainOptionsWidget::toolChainSelectionChanged()
ToolChainTreeItem *item = currentTreeItem(); ToolChainTreeItem *item = currentTreeItem();
QWidget *currentTcWidget = item ? item->widget : nullptr; QWidget *currentTcWidget = item ? item->widget : nullptr;
if (currentTcWidget)
m_widgetStack->setCurrentWidget(currentTcWidget); m_widgetStack->setCurrentWidget(currentTcWidget);
m_container->setVisible(currentTcWidget); m_container->setVisible(currentTcWidget);
updateState(); updateState();

View File

@@ -298,13 +298,15 @@ void QmlProfilerStatisticsMainView::displayTypeIndex(int typeIndex)
QAbstractItemModel *sourceModel = sortModel->sourceModel(); QAbstractItemModel *sourceModel = sortModel->sourceModel();
QTC_ASSERT(sourceModel, return); QTC_ASSERT(sourceModel, return);
QModelIndex sourceIndex = sourceModel->index(qMin(typeIndex, sourceModel->rowCount() - 1), if (typeIndex < sourceModel->rowCount()) {
MainCallCount); QModelIndex sourceIndex = sourceModel->index(typeIndex, MainCallCount);
QTC_ASSERT(sourceIndex.data(TypeIdRole).toInt() == typeIndex, return); QTC_ASSERT(sourceIndex.data(TypeIdRole).toInt() == typeIndex, return);
setCurrentIndex(sourceIndex.data(SortRole).toInt() > 0 setCurrentIndex(sourceIndex.data(SortRole).toInt() > 0
? sortModel->mapFromSource(sourceIndex) ? sortModel->mapFromSource(sourceIndex)
: QModelIndex()); : QModelIndex());
} else {
setCurrentIndex(QModelIndex());
}
} }
// show in callers/callees subwindow // show in callers/callees subwindow

View File

@@ -45,7 +45,7 @@
:CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox {container=':qt_tabwidget_stackedwidget_QScrollArea' name='groupBox' title='Behavior' type='QGroupBox' visible='1'} :CppTools__Internal__CompletionSettingsPage.Behavior_QGroupBox {container=':qt_tabwidget_stackedwidget_QScrollArea' name='groupBox' title='Behavior' type='QGroupBox' visible='1'}
:DebugModeWidget.Debugger Log_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='GlobalLogDockWidget' type='QDockWidget' visible='1'} :DebugModeWidget.Debugger Log_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='GlobalLogDockWidget' type='QDockWidget' visible='1'}
:DebugModeWidget.Debugger.Docks.BreakDockWidget_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.BreakpointManagerDockWidget' type='QDockWidget' visible='1'} :DebugModeWidget.Debugger.Docks.BreakDockWidget_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.BreakpointManagerDockWidget' type='QDockWidget' visible='1'}
:DebugModeWidget.Debugger.Docks.LocalsAndInspectorDockWidget_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Debugger.Docks.LocalsAndInspectorDockWidget' type='QDockWidget' visible='1'} :DebugModeWidget.Debugger.Docks.LocalsAndInspectorDockWidget_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name~='Debugger\\\\.Dock\\\\.LocalsAndInspector\\\\.\\\\d+DockWidget' type='QDockWidget' visible='1'}
:DebugModeWidget.OK_QPushButton {container=':Qt Creator.DebugModeWidget_QSplitter' text='OK' type='QPushButton' unnamed='1' visible='1'} :DebugModeWidget.OK_QPushButton {container=':Qt Creator.DebugModeWidget_QSplitter' text='OK' type='QPushButton' unnamed='1' visible='1'}
:DebugModeWidget.Toolbar_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Toolbar' type='QDockWidget' visible='1'} :DebugModeWidget.Toolbar_QDockWidget {container=':Qt Creator.DebugModeWidget_QSplitter' name='Toolbar' type='QDockWidget' visible='1'}
:DebugModeWidget_Debugger::Internal::ConsoleView {container=':Qt Creator.DebugModeWidget_QSplitter' type='Debugger::Internal::ConsoleView' unnamed='1' visible='1'} :DebugModeWidget_Debugger::Internal::ConsoleView {container=':Qt Creator.DebugModeWidget_QSplitter' type='Debugger::Internal::ConsoleView' unnamed='1' visible='1'}
@@ -54,7 +54,7 @@
:Debugger Toolbar.Exit Debugger_QToolButton {container=':DebugModeWidget.Toolbar_QDockWidget' text='Stop Debugger' type='QToolButton' unnamed='1' visible='1'} :Debugger Toolbar.Exit Debugger_QToolButton {container=':DebugModeWidget.Toolbar_QDockWidget' text='Stop Debugger' type='QToolButton' unnamed='1' visible='1'}
:Debugger Toolbar.StatusText_Utils::StatusLabel {container=':DebugModeWidget.Toolbar_QDockWidget' type='Utils::StatusLabel' unnamed='1'} :Debugger Toolbar.StatusText_Utils::StatusLabel {container=':DebugModeWidget.Toolbar_QDockWidget' type='Utils::StatusLabel' unnamed='1'}
:Debugger.Docks.BreakDockWidget.Debugger.Docks.Break_QFrame {container=':DebugModeWidget.Debugger.Docks.BreakDockWidget_QDockWidget' name='Debugger.Docks.BreakpointManager' type='QFrame' visible='1'} :Debugger.Docks.BreakDockWidget.Debugger.Docks.Break_QFrame {container=':DebugModeWidget.Debugger.Docks.BreakDockWidget_QDockWidget' name='Debugger.Docks.BreakpointManager' type='QFrame' visible='1'}
:Debugger.Docks.LocalsAndWatchersDockWidget.Inspector_QFrame {container=':DebugModeWidget.Debugger.Docks.LocalsAndInspectorDockWidget_QDockWidget' name='Inspector' type='QFrame' visible='1'} :Debugger.Docks.LocalsAndWatchersDockWidget.Inspector_QFrame {container=':DebugModeWidget.Debugger.Docks.LocalsAndInspectorDockWidget_QDockWidget' name~='Debugger\\\\.Dock\\\\.Inspector\\\\.\\\\d+' type='QFrame' visible='1'}
:Debugger::Internal::ConsoleEdit {columnIndex='0' container=':DebugModeWidget_Debugger::Internal::ConsoleView' rowIndex='0' type='Debugger::Internal::ConsoleEdit' unnamed='1' visible='1'} :Debugger::Internal::ConsoleEdit {columnIndex='0' container=':DebugModeWidget_Debugger::Internal::ConsoleView' rowIndex='0' type='Debugger::Internal::ConsoleEdit' unnamed='1' visible='1'}
:Description.description_Utils::CompletingTextEdit {container=':splitter.Description_QGroupBox' name='description' type='Utils::CompletingTextEdit' visible='1'} :Description.description_Utils::CompletingTextEdit {container=':splitter.Description_QGroupBox' name='description' type='Utils::CompletingTextEdit' visible='1'}
:Dialog.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Dialog_QmlJSEditor::Internal::ComponentNameDialog'} :Dialog.OK_QPushButton {text='OK' type='QPushButton' unnamed='1' visible='1' window=':Dialog_QmlJSEditor::Internal::ComponentNameDialog'}

View File

@@ -34,16 +34,12 @@ def __platformToBeRunToday__():
# for all machines using the same IP-address like you. # for all machines using the same IP-address like you.
skipPastingToPastebinCom = platform.system() not in __platformToBeRunToday__() skipPastingToPastebinCom = platform.system() not in __platformToBeRunToday__()
NAME_KDE = "Paste.KDE.Org"
NAME_PBCOM = "Pastebin.Com" NAME_PBCOM = "Pastebin.Com"
NAME_PCXYZ = "Pastecode.Xyz" NAME_PCXYZ = "Pastecode.Xyz"
serverProblems = "Server side problems." serverProblems = "Server side problems."
def invalidPasteId(protocol): def invalidPasteId(protocol):
if protocol == NAME_KDE:
return None
else:
return -1 return -1
def closeHTTPStatusAndPasterDialog(protocol, pasterDialog): def closeHTTPStatusAndPasterDialog(protocol, pasterDialog):
@@ -170,7 +166,7 @@ def main():
startQC() startQC()
if not startedWithoutPluginError(): if not startedWithoutPluginError():
return return
protocolsToTest = [NAME_KDE, NAME_PBCOM, NAME_PCXYZ] protocolsToTest = [NAME_PBCOM, NAME_PCXYZ]
sourceFile = os.path.join(os.getcwd(), "testdata", "main.cpp") sourceFile = os.path.join(os.getcwd(), "testdata", "main.cpp")
# make sure General Messages is open # make sure General Messages is open
openGeneralMessages() openGeneralMessages()
@@ -179,10 +175,7 @@ def main():
with TestSection(protocol): with TestSection(protocol):
skippedPasting = True skippedPasting = True
description = "Paste from 2017-05-11" description = "Paste from 2017-05-11"
if protocol == NAME_KDE: if skipPastingToPastebinCom and protocol == NAME_PBCOM:
pasteId = "pysjk6n2i"
pastedText = readFile(os.path.join(os.getcwd(), "testdata", "main-prepasted.cpp"))
elif skipPastingToPastebinCom and protocol == NAME_PBCOM:
pasteId = "8XHP0ZgH" pasteId = "8XHP0ZgH"
pastedText = readFile(os.path.join(os.getcwd(), "testdata", "main-prepasted.cpp")) pastedText = readFile(os.path.join(os.getcwd(), "testdata", "main-prepasted.cpp"))
else: else:
@@ -219,7 +212,7 @@ def main():
clickButton(waitForObject(":*Qt Creator.Clear_QToolButton")) clickButton(waitForObject(":*Qt Creator.Clear_QToolButton"))
continue continue
test.compare(filenameCombo.currentText, "%s: %s" % (protocol, pasteId), "Verify title of editor") test.compare(filenameCombo.currentText, "%s: %s" % (protocol, pasteId), "Verify title of editor")
if protocol in (NAME_KDE, NAME_PBCOM) and pastedText.endswith("\n"): if protocol == NAME_PBCOM and pastedText.endswith("\n"):
pastedText = pastedText[:-1] pastedText = pastedText[:-1]
test.compare(editor.plainText, pastedText, "Verify that pasted and fetched texts are the same") test.compare(editor.plainText, pastedText, "Verify that pasted and fetched texts are the same")
invokeMenuItem("File", "Close All") invokeMenuItem("File", "Close All")