Ответ 1
Что бы вы ни делали, используйте XCB, а не Xlib. Это современное, асинхронное, более простое и дает вам прямой доступ к протоколу X11.
Я хочу создать простой диспетчер окон стека (в C
) для личного использования, главным образом для обучения и опроса.
Я просмотрел исходный код twm
, который имеет относительно немного колоколов и свистов, но он кажется очень низким, так как он не основан на наборе виджетов. 1 Будет ли использовать такой инструментарий, как GTK +? Я боюсь, что некоторые из кода и библиотек в twm
могут быть слишком устаревшими (edit: debrecated), и я хочу, чтобы оконный менеджер использовал относительно современные библиотеки. Ради понимания я также был бы заинтересован в предложениях о том, как запустить диспетчер окон с нуля - для этой цели не так много учебных пособий.
Обновление:. Для тех, кто думает о похожих проектах: я закончил использование Common Lisp и tinywm-lisp послужил основой и блестящим CLFSWM и Stumpwm были большой помощью. Для справки я использовал CLX - Common Lisp X Interface (предупреждение PDF) и #xlib
на Freenode.
Что бы вы ни делали, используйте XCB, а не Xlib. Это современное, асинхронное, более простое и дает вам прямой доступ к протоколу X11.
Очень минималистический WM - это wm2. Я не читал исходный код, и поэтому я не знаю, является ли это примером обучения. Конечно, вы можете использовать библиотеки, которые уже выполняют большую часть работы по абстракции и рисованию, например gdk и gtk. Но так как этот проект предназначен только для личного обучения, я бы пошел тяжело и напрямую использовал Xlib.
Вот несколько ссылок, которые могут вам пригодиться:
Посмотрите код dwm. Кодовая база красива и понятна. Всего около 2000 строк.
http://code.google.com/p/partiwm/ является попыткой написать диспетчер окон (черепица, а не штабелирование) с нуля, это может быть полезно для вас прочитайте код.
metacity использует gtk для определенных элементов интерфейса. См. Его HACKING и README.
см. также Где находятся хорошие руководства по программированию Xlib?
Ради понимания я также буду заинтересован в предложениях о том, как запустить диспетчер окон с нуля
Возможно, вам захочется взглянуть на диспетчер окон aewm. Код небольшой, и он очень хорошо справляется с базой. Он написан на C и использует Xlib.
Я написал углубленную серию учебников, в которой показано, как написать оконный менеджер X11 в С++:
Кроме того, вы можете проверить простой диспетчер окон, basic_wm, в
Это сильно прокомментировано в педагогических целях.
В Xlib vs XCB - я бы порекомендовал Xlib над XCB, если вы впервые начинаете. XCB более эффективен, но гораздо более низкоуровневый и гораздо более подробный (думаю, язык ассемблера для графического интерфейса). Вы не хотите обременять себя преждевременной оптимизацией, пока у вас уже нет прототипа.
Xmonad может быть хорошим местом для начала.