diff options
author | Alex Auvolat <alex@adnab.me> | 2015-03-13 12:19:27 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2015-03-13 12:19:27 +0100 |
commit | 039efeecbe3651512fee282fe08aa7400296d0c7 (patch) | |
tree | b0eee85c18c0caca19b857c7b718c5ac0eea47b2 /doc/gui-stack-design.md | |
parent | a6a4b90a794e4e8301fac107ab5fbf06b9f7d501 (diff) | |
download | kogata-039efeecbe3651512fee282fe08aa7400296d0c7.tar.gz kogata-039efeecbe3651512fee282fe08aa7400296d0c7.zip |
Add documentation files.
Diffstat (limited to 'doc/gui-stack-design.md')
-rw-r--r-- | doc/gui-stack-design.md | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/doc/gui-stack-design.md b/doc/gui-stack-design.md new file mode 100644 index 0000000..b545520 --- /dev/null +++ b/doc/gui-stack-design.md @@ -0,0 +1,65 @@ +(sorry, in french for the moment) + +# Design de la pile GUI + +Deux protocoles : + +- GIP (Graphics Initiation Protocol) : un buffer graphique, un clavier, une + souris. Redimensionnement. Création du buffer partagé. Opération de reset. + Extension possible de GIP pour le son. +- WMP (Window Management Protocol) : création de fenêtres et d'un canal GIP pour + chaque fenêtre. Déplacement, barres de titre, icônes, propriétés quelconques, + messages, notifications, ... Gère une hiérarchie de canaux WMP : dans un canal + WMP on peut demander la création d'un nouveau canal WMP qui sera créé comme + fils du canal actuel. + +Pile graphique : + +- Serveur graphique racine : parle au matériel, fournit un canal GIP (root GIP). +- Login manager : parle au root GIP, a sa propre UI pour lancer des sessions et + compagnie, crée pour chaque sous-session un canal GIP particulier (session + GIP). +- Session manager : parle au login manager, a accès au session GIP, gère les + fenêtres et propose des canaux WMP pour les applications de la session (ce qui + engendre la création de canaux window GIP pour chaque fenêtre) +- Bibliothèque "libtk" : sur une session GIP donner une interface facile pour + créer des widgets, gérer des layouts de widgets, gérer les interactions + (transformation des keycodes en lettres, etc.) + +Applications système : + +- Desktop manager : lancé par le session manager, affiche l'interface + utilisateur de base. C'est le client du WMP racine pour la session. Inclut la + portion "gestionnaire de fichier" de l'UI. +- Terminal : application qui peut tourner sur un simple GIP, en particulier en + plein écran dans une session administrateur (ou directement sur le serveur + racine tant qu'on n'aura pas écrit le login manager). Crée un canal + pur-textuel (type VT100) pour les applications console à l'intérieur. + +Deux types d'application : + +- Des applications WMP qui désirent utiliser plusieurs fenêtres (la majorité des + cas). S'attendent à être lancées avec comme file descriptor 0 un canal WMP. +- Des applications GIP qui utilisent une seule fenêtre (typiquement, les jeux). + S'attendent à être lancées avec comme FD0 un canal GIP. + +Le desktop manager, lorsqu'il lance une application, doit demander la création +d'un nouveau canal WMP pour cette application. De plus si l'application indique +que c'est une simple application GIP alors le desktop manager s'occupe du +dialogue sur ce canal WMP particulier pour la création d'une fenêtre et du +lancement du GIP correspondant pour l'application. Il peut ainsi binder le bon +FD0 sur le process de l'application lancée. + +Hiérarchie de raccourcis claviers et d'interceptions : + +- Quand on est dans une session utilisateur, le login manager agit comme un + proxy GIP. Il intercepte simplement le raccourci Ctrl+Alt+Del, qui renvoie sur + l'interface du gestionnaire de session (changer d'utilisateur, ou bien tuer + des sessions ou lancer les outils d'administration) +- Quand on est dans une session utilisateur, le window manager (session manager) + intercepte tous les raccourcis avec la touche "super". La plupart sont + directement liés au window-management, mais on peut imaginer un raccourci qui + lance une interface qui liste la hiérarchie de toutes les sessions WMP actives + et permette de les tuer sélectivement, neutralisant ainsi les applications qui + spamment l'interface de messages débiles. + |