from typing import Any, ClassVar from gi.repository import GLib, GObject class ChangeNotifier(GObject.Object): __gsignals__: ClassVar[dict[str, Any]] = { "changed": (GObject.SignalFlags.RUN_FIRST, None, ()) } def __init__(self): super().__init__() self._emit_source = 0 def notify_changed(self): if self._emit_source: return self._emit_source = GLib.idle_add(self._emit_changed) def _emit_changed(self): self._emit_source = 0 self.emit("changed") return GLib.SOURCE_REMOVE