roundabout,
created on Friday, 12 September 2025, 20:06:11 (1757707571),
received on Friday, 12 September 2025, 20:06:13 (1757707573)
Author identity: Vlad <vlad.muntoiu@gmail.com>
e1f86c2b177b8d14a02f7d86f183906881605351
main.py
@@ -1,5 +1,7 @@
import os import faulthandler import pathlibimport 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()