@@ -30,6 +30,9 @@ def __init__(self, anchor_widget: GObject.GObject, osd_widget=None, **kwargs):
3030 self .config = cfg .modules
3131 self .osd_widget = osd_widget
3232
33+ self ._updating_brightness_from_service = False
34+ self ._updating_brightness = False
35+
3336 # Check if brightness control is available
3437 self .brightness_available = self ._is_brightness_available ()
3538
@@ -253,7 +256,7 @@ def _bind_microphone(self, *_):
253256 self ._update_mic_from_service ()
254257
255258 def _on_brightness_service (self , * _ ):
256- if not self .brightness_available or self ._brightness_apply_src :
259+ if not self .brightness_available or self ._brightness_apply_src or self . _updating_brightness_from_service :
257260 return # Don't update while we have a pending change
258261 val = self ._get_brightness ()
259262 self .brightness_scale .set_value (val )
@@ -346,6 +349,8 @@ def _apply_mic(self):
346349 def _apply_brightness (self ):
347350 if not self .brightness_available :
348351 return False
352+
353+ self ._updating_brightness_from_service = True
349354 val = int (self .brightness_scale .value )
350355 val = max (0 , min (100 , val ))
351356 # translate percent back to raw units
@@ -355,6 +360,12 @@ def _apply_brightness(self):
355360 if self .osd_widget :
356361 self .osd_widget .show_brightness ()
357362 self ._brightness_apply_src = None
363+
364+ GLib .timeout_add (100 , self .unblock_service_updates )
365+ return False
366+
367+ def _unblock_service_updates (self ):
368+ self ._updating_brightness_from_service = False
358369 return False
359370
360371
@@ -513,11 +524,14 @@ def _apply_scroll_updates(self):
513524 if self .osd_widget :
514525 self .osd_widget .show_audio_microphone ()
515526 elif device == "brightness" and self ._is_brightness_available ():
527+ self ._updating_brightness = True
516528 target = int ((value / 100.0 ) * self .brightness .max_brightness_level )
517529 self .brightness .screen_brightness = target
518530 if self .osd_widget :
519531 self .osd_widget .show_brightness ()
520532
533+ GLib .timeout_add (100 , lambda : setattr (self , '_updating_brightness' , False ))
534+
521535 self ._pending_scroll_updates .clear ()
522536 self ._scroll_debounce_src = None
523537 return False
@@ -564,7 +578,7 @@ def _bind_microphone(self, *_):
564578 self ._update_mic_icon ()
565579
566580 def _on_brightness_changed (self , * _ ):
567- if self ._is_brightness_available ():
581+ if self ._is_brightness_available () and not self . _updating_brightness :
568582 self .icon_brightness .set_text (get_brightness_icon (self ._get_brightness ()))
569583
570584 def _update_speaker_icon (self , * _ ):
0 commit comments