Le logiciel de chat xchat permet depuis ses dernières versions d'avoir les "balloon". Ces balloons sont ces petites fenêtres qui apparraissent en bas à droite de l'écran lorsque vous recevez un message privé, ou qu'il y a un "highlight" sur un channel (selon la configuration que vous avez faite dans Préférences => Bavardages => Alertes). Ces balloons ne sont aps générés directement par xchat, mais celui-ci utilise la commande "notify-send" dont je parle dans mon billet précédent.

Le problème est que xchat indique "en dur" dans le code le temps d'apparition de ce balloon. Celui-ci est fixé à 20 secondes, ce qui parrait peu, mais quand vous jouez, et que quelqu'un vient en privé vous raconter sa vie, alors les balloons s'empilent et prennent toute la hauteur de l'écran pendant 20 secondes. C'est juste insuportable. Après avoir téléchargé le rpm source du xchat fourni dans les repos, j'ai retrouvé le code appellant le balloon :

path = g_find_program_in_path ("notify-send"); if (path) {         argv[0] = path;         argv[1] = "-i";         argv[2] = "gtk-dialog-info";         if (access (XCHATSHAREDIR"/pixmaps/xchat.png", R_OK) == 0)                 argv[2] = XCHATSHAREDIR"/pixmaps/xchat.png";         argv[3] = "-t";
        argv[4] = "20000";         argv[5] = title;
        argv[6] = text = strip_color (text, -1, STRIP_ALL);         argv[7] = NULL;
        xchat_execv (argv);         g_free ((char *)path);
        free ((char *)text); }


C'est le "20000" (millisecondes) qui fixe donc les 20 secondes.

L'idéal serait que cette valeur soit paramètrable via le fichier de configuration. Pour corriger cela, il y a plusieurs solution :

  • La meilleure : intégrer un "balloon_duration" à la configuration générale
  • Au démarrage de xchat, lire un fichier contenant la valeur et la conserver pour qu'elle soit utilisée à chaque balloon
  • A chaque apparition de ballon, aller lire un fichier contenant la valeur
  • Modifier en dur cette valeur

Ayant lu pour la premiere fois le code d'xchat hier soir, il m'est pour le moment impossible d'utiliser la première ou la seconde solution. La troisième est facilement réalisable, mais ne m'intéresse pas vraiment ... Aller lire un fichier à chaque appel ... La dernière n'est pas terrible, mais je l'ai cependant retenue en attendant de pouvoir utiliser la première (et j'ai en même temps fait la feature request sur le forum d'xchat). J'ai fixé cette valeur à 4500, soit 4.5 secondes, largement suffisant pour lire le message quand je joue, et assez rapide pour ne pas créer un empilement des balloons si quelqun devient bavard.
Voila donc le patch simplissime généré :

diff -up xchat-2.8.4/src/fe-gtk/plugin-tray.c.epo_ext xchat-2.8.4/src/fe-gtk/plugin-tray.c --- xchat-2.8.4/src/fe-gtk/plugin-tray.c.epo_ext        2008-03-08 13:39:09.000000000 +0100 +++ xchat-2.8.4/src/fe-gtk/plugin-tray.c        2008-03-08 13:46:32.000000000 +0100 @@ -145,7 +145,7 @@ fe_tray_set_balloon (const char *title,                 if (access (XCHATSHAREDIR"/pixmaps/xchat.png", R_OK) == 0)                         argv[2] = XCHATSHAREDIR"/pixmaps/xchat.png";
                argv[3] = "-t"; -               argv[4] = "20000"; +               argv[4] = "4500";                 argv[5] = title;                 argv[6] = text = strip_color (text, -1, STRIP_ALL);                 argv[7] = NULL;

A partir du rpm source du xchat présent dans les dépôts, j'ai reconstrui un nouveau paquet en intégrant ce mini patch (en attendant mieu), et en supprimant le patch désactivant par défaut l'icone systray (voir discussion ici).

Pour ceux souhaitant l"utiliser :

# rpm --import http://nicoleau.fabien.free.fr/rpms/RPM-GPG-KEY-NicoleauFabien # rpm -Uvh http://nicoleau.fabien.free.fr/rpms/fc8.i386/xchat-2.8.4-12.fc8.eponyme.i386.rpm

J'essaierais de suivre l'évolution de cette feature s'il y en a une, ou tenterais de la réalisér si j' ai le temps de me plonger dans le code d'xchat.
Un petit merci à Pikatchu_2014 qui a été assez patient vendredi soir ;).

Fabien