Изодат , кажется, имеет наиболее полную поддержку.
Ваш код выглядит правильно (я его не тестировал), и описанные вами результаты совсем не кажутся странными. Metacity (и другие менеджеры окон X) создадут множество окон вокруг и рядом с окнами, принадлежащими приложению, чтобы показать заголовок окна, границы и другие украшения.
Попробуйте запустить свой тест с каким-нибудь более простым оконным менеджером, таким как TVM (или даже без него). вообще). TVM должен создавать намного меньше окон, чем существующие оконные менеджеры. Это должно упростить понимание.
Обычно, однако, бороться с оконным менеджером - плохая идея. Разве вы не можете решить свою проблему на более высоком уровне, не используя xlib напрямую?
Я думаю, что вам нужно запросить _NET_CLIENT_LIST
корневого окна имущество. Это создаст список идентификаторов окон для всех клиентских окон, исключая все « виртуальные » окна, созданные оконным менеджером. Большинство оконных менеджеров явно поддерживают _NET_CLIENT_LIST
, но вы также можете запросить, поддерживается ли какая-либо данная функция.