on xenial help sign in
Added server value re-assertion + test
e975b7fNick Dedekind
qml/Panel/Indicators/MenuItemFactory.qml+32−8
@@ -290,12 +290,24 @@ Item {
290 checked: serverChecked
290 checked: serverChecked
291 highlightWhenPressed: false
291 highlightWhenPressed: false
292
292
293− onServerCheckedChanged: {
293+ onServerCheckedChanged: updateFromServer()
294− // value can be changed by menu, so a binding won't work.
295− checked = serverChecked;
296− }
297 onTriggered: {
294 onTriggered: {
298 menuModel.activate(menuIndex);
295 menuModel.activate(menuIndex);
296+ resyncTimer.restart();
297+ }
298+
299+ // value can be changed by menu, so a binding won't work.
300+ function updateFromServer() {
301+ resyncTimer.stop();
302+ if (checked != serverChecked) {
303+ checked = serverChecked;
304+ }
305+ }
306+
307+ Timer {
308+ id: resyncTimer
309+ interval: 1500
310+ onTriggered: updateFromServer()
299 }
311 }
300 }
312 }
301 }
313 }
@@ -315,12 +327,24 @@ Item {
315 checked: serverChecked
327 checked: serverChecked
316 highlightWhenPressed: false
328 highlightWhenPressed: false
317
329
318− onServerCheckedChanged: {
330+ onServerCheckedChanged: updateFromServer()
319− // value can be changed by menu, so a binding won't work.
320− checked = serverChecked;
321− }
322 onTriggered: {
331 onTriggered: {
323 menuModel.activate(menuIndex);
332 menuModel.activate(menuIndex);
333+ resyncTimer.restart();
334+ }
335+
336+ // value can be changed by menu, so a binding won't work.
337+ function updateFromServer() {
338+ resyncTimer.stop();
339+ if (checked != serverChecked) {
340+ checked = serverChecked;
341+ }
342+ }
343+
344+ Timer {
345+ id: resyncTimer
346+ interval: 1500
347+ onTriggered: updateFromServer()
324 }
348 }
325 }
349 }
326 }
350 }
tests/qmltests/Panel/Indicators/tst_MenuItemFactory.qml+17−1
@@ -740,7 +740,7 @@ Item {
740 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
740 compare(loader.item.enabled, data.enabled, "Enabled does not match data");
741 }
741 }
742
742
743− function test_lp1336715_broken_checkbox_bindings() {
743+ function test_lp1336715_broken_switch_bindings() {
744 menuData.type = "com.canonical.indicator.switch";
744 menuData.type = "com.canonical.indicator.switch";
745 menuData.sensitive = true;
745 menuData.sensitive = true;
746 menuData.isToggled = false;
746 menuData.isToggled = false;
@@ -758,5 +758,21 @@ Item {
758
758
759 compare(loader.item.checked, false, "Server updates no longer working");
759 compare(loader.item.checked, false, "Server updates no longer working");
760 }
760 }
761+
762+ // test that the server value is re-aserted if it is not confirmed.
763+ function test_lp1336715_switch_server_value_reassertion() {
764+ menuData.type = "com.canonical.indicator.switch";
765+ menuData.sensitive = true;
766+ menuData.isToggled = false;
767+
768+ loader.data = menuData;
769+ loader.sourceComponent = factory.load(menuData);
770+
771+ compare(loader.item.checked, false, "Loader did not load check state");
772+ mouseClick(loader.item,
773+ loader.item.width / 2, loader.item.height / 2);
774+ compare(loader.item.checked, true, "Clicking switch menu should toggle check");
775+ tryCompare(loader.item, "checked", false);
776+ }
761 }
777 }
762}
778}