roundabout,
created on Saturday, 26 July 2025, 18:38:36 (1753555116),
received on Saturday, 26 July 2025, 18:38:43 (1753555123)
Author identity: vlad <vlad.muntoiu@gmail.com>
85c4a34394e3646e53f20fa28ab7926a2cf13d3d
applets/wf-window-list/__init__.py
@@ -40,8 +40,7 @@ class WindowState:
@classmethod def from_state_array(cls, array: bytes): values = split_bytes_into_ints(array) instance = WindowState(False, False, False, False)print(values)instance = cls(False, False, False, False)for value in values: match value: case 0:
@@ -63,7 +62,9 @@ class WindowButton(Gtk.ToggleButton):
self.window_id = window_id self.set_has_frame(False) self.label = Gtk.Label() self.icon = Gtk.Image.new_from_icon_name("application-x-executable")box = Gtk.Box() box.append(self.icon)box.append(self.label) self.set_child(box)
@@ -79,6 +80,25 @@ class WindowButton(Gtk.ToggleButton):
def window_title(self, value): self.label.set_text(value) def set_icon_from_app_id(self, app_id): # Try getting an icon from the correct theme app_ids = app_id.split() icon_theme = Gtk.IconTheme() for app_id in app_ids: self.get_parent().print_log(app_id) if icon_theme.has_icon(app_id): self.icon.set_from_icon_name(app_id) return # If that doesn't work, try getting one from .desktop files for app_id in app_ids: desktop_file = Gio.DesktopAppInfo.new(app_id + ".desktop") if desktop_file: self.icon.set_from_gicon(desktop_file.get_icon()) return class WFWindowList(panorama_panel.Applet): name = "Wayfire window list"
@@ -125,9 +145,8 @@ class WFWindowList(panorama_panel.Applet):
return True def on_global(self, registry, name, interface, version): print(f"Global: {interface} (v{version})")if interface == "zwlr_foreign_toplevel_manager_v1": print("Interface registered")self.print_log("WFWindowList: Interface registered")self.manager = registry.bind(name, ZwlrForeignToplevelManagerV1, version) self.manager.dispatcher["toplevel"] = self.on_new_toplevel self.manager.dispatcher["finished"] = lambda *a: print("Toplevel manager finished")
@@ -136,14 +155,12 @@ class WFWindowList(panorama_panel.Applet):
def on_new_toplevel(self, manager: ZwlrForeignToplevelManagerV1, handle: ZwlrForeignToplevelHandleV1): print("Toplevel received")handle.dispatcher["title"] = lambda h, title: self.on_title_changed(h, title) #handle.dispatcher["app_id"] = lambda h, app_id: self.on_app_id_changed(h, app_id)handle.dispatcher["app_id"] = lambda h, app_id: self.on_app_id_changed(h, app_id)handle.dispatcher["state"] = lambda h, states: self.on_state_changed(h, states) handle.dispatcher["closed"] = lambda h: self.on_closed(h) def on_title_changed(self, handle, title): print(f"Window title: {title}")if handle not in self.toplevel_buttons: button = WindowButton(handle, title) button.set_group(self.initial_button)
@@ -157,14 +174,17 @@ class WFWindowList(panorama_panel.Applet):
def on_state_changed(self, handle, states): if handle in self.toplevel_buttons: state_info = WindowState.from_state_array(states) print(state_info)button = self.toplevel_buttons[handle] if state_info.focused: print("focused")button.set_active(True) else: self.initial_button.set_active(True) def on_app_id_changed(self, handle, app_id): if handle in self.toplevel_buttons: button = self.toplevel_buttons[handle] button.set_icon_from_app_id(app_id) def on_closed(self, handle): if handle in self.toplevel_buttons: self.remove(self.toplevel_buttons[handle])
shared/panorama_panel.py
@@ -52,6 +52,10 @@ class Applet(Gtk.Box):
def restore_drag(self): self.remove_controller(self.drag_source) @classmethod def print_log(cls, *args, **kwargs): print(f"{cls.__name__}:", *args, **kwargs) def track_popover(popover: Gtk.Popover): popover.connect("show", lambda *args: _popover_shown(popover))