Современные способы написания оконного менеджера
Я пытаюсь написать диспетчер окон. (На самом деле, я написал ОС и компилятор, но это не относится к делу.)
XLib и xcb не совсем противны, по крайней мере, не по стандартам win32, но они, безусловно, очень старые и не приносят приятных достойных абстракций, чтобы облегчить мою жизнь. Не только это, но и явное отсутствие хороших привязок для современных языков высокого уровня.
Мой вопрос: все эти низкоуровневые вещи действительно нужны в эти дни? Существуют ли библиотеки, которые будут инкапсулировать все неприятные вещи для меня? У меня смутное воспоминание о том, что люди Просвещения делали такое, но ничего не нашли. Или современные библиотеки виджетов, например, GDK обладают достаточной функциональностью, что мне не нужно будет касаться слоя Xlib?
Особый интерес представляют любые библиотеки с привязками Java...
Ответы
Ответ 1
Это поздний ответ, так что, возможно, он больше не имеет большого значения, но я буду публиковать его в любом случае, так как другие люди могут его искать...
Я задал себе тот же вопрос и пришел к выводу, что такого не существует, особенно на Java. Хотя некоторые инструментальные средства виджетов, например qt, предлагают вам возможность использовать существующую структуру отображения и создавать виджеты из существующих оконных ручек xlib, вам все равно придется использовать xlib/xcb, чтобы выполнить неприятную работу по общению с сервером X для wm конкретных операций. Другие библиотеки, как утверждают другие, такие как GDK и просветление, также предлагают довольно хорошую работу по базовой абстракции.
Тем не менее, я был недоволен тем, что все они используют C/С++ и сидят на ленивой заднице, ожидая, пока кто-то не выполнит эту работу для меня на Java, это не вариант, я начал писать свою собственную библиотеку, позволяет создавать собственный модульный WM-код на Java.
https://github.com/Zubnix/trinityshell
Ответ 2
- это все эти низкоуровневые вещи, действительно необходимые в эти дни?
Если под "низкоуровневым материалом" вы подразумеваете язык C, то нет, это не обязательно с технической точки зрения; вы можете использовать XCB XML для создания привязок для любого языка.
Однако если "материал низкого уровня" вы имеете в виду на уровне X-протокола, тогда да, это необходимо (если вы не хотите вытаскивать свои волосы). Диспетчер окон должен работать на уровне протокола X11, поэтому использование чего-то "высокого уровня" только усложнит вашу жизнь. Фактически, XCB был создан именно потому, что Xlib был слишком высокоуровневым, слишком маскировался под ним, поэтому было легко совершить ошибки и сделать его сложным или невозможным для полного контроля. (Кроме того, XCB не "очень старый" с точки зрения X, и только в последние несколько лет все основные дистрибутивы Linux наконец начали полностью использовать XCB.)