aboutsummaryrefslogblamecommitdiff
path: root/doc/gui-stack-design.md
blob: b545520303da7edfba14da24069080d01aa908b7 (plain) (tree)
































































                                                                                    
(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.