2011-04-27 19 views
14

Estoy tratando de escribir un administrador de ventanas. (En realidad, tengo escrito un sistema operativo y un compilador, pero eso no viene al caso.)Maneras modernas de escribir un administrador de ventanas

XLIB y xcb no son exactamente desagradable, al menos no en, por ejemplo, las normas de Win32, pero son sin duda muy antiguo y no se prestan muy bien a las abstracciones decentes para hacerme la vida más fácil. No solo eso, sino que existe una clara falta de enlaces buenos para los lenguajes modernos de alto nivel.

Mi pregunta es: ¿todo esto de bajo nivel es realmente necesario en estos días? ¿Existen bibliotecas que encapsularán todas las cosas desagradables para mí? Tengo un vago recuerdo de que la gente de la Ilustración había hecho tal cosa, pero no puede encontrar nada. ¿O las bibliotecas modernas de widgets como, por ejemplo, GDK tienen suficiente funcionalidad que no necesitaría tocar la capa Xlib?

Cualquier bibliotecas con enlaces Java son de particular interés ...

+0

Buena pregunta. ¿No necesitas capacidades de representación píxel por píxel? Puede haber algunos trucos, pero así es como comenzaría. – Blender

+0

Me gustaría ver kwin, metacity, compiz y/o la iluminación. Por mi parte, me gusta el nivel bajo, y solo he visto WM hecho usando Xlib sin formato. Con un poco de suerte, Havoc Pennington se dará cuenta de esta pregunta :) – ninjalj

+0

Haskell tiene decentes enlaces X11 que se utilizaron para escribir el administrador de ventanas Xmonad. – wnoise

Respuesta

4

Esta es una respuesta tardía, por lo que quizás no lo haga Ya tengo mucha relevancia, pero la publicaré de todos modos, ya que otras personas podrían estar buscando ...

Me he hecho la misma pregunta y he llegado a la conclusión de que no existe tal cosa, especialmente en Java . Si bien ciertos kits de herramientas de widgets, como qt, le ofrecen la posibilidad de utilizar una estructura de visualización existente y crear widgets a partir de los identificadores de ventana xlib existentes, igual tendrá que usar xlib/xcb para hacer el desagradable trabajo de comunicarse con el servidor X para wm operaciones específicas. Otras bibliotecas, como han dicho otros, como GDK y la Ilustración, también ofrecen un buen trabajo de abstracción básica.

Aún así, no estaba contento con el hecho de que todos estos usan C/C++ y sentado en mi culo perezoso esperando hasta que alguien me hiciera el trabajo en Java no era una opción, comencé a escribir mi propia biblioteca que le permite construir su propia WM modular, en Java. https://github.com/Zubnix/trinityshell

+0

Estoy muy interesado en ver esto. En este momento estoy inmerso en otras cosas, pero sin duda echaré un vistazo en el futuro. ¡Háganos saber cómo le va! –

9

son todas estas cosas de bajo nivel realmente necesario en estos días?

Si por "cosas de bajo nivel" se entiende el lenguaje C, entonces no, no es necesario desde un punto de vista técnico; puede usar XCB XML para generar enlaces para cualquier idioma.

Sin embargo, si por "cosas de bajo nivel" te refieres a tratar en el nivel de protocolo X entonces, sí, es necesario (si no quieres arrancarte el pelo). Un administrador de ventanas debe trabajar en el nivel de protocolo X11, por lo que usar algo de "alto nivel" solo hará su vida más difícil. De hecho, XCB se creó precisamente porque Xlib era de un nivel demasiado alto, enmascarando demasiado debajo, por lo que era fácil cometer errores y dificultar o imposibilitar el control total. (Además, XCB no es "muy viejo" desde la perspectiva X. Es solo en los últimos años que todas las principales distribuciones de Linux finalmente comenzaron con XCB).

+1

buena respuesta. el mejor enfoque de alto nivel probablemente sea comenzar con una WM existente. también, una opción podría ser seguir a gnome-shell al usar JavaScript.XCB y gobject-introspection le brindan herramientas para automatizar enlaces de idioma si tiene otro idioma en mente. –

+0

por cierto, ya que la dirección futura es que una WM también tiene que funcionar como CM, y en general es una pequeña ciencia de cohetes, creo que habría un gran argumento para usar la parte C de gnome-shell y cambiar el Parte JavaScript (más o menos), si su objetivo es una interfaz de usuario alternativa. Las decisiones de IU deberían ser en gran medida en JS, pero el bucle de pintura y el gunge de bajo nivel en los viejos bits de metacity y en el desorden C bits. –

+1

Disiento respetuosamente: no parece haber mucho para los administradores de ventanas que sea particularmente exótico aparte de los eventos especiales de administrador de ventanas y XGrabKey(). De hecho, desde que publiqué mi pregunta, he estado pirateando con gdk, y * casi * hace mucho de lo que yo quiero; Tengo un código que maneja Windows (de una manera muy primitiva) casi en su totalidad desde el dominio GdkWindow. Por desgracia, las cosas que no hace son bastante desagradables. En particular, gdk hace cosas muy raras con la entrada del teclado y si XInput está disponible ignorará KeyPress y KeyRelease. ¿Adivina qué eventos envía XGrabKey()? Derecha. –

Cuestiones relacionadas