by roundabout, Friday, 14 August 2026, 09:45:15 (1786700715), pushed by roundabout, Friday, 14 August 2026, 09:45:19 (1786700719)
Author identity: Vlad <vlad.muntoiu@gmail.com>
09ebe71b695ff4c51eed9789885043be35c2bbee
.idea/panorama-panel.iml
@@ -1,12 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/shared" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/shared/panorama_panel.py" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/.venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.12 (panorama-panel)" jdkType="Python SDK" />
<orderEntry type="jdk" jdkName="Python 3.14 (panorama-panel)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
config.yaml
@@ -54,7 +54,7 @@ panels:
icon_size: 24
- DesktopFileButton:
desktop_file:
app_id: org.gnome.Terminal.desktop
app_id: xfce4-terminal.desktop
icon_size: 24
- DesktopFileButton:
desktop_file:
@@ -95,7 +95,7 @@ panels:
applets:
left:
- WFWindowList:
max_button_width: 256.0
max_button_width: 256
show_only_this_wf_workspace: true
show_only_this_output: true
centre: []
@@ -106,3 +106,4 @@ panels:
icon_size: 24
label:
show_hidden: false
main.py
@@ -782,7 +782,6 @@ class PanoramaPanel(Gtk.Application):
self.wl_output_ids = set()
self.started = False
self.all_handles: set[ZwlrForeignToplevelHandleV1] = set()
self.obsolete_handles: set[ZwlrForeignToplevelHandleV1] = set()
self.add_main_option(
"trigger",
@@ -817,43 +816,36 @@ class PanoramaPanel(Gtk.Application):
handle.dispatcher["closed"] = self.on_closed
def on_output_enter(self, handle, output):
if handle in self.obsolete_handles:
return
for panel in self.panels:
panel.foreign_toplevel_output_enter(handle, output)
def on_output_leave(self, handle, output):
if handle in self.obsolete_handles:
return
for panel in self.panels:
panel.foreign_toplevel_output_leave(handle, output)
def on_title_changed(self, handle, title):
if handle in self.obsolete_handles:
return
for panel in self.panels:
panel.foreign_toplevel_title(handle, title)
def on_app_id_changed(self, handle, app_id):
if handle in self.obsolete_handles:
return
for panel in self.panels:
panel.foreign_toplevel_app_id(handle, app_id)
def on_state_changed(self, handle, state):
if handle in self.obsolete_handles:
return
for panel in self.panels:
panel.foreign_toplevel_state(handle, state)
def on_closed(self, handle):
if handle in self.obsolete_handles:
return
for panel in self.panels:
panel.foreign_toplevel_closed(handle)
handle.destroy()
self.all_handles.discard(handle)
def foreign_toplevel_refresh(self):
self.obsolete_handles = self.all_handles.copy()
for handle in self.all_handles:
handle.destroy()
self.all_handles = set()
for panel in self.panels:
panel.foreign_toplevel_refresh()
@@ -939,6 +931,7 @@ class PanoramaPanel(Gtk.Application):
geometry = monitor.get_geometry()
print(f"Monitor {i}: {geometry.width}x{geometry.height} at {geometry.x},{geometry.y}")
new_panels = []
for panel in self.panels:
if panel.monitor_name == output_name:
for area in (panel.left_area, panel.centre_area, panel.right_area):
@@ -948,6 +941,9 @@ class PanoramaPanel(Gtk.Application):
applet = applet.get_next_sibling()
panel.destroy()
else:
new_panels.append(panel)
self.panels = new_panels
with open(get_config_file(), "r") as config_file:
yaml_loader = yaml.YAML(typ="rt")
yaml_file = yaml_loader.load(config_file)