roundabout,
created on Sunday, 17 August 2025, 21:12:15 (1755465135),
received on Sunday, 17 August 2025, 21:12:22 (1755465142)
Author identity: Vlad <vlad.muntoiu@gmail.com>
ba83daa5545c467f190aa41d27897a13dbf5f861
applets/app-menu/__init__.py
@@ -51,8 +51,6 @@ custom_css = """
} .no-menu-item-padding:dir(rtl) { locale.bindtextdomain("panorama-app-menu", module_directory / "locale")_ = lambda x: locale.dgettext("panorama-app-menu", x)padding-right: 0; } """
applets/wf-window-list/__init__.py
@@ -361,6 +361,14 @@ class WFWindowList(panorama_panel.Applet):
# Wayfire raises Exception itself, so it cannot be narrowed down self.wf_socket = None def get_wf_output_by_name(self, name): if not self.wf_socket: return None for output in self.wf_socket.list_outputs(): if output["name"] == name: return output return None def on_wf_event(self, source, condition): if condition & GLib.IO_IN: try:
@@ -369,8 +377,7 @@ class WFWindowList(panorama_panel.Applet):
match event: case "view-workspace-changed": view = message.get("view", {}) output = self.wf_socket.get_output(self.get_root().monitor_index + 1)if view["output-id"] == self.get_root().monitor_index + 1:if view["output-name"] == self.get_root().monitor_name:current_workspace = output["workspace"]["x"], output["workspace"]["y"] if not self.show_only_this_wf_workspace or (message["to"]["x"], message["to"]["y"]) == current_workspace: if self.toplevel_buttons_by_wf_id[view["id"]].get_parent() is None:
@@ -380,8 +387,8 @@ class WFWindowList(panorama_panel.Applet):
# Remove out-of-workspace window self.remove(self.toplevel_buttons_by_wf_id[view["id"]]) case "wset-workspace-changed": output_id = self.get_root().monitor_index + 1if message["wset-data"]["output-id"] == output_id:output_name = self.get_root().monitor_name if message["wset-data"]["output-name"] == output_name:# It has changed on this monitor; refresh the window list self.filter_to_wf_workspace()
@@ -424,7 +431,7 @@ class WFWindowList(panorama_panel.Applet):
if not self.show_only_this_wf_workspace: return output = self.wf_socket.get_output(self.get_root().monitor_index + 1)output = self.get_wf_output_by_name(self.get_root().monitor_name)for wf_id, button in self.toplevel_buttons_by_wf_id.items(): view = self.wf_socket.get_view(wf_id) mid_x = view["geometry"]["x"] + view["geometry"]["width"] / 2
@@ -517,6 +524,10 @@ class WFWindowList(panorama_panel.Applet):
button.set_layout_manager(WindowButtonLayoutManager(self.window_button_options)) button.connect("clicked", self.on_button_click) self.toplevel_buttons[handle] = button else: button = self.toplevel_buttons[handle] if output == self.my_output:self.append(button) self.set_all_rectangles()
config.yaml
@@ -7,50 +7,30 @@ panels:
can_capture_keyboard: false applets: left: - AppMenu:category_mappings:Utility:menu_name: Accessoriesicon: applications-accessoriesDevelopment:menu_name: Programmingicon: applications-developmentGame:menu_name: Gamesicon: applications-gamesGraphics:menu_name: Graphicsicon: applications-graphicsNetwork:menu_name: Networkicon: applications-internetAudioVideo:menu_name: Multimediaicon: applications-multimediaOffice:menu_name: Officeicon: applications-officeScience:menu_name: Scienceicon: applications-scienceEducation:menu_name: Educationicon: applications-educationSystem:menu_name: Systemicon: applications-systemSettings:menu_name: Settingsicon: preferences-desktopOther:menu_name: Othericon: applications-othertrigger_name: app-menuicon_name: start-here-symboliccentre:- NotifierApplet: {}- WFWindowList: max_button_width: 256.0 show_only_this_wf_workspace: true show_only_this_output: true centre: [] right: #- Volume: {} - ClockApplet: formatting: '%T, %a %-d %b %Y' - position: top monitor: 1 size: 40 autohide: false hide_time: 300 can_capture_keyboard: false applets: left: - WFWindowList: max_button_width: 256.0 show_only_this_wf_workspace: true show_only_this_output: true centre: []right: - Volume: {}#- Volume: {}- ClockApplet: formatting: '%T, %a %-d %b %Y' - position: bottom
main.py
@@ -24,6 +24,7 @@ import sys
import importlib import time import traceback import faulthandlerimport typing import locale from itertools import accumulate, chain
@@ -32,6 +33,8 @@ import ruamel.yaml as yaml
from pywayland.client import Display from pywayland.protocol.wayland import WlRegistry, WlSeat, WlSurface, WlCompositor faulthandler.enable() os.environ["GI_TYPELIB_PATH"] = "/usr/local/lib/x86_64-linux-gnu/girepository-1.0" from ctypes import CDLL
@@ -339,14 +342,14 @@ POSITION_TO_LAYER_SHELL_EDGE = {
class Panel(Gtk.Window): def __init__(self, application: Gtk.Application, monitor: Gdk.Monitor, position: Gtk.PositionType = Gtk.PositionType.TOP, size: int = 40, monitor_index: int = 0, autohide: bool = False, hide_time: int = 0, can_capture_keyboard: bool = False):def __init__(self, application: Gtk.Application, monitor: Gdk.Monitor, position: Gtk.PositionType = Gtk.PositionType.TOP, size: int = 40, autohide: bool = False, hide_time: int = 0, can_capture_keyboard: bool = False):super().__init__(application=application) self.drop_motion_controller = None self.motion_controller = None self.set_decorated(False) self.position = None self.autohide = None self.monitor_index = monitor_indexself.monitor_name = monitor.get_connector()self.hide_time = None self.can_capture_keyboard = can_capture_keyboard self.open_popovers: set[int] = set()
@@ -620,7 +623,7 @@ class PanoramaPanel(Gtk.Application):
hide_time = panel_data["hide_time"] can_capture_keyboard = panel_data["can_capture_keyboard"] panel = Panel(self, monitor, position, size, monitor_index, autohide, hide_time, can_capture_keyboard)panel = Panel(self, monitor, position, size, autohide, hide_time, can_capture_keyboard)self.panels.append(panel) print(f"{size}px panel on {position} edge of monitor {monitor_index}, autohide is {autohide} ({hide_time}ms)")