Разве вы не сможете получить дескриптор файла для цикла событий X?Затем вы сможете добавить его в mainloop gobject.
Из того, что я вижу, ConnectionNumber(xdpy)
даст дескриптор файла, который вы затем сможете добавить в источник, который вы можете использовать с g_source_add_poll()
.