En route pour compiz 0.9

Un des développeurs de compiz publie une suite d’articles en préparation de la prochaine version de compiz.

Pour rappel, cette version 0.9 sera une réécriture complète de compiz, passant du C au C++. L’initiateur de cette réécriture (un autre développeur) a posté une feuille de route pour cette réécriture qui a commencée en fin d’année 2008. On peut citer:

  • la séparation des « moteurs », OpenGL et composition (XRender) dans des plugins séparés, permettant en théorie à compiz de tourner sans avoir besoin ni d’OpenGL ni de la composition (comme un gestionnaire de fenêtres normal)
  • Réorganisation du système de plugins (voir ci-dessous).
  • Utilisation de CMake
  • Réécriture en C++
  • Effet de simplification, le support du multi-affichage (plusieurs serveurs X) et du multi-cartes serait abandonné, mais le multi-écran type xinerama ou RANDR 1.2 (multi-head) serait maintenu.

Je vous propose un petit résumé des ces articles, avec quelques commentaires.

Le premier revient sur la nouvelle architecture de compiz, plus modulaire car plus orientée objet que l’originale. C’est l’une des raisons du passage au C++, car l’écriture orientée objet étant, selon les développeurs, plus simple qu’en C. Le futur compiz va reposer sur des plugins qui pourront être facilement dérivés pour élargir leurs fonctionnalités. Par exemple, le plugin cubeaddon sera une extension du plugin cube, en ajoutant des fonctionnalités. Il y aura même des plugins « bibliothèques », ne faisant que fournir des fonctionnalités aux autres plugins (exemple, le plugin texte). Cela permet de mieux organiser le code, d’éviter d’en réécrire, et permet d’étendre plus facilement les fonctionnalités des plugins.

Le deuxième apporte des réponses à 2 questions récurrentes : la prévisualisation des fenêtres minimisées, et l’input redirection.

Comme vous avez du le remarquer, quand une fenêtre est minimisée, il n’y a aucune prévisualisation possible (dans scale, la barre de tâches, le switcher etc …). Cela vient du fait que le serveur X ne surveille plus les fenêtres qui sont minimisées. L’auteur cite plusieurs solutions, en allant du bidouillage vers la solution la plus « propre » selon lui :

1. Prendre une photo de la fenêtre avant d’être minimisée, et l’afficher quand on la demande. C’est la solution actuelle et ne fournit donc pas de prévisualisation.

2. Temporairement dé-minimiser les fenêtres. L’auteur n’est pas un fan, car cela engendrerait beaucoup de bidouilles pour rendre cette méthode utilisable.

3. Dire aux fenêtres qu’elles sont minimisées, les animer comme cela, mais en réalité, ne pas les minimiser et ne pas les afficher. Cela permet de disposer des informations de la fenêtre pour avoir une prévisualisation, mais ça mets un peu le bazar dans la gestion des fenêtres (elles pensent être minimisées, mais en fait non :)).

4. Ne pas dire aux fenêtres qu’elles sont minimisées, mais les animer comme si elles l’étaient, et ne pas les afficher. Cela permet aux fenêtres de se comporter comme si elles étaient affichées (les vidéos continuent), mais elles seraient quand même en attente d’interaction avec l’utilisateur (exemple des jeux).

Même si les solutions 3 et 4 sont définitivement les meilleurs (KWin et Mutter semblent avoir une option comme cela), cela engendrerai du boulot non négligeable, soit au niveau du serveur X, soit au niveau de la standardisation des gestionnaires de fenêtres (EMWH).

Au final, aucune solution n’a encore été décidée, donc ne vous attendez pas à avoir cette fonctionnalité tout de suite dans compiz.

La deuxième question concerne l’input redirection, qui tarde toujours à arriver. Il semble que tous les développements côté X soient faits, mais pas encore été intégrés officiellement. Donc en bonne voie, mais comme depuis plusieurs mois 😦

On attends maintenant la suite sur les nouvelles fonctionnalités de cette version de compiz. En espérant qu’une année de réécriture va porter ces fruits.