> А вот интерфейс к xcb, тоже моего авторства:
> https://github.com/zhmylove/X11-XCB
> Его Миша держал, автор i3, но там ничего не было и мы
> с ним договорились, что я забираю, чтобы добавить вм-специфичную функциональность По этому поводу изначально у меня возник вопрос, почему именно XCB, а Xlib. XCB создавали, что бы уйти от блокирующих вызовов. То есть что бы гипотетически возможно было создать некий КА, который бы в цикле отправлял пачкой запросы, а на следующей итерации обрабатывал ответы, если они есть. Но живых вариантов такого я не нашёл. Xlib проще, потому её и используют поныне.
Глянул исходники, например вот это по сути дублирование кода из существующей реализации Xlib:
sub _screens_from_root {
my $self = shift;
my $cookie = $self->get_geometry($self->get_root_window());
my $geom = $self->get_geometry_reply($cookie->{sequence});
return [ X11::XCB::Screen->new(rect => X11::XCB::Rect->new($geom)) ];
}
т.е. наружу (для клиентов библиотеки) выставлена своеобразная реализация Xlib на Perl.