c - tipos - que es gnome
Creando un administrador de ventanas para Linux (8)
Quiero crear un administrador de ventanas de apilamiento simple (en C
) para uso privado, principalmente con el propósito de aprender y desafiarme a mí mismo.
He twm
el código fuente de twm
que tiene relativamente pocos timbres y silbidos, pero parece un nivel muy bajo ya que no está basado en un kit de herramientas de widgets. 1 ¿Sería preferible utilizar un kit de herramientas como GTK +? Me temo que algunos de los códigos y las bibliotecas en twm
pueden ser demasiado anticuados ( edición: en desuso) y quiero que el administrador de ventanas use bibliotecas relativamente modernas. Por el bien de la comprensión, también me interesarían las sugerencias sobre cómo iniciar un administrador de ventanas desde cero, no hay muchos tutoriales para este propósito.
Actualización: Para aquellos que piensan en proyectos similares: terminé usando Common Lisp y la 1 . tinywm-lisp sirvió de base y el brillante CLFSWM y CLFSWM fueron de gran ayuda. Como referencia, utilicé CLX - Interfaz LISP X común ( advertencia de PDF ) y #xlib
en Freenode.
Por el bien de la comprensión, también me interesaría recibir sugerencias sobre cómo iniciar un administrador de ventanas desde cero.
Es posible que desee echar un vistazo al administrador de ventanas de aewm. El código es pequeño y hace bastante bien lo básico. Está escrito en C y usa Xlib.
Echa un vistazo al código de dwm . El código base es hermoso y fácil de entender. Todo el asunto es de unas 2000 líneas.
Hagas lo que hagas, usa XCB y no Xlib. Es moderno, asíncrono, más simple y le brinda acceso directo al protocolo X11.
He escrito una serie de tutoriales en profundidad que muestra cómo escribir un administrador de ventanas X11 en C ++:
Además, puede consultar un ejemplo simple de administrador de ventanas, basic_wm, en
Está fuertemente comentado para fines pedagógicos.
En Xlib vs XCB: recomendaría Xlib sobre XCB si es la primera vez que empiezas. XCB es más eficiente, pero es mucho más bajo y mucho más detallado (piense en lenguaje ensamblador para la GUI). No querrá cargar con una optimización prematura hasta que ya tenga un prototipo funcionando.
Un WM muy minimalista es wm2 . No he leído el código fuente y, por lo tanto, no sé si es un ejemplo de enseñanza. Por supuesto, puede usar bibliotecas que ya hacen gran parte del trabajo de abstracción y dibujo para usted, como gdk y gtk . Pero como este proyecto es solo para aprendizaje personal, me gustaría ir por el camino difícil y usar Xlib directamente.
Aquí hay algunos enlaces que pueden ser útiles para usted:
metacity usa gtk para ciertos elementos de la interfaz de usuario. Ver su HACKING y README.
ver también ¿Dónde están algunas buenas guías de programación de Xlib?
http://code.google.com/p/partiwm/ es un intento de escribir un administrador de ventanas (en mosaico, no de apilamiento) desde cero, puede ser útil para leer el código.
Xmonad podría ser un buen lugar para comenzar.