on xenial help sign in
Fixed slider manual update clearing value binding
commita576f0bedddc965ee2ebd20b9efa55a1f2b14fe6 authorNick Dedekind <nicholas.dedekind@gmail.com> dateMon 17 Mar 2014, 13:13 (13 years ago) parentdf0623c
2 files changed+46−5
plugins/Unity/Indicators/qml/MenuItemFactory.qml+5−1 tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+41−4
plugins/Unity/Indicators/qml/MenuItemFactory.qml+5−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: menuData && menuData.actionState || 0.0
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,10 @@ Item {
100100 onMenuIndexChanged: {
101101 loadAttributes();
102102 }
103+ onServerValueChanged: {
104+ // value can be changed by slider, so a binding won't work.
105+ value = serverValue;
106+ }
103107 onUpdated: {
104108 menuModel.changeState(menuIndex, value);
105109 }
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+41−4
@@ -148,8 +148,8 @@ 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+ {label: "testLabel1", enabled: false, minValue: 0, maxValue: 100, value1: 10.5, value2: 22 },
152+ {label: "testLabel2", enabled: true, minValue: 0, maxValue: 100, value1: 100, value2: 50 },
153153 ];
154154 }
155155
@@ -163,7 +163,7 @@ 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);
@@ -175,8 +175,45 @@ Item {
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+ {label: "testLabel1", enabled: false, minValue: 0, maxValue: 100, value1: 10.5, value2: 22, manualValue: 0 },
188+ {label: "testLabel2", enabled: true, minValue: 0, maxValue: 100, value1: 100, value2: 50, manualValue: 30 },
189+ ];
190+ }
191+
192+ function test_create_sliderMenu_lp1283191(data) {
193+ menuData.type = "com.canonical.indicator.slider"
194+ menuData.label = data.label;
195+ menuData.sensitive = data.enabled;
196+ menuData.ext = {
197+ 'minIcon': "file:///testMinIcon",
198+ 'maxIcon': "file:///testMaxIcon",
199+ 'minValue': data.minValue,
200+ 'maxValue': data.maxValue
201+ };
202+ menuData.actionState = data.value1;
203+
204+ loader.data = menuData;
205+ loader.sourceComponent = factory.load(menuData);
206+ tryCompareFunction(function() { return loader.item != undefined; }, true);
207+ compare(loader.item.value, data.value1, "Value does not match data");
208+
209+ var slider = findChild(loader.item, "slider");
210+ verify(slider !== null);
211+
212+ slider.value = data.manualValue;
213+ compare(loader.item.value, data.manualValue, "Slider value does not match manual set value");
214+
215+ menuData.actionState = data.value2;
216+ compare(loader.item.value, data.value2, "Value does not match new data");
180217 }
181218
182219 function test_create_buttonMenu_data() {