Skip to content

Commit c1345ef

Browse files
committed
do not set currentIndex to null position when focusedChild changes
implement accurate getItemPosition
1 parent ba67f47 commit c1345ef

File tree

2 files changed

+29
-11
lines changed

2 files changed

+29
-11
lines changed

core/BaseView.qml

+6-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,10 @@ BaseLayout {
107107
}
108108

109109
onFocusedChildChanged: {
110-
var idx = this._items.indexOf(this.focusedChild)
110+
if (value === null)
111+
return
112+
113+
var idx = this._items.indexOf(value)
111114
if (idx >= 0)
112115
this.currentIndex = idx
113116
}
@@ -141,6 +144,8 @@ BaseLayout {
141144
}
142145

143146
onCurrentIndexChanged: {
147+
if (this.trace)
148+
log("onCurrentIndexChanged", value)
144149
this.focusCurrent()
145150
}
146151

core/ListView.qml

+23-10
Original file line numberDiff line numberDiff line change
@@ -76,22 +76,35 @@ BaseView {
7676
function getItemPosition(idx) {
7777
var items = this._items
7878
var item = items[idx]
79+
var sizes = this._sizes
80+
var horizontal = this.orientation === this.Horizontal
81+
var spacing = this.spacing
82+
7983
if (!item) {
84+
var refSize
8085
var x = 0, y = 0, w = 0, h = 0
81-
for(var i = idx; i >= 0; --i) {
82-
if (items[i]) {
86+
for(var i = 0; i < idx; ++i)
87+
{
88+
if (!item)
8389
item = items[i]
84-
x = item.viewX + item.x
85-
y = item.viewY + item.y
90+
91+
if (item) {
8692
w = item.width
8793
h = item.height
88-
break
8994
}
90-
}
91-
var missing = idx - i
92-
if (missing > 0) {
93-
x += missing * (w + this.spacing)
94-
y += missing * (h + this.spacing)
95+
var s = sizes[i]
96+
if (refSize === undefined || s > 0)
97+
refSize = s
98+
if (s === undefined)
99+
s = refSize
100+
if (s === undefined)
101+
s = 0
102+
103+
if (horizontal) {
104+
x += s + spacing
105+
} else {
106+
y += s + spacing
107+
}
95108
}
96109
return [x, y, w, h]
97110
}

0 commit comments

Comments
 (0)