aboutsummaryrefslogtreecommitdiff
path: root/doc/gui-stack-design.md
diff options
context:
space:
mode:
Diffstat (limited to 'doc/gui-stack-design.md')
-rw-r--r--doc/gui-stack-design.md65
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.
+