roundabout,
created on Monday, 29 September 2025, 19:25:19 (1759173919),
received on Monday, 29 September 2025, 19:25:22 (1759173922)
Author identity: Vlad <vlad.muntoiu@gmail.com>
469a0eed608e9d48f4cb0ef8ddec3ce3b40ddfa5
applets/battery/__init__.py
@@ -71,7 +71,7 @@ class BatteryMonitor(panorama_panel.Applet):
self.notification_service = None
self.upower = self.bus.get("org.freedesktop.UPower")
self.button = Gtk.MenuButton()
self.button = Gtk.MenuButton(has_frame=False)
self.icon = Gtk.Image(pixel_size=config.get("icon_size", 24))
self.button.set_child(self.icon)
self.append(self.button)
@@ -82,7 +82,11 @@ class BatteryMonitor(panorama_panel.Applet):
self.critical_notification = None
self.popover = Gtk.Popover()
self.popover_content = Gtk.ListBox()
self.popover_content = Gtk.ListBox(selection_mode=Gtk.SelectionMode.NONE)
self.popover_content.set_size_request(320, -1)
self.popover.set_child(self.popover_content)
self.button.set_popover(self.popover)
self.update_batteries()
GLib.timeout_add_seconds(config.get("refresh_interval", 10), self.update_batteries)
@@ -105,11 +109,28 @@ class BatteryMonitor(panorama_panel.Applet):
if device.State == 1:
any_charging = True
box = Gtk.Box.new(Gtk.Orientation.VERTICAL, 8)
charge_fraction = device.Energy / device.EnergyFull
meter = Gtk.ProgressBar(show_text=True, fraction=charge_fraction)
box.append(meter)
charge_label = Gtk.Label.new(_("{current} Wh of {full} Wh").format(current=locale.format_string("%.1f", device.Energy), full=locale.format_string("%.1f", device.EnergyFull)))
charge_label.set_halign(Gtk.Align.CENTER)
charge_label.set_xalign(0.5)
box.append(charge_label)
name_label = Gtk.Label.new(device.Vendor + " " + device.Model)
name_label.set_halign(Gtk.Align.CENTER)
name_label.set_xalign(0.5)
box.prepend(name_label)
box.set_margin_start(8)
box.set_margin_end(8)
box.set_margin_top(8)
box.set_margin_bottom(8)
row = Gtk.ListBoxRow(child=box, activatable=False)
self.popover_content.append(row)
if not max_energy:
return False
print(total_energy, max_energy)
self.button.set_tooltip_text(f"{locale.format_string("%d", total_energy / max_energy * 1000)}‰")
self.icon.set_from_icon_name(get_battery_icon(total_energy / max_energy, any_charging))