It seems these are sent with
xwindow set to the root window, so this
was failing to find a surface and get the screen from that.
I'm not sure if there's a reason not to get the screen this way elsewhere in the function, but it seems this should be correct.
This fixes the behavior of
wasn't correctly changing when monitors were added or removed. For
instance, this python code was always showing the same number of
monitors when one was turned off and on, but updates correctly with this
import gi gi.require_version("GLib", "2.0") gi.require_version("Gdk", "4.0") gi.require_version("Gtk", "4.0") from gi.repository import GLib, Gdk, Gtk def f(): print(len(Gdk.Display.get_default().get_monitors())) return True GLib.timeout_add_seconds(1, f) GLib.MainLoop().run()