Skip to content

x11: Fix handling of `RRScreenChangeNotify`/`RRNotify` events

Ian Douglas Scott requested to merge ids1024/gtk:randr into master

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 gdk_x11_display_get_monitors(), which 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 change applied:

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()

Merge request reports