aboutsummaryrefslogtreecommitdiffstats
path: root/src/imports/controls
diff options
context:
space:
mode:
Diffstat (limited to 'src/imports/controls')
-rw-r--r--src/imports/controls/imagine/qquickninepatchimage.cpp19
-rw-r--r--src/imports/controls/universal/TabBar.qml23
2 files changed, 28 insertions, 14 deletions
diff --git a/src/imports/controls/imagine/qquickninepatchimage.cpp b/src/imports/controls/imagine/qquickninepatchimage.cpp
index c840c6f8..7d5e4f71 100644
--- a/src/imports/controls/imagine/qquickninepatchimage.cpp
+++ b/src/imports/controls/imagine/qquickninepatchimage.cpp
@@ -397,7 +397,24 @@ void QQuickNinePatchImage::pixmapChange()
d->updatePatches();
} else {
- d->resetNode = !d->ninePatch.isNull();
+ /*
+ Only change resetNode when it's false; i.e. when no reset is pending.
+ updatePaintNode() will take care of setting it to false if it's true.
+
+ Consider the following changes in source:
+
+ normal.png => press.9.png => normal.png => focus.png
+
+ If the last two events happen quickly, pixmapChange() can be called
+ twice with no call to updatePaintNode() inbetween. On the first call,
+ resetNode will be true (because ninePatch is not null since it is still
+ in the process of going from a 9-patch image to a regular image),
+ and on the second call, resetNode would be false if we didn't have this check.
+ This results in the oldNode never being deleted, and QQuickImage
+ tries to static_cast a QQuickNinePatchImage to a QSGInternalImageNode.
+ */
+ if (!d->resetNode)
+ d->resetNode = !d->ninePatch.isNull();
d->ninePatch = QImage();
}
QQuickImage::pixmapChange();
diff --git a/src/imports/controls/universal/TabBar.qml b/src/imports/controls/universal/TabBar.qml
index ab660c93..c7d27cbd 100644
--- a/src/imports/controls/universal/TabBar.qml
+++ b/src/imports/controls/universal/TabBar.qml
@@ -46,23 +46,20 @@ T.TabBar {
implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
contentHeight + topPadding + bottomPadding)
- contentItem: PathView {
+ contentItem: ListView {
model: control.contentModel
currentIndex: control.currentIndex
- interactive: false
- snapMode: PathView.SnapToItem
- movementDirection: PathView.Positive
- highlightMoveDuration: 100
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.AutoFlickIfNeeded
+ snapMode: ListView.SnapToItem
- path: Path {
- startX: control.count ? control.availableWidth / control.count / 2 : 0
- startY: control.availableHeight / 2
- PathLine {
- x: control.count ? control.availableWidth + (control.availableWidth / control.count / 2) : 0
- y: control.availableHeight / 2
- }
- }
+ highlightMoveDuration: 100
+ highlightRangeMode: ListView.ApplyRange
+ preferredHighlightBegin: 48
+ preferredHighlightEnd: width - 48
}
background: Rectangle {