[GNUstep]Des tiroirs pour WindowMaker

Miniature d'une capture d'écran de mon
bureau

Wmaker en action ! Le format inhabituellement alongé du bureau s'explique par le fait que j'utilise deux écrans (physiques) côte à côte. Les fenêtres peuvent passer d'un écran à l'autre ; il faut juste trouver un fond d'écran qui soit à la hauteur !

WindowMaker (ou wmaker) est un excellent gestionnaire de fenêtres.

Pour les non-initiés, un gestionnaire de fenêtres est simplement le programme qui… gère l'affichage des fenêtres (!) des autres programmes, qui permet en gros de les déplacer sur l'écran, de les redimensionner, éventuellement de les organiser en « espaces de travail », etc.

Wmaker est un logiciel libre, ce qui signifie que j'ai le droit (tout le monde a ce droit) de voir comment il est écrit, de le modifier, et de faire part au monde entier des améliorations que je propose. Ma principale contribution est un « patch » (rustine en français) qui ajoute à wmaker des « tiroirs » pour ranger les « AppIcons ». En chemin, j'ai trouvé et corrigé quelques problèmes mineurs, dont voici le détail.

Les icones Exemple de patch mènent aux patchs qui s'appliquent à la dernière version stable de wmaker (la 0.92.0 à ce jour). Ils s'appliquent généralement aussi à la version distribuée par Debian etch (version 0.92.0-6.1 à ce jour) ; quand ce n'est pas le cas, un patch spécifique pour Debian est disponible via une icone Exemple de
patch.

Nom Lien(s) Description courte
Spurious EnterNotify Patch commun Wmaker/Debian

Correction d'un bug mineur (détails).

Useless tests Patch commun Wmaker/Debian

Petit nettoyage de code (trivial).

Useless test Patch commun Wmaker/Debian

Minuscule nettoyage de code (explication).

Omnipresent AppIcon StartUp Patch WmakerPatch Debian

Correction d'un bug mineur (détails).

Avoid Dock Flickering Patch commun Wmaker/Debian

Correction d'un défaut très mineur (détails).

Clip Auto Delays Patch WmakerPatch Debian

Rend configurables les temps après lesquels le clip s'ouvre, se referme, monte et se baisse automatiquement (description).

Smart Placement Patch commun Wmaker/Debian

Correction d'un bug mineur (détails).

Switchp auto focus Patch WmakerPatch Debian

Correction d'un comportement gênant : une mauvaise interaction entre le panneau d'applications et le mode « auto » de gestion du focus (détails).

Window menu Patch WmakerPatch Debian

Augmente la largeur maximale du menu des fenêtres (trivial).

Drawers Patch WmakerPatch Debian

Le gros morceau : ajout de tiroirs à wmaker. Les tiroirs se placent dans le dock et peuvent contenir des AppIcons, horizontalement (détails).

Les patchs « du bas » dans le tableau ont parfois besoin des patchs précédents. C'est pourquoi sont également disponibles pour votre agrément Tous les patchsl'ensemble de ces patchs réunis en un seul et Tous les patchs Debiantous les patchs pour la version Debian stockés dans une archive.

Comment utiliser ces patchs

Un pré-requis est que vous sachiez compiler et installer wmaker à partir de ses sources. Pour utiliser les patchs classiques (liens Exemple de patch), appliquez-les de la façon suivante :

tar jxf WindowMaker-0.92.0.tar.bz2
patch -p0 < le_patch
cd WindowMaker-0.92.0
./configure [vos options habituelles] && make && make install

Pour les patchs Debian (liens Exemple de patch), déposez-les dans debian/patches :

apt-get source wmaker
cp le_patch wmaker-0.92.0/debian/patches
dpkg-buildpackage [vos options habituelles]

Si vous êtes naturellement confiant et paresseux, vous pouvez me faire confiance et installer ce paquet binaire Wmaker 0.92.0-6.1 + tiroirs.

Contactez-moi si tout ne se passe pas comme prévu, ou si ça fonctionne et que ça vous plait ! ;-)

Problèmes connus

Quelques problèmes mineurs sont connus :

  • Un comportement qui peut paraître bizarre lorsque le Dock n'est pas « Keep on top » et que les tiroirs sont en « Auto-Raise ».
  • Juste après leur création (et seulement là), les tiroirs se comportent comme s'ils étaient « Keep on top », même s'ils ne le sont pas.
  • Un programme externe s'appelle déjà WMDrawer, c'est un peu gênant que j'utilise le même nom en interne.
  • À ce jour, rien de plus grave (pas de crash, encore moins de perte de données)

Voici enfin une description détaillée de certains des patchs.

Démonstration des tiroirs (miniature)

Je déplace wmusic à l'intérieur de mon tiroir « audio ».

Drawers

Description : l'œuvre de toute une vie ;-). Le dock (vertical, à gauche ou à droite du bureau) peut maintenant contenir des tiroirs. Ces tiroirs peuvent à leur tour contenir, horizontalement, des AppIcons, que ce soit des « dockapps » ou des AppIcons d'applications normales. Comme un clip, les tiroirs peuvent être auto-ouvrants, auto-montant, ou les deux. L'ajout des AppIcons aux tiroirs, le choix de l'icône pour le tiroir et son placement dans le dock sont entièrement contrôlées à la souris.

Retour à la table des patchs.

SwitchPannel Auto Focus

Principe du bug : le « panneau d'applications » interagit mal avec le mode de focus « auto », donnant dans certaines circonstances le focus à la mauvaise fenêtre.

Le panneau d'applications en action

Le panneau d'applications en action (juste pour décorer ;-).

Pour le reproduire :

  1. Disposez dans un espace de travail deux fenêtres, l'une au centre et l'autre dans un coin. Déplacez la souris au centre également, ce qui donne le focus à la fenêtre du centre. Au clavier (avec Alt-tab, classiquement), donnez le focus à l'autre fenêtre. Ce faisant, le « panneau d'applications » apparaît, montre que le focus passe à la fenêtre du coin et disparaît. Cependant, sa disparition fait croire à wmaker que la souris est à nouveau rentrée dans la fenêtre du milieu et redonne le focus à celle-ci.
  2. C'est plus compliqué. Il faut avoir activé « Raise window when switching focus with keyboard ». Dans un espace de travail, maximisez une première fenêtre A, puis positionnez « au-dessus » deux fenêtres B et C (l'une en haut à gauche et l'autre en bas à droite, par exemple). Déplacez la souris de sorte à donner le focus à la fenêtre B. Enfoncez la touche Alt, tapez une première fois la touche tab (la fenêtre A passe au premier plan) puis une seconde fois (la fenêtre C est alors sélectionnée). Pourtant, en relachant la touche Alt, c'est la fenêtre B qui regagne le focus.

Correction : il s'agit d'ignorer certains évènements (EnterNotify) lorsque le panneau d'applications est actif ou vient d'être utilisé.

Retour à la table des patchs.

Spurious EnterNotify

Principe du bug : Lorsqu'une appIcon est déplacée rapidement au-dessus d'un clip qui s'auto-referme, celui-ci se rouvrira peut-être à la fin du mouvement.

Pour le reproduire : mettez une AppIcon quelconque dans le clip, pour facilement visualiser son état ouvert/fermé. Définissez le clip comme auto-refermant. Déplacez rapidement une nouvelle AppIcon. Essayez de déplacez si vite la souris que le curseur sorte parfois du carré de l'AppIcon. Replacez ensuite l'AppIcon hors du clip.

Explication et correction : si pendant le déplacement de l'AppIcon le curseur est entré au moins une fois dans la carré du clip, celui-ci va recevoir (une fois l'AppIcon reposée) l'évènement EnterNotify et s'ouvrira automatiquement après le délai d'ouverture automatique. La solution consiste simplement a « absorber » (et donc ignorer) les évènements EnterNotify reçus pendant le déplacement de l'AppIcon.

Retour à la table des patchs.

Useless test

Explication : lorsque btn est omniprésente, elle a été déplacée dans le clip actuel par wWorkspaceForceChange() -> wClipUpdateForWorkspaceChange() -> moveIconBetweenDocks(). Donc btn->dock est toujours le clip dans lequel on est entré.

Retour à la table des patchs.

Omnipresent AppIcon StartUp

Principe du bug : au démarrage, les AppIcons omniprésentes du clip s'affichent mais ne fonctionnent pas.

Pour le reproduire : mettez deux AppIcons dans le clip, rendez la première (A) omniprésente et laissez la seconde (B) telle quelle. Définissez le clip comme auto-refermant. Activez le deuxième espace de travail et redémarrez wmaker. Wmaker sélectionne le premièr espace de travail et le clip a l'air fermé (couleur qui correspond au clip fermé, AppIcon B non-affichée), mais l'AppIcon A est affichée. Pourtant A ne réagit pas à l'ouverture ou à la fermeture du clip. Cliquer sur A la fait disparaître. Changer d'espace de travail suffit à tout faire rentrer dans l'ordre.

Explication et correction : wmaker maintient en interne autant de clips que d'espaces de travail. Lorsque l'utilisateur change d'espace de travail, les AppIcons omniprésentes sont déplacées vers le nouveau clip "actuel". Dans le paragraphe précédent, au redémarrage de wmaker, les AppIcons omniprésentes sont restaurées dans le deuxième espace de travail, alors que le premier espace de travail est actif. Un « hack » forçait à tort l'affichage de ces AppIcons omniprésentes. La correction intervient au démarrage de wmaker et consiste à déplacer les AppIcons omniprésentes dans le premier espace de travail.

Retour à la table des patchs.

Avoid Dock Flickering

Principe du bug : lorsque l'on déplace une AppIcon omniprésente dans un clip, celui-ci clignote faiblement.

Explication et correction : l'affichage de tous les clips et de toutes leurs AppIcons était systématique, il suffit de ne le faire qu'une fois, au début du déplacement de l'AppIcon omniprésente.

Retour à la table des patchs.

Clip Auto Delays

Description : le fichier $GNUSTEP_USER_ROOT/Defaults/WindowMaker peut maintenant contenir quatre nouvelles variables (le programme WPrefs.app n'a pas encore été modifié pour régler plus facilement ces variables, il faut éditer directement le fichier). Les quatre variables en question sont ClipAutoexpandDelay, ClipAutoraiseDelay, ClipAutocollapseDelay et ClipAutolowerDelay, et elles contrôlent les temps en millisecondes après lesquels le clip s'auto-ouvre, -monte (après que la souris soit entrée dans le clip), s'auto-ferme et -descend (après que la souris ait quittée le clip). Les valeurs par défaut (respectivement 600ms, 600ms, 1000ms et 1000ms) sont étranges à mon avis mais correspondent à celles qui étaient avant codées en dur dans le code.

Retour à la table des patchs.

Smart Placement

Principe du bug : le placement des nouvelles fenêtres est parfois faux lorsque l'algorithme « smart » (intelligent) est utilisé.

Pour le reproduire : assurez-vous (avec WPrefs.app, par exemple) d'utiliser l'algorithme de placement des nouvelles fenêtres « smart ». Dans un premier espace de travail vide, ouvrez une première fenêtre (par exemple un xterm). Cette fenêtre devrait apparaître plutôt dans le coin en haut à gauche du bureau. « Ombrez » cette fenêtre (dissimulez son contenu sous sa barre de titre en double-cliquant sur celle-ci). Activez un autre espace de travail vide et ouvrez une autre fenêtre. Au lieu d'apparaître au même endroit que la fenêtre précédente, la deuxième fenêtre apparaît légèrement plus bas, ou nettement plus à droite.

Explication et correction : pour placer une nouvelle fenêtre, wmaker évitait de recouvrir toutes les fenêtres ombrées, au lieu de n'éviter que celles présentes sur l'espace de travail actif.

Retour à la table des patchs.