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