@@ -290,12 +290,26 @@ Item {
290290 checked: serverChecked
291291 highlightWhenPressed: false
292292
293− onServerCheckedChanged: {
294− // value can be changed by menu, so a binding won't work.
295− checked = serverChecked;
296− }
293+ onServerCheckedChanged: updateFromServer()
297294 onTriggered: {
298295 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+ // Server value is not guaranteed to change to what we expect from an activation.
308+ // In this case, we need to re-assert that we are presenting the UI with the set backend value.
309+ Timer {
310+ id: resyncTimer
311+ interval: 1500
312+ onTriggered: updateFromServer()
299313 }
300314 }
301315 }
@@ -315,12 +329,26 @@ Item {
315329 checked: serverChecked
316330 highlightWhenPressed: false
317331
318− onServerCheckedChanged: {
319− // value can be changed by menu, so a binding won't work.
320− checked = serverChecked;
321− }
332+ onServerCheckedChanged: updateFromServer()
322333 onTriggered: {
323334 menuModel.activate(menuIndex);
335+ resyncTimer.restart();
336+ }
337+
338+ // value can be changed by menu, so a binding won't work.
339+ function updateFromServer() {
340+ resyncTimer.stop();
341+ if (checked != serverChecked) {
342+ checked = serverChecked;
343+ }
344+ }
345+
346+ // Server value is not guaranteed to change to what we expect from an activation.
347+ // In this case, we need to re-assert that we are presenting the UI with the set backend value.
348+ Timer {
349+ id: resyncTimer
350+ interval: 1500
351+ onTriggered: updateFromServer()
324352 }
325353 }
326354 }