on xenial help sign in
Fixed slider manual update clearing value binding
a576f0bNick Dedekind
plugins/Unity/Indicators/qml/MenuItemFactory.qml+5−1
@@ -77,6 +77,7 @@ Item {
77 property var menuModel: menuFactory.menuModel
77 property var menuModel: menuFactory.menuModel
78 property int menuIndex: -1
78 property int menuIndex: -1
79 property var extendedData: menuData && menuData.ext || undefined
79 property var extendedData: menuData && menuData.ext || undefined
80+ property var serverValue: menuData && menuData.actionState || 0.0
80
81
81 text: menuData && menuData.label || ""
82 text: menuData && menuData.label || ""
82 iconSource: menuData && menuData.icon || ""
83 iconSource: menuData && menuData.icon || ""
@@ -91,7 +92,6 @@ Item {
91 }
92 }
92 return maximum;
93 return maximum;
93 }
94 }
94− value: menuData && menuData.actionState || 0.0
95 enabled: menuData && menuData.sensitive || false
95 enabled: menuData && menuData.sensitive || false
96
96
97 onMenuModelChanged: {
97 onMenuModelChanged: {
@@ -100,6 +100,10 @@ Item {
100 onMenuIndexChanged: {
100 onMenuIndexChanged: {
101 loadAttributes();
101 loadAttributes();
102 }
102 }
103+ onServerValueChanged: {
104+ // value can be changed by slider, so a binding won't work.
105+ value = serverValue;
106+ }
103 onUpdated: {
107 onUpdated: {
104 menuModel.changeState(menuIndex, value);
108 menuModel.changeState(menuIndex, value);
105 }
109 }
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+41−4
@@ -148,8 +148,8 @@ Item {
148
148
149 function test_create_sliderMenu_data() {
149 function test_create_sliderMenu_data() {
150 return [
150 return [
151− {label: "testLabel1", enabled: false, minValue: 0, maxValue: 100, value: 10.5 },
151+ {label: "testLabel1", enabled: false, minValue: 0, maxValue: 100, value1: 10.5, value2: 22 },
152− {label: "testLabel2", enabled: true, minValue: 0, maxValue: 100, value: 100 },
152+ {label: "testLabel2", enabled: true, minValue: 0, maxValue: 100, value1: 100, value2: 50 },
153 ];
153 ];
154 }
154 }
155
155
@@ -163,7 +163,7 @@ Item {
163 'minValue': data.minValue,
163 'minValue': data.minValue,
164 'maxValue': data.maxValue
164 'maxValue': data.maxValue
165 };
165 };
166− menuData.actionState = data.value;
166+ menuData.actionState = data.value1;
167
167
168 loader.data = menuData;
168 loader.data = menuData;
169 loader.sourceComponent = factory.load(menuData);
169 loader.sourceComponent = factory.load(menuData);
@@ -175,8 +175,45 @@ Item {
175 compare(loader.item.maxIcon, "file:///testMaxIcon", "MaxIcon does not match data");
175 compare(loader.item.maxIcon, "file:///testMaxIcon", "MaxIcon does not match data");
176 compare(loader.item.minimumValue, data.minValue, "MinValue does not match data");
176 compare(loader.item.minimumValue, data.minValue, "MinValue does not match data");
177 compare(loader.item.maximumValue, data.maxValue, "MaxValue does not match data");
177 compare(loader.item.maximumValue, data.maxValue, "MaxValue does not match data");
178− compare(loader.item.value, data.value, "Value does not match data");
179 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
178 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");
180 }
217 }
181
218
182 function test_create_buttonMenu_data() {
219 function test_create_buttonMenu_data() {