refactor(brightness): replace ddcutil with logind DBus proxy
- Use org.freedesktop.login1.Session.SetBrightness for kernel backlight - Remove ddcutil dependency entirely - Fix OSD: use signal percentage value directly (like audio OSD) - Fix controlcenter: stop dividing percentage by max_screen again
This commit is contained in:
3 files changed
+121
-253
No files matched your search
@@ -854,18 +854,11 @@ class ModusControlCenter(AppletWindow):
|
||||
get_brightness_service().screen_brightness = brightness_value
|
||||
self._updating_brightness = False
|
||||
|
||||
def brightness_changed(self, _, brightness_value):
|
||||
def brightness_changed(self, _, brightness_percentage):
|
||||
if not self._signals_connected or self._updating_brightness:
|
||||
return
|
||||
|
||||
if get_brightness_service().max_screen > 0:
|
||||
brightness_percentage = int(
|
||||
(brightness_value / get_brightness_service().max_screen) * 100
|
||||
)
|
||||
|
||||
GLib.idle_add(
|
||||
lambda: self.brightness_scale.set_value(brightness_percentage)
|
||||
)
|
||||
GLib.idle_add(lambda: self.brightness_scale.set_value(brightness_percentage))
|
||||
|
||||
def on_volume_scroll(self, widget, event):
|
||||
if not self._signals_connected:
|
||||
|
||||
@@ -14,6 +14,7 @@ class BrightnessOSDContainer(BaseOSDContainer):
|
||||
def __init__(self, window, **kwargs):
|
||||
super().__init__(window, **kwargs)
|
||||
self.brightness_service = Brightness()
|
||||
self._last_percent = None
|
||||
self._setup_specific_components()
|
||||
self._connect_specific_signals()
|
||||
|
||||
@@ -39,35 +40,34 @@ class BrightnessOSDContainer(BaseOSDContainer):
|
||||
self.add(self.scale)
|
||||
|
||||
def _connect_specific_signals(self):
|
||||
self.brightness_service.connect("screen", self._on_screen_brightness_changed)
|
||||
self.brightness_service.connect("screen", self._on_brightness_changed)
|
||||
|
||||
def _on_screen_brightness_changed(self, _sender, value, *_args):
|
||||
self.update()
|
||||
def _on_brightness_changed(self, _sender, percent, *_args):
|
||||
if self._last_percent != percent:
|
||||
self._last_percent = percent
|
||||
self.update()
|
||||
|
||||
def _get_normalized_brightness(self):
|
||||
return (
|
||||
self.brightness_service.screen_brightness
|
||||
/ self.brightness_service.max_screen
|
||||
) * 100
|
||||
def _sync_with_service(self):
|
||||
raw = self.brightness_service.screen_brightness
|
||||
max_br = self.brightness_service.max_screen
|
||||
self._last_percent = int((raw / max_br) * 100) if max_br > 0 and raw >= 0 else 0
|
||||
self.scale.set_value(self._last_percent)
|
||||
self._update_display()
|
||||
|
||||
def _update_display(self):
|
||||
normalized = self._get_normalized_brightness()
|
||||
level = 0 if normalized == 0 else min(math.ceil(normalized / 33), 3)
|
||||
percent = self._last_percent if self._last_percent is not None else 0
|
||||
level = 0 if percent == 0 else min(math.ceil(percent / 33), 3)
|
||||
|
||||
self.osd_window_image.set_from_file(f"brightness/brightness-{level}.svg")
|
||||
|
||||
self.scale.animate_value(normalized)
|
||||
self.scale.animate_value(percent)
|
||||
|
||||
def update(self, *_):
|
||||
self._update_display()
|
||||
super().update()
|
||||
|
||||
def destroy(self):
|
||||
"""Disconnect signals from Brightness service"""
|
||||
try:
|
||||
self.brightness_service.disconnect_by_func(
|
||||
self._on_screen_brightness_changed
|
||||
)
|
||||
self.brightness_service.disconnect_by_func(self._on_brightness_changed)
|
||||
except Exception as e:
|
||||
logger.error(f"An error occurred: {e}")
|
||||
super().destroy()
|
||||
Reference in new issue
Block a user