status/backlight: Fix keyboard backlight infinite loop
The logic could enter an infinite loop because it tried to
propagate local changes to g-s-d that were caused by signals sent
by g-s-d. For example:
1. slider is set to 50
2. Set(50) dbus call is sent
3. slider is set to 51
4. Set(51) dbus call is sent
5. PropertiesChanged arrives due to Set(50)
6. this._sliderItem.value is set to 50
7. notify::value is emitted from this._sliderItem
8. Set(50) dbus call is sent
9. PropertiesChanged arrives due to Set(51)
10. this._sliderItem.value is set to 51
11. notify::value is emitted from this._sliderItem
12. Set(51) dbus call is sent
To alleviate this issue, block signal handlers when the local state is
changed due to a remote event.
Furthermore, since the values of the two control widgets are synced,
every local change is emitted twice, which is not ideal since it means
two dbus calls per local change. To rectify that, only change
the remote brightness when the particular widget is visible, i.e.
it is the one that the user actually controls.
Fixes #7111 (closed)
Edited by Barnabás Pőcze