Des tiroirs pour WindowMaker
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 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 .
Nom | Lien(s) | Description courte |
---|---|---|
Spurious EnterNotify |
Correction d'un bug mineur (détails). |
|
Useless tests |
Petit nettoyage de code (trivial). |
|
Useless test |
Minuscule nettoyage de code (explication). |
|
Omnipresent AppIcon StartUp |
Correction d'un bug mineur (détails). |
|
Avoid Dock Flickering |
Correction d'un défaut très mineur (détails). |
|
Clip Auto Delays |
Rend configurables les temps après lesquels le clip s'ouvre, se referme, monte et se baisse automatiquement (description). |
|
Smart Placement |
Correction d'un bug mineur (détails). |
|
Switchp auto focus |
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 |
Augmente la largeur maximale du menu des fenêtres (trivial). |
|
Drawers |
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 l'ensemble de ces patchs réunis en un seul et tous 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 ), 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 ), 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.
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 (juste pour décorer ;-).
Pour le reproduire :
- 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. - 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 touchetab
(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 toucheAlt
, 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.