on xenial help sign in
Merge from trunk
commit45cab7a4a817a146693302fe73edf0e148ac335d authorMichael Terry <michael.terry@canonical.com> dateFri 21 Mar 2014, 11:47 (13 years ago) parent1f7b8c309499de
7 files changed+103−10
debian/changelog+19 plugins/DashViews/listviewwithpageheader.cpp+3 plugins/Unity/Indicators/qml/MenuItemFactory.qml+7−1 qml/Components/VolumeControl.qml+6−2 qml/Panel/IndicatorRow.qml+1−1 tests/plugins/DashViews/listviewwithpageheadertest.cpp+20 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+47−6
debian/changelog+19
@@ -1,3 +1,22 @@
1+unity8 (7.84+14.04.20140319.1-0ubuntu1) trusty; urgency=low
2+
3+ [ Michał Sawicz ]
4+ * Work around bug #1293478 - make sure to send ints, not doubles for
5+ volume control. (LP: #1293478)
6+
7+ [ Nick Dedekind ]
8+ * Fixed binding being cleared when manually changing slider value
9+ (lp#1283191). (LP: #1283191)
10+
11+ [ Albert Astals ]
12+ * Fix indicators highlight position on 5.2 We need to take into
13+ account the list originX if we're using the list delegates x outside
14+ the list itself
15+ * LVWPH: Make sure m_firstVisibleIndex is correctly set on
16+ removeNonVisibleItems
17+
18+ -- Ubuntu daily release <ps-jenkins@lists.canonical.com> Wed, 19 Mar 2014 16:40:20 +0000
19+
120unity8 (7.84+14.04.20140317.2-0ubuntu1) trusty; urgency=low
221
322 [ CI bot ]
plugins/DashViews/listviewwithpageheader.cpp+3
@@ -772,6 +772,9 @@ bool ListViewWithPageHeader::removeNonVisibleItems(qreal bufferFrom, qreal buffe
772772 ++i;
773773 }
774774 }
775+ if (!foundVisible) {
776+ m_firstVisibleIndex = -1;
777+ }
775778 if (m_firstVisibleIndex != oldFirstVisibleIndex) {
776779 adjustMinYExtent();
777780 }
plugins/Unity/Indicators/qml/MenuItemFactory.qml+7−1
@@ -77,6 +77,7 @@ Item {
7777 property var menuModel: menuFactory.menuModel
7878 property int menuIndex: -1
7979 property var extendedData: menuData && menuData.ext || undefined
80+ property var serverValue: getExtendedProperty(menuData, "actionState", undefined)
8081
8182 text: menuData && menuData.label || ""
8283 iconSource: menuData && menuData.icon || ""
@@ -91,7 +92,6 @@ Item {
9192 }
9293 return maximum;
9394 }
94− value: menuData && menuData.actionState || 0.0
9595 enabled: menuData && menuData.sensitive || false
9696
9797 onMenuModelChanged: {
@@ -100,6 +100,12 @@ Item {
100100 onMenuIndexChanged: {
101101 loadAttributes();
102102 }
103+ onServerValueChanged: {
104+ // value can be changed by slider, so a binding won't work.
105+ if (serverValue !== undefined) {
106+ value = serverValue;
107+ }
108+ }
103109 onUpdated: {
104110 menuModel.changeState(menuIndex, value);
105111 }
qml/Components/VolumeControl.qml+6−2
@@ -22,6 +22,10 @@ Item {
2222 objectName: "volumeControl"
2323 visible: false
2424
25+ // TODO Work around http://pad.lv/1293478 until qmenumodel knows to cast
26+ readonly property int stepUp: 1
27+ readonly property int stepDown: -1
28+
2529 QDBusActionGroup {
2630 id: actionGroup
2731 busType: 1
@@ -32,11 +36,11 @@ Item {
3236 }
3337
3438 function volumeUp() {
35− actionGroup.actionObject.activate(1);
39+ actionGroup.actionObject.activate(stepUp);
3640 }
3741
3842 function volumeDown() {
39− actionGroup.actionObject.activate(-1);
43+ actionGroup.actionObject.activate(stepDown);
4044 }
4145
4246 Component.onCompleted: actionGroup.start()
qml/Panel/IndicatorRow.qml+1−1
@@ -137,7 +137,7 @@ Item {
137137 anchors.top: row.bottom
138138 visible: indicatorRow.currentItem != null
139139
140− property real intendedX: row.x + (indicatorRow.currentItem != null ? indicatorRow.currentItem.x + centerOffset : 0)
140+ property real intendedX: row.x + (indicatorRow.currentItem != null ? (indicatorRow.currentItem.x - row.originX) + centerOffset : 0)
141141 x: intendedX >= row.x ? (intendedX + width <= row.x + row.width ? intendedX : row.x + row.width - width) : row.x // listview boundaries
142142 width: indicatorRow.currentItem != null ? indicatorRow.currentItem.width : 0
143143
tests/plugins/DashViews/listviewwithpageheadertest.cpp+20
@@ -1887,6 +1887,26 @@ private Q_SLOTS:
18871887 QTRY_COMPARE(lvwph->m_visibleItems.count(), 1);
18881888 }
18891889
1890+ void testResizeScrolledBigItem()
1891+ {
1892+ QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 6));
1893+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 0);
1894+
1895+ QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 10000));
1896+ changeContentY(8000);
1897+
1898+ // Pretend the list is busy requesting some other index
1899+ lvwph->m_asyncRequestedIndex = 4;
1900+
1901+ lvwph->m_visibleItems[0]->m_item->setHeight(100);
1902+ // This resize makes the item go outside the viewport so its deleted
1903+ QCOMPARE(lvwph->m_visibleItems.count(), 0);
1904+ QCOMPARE(lvwph->m_firstVisibleIndex, -1);
1905+ // On the next polish the item will be readded
1906+ QTRY_COMPARE(lvwph->m_visibleItems.count(), 1);
1907+ QTRY_COMPARE(lvwph->m_firstVisibleIndex, 0);
1908+ }
1909+
18901910private:
18911911 QQuickView *view;
18921912 ListViewWithPageHeader *lvwph;
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+47−6
@@ -148,14 +148,14 @@ Item {
148148
149149 function test_create_sliderMenu_data() {
150150 return [
151− {label: "testLabel1", enabled: false, minValue: 0, maxValue: 100, value: 10.5 },
152− {label: "testLabel2", enabled: true, minValue: 0, maxValue: 100, value: 100 },
151+ {tag: "disabled", enabled: false, minValue: 0, maxValue: 100, value1: 10.5, value2: 22 },
152+ {tag: "enabled", enabled: true, minValue: 0, maxValue: 100, value1: 100, value2: 50 },
153153 ];
154154 }
155155
156156 function test_create_sliderMenu(data) {
157157 menuData.type = "com.canonical.indicator.slider"
158− menuData.label = data.label;
158+ menuData.label = data.tag;
159159 menuData.sensitive = data.enabled;
160160 menuData.ext = {
161161 'minIcon': "file:///testMinIcon",
@@ -163,20 +163,61 @@ Item {
163163 'minValue': data.minValue,
164164 'maxValue': data.maxValue
165165 };
166− menuData.actionState = data.value;
166+ menuData.actionState = data.value1;
167167
168168 loader.data = menuData;
169169 loader.sourceComponent = factory.load(menuData);
170170 tryCompareFunction(function() { return loader.item != undefined; }, true);
171171 compare(loader.item.objectName, "sliderMenu", "Should have created a slider menu");
172172
173− compare(loader.item.text, data.label, "Label does not match data");
173+ compare(loader.item.text, data.tag, "Label does not match data");
174174 compare(loader.item.minIcon, "file:///testMinIcon", "MinIcon does not match data");
175175 compare(loader.item.maxIcon, "file:///testMaxIcon", "MaxIcon does not match data");
176176 compare(loader.item.minimumValue, data.minValue, "MinValue does not match data");
177177 compare(loader.item.maximumValue, data.maxValue, "MaxValue does not match data");
178− compare(loader.item.value, data.value, "Value does not match data");
179178 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
179+ compare(loader.item.value, data.value1, "Value does not match data");
180+
181+ menuData.actionState = data.value2;
182+ compare(loader.item.value, data.value2, "Value does not match new data");
183+ }
184+
185+ function test_create_sliderMenu_lp1283191_data() {
186+ return [
187+ {tag: "disabled", enabled: false, minValue: 0, maxValue: 100, value1: 10.5, value2: 22, manualValue: 0 },
188+ {tag: "enabled", enabled: true, minValue: 0, maxValue: 100, value1: 100, value2: 50, manualValue: 30 },
189+ {tag: "test-zero", enabled: true, minValue: 0, maxValue: 100, value1: 10, value2: 0, manualValue: 20 },
190+ ];
191+ }
192+
193+ function test_create_sliderMenu_lp1283191(data) {
194+ menuData.type = "com.canonical.indicator.slider"
195+ menuData.label = data.tag;
196+ menuData.sensitive = data.enabled;
197+ menuData.ext = {
198+ 'minIcon': "file:///testMinIcon",
199+ 'maxIcon': "file:///testMaxIcon",
200+ 'minValue': data.minValue,
201+ 'maxValue': data.maxValue
202+ };
203+ menuData.actionState = data.value1;
204+
205+ loader.data = menuData;
206+ loader.sourceComponent = factory.load(menuData);
207+ tryCompareFunction(function() { return loader.item != undefined; }, true);
208+ compare(loader.item.value, data.value1, "Value does not match data");
209+
210+ var slider = findChild(loader.item, "slider");
211+ verify(slider !== null);
212+
213+ slider.value = data.manualValue;
214+ compare(loader.item.value, data.manualValue, "Slider value does not match manual set value");
215+
216+ menuData.actionState = data.value2;
217+ compare(loader.item.value, data.value2, "Value does not match new data");
218+
219+ menuData.actionState = undefined;
220+ compare(loader.item.value, data.value2, "Undefined state should not update slider value");
180221 }
181222
182223 function test_create_buttonMenu_data() {