| Commit message (Collapse) | Author | Age | Files | Lines |
|\
| |
| |
| | |
Change-Id: I1ec3d930d4131ba6d1de687250c0f4f698946af4
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Short version:
There are currently two problems with MenuItems:
- Mirrored MenuItems don't fill the Menu's available width.
- MenuItem does not fill the Menu's available width when changed
after Component completion.
This patch fixes both of them by listening to geometry changes in both
the contentItem and individual menu items, and setting the explicit
width of those menu items when either changes.
Longer version:
The first problem can be seen whenever the MenuItem's implicitWidth
changes:
- QQmlEngine::retranslate() is called, causing all bindings to be
re-evaluated
- The MenuItem's font size changes
- The MenuItem's icon size changes
- etc.
We fix this by making Menu listen to the width of each of its MenuItems
and call resizeItem() if it doesn't have an explicit width.
The second problem can be seen when e.g. resizing a Menu to account
for new items that are wider and hence require more space.
This can be fixed by listening to width changes in Menu's contentItem,
which was actually done in earlier versions but (probably accidentally)
removed in 482ecb0f.
I had tried to solve both issues by setting the explicit width of
MenuItem to the width of its Menu, or undefined if it has none
(which means it reverts to its implicit width). However, this does
not account for e.g. MenuSeparator and custom items that can be added
to Menu - they should also have their width fill the Menu automatically
if they don't have an explicit width set.
Change-Id: I95dd0da0919a1e297f2e2030da746ff1f1a17644
Fixes: QTBUG-75051
Fixes: QTBUG-75142
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This is a prerequisite for ensuring that an Imagine-style-specific fix
works.
Fixes: QTBUG-75141
Change-Id: Iafef3bf947151cb35b88a1230e3541d8e4e15fd9
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Explicitly set hoverEnabled to true on the ScrollBar to account for
platforms like Android, where the UiEffects style hint does not include
HoverEffect, and hence QQuickControlPrivate::calcHoverEnabled() would
otherwise return false.
Change-Id: Iee2b1f7c3ee8e5caf2a7b4f6695ab4dabd6b4753
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
|\|
| |
| |
| | |
Change-Id: Ibf39232616ea6ef67242b70011aa683ce8dc0b4f
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
qtbase/mkspecs/features/testcase.prf already generates a .qrc file
containing the files in TESTDATA, so instead of trying to copy QML
files to the device, we can just use the existing resources.
This fixes the following failure, which affects all tests using
util.pri:
FAIL! : tst_cursor::initTestCase() 'QDir::setCurrent(m_directory)' returned FALSE. (Could not chdir to :/)
Change-Id: I1fd7449437be045a7230a7679e24252cdf9c0ccc
Fixes: QTBUG-73604
Fixes: QTBUG-73606
Fixes: QTBUG-73607
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|\|
| |
| |
| | |
Change-Id: Ice7d2ed56c85521a946b218d84087b255d3613ae
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The ComboBox popup should be closed when the ComboBox loses focus, but
not if the control gaining focus is the popup itself. While all the
styles implemented in this module implement the ComboBox popup as an
unfocusable window and handle all the keyboard events in QQuickComboBox
itself, the developer can choose to replace the popup with a custom
implementation, which might need the keyboard focus.
Fixes: QTBUG-74661
Change-Id: I838ab9cb697df63ea2099e68f1ae99eadb06be08
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We also need to update the hovered state of each indicator when
the mouse is moved while pressed, not just when we get hover move
events.
Change-Id: I6fa71344fd540f648683958e5804ae735523e72d
Fixes: QTBUG-74688
Reviewed-by: Henning Gründl <henning.gruendl@qt.io>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I5b112e0e4021191c387da86bb5b0477fe0c4da30
|
| |
| |
| |
| |
| |
| |
| | |
into one data-driven one.
Change-Id: I7507765747dd984530e50df5cd08152b9d71cb66
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| | |
Change-Id: Ic18cca692b09f55818b9c99379aae4be72ba4159
Fixes: QTBUG-74711
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
I'm not sure if this will help (because I haven't been able to
reproduce the flakiness, even in a CI VM), but the tumbler should
really not still be spinning after we got the position of its items,
so make sure it's stopped before doing any comparisons.
Task-number: QTBUG-70597
Change-Id: I72555747b2ea4ef136cdaa13f7b0757be2624e73
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| | |
Task-number: QTBUG-74512
Change-Id: I7b154d793c134a93aa3a48ade7d3ae785c44e7ea
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|\|
| |
| |
| |
| |
| |
| | |
Conflicts:
.qmake.conf
Change-Id: I37f9f88a11946d5d67935c682273eb0aa8593f9b
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When two buttons' roles are equal, the code would fall back to
comparing the buttons' memory addresses. This leads to random results,
which are especially noticeable on Windows and with release builds.
This patch fixes the issue by instead returning false if the roles
are equal. This still satisfies the "comp(a,a)==false" requirement
of strict weak ordering:
https://en.cppreference.com/w/cpp/named_req/Compare
The patch also changes the sorting algorithm used from std::sort()
to std::stable_sort(). Although it doesn't appear to be necessary from
the testing that I did, it is good to ensure that the order of equal
elements is maintained.
Fixes: QTBUG-70451
Change-Id: I47561604108b12bf8ec0c794a2372767f0b2e04e
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
|
|\|
| |
| |
| | |
Change-Id: Id548fd29dd5cc357c4bd00c3c842006f2d62c758
|
| |
| |
| |
| |
| |
| |
| |
| | |
Implementations of QQmlJS::AST::Visitor are required to do so.
Fixes: QTBUG-74512
Change-Id: I19d40d2d3a5d3588cad4caa7f0a48c13919077a0
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
|\|
| |
| |
| | |
Change-Id: If27c142786ad2457a80ce1ef65220834eda81e94
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Some history:
- f1f884d3 worked around an issue in DialogButtonBox.
- c2fd8f7d fixed it by using contentWidth; i.e. the implicit width of
the contentItem. It caused QTBUG-72372.
- I tried to fix QTBUG-72372 with 6476de0b, but created (or exposed)
QTBUG-73860.
The problem in QTBUG-73860 can be seen with the following example:
Dialog {
id: dialog
visible: true
standardButtons: Dialog.Ok
}
The single 'Ok' button here will go outside of the dialog. The
underlying issue can be seen by looking into DialogButtonBox.qml:
implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
(control.count === 1 ? contentWidth * 2 : contentWidth) + leftPadding + rightPadding)
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
The implicit width of the box in this case is contentWidth * 2
(there is one button, so control.count === 1). This should result in
the button taking half the width of the box and being aligned to the
right:
alignment: count === 1 ? Qt.AlignRight : undefined
...
delegate: Button {
width: control.count === 1 ? control.availableWidth / 2 : undefined
}
What actually happens is that the contentItem (ListView) is temporarily 0
until it gets its final size of 100. However, QQuickDialogButtonBox
doesn't respond to this change in the ListView's contentWidth.
This problem can be fixed by returning to c2fd8f7d's resizeContent()
implementation, which uses contentWidth.
Then, there is a second issue:
Dialog {
id: dialog
visible: true
standardButtons: Dialog.Ok
width: 300
}
The button here is also positioned outside of the box. The problem is
that the contentWidth is based on implicitContentWidth:
QQuickContainerPrivate::updateContentWidth()
{
// ...
contentWidth = implicitContentWidth;
// ...
}
implicitContentWidth is calculated by calling getContentWidth():
void QQuickControlPrivate::updateImplicitContentWidth()
{
// ...
implicitContentWidth = getContentWidth();
// ...
}
In the case of horizontal alignment,
QQuickDialogButtonBoxPrivate::getContentWidth() uses the implicit
width of the largest button:
for (int i = 0; i < count; ++i) {
QQuickItem *item = q->itemAt(i);
if (item) {
totalWidth += item->implicitWidth();
maxWidth = qMax(maxWidth, item->implicitWidth());
}
}
// ...
if ((alignment & Qt::AlignHorizontal_Mask) == 0)
totalWidth = qMax(totalWidth, count * maxWidth + totalSpacing);
The Default style button has an implicitWidth of 100.
The DialogButtonBox in the example above is 300 pixels wide, so the
button should be 150, and it is, thanks to its width binding.
However, the DialogButtonBox uses contentWidth to size its contentItem
(ListView), and the contentWidth is, as mentioned, 100: the implicit
width of the button. So, the button ends up hanging over the side
of the box, as it's larger than the box thinks it is.
This problem is fixed by setting DialogButtonBox's contentWidth to the
contentWidth of the contentItem (ListView). This makes DialogButtonBox
use the explicit widths of the buttons rather than their implicit
widths. Since the contentWidth is no longer implicit, we must also
change any use of contentWidth in the implicitWidth binding to
implicitContentWidth.
While writing auto tests for this, they caught an issue where
contentWidth wasn't updated, so now we call resizeContent() in
QQuickContainer::setContentWidth().
Change-Id: I99ffda21b47aeb14d4382e453e87c4312f343a1c
Fixes: QTBUG-72886
Fixes: QTBUG-73860
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If the attached property object was created on an item that SplitView
doesn't manage, then its m_splitView member will be null, so check
for that.
Sometimes, an attached SplitView object will be created on an item
that SplitView _does_ manage, but SplitView's own contentItem hasn't
been created yet (see the comment in the QQuickSplitViewAttached
constructor). In that case the SplitView will see the item added
as a child of its contentItem eventually, and we just have to wait.
While we are waiting, check access to our members in case they are
null.
Fixes: QTBUG-74276
Change-Id: I70b7f017e621e0d15c239b962f0407743eb70b15
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I34009799fe4016339920a7f0884af4dbe6d71418
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Attached ToolTips share a single ToolTip item and set properties
(such as delay) on it before showing it. Before 63899f3185,
this wasn't a problem, but now QQuickToolTip has its own show()
function that QQuickToolTipAttached calls. QQuickToolTipAttached
passes -1 by default, which QQuickToolTip sees as the "default"
and hence doesn't set a timeout at all. However, since that
QQuickToolTip instance is shared, it still has a previous
timeout value from the last time it was shown by a different
QQuickToolTipAttached object.
So, instead of QQuickToolTipAttached passing the timeout to
QQuickToolTip::show(), make it set it on the QQuickToolTip
instead. This ensures that it has the correct value if no
timeout was specified for an attached tool tip.
Task-number: QTBUG-74226
Change-Id: Iceed17bbb640a929fae3b9c975519df36cc2d210
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
If the flickable inside a scrollview has an explicit content
size assigned, or if the flickable was created by the
application, then don't fall back to calculate the content
size. The reason is that it should not try to change the content
size of a flickable that is controlled by the application (or by
the flickable itself, in the case of ListView, ScrollView and
TextArea). Sometimes e.g ListView will report a negative
contentWidth, which is not considered illegal.
From before we used to just check if the child flickable had
a negative content size, and if so, take that as a evidence
that the flickable was owned by the scrollview. But with this
patch, we instead add two extra variables that keeps explicit
track of whether or not we should read the content size from the
flickable, regardless of the values it might return.
With the two new variables, we also no longer need the
"ownsFlickable" property, as we can instead use the new
variables to check for the same.
Fixes: QTBUG-72536
Fixes: QTBUG-74000
Fixes: QTBUG-72940
Change-Id: Iec87cc953557bf8c1bdb32a3c11b721c607fc19a
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| | |
Work was probably started before 5.12 but the patch ended up getting
merged in time for 5.13. It seems that I forgot to update the versions.
Change-Id: I19edf08158cca0967a7a536b3aee326e3b393d4c
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
|
|\|
| |
| |
| | |
Change-Id: Ibd3a8a111ce70643199c64f41143f332a34826f8
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Windows QPA
The test failed in case the mouse cursor was within the view to be created.
Move the cursor away to prevent that.
Fixes: QTBUG-74130
Change-Id: I8d77fc9b4cc5380ddb06ba128bca7c1666357b50
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Before this patch, only space was allowed.
Windows 10 and macOS 10.14.2 both allow using enter to activate menu
items.
Change-Id: I64476347669ff73f233efd129563a18ba51618a5
Fixes: QTBUG-73354
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
As with the buttons manual test, there are a lot of possible
combinations of dialogs, which makes automated testing very difficult.
This test will allow us to see lots of different combinations all at
once for a particular style.
Change-Id: I42fa5a1e027c9f56bebf859078d3e54fe1902228
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This fixes the issue where Drawer would try to reposition itself forever,
but does not address the fact that it is incorrectly positioned afterwards.
Task-number: QTBUG-71290
Change-Id: Ibbd4baa84b66ab446ce3af2ef326f8c50e74216d
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| | |
Give conversion a longer time to finish.
Change-Id: Iacc403906f9094ffc688f8c98c401b88bc935961
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
- Rename startProcess() to waitForProcessToStart(), since that's what
it does, and it makes it consistent with waitForProcessToFinish().
- Add ProcessWaitResult struct for error reporting and make both
waitForProcessToStart() and waitForProcessToFinish() use it.
This allows us to stop using QFAIL in helper functions, which will
not abort the test.
- Add some double quotes in debug output to help readability.
- Add code comments to explain stuff that I've forgotten and had to
look up.
Change-Id: Ie54c0ee752d57acd3501b72025fc1eb482dfa238
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The libav-tools that provides the avconv tool is deprecated
since Ubuntu 18.04 release. The ffmpeg pkg is the alternative
suggested.
Change-Id: I5d3d3b9409448402f67a7481827f0f1925cbb89f
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
The return value of qPrintable should not be stored.
The shortened ASAN output:
=================================================================
==23322==ERROR: AddressSanitizer: heap-use-after-free on address 0x6060002b4e58 at pc 0x7f8b035f7569 bp 0x7fff7ea38530 sp 0x7fff7ea38520
READ of size 1 at 0x6060002b4e58 thread T0
#0 0x7f8b035f7568 in QMetaObject::indexOfProperty(char const*) const /home/mitch/dev/qt5-dev/qtbase/src/corelib/kernel/qmetaobject.cpp:1015
#1 0x7f8b03687194 in QObject::property(char const*) const /home/mitch/dev/qt5-dev/qtbase/src/corelib/kernel/qobject.cpp:3891
#2 0x55a59f4cc085 in tst_Gifs::checkables() /home/mitch/dev/qt5-dev/qtquickcontrols2/tests/manual/gifs/tst_gifs.cpp:737
0x6060002b4e58 is located 24 bytes inside of 64-byte region [0x6060002b4e40,0x6060002b4e80)
freed by thread T0 here:
#0 0x7f8b0708c7b8 in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xde7b8)
#1 0x7f8b02fcc0a2 in QArrayData::deallocate(QArrayData*, unsigned long, unsigned long) /home/mitch/dev/qt5-dev/qtbase/src/corelib/tools/qarraydata.cpp:167
#2 0x55a59f4cbf5c in QTypedArrayData<char>::deallocate(QArrayData*) /home/mitch/dev/qt5-dev-debug/qtbase/include/QtCore/../../../../qt5-dev/qtbase/src/corelib/tools/qarraydata.h:239
#3 0x55a59f4cbf5c in QByteArray::~QByteArray() /home/mitch/dev/qt5-dev-debug/qtbase/include/QtCore/../../../../qt5-dev/qtbase/src/corelib/tools/qbytearray.h:476
#4 0x55a59f4cbf5c in tst_Gifs::checkables() /home/mitch/dev/qt5-dev/qtquickcontrols2/tests/manual/gifs/tst_gifs.cpp:736
previously allocated by thread T0 here:
#0 0x7f8b0708cf40 in realloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdef40)
#1 0x7f8b02fcb451 in reallocateData /home/mitch/dev/qt5-dev/qtbase/src/corelib/tools/qarraydata.cpp:83
#2 0x7f8b02fcbf7f in QArrayData::reallocateUnaligned(QArrayData*, unsigned long, unsigned long, QFlags<QArrayData::AllocationOption>) /home/mitch/dev/qt5-dev/qtbase/src/corelib/tools/qarraydata.cpp:146
#3 0x7f8b02fd58fa in QTypedArrayData<char>::reallocateUnaligned(QTypedArrayData<char>*, unsigned long, QFlags<QArrayData::AllocationOption>) ../../include/QtCore/../../../../qt5-dev/qtbase/src/corelib/tools/qarraydata.h:233
#4 0x7f8b02fd58fa in QByteArray::reallocData(unsigned int, QFlags<QArrayData::AllocationOption>) /home/mitch/dev/qt5-dev/qtbase/src/corelib/tools/qbytearray.cpp:1914
#5 0x7f8b02fd63c1 in QByteArray::resize(int) /home/mitch/dev/qt5-dev/qtbase/src/corelib/tools/qbytearray.cpp:1875
#6 0x7f8b0373c3a0 in QUtf8::convertFromUnicode(QChar const*, int, QTextCodec::ConverterState*) /home/mitch/dev/qt5-dev/qtbase/src/corelib/codecs/qutfcodec.cpp:456
#7 0x7f8b0373c653 in QUtf8Codec::convertFromUnicode(QChar const*, int, QTextCodec::ConverterState*) const /home/mitch/dev/qt5-dev/qtbase/src/corelib/codecs/qutfcodec.cpp:983
#8 0x7f8b0374918b in QTextCodec::fromUnicode(QStringView) const /home/mitch/dev/qt5-dev/qtbase/src/corelib/codecs/qtextcodec.cpp:846
#9 0x7f8b0311c01a in qt_convert_to_local_8bit /home/mitch/dev/qt5-dev/qtbase/src/corelib/tools/qstring.cpp:5369
#10 0x7f8b031366cb in QString::toLocal8Bit_helper(QChar const*, int) /home/mitch/dev/qt5-dev/qtbase/src/corelib/tools/qstring.cpp:5359
#11 0x55a59f4cbd70 in QString::toLocal8Bit() && /home/mitch/dev/qt5-dev-debug/qtbase/include/QtCore/../../../../qt5-dev/qtbase/src/corelib/tools/qstring.h:556
#12 0x55a59f4cbd70 in tst_Gifs::checkables() /home/mitch/dev/qt5-dev/qtquickcontrols2/tests/manual/gifs/tst_gifs.cpp:736
Change-Id: I5a967607e7ebff5177261f32222b9f50ee65d35e
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I8aded0949d38315d4d22fa511f83331d7caf3145
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When changing the enabled state of a Menu after component completion,
the background would not change. The problem was that
QQuickPopup::paletteChanged() was not being emitted when the enabled
state changed, resulting in QQuickControl::palette() (which
QQuickPopup::palette() forwards calls to via its popupItem) not
being called. QQuickControl::palette() changes the palette's current
color group to QPalette::Disabled when it is disabled, so if it's not
called, the popup's colors won't change.
Fix the issue by adding a virtual enabledChange() function to
QQuickControl, which QQuickPopupItem can override to emit both
QQuickPopup::enabledChanged() (saving a connection in the process)
and QQuickPopup::paletteChanged(). This ensures that bindings to
QQuickPopup::palette are re-evaluated.
The patch adds a virtual instead of just emitting paletteChanged()
in QQuickPopup::setEnabled(), because we also want to be notified
of indirect enabled state changes, such as those coming from
parent items.
Change-Id: Ibdbd05f27b5a74fe731bda9d6698cbf6b8f81785
Fixes: QTBUG-73447
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| | |
Change-Id: I7eb394ca3991eae585fbbd8e665c46b11ef64a07
Fixes: QTBUG-70181
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When a menu item with a sub-menu was triggered by key or mouse,
it would open the sub-menu with the first menu item highlighted.
This doesn't make sense for disabled menu items, so this patch
makes it find the first enabled item.
Change-Id: I9df1c750749e5a77b027b6f476b8ae1f5ea035bd
Fixes: QTBUG-69540
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
In 5.11, the font palette read from the qtquickcontrols2.conf file was
respected. After some large architectural changes (around the time of
94780538) required to fix a crash, 5.12 stopped respecting these
settings.
This patch fixes the issue by setting the default font as the System
scope font, because that's what QQuickControlPrivate::parentFont() uses
as its fallback if no parent item has a font explicitly set.
QQuickControlPrivate::parentFont() is used as the starting point for
font inheritance/resolution for each control.
The same fix is used for palettes.
Change-Id: I706a9f109c9959b8ea6b91f842146dbfc876cb2b
Fixes: QTBUG-72023
Reviewed-by: Nils Jeisecke <nils.jeisecke@saltation.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@qt.io>
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Problem
Consider the following code:
Menu {
title: "Menu"
Action {
text: "Item"
onTriggered: enabled = false
}
}
A MenuItem (AbstractButton) is created for the Action, and when it is
clicked, this function is called:
void QQuickAbstractButtonPrivate::trigger()
{
Q_Q(QQuickAbstractButton);
if (action && action->isEnabled())
QQuickActionPrivate::get(action)->trigger(q, false);
else if (effectiveEnable)
emit q->clicked();
}
QQuickActionPrivate::get(action)->trigger(q, false) results in this
function being called:
void QQuickAbstractButtonPrivate::click()
{
Q_Q(QQuickAbstractButton);
if (effectiveEnable)
emit q->clicked();
}
Since the action (and hence the menu item) was disabled in the signal
handler, the effectiveEnable check fails and clicked() is not emitted.
This causes the menu to not be dismissed.
Solution
Before calling QQuickActionPrivate::get(action)->trigger(), store
the button's enabled state. If triggering the action causes the action
to be disabled (due to the signal handler), we can then choose whether
or not we emit QQuickAbstractButton::clicked(). Specifically, we emit
clicked() if:
- we were enabled before triggering the action, and
- we have no associated action, or it's no longer enabled
Task-number: QTBUG-69682
Change-Id: Ib4e3c313b776decc74089a6beffe415605c430be
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
|\|
| |
| |
| | |
Change-Id: I13c6458d7a7f92daf58c12e4c120d99a1f56cbfa
|
| |\
| | |
| | |
| | | |
Change-Id: I555418c45b33fa9bc02072b32736403090f1bdbc
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When a button is pressed long enough
(QStyleHints::mousePressAndHoldInterval()) and there is a connection
(e.g. signal handler) to the pressAndHold() signal, it is emitted.
If nothing is connected to the signal, clicked() is emitted.
Before this patch, QQuickAbstractButton used
QObjectPrivate::isSignalConnected() to check whether or not anything
was connected to pressAndHold(). The problem with this function is
described by Olivier:
"[...] there is an optimisation for the first 64 signals
we store a bit in a 64bit integer to quickly see if a signal is
connected. There is also the problem that it can return true even
if the signal has been disconnected."
This is also mentioned in a comment in the code:
Returns \c true if the signal with index \a signal_index from object
\a sender is connected. Signals with indices above a certain range
are always considered connected (see connectedSignals in
QObjectPrivate).
When 5adce04 added inset signals to QQuickControl, it meant that
signals in QQuickAbstractButton (which derives from QQuickControl) were
pushed outside of that 64 signal range, resulting in the
IS_SIGNAL_CONNECTED macro returning true.
This patch fixes the issue by using QObject::isSignalConnected(), which
does not use the 64 signal optimization.
Fixes: QTBUG-72811
Change-Id: Ic6e54d6cab062e528522ef7e3cf27c1023d31347
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
(cherry picked from commit bbc81363f082ab6a2736f8de83968a3941e367e2)
Reviewed-by: Jani Heikkinen <jani.heikkinen@qt.io>
|
| | |\
| | | |
| | | |
| | | | |
Change-Id: I442b103e352bc49b35fb816104c87c112e2fd958
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Binary compatibility file added.
Change-Id: Icc07524dfd195642a2e5fc2d566f4270e4f505e0
Reviewed-by: Sergio Ahumada <sahumada@texla.cl>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
When a button is pressed long enough
(QStyleHints::mousePressAndHoldInterval()) and there is a connection
(e.g. signal handler) to the pressAndHold() signal, it is emitted.
If nothing is connected to the signal, clicked() is emitted.
Before this patch, QQuickAbstractButton used
QObjectPrivate::isSignalConnected() to check whether or not anything
was connected to pressAndHold(). The problem with this function is
described by Olivier:
"[...] there is an optimisation for the first 64 signals
we store a bit in a 64bit integer to quickly see if a signal is
connected. There is also the problem that it can return true even
if the signal has been disconnected."
This is also mentioned in a comment in the code:
Returns \c true if the signal with index \a signal_index from object
\a sender is connected. Signals with indices above a certain range
are always considered connected (see connectedSignals in
QObjectPrivate).
When 5adce04 added inset signals to QQuickControl, it meant that
signals in QQuickAbstractButton (which derives from QQuickControl) were
pushed outside of that 64 signal range, resulting in the
IS_SIGNAL_CONNECTED macro returning true.
This patch fixes the issue by using QObject::isSignalConnected(), which
does not use the 64 signal optimization.
Fixes: QTBUG-72811
Change-Id: Ic6e54d6cab062e528522ef7e3cf27c1023d31347
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
|\| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Conflicts:
.qmake.conf
Change-Id: Ib3b90cce1f4422b308515b06e89b1c4a0bf7f474
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Don't add duplicate change listeners, since only one of them will be
removed.
Coincidentally, this is the same fix as d56c193e, which was reverted
for unrelated reasons as part of a bulk revert in d3545dbd.
Change-Id: If6fde09f884929c7928f3a1f78625559c9fcbf07
Fixes: QTBUG-72746
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|
|\| | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Conflicts:
.qmake.conf
src/imports/controls/qtquickcontrols2plugin.cpp
Change-Id: I27f1260b539354e084beb28be78385e57fda63e1
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
c2fd8f7d made the following changes to the geometry calculation of
QQuickDialogButtonBox's contentItem:
@@ -244,11 +252,8 @@ void QQuickDialogButtonBoxPrivate::resizeContent()
return;
QRectF geometry = q->boundingRect().adjusted(q->leftPadding(), q->topPadding(), -q->rightPadding(), -q->bottomPadding());
- if (alignment != 0) {
- qreal cw = (alignment & Qt::AlignHorizontal_Mask) == 0 ? q->availableWidth() : contentItem->property("contentWidth").toReal();
- qreal ch = (alignment & Qt::AlignVertical_Mask) == 0 ? q->availableHeight() : contentItem->property("contentHeight").toReal();
- geometry = alignedRect(q->isMirrored() ? Qt::RightToLeft : Qt::LeftToRight, alignment, QSizeF(cw, ch), geometry);
- }
+ if (alignment != 0)
+ geometry = alignedRect(q->isMirrored() ? Qt::RightToLeft : Qt::LeftToRight, alignment, QSizeF(contentWidth, contentHeight), geometry);
It turns out that this breaks the use case of a fixed width box (e.g.
where a Dialog is assigned a width of 400 and the box assumes that
width) with a single button.
For example, in the case of the Default style,
QQuickDialogButtonBox::contentWidth is 100 because Button's
implicitWidth is 100. Since contentWidth is "used for calculating the
total implicit width" of the box, it's not useful for positioning
items which have an explicit width. The result is that
QQuickDialogButtonBox thinks the contentItem is smaller than it really
is, and therefore the ListView is positioned too far to the right.
Only the Default and Universal styles are affected, as they are the
only styles that resize the button to cover half of the button box.
This patch fixes the issue by reverting the code above to its original
state, where the content size of the contentItem is used instead
of the contentWidth of the box.
Change-Id: Idd2f94f3b4d3413fc2057c0ade2efdd66d701c08
Fixes: QTBUG-72372
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
|