How can I get updated system DPI information from X11 in a C program?
I found out a way to do exactly what I wanted, even though it's rather hackish.
The solution (using XLib
) is to create a new, temporary connection to the X server using XOpenDisplay
and XCloseDisplay
, and poll the resource information from that new connection.
The reason this is needed is because X fetches the resource information only once per new connection, and never updates it. Therefore, by opening a new connection, X will get the updated xresource
data, which can then be used for the old main connection.
Be mindful that constantly opening and closing new X connections may not be great for performance, so only do it when you absolutely need to. In my case, since the window has borders, I only check for DPI changes when the title height has changed, as a DPI change will change the size of your title border due to font size differences.