roundabout,
created on Friday, 12 September 2025, 20:06:11 (1757707571),
received on Saturday, 13 September 2025, 00:41:41 (1757724101)
Author identity: Vlad <vlad.muntoiu@gmail.com>
e1f86c2b177b8d14a02f7d86f183906881605351
main.py
@@ -1,5 +1,7 @@
import os
import faulthandler
import pathlib
import ruamel.yaml as yaml
from pywayland.client import Display, EventQueue
from pywayland.protocol.wayland import WlOutput
@@ -65,8 +67,18 @@ class PanoramaBG(Gtk.Application):
for monitor in monitors:
if monitor.get_connector() in yaml_file["monitors"]:
all_sources = []
for source in yaml_file["monitors"][monitor.get_connector()]["sources"]:
path = pathlib.Path(source)
if path.is_dir():
all_sources.extend(f for f in path.iterdir() if f.is_file())
else:
all_sources.append(path)
background_window = BackgroundWindow(self, monitor)
background_window.picture.set_filename(yaml_file["monitors"][monitor.get_connector()]["sources"][0])
background_window.all_sources = all_sources
background_window.time_per_image = yaml_file["monitors"][monitor.get_connector()]["time_per_image"]
background_window.change_image()
background_window.picture.set_content_fit(FITTING_MODES[yaml_file["monitors"][monitor.get_connector()]["fitting_mode"]])
background_window.present()
@@ -114,6 +126,9 @@ class BackgroundWindow(Gtk.Window):
super().__init__(application=application)
self.set_decorated(False)
self.all_sources = []
self.time_per_image = 0
Gtk4LayerShell.init_for_window(self)
Gtk4LayerShell.set_namespace(self, "com.roundabout_host.panorama.background")
Gtk4LayerShell.set_monitor(self, monitor)
@@ -127,6 +142,12 @@ class BackgroundWindow(Gtk.Window):
self.picture = Gtk.Picture()
self.set_child(self.picture)
def change_image(self):
now = GLib.DateTime.new_now_local()
self.picture.set_filename(str(self.all_sources[now.to_unix() // self.time_per_image % len(self.all_sources)]))
time_until_next = self.time_per_image - now.to_unix() % self.time_per_image
GLib.timeout_add_seconds(time_until_next, self.change_image)
if __name__ == "__main__":
app = PanoramaBG()