Files
Modus/modules/panel/components/enhanced_system_tray.py
T
sankalp e97311e2b0 feat(modules): restructure battery UI and add dynamic layout rebuilding
New Features
- Introduce `get_battery_icon_file` to generate battery icons based on percentage and charging state.
- Add fallback Bluetooth control using `rfkill` when Fabric Bluetooth fails.

Enhancements
- Refactor layout management with `_rebuild_layout_from_config` and dynamic indicator instantiation.
- Replace large `EnergyModeButton` class with lightweight utility functions.
- Simplify notification icon updates using `dynamic_file`.

Bug Fixes
- No explicit bug fixes; changes focus on feature additions and refactoring.
2026-02-26 06:24:44 +05:45

59 lines
1.9 KiB
Python

"""
Simplified System Tray Icon Patch
Focuses on loading icons from absolute file paths and fixing tooltip naming.
"""
from pathlib import Path
from fabric.system_tray.widgets import SystemTrayItem
from fabric.utils import GdkPixbuf, GLib
def patched_do_update_properties(self, *_):
# Determine the icon name to use
icon_name = self._item.icon_name
attention_icon_name = self._item.attention_icon_name
if self._item.status == "NeedsAttention" and attention_icon_name:
preferred_icon_name = attention_icon_name
else:
preferred_icon_name = icon_name
# 1. Try the standard fabric/GTK implementation first
pixbuf = self._item.get_preferred_icon_pixbuf(self._icon_size)
# 2. If standard lookup fails, try your specific absolute path logic
if pixbuf is None and preferred_icon_name:
path = Path(preferred_icon_name)
if path.is_absolute() and path.exists():
try:
target_size = self._icon_size if self._icon_size else 24
pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(
str(path),
target_size,
target_size,
True, # Preserve aspect ratio
)
except GLib.GError:
pixbuf = None
# Apply the resulting pixbuf or the fallback "missing" icon
if pixbuf:
self._image.set_from_pixbuf(pixbuf)
else:
self._image.set_from_icon_name("image-missing", self._icon_size)
tooltip = self._item.tooltip
self.set_tooltip_markup(
tooltip.description
or tooltip.title
or (self._item.title.title() if self._item.title else None)
or "Unknown"
)
def apply_enhanced_system_tray():
# Replace the method on the class so all tray items use this logic
SystemTrayItem.do_update_properties = patched_do_update_properties