<feed xmlns='http://www.w3.org/2005/Atom'>
<title>qt/qtdeclarative.git/src/quicktemplates2/qquicktextarea.cpp, branch wip/material3</title>
<subtitle>Qt Declarative (Quick 2)
</subtitle>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/'/>
<entry>
<title>Remove "2" from Qt Quick Controls directories</title>
<updated>2022-12-01T02:26:20+00:00</updated>
<author>
<name>Mitch Curtis</name>
<email>mitch.curtis@qt.io</email>
</author>
<published>2022-11-18T07:15:16+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=4bd87b903b355b53e3105ba1ae7c154c4e55cdaf'/>
<id>4bd87b903b355b53e3105ba1ae7c154c4e55cdaf</id>
<content type='text'>
Qt Quick Controls 2 was named that way because it was a follow-up to
Qt Quick Controls 1.x. Now that Qt Quick Controls 1 is no longer
supported, we don't need to have "2" in the name. Work on this was
already started for the documentation in
1abdfe5d5a052f2298b7bf657513dfa7e0c66a56.

By doing this renaming a few weeks before feature freeze, it won't
affect the release but still results in as little time possible spent
manually fixing conflicts in cherry-picks from non-LTS releases as a
result of the renaming.

This patch does the following:

- Renames directories.
- Adapts CMakeLists.txt and other files to account for the new paths.

A follow-up patch will handle documentation.

It does not touch library names or other user-facing stuff, as that
will have to be done in Qt 7.

Task-number: QTBUG-95413
Change-Id: I170d8db19033ee71e495ff0c5c1a517a41ed7634
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Qt Quick Controls 2 was named that way because it was a follow-up to
Qt Quick Controls 1.x. Now that Qt Quick Controls 1 is no longer
supported, we don't need to have "2" in the name. Work on this was
already started for the documentation in
1abdfe5d5a052f2298b7bf657513dfa7e0c66a56.

By doing this renaming a few weeks before feature freeze, it won't
affect the release but still results in as little time possible spent
manually fixing conflicts in cherry-picks from non-LTS releases as a
result of the renaming.

This patch does the following:

- Renames directories.
- Adapts CMakeLists.txt and other files to account for the new paths.

A follow-up patch will handle documentation.

It does not touch library names or other user-facing stuff, as that
will have to be done in Qt 7.

Task-number: QTBUG-95413
Change-Id: I170d8db19033ee71e495ff0c5c1a517a41ed7634
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>TextArea: selectByMouse default=true, but not on touchscreens</title>
<updated>2022-08-29T18:48:07+00:00</updated>
<author>
<name>Shawn Rutledge</name>
<email>shawn.rutledge@qt.io</email>
</author>
<published>2022-08-24T11:09:43+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=3ebb3540df9729d336d90225d3b4c1d2ca182e8e'/>
<id>3ebb3540df9729d336d90225d3b4c1d2ca182e8e</id>
<content type='text'>
When you drag a finger across a TextArea, it should not select text.
- your finger probably covers several characters, so you can't see where
  you're selecting until afterwards
- if the item is in a Flickable, flicking by touch should be prioritized
- if flicking happens, the text cursor should not move; but to avoid
  losing too much functionality, we allow it to move on release, if
  the TextArea gets the release (i.e. if it still has the exclusive
  grab)
- TextArea's pressed, pressAndHold and released signals continue to
  behave the same with touch as with mouse

As with the TextEdit change in 90d3fac73a10b9363fd34e6757cc730d7a0c086c,
we now distinguish mouse events that are synthesized from non-mouse
devices and avoid mouse-like behaviors as described above, but there is
no behavior change if the event comes from an actual mouse or touchpad.

In QQuickPressHandler::mousePressEvent() we give the original event's
device to the delayed press event, now that we check the device to
distinguish "real" mouse events from those that are synthesized from
touch.

[ChangeLog][Controls][TextArea] The selectByMouse property is now
enabled by default, but no longer enables selecting by dragging your
finger across text on a touchscreen. Platforms that are optimized for
touchscreens normally use special text-selection handles, which interact
with Qt via QInputMethod. You can opt out of the behavior change by
setting the environment variable
QT_QUICK_CONTROLS_TEXT_SELECTION_BEHAVIOR=old.

Pick-to: 6.4
Task-number: QTBUG-10684
Task-number: QTBUG-38934
Task-number: QTBUG-90494
Task-number: QTBUG-101205
Change-Id: Icbe81e547b1cf8d5e3cc3ed922f12c7b411ca658
Reviewed-by: Qt CI Bot &lt;qt_ci_bot@qt-project.org&gt;
Reviewed-by: Richard Moe Gustavsen &lt;richard.gustavsen@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
When you drag a finger across a TextArea, it should not select text.
- your finger probably covers several characters, so you can't see where
  you're selecting until afterwards
- if the item is in a Flickable, flicking by touch should be prioritized
- if flicking happens, the text cursor should not move; but to avoid
  losing too much functionality, we allow it to move on release, if
  the TextArea gets the release (i.e. if it still has the exclusive
  grab)
- TextArea's pressed, pressAndHold and released signals continue to
  behave the same with touch as with mouse

As with the TextEdit change in 90d3fac73a10b9363fd34e6757cc730d7a0c086c,
we now distinguish mouse events that are synthesized from non-mouse
devices and avoid mouse-like behaviors as described above, but there is
no behavior change if the event comes from an actual mouse or touchpad.

In QQuickPressHandler::mousePressEvent() we give the original event's
device to the delayed press event, now that we check the device to
distinguish "real" mouse events from those that are synthesized from
touch.

[ChangeLog][Controls][TextArea] The selectByMouse property is now
enabled by default, but no longer enables selecting by dragging your
finger across text on a touchscreen. Platforms that are optimized for
touchscreens normally use special text-selection handles, which interact
with Qt via QInputMethod. You can opt out of the behavior change by
setting the environment variable
QT_QUICK_CONTROLS_TEXT_SELECTION_BEHAVIOR=old.

Pick-to: 6.4
Task-number: QTBUG-10684
Task-number: QTBUG-38934
Task-number: QTBUG-90494
Task-number: QTBUG-101205
Change-Id: Icbe81e547b1cf8d5e3cc3ed922f12c7b411ca658
Reviewed-by: Qt CI Bot &lt;qt_ci_bot@qt-project.org&gt;
Reviewed-by: Richard Moe Gustavsen &lt;richard.gustavsen@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QQuickTextArea/Field: don't block hover events</title>
<updated>2022-07-19T20:22:36+00:00</updated>
<author>
<name>Richard Moe Gustavsen</name>
<email>richard.gustavsen@qt.io</email>
</author>
<published>2022-07-08T07:48:02+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=cdc0e5cac27890a5ea0590dbdc7cf4c0f624dac2'/>
<id>cdc0e5cac27890a5ea0590dbdc7cf4c0f624dac2</id>
<content type='text'>
Controls shouldn't block hover from propagating by default.
This was a regression in Qt 6.2 compared to Qt 5.15, and was
fixed with 0c7b0a43064c8be452f4be74701f1dabce87f24c. But that
patch didn't consider many of the items that overrode hover
event handling from c++, like TextArea and TextField;
they too need to ignore hover events, to not stop propagation -
it's not enough to only do it in the base class.

This patch fixes the regression that some controls
and items were blocking propagation compared to Qt 5.15.

Fixes: QTBUG-104537
Pick-to: 6.4 6.3 6.2
Change-Id: Ie047da6ac7d5be5ea6fd52d5a5446787df6d10f5
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Controls shouldn't block hover from propagating by default.
This was a regression in Qt 6.2 compared to Qt 5.15, and was
fixed with 0c7b0a43064c8be452f4be74701f1dabce87f24c. But that
patch didn't consider many of the items that overrode hover
event handling from c++, like TextArea and TextField;
they too need to ignore hover events, to not stop propagation -
it's not enough to only do it in the base class.

This patch fixes the regression that some controls
and items were blocking propagation compared to Qt 5.15.

Fixes: QTBUG-104537
Pick-to: 6.4 6.3 6.2
Change-Id: Ie047da6ac7d5be5ea6fd52d5a5446787df6d10f5
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Let Controls inherit palettes and fonts from parents</title>
<updated>2022-07-08T07:22:05+00:00</updated>
<author>
<name>JiDe Zhang</name>
<email>zhangjide@uniontech.com</email>
</author>
<published>2022-03-07T09:36:48+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=2483ffa011f22b6d2120c73021a59d222a98aa52'/>
<id>2483ffa011f22b6d2120c73021a59d222a98aa52</id>
<content type='text'>
The Item's palette property and Control's font property returns the
resolved value; its resolveMask is inherited from parent object, when
the return value is used in the qml. For example:

ApplicationWindow {
    id: window
    palette { window: "blue"; windowText: "blue" }

    Control {
        id: control
    }

    Button {
        onClicked: {
            control.palette.window = "red"
            window.palette.windowText = "red"
            console.log(control.palette.windowText)
        }
    }
}

In Button.onClicked, `control.palette` is the `resolvedPalette`
of Control, it's resolveMask is not 0. Next, the new value is assigned
to the control, then the control's "requestedPalette" will change to the
new value, and it's resolveMask also is not 0. Next,
`window.palette.windowText = "red"` changes the `windowText` palette for
the window; QQuickPaletteColorProvider::inheritPalette() will be called.
Because the resolveMask of `requestedPalette` is equal to the new
palette, the control will not inherit any colors from its parent. So
`console.log(control.palette.windowText)` was printing `qml: #0000ff`,
but the right result is `qml: #ff0000`.

When PaletteProvider is missing the inherited struct, fallbackPalette is
now used as parentPalette.

[ChangeLog][Controls] Controls now inherit palette and font from parents.

Done-With: Volker Hilsheimer &lt;volker.hilsheimer@qt.io&gt;
Done-With: yeshanshan &lt;yeshanshan@uniontech.com&gt;
Done-With: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
Pick-to: 6.4
Fixes: QTBUG-101480
Change-Id: Ibe400f647512331352bf34dee42f908fb7a8d914
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
Reviewed-by: Oliver Eftevaag &lt;oliver.eftevaag@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The Item's palette property and Control's font property returns the
resolved value; its resolveMask is inherited from parent object, when
the return value is used in the qml. For example:

ApplicationWindow {
    id: window
    palette { window: "blue"; windowText: "blue" }

    Control {
        id: control
    }

    Button {
        onClicked: {
            control.palette.window = "red"
            window.palette.windowText = "red"
            console.log(control.palette.windowText)
        }
    }
}

In Button.onClicked, `control.palette` is the `resolvedPalette`
of Control, it's resolveMask is not 0. Next, the new value is assigned
to the control, then the control's "requestedPalette" will change to the
new value, and it's resolveMask also is not 0. Next,
`window.palette.windowText = "red"` changes the `windowText` palette for
the window; QQuickPaletteColorProvider::inheritPalette() will be called.
Because the resolveMask of `requestedPalette` is equal to the new
palette, the control will not inherit any colors from its parent. So
`console.log(control.palette.windowText)` was printing `qml: #0000ff`,
but the right result is `qml: #ff0000`.

When PaletteProvider is missing the inherited struct, fallbackPalette is
now used as parentPalette.

[ChangeLog][Controls] Controls now inherit palette and font from parents.

Done-With: Volker Hilsheimer &lt;volker.hilsheimer@qt.io&gt;
Done-With: yeshanshan &lt;yeshanshan@uniontech.com&gt;
Done-With: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
Pick-to: 6.4
Fixes: QTBUG-101480
Change-Id: Ibe400f647512331352bf34dee42f908fb7a8d914
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
Reviewed-by: Oliver Eftevaag &lt;oliver.eftevaag@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix TextEdit/TextArea mouse cursor shape handling logic</title>
<updated>2022-06-16T10:49:15+00:00</updated>
<author>
<name>Vladimir Belyavsky</name>
<email>belyavskyv@gmail.com</email>
</author>
<published>2022-06-08T12:51:45+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=175dfd25c25fedee490c0578d34c2467cef83b00'/>
<id>175dfd25c25fedee490c0578d34c2467cef83b00</id>
<content type='text'>
Previously IBeamCursor was wrongly shown in case when TextEdit
was readonly and not selectable by mouse. Now ArrowCursor will be shown
in such case. Additionally removed own mouse cursor shape handling logic
in TextArea, so it will be unified now with derived logic from TextEdit.
This is a change from 23f78b6b76fb9350a472485e34857e1a4842e5d3:
we no longer attempt to restore a cursor that was set via setCursor().

[ChangeLog][QtQuick][TextEdit] TextEdit and TextArea now set their own
mouse cursors more consistently, but without regard for any external
call to setCursor().

Fixes: QTBUG-104089
Pick-to: 6.3 6.4
Change-Id: Iba4e0cb55d555b0f360d7856346ff9e8393b9e1e
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously IBeamCursor was wrongly shown in case when TextEdit
was readonly and not selectable by mouse. Now ArrowCursor will be shown
in such case. Additionally removed own mouse cursor shape handling logic
in TextArea, so it will be unified now with derived logic from TextEdit.
This is a change from 23f78b6b76fb9350a472485e34857e1a4842e5d3:
we no longer attempt to restore a cursor that was set via setCursor().

[ChangeLog][QtQuick][TextEdit] TextEdit and TextArea now set their own
mouse cursors more consistently, but without regard for any external
call to setCursor().

Fixes: QTBUG-104089
Pick-to: 6.3 6.4
Change-Id: Iba4e0cb55d555b0f360d7856346ff9e8393b9e1e
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Use SPDX license identifiers</title>
<updated>2022-06-11T06:05:15+00:00</updated>
<author>
<name>Lucie Gérard</name>
<email>lucie.gerard@qt.io</email>
</author>
<published>2022-05-13T13:12:05+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=0dc4fd240a2897c5c443a0ef6d84c416843e4938'/>
<id>0dc4fd240a2897c5c443a0ef6d84c416843e4938</id>
<content type='text'>
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.

Pick-to: 6.4
Task-number: QTBUG-67283
Change-Id: I63563bbeb6f60f89d2c99660400dca7fab78a294
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Replace the current license disclaimer in files by
a SPDX-License-Identifier.
Files that have to be modified by hand are modified.
License files are organized under LICENSES directory.

Pick-to: 6.4
Task-number: QTBUG-67283
Change-Id: I63563bbeb6f60f89d2c99660400dca7fab78a294
Reviewed-by: Shawn Rutledge &lt;shawn.rutledge@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>TextArea: make clip node wider to accommodate cursor when right-aligned</title>
<updated>2022-05-03T18:18:45+00:00</updated>
<author>
<name>Shawn Rutledge</name>
<email>shawn.rutledge@qt.io</email>
</author>
<published>2022-05-02T13:29:59+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=d75ab891ed37d67f1614fe0f19a1e506bb564970'/>
<id>d75ab891ed37d67f1614fe0f19a1e506bb564970</id>
<content type='text'>
TextArea { horizontalAlignment:TextEdit.AlignRight } draws its cursor
past the right edge of the text itself.  1 px seems to be enough.

Fixes: QTBUG-84280
Pick-to: 6.2 6.3
Change-Id: I7aa58249f97c7f25a7caf3adc01e1a46917508c9
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
TextArea { horizontalAlignment:TextEdit.AlignRight } draws its cursor
past the right edge of the text itself.  1 px seems to be enough.

Fixes: QTBUG-84280
Pick-to: 6.2 6.3
Change-Id: I7aa58249f97c7f25a7caf3adc01e1a46917508c9
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>QuickTemplates2: includemocs</title>
<updated>2022-04-29T04:40:07+00:00</updated>
<author>
<name>Marc Mutz</name>
<email>marc.mutz@qt.io</email>
</author>
<published>2022-04-28T14:29:37+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=268b2bedd1f9d99eb788293cd432b14b4bad6bff'/>
<id>268b2bedd1f9d99eb788293cd432b14b4bad6bff</id>
<content type='text'>
Including moc files directly into their classes' TU tends to improve
codegen and enables extended compiler warnings, e.g. about unused
private functions or fields.

Pick-to: 6.3 6.2 5.15
Task-number: QTBUG-102948
Change-Id: Iac3f0f54ecd734d8558645094f6373dd9335852b
Reviewed-by: Mårten Nordheim &lt;marten.nordheim@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Including moc files directly into their classes' TU tends to improve
codegen and enables extended compiler warnings, e.g. about unused
private functions or fields.

Pick-to: 6.3 6.2 5.15
Task-number: QTBUG-102948
Change-Id: Iac3f0f54ecd734d8558645094f6373dd9335852b
Reviewed-by: Mårten Nordheim &lt;marten.nordheim@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix TextArea/TextField not using IBeamCursor when text can be selected</title>
<updated>2022-01-24T05:53:56+00:00</updated>
<author>
<name>Noah Davis</name>
<email>noahadvs@gmail.com</email>
</author>
<published>2022-01-10T05:31:15+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=1d3e219e565233393c3d23911b9587f997ca6ddf'/>
<id>1d3e219e565233393c3d23911b9587f997ca6ddf</id>
<content type='text'>
Previously, TextArea and TextField would switch to
ArrowCursor when readOnly was true, even if selectByMouse was also true.

Pick-to: 6.2 6.3
Fixes: QTBUG-99604
Change-Id: I3ddeb510f59bd6cf403641bb7ffd0b66668ca3c2
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Previously, TextArea and TextField would switch to
ArrowCursor when readOnly was true, even if selectByMouse was also true.

Pick-to: 6.2 6.3
Fixes: QTBUG-99604
Change-Id: I3ddeb510f59bd6cf403641bb7ffd0b66668ca3c2
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Don't crash when pasting text into TextArea</title>
<updated>2022-01-07T16:39:11+00:00</updated>
<author>
<name>Shawn Rutledge</name>
<email>shawn.rutledge@qt.io</email>
</author>
<published>2022-01-06T16:12:36+00:00</published>
<link rel='alternate' type='text/html' href='https://code.qt.io/cgit/qt/qtdeclarative.git/commit/?id=924b2d5d47a33d11999a8edbfe6960e9593038ec'/>
<id>924b2d5d47a33d11999a8edbfe6960e9593038ec</id>
<content type='text'>
If QQuickTextAreaPrivate::ensureCursorVisible() calls
QQuickFlickable::setContentY() while the Flickable does not yet know the
extents of its new content, it caused a crash when
QQuickScrollBarPrivate::visualArea() called qBound(0, 1, -something).
We need to wait until Flickable knows it can scroll that far. It turns
out ensureCursorVisible() is called several times anyway, so it's OK to
skip the calls that would ask the Flickable to scroll out-of-bounds.

Pick-to: 6.3
Task-number: QTBUG-99582
Change-Id: Ifb374a81591df49d3c571f55cb3076a78a808918
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If QQuickTextAreaPrivate::ensureCursorVisible() calls
QQuickFlickable::setContentY() while the Flickable does not yet know the
extents of its new content, it caused a crash when
QQuickScrollBarPrivate::visualArea() called qBound(0, 1, -something).
We need to wait until Flickable knows it can scroll that far. It turns
out ensureCursorVisible() is called several times anyway, so it's OK to
skip the calls that would ask the Flickable to scroll out-of-bounds.

Pick-to: 6.3
Task-number: QTBUG-99582
Change-Id: Ifb374a81591df49d3c571f55cb3076a78a808918
Reviewed-by: Mitch Curtis &lt;mitch.curtis@qt.io&gt;
</pre>
</div>
</content>
</entry>
</feed>
