Pour ceux qui ne le savent pas, xchat 2.8.6 est sorti il y a peu de temps (voir changelog). D'ailleurs cette version est disponnible dans le dépôt rawhide de fedora. De plus (toujours pour ceux qui ne le savent pas), le temps d'apparition des balloons (ces messages apparaissant en bas à droite de l'écran, utilisant notify-send ou libnotify, lorsque l'on a un message privé, ou un évènement particulier ..) est fixé "en dur" dans le code à 20 secondes. Comme je l'expliquais dans ce billet ainsi que celui-ci, ce temps est trop long dans certains cas. Il serait donc préférable qu'il soit paramètrable. Remi avait créé un patch qui permettait depuis l'interface de configuration de modifier le temps d'apparition de ces balloons pour la version 2.8.4. Je me suis insipré de ce patch pour en fournir un pour la version 2.8.6. En revenche je n'ai pas intégré la partie gui car Khisanth m'avait conseillé de ne pas utilsier xtext mais plutôt fe-gtk.c. Ne m'étant toujours pas plongé dans le code d'xchat, j'ai laissé cette partie de coté et donc (comme pour d'autres paramètres), il faudra soit fixer la valeur du temps d'apparition (en secondes) dans le fichier de configuration (~/.xchat2/xchat.conf) de cette façon (pour un exemple avec 5 secondes) :

input_balloon_time = 5 ;

soit utiliser dans xchat la commande (toujours pour un exemple de 5 secondes)

/set input_balloon_time 5

Dans ce dernier cas, la valeur ne sera conservée que jusqu'à la fermeture d'xchat.

ATTENTION : il faut utiliser une valeur entière (1,2,3,4,5 .... ). Il n'est donc pas possible d'utiliser la valeur 4.5.

Cette fonctionnalité n'a pour le moment pas sucité de réactions. Cependant je ne désespère pas qu'elle soit prise en compte dans une future version d'xchat, ou en tant que patch dans le RPM fourni par fedora. Elle n'a pas encore été proposée pour cette version du logiciel.

Si elle n'est pas retenue, je continuerai de recontruire des RPMs d'xchat à partir du src.rpm officiel en intégrant cette fonctionnalité.

Pour finir, et pour les plus curieux/intéressés, voici le contenu du patch (aussi disponnible en pièce jointe à ce billet):

diff -up xchat-2.8.6/src/common/cfgfiles.c.balloon xchat-2.8.6/src/common/cfgfiles.c
--- xchat-2.8.6/src/common/cfgfiles.c.balloon    2008-07-20 01:11:56.000000000 +0200
+++ xchat-2.8.6/src/common/cfgfiles.c    2008-07-20 01:14:05.000000000 +0200
@@ -464,6 +464,7 @@ const struct prefs vars[] = {
     {"input_balloon_chans", P_OFFINT (input_balloon_chans), TYPE_BOOL},
     {"input_balloon_hilight", P_OFFINT (input_balloon_hilight), TYPE_BOOL},
     {"input_balloon_priv", P_OFFINT (input_balloon_priv), TYPE_BOOL},
+    {"input_balloon_time", P_OFFINT (input_balloon_time), TYPE_INT},
     {"input_beep_chans", P_OFFINT (input_beep_chans), TYPE_BOOL},
     {"input_beep_hilight", P_OFFINT (input_beep_hilight), TYPE_BOOL},
     {"input_beep_msg", P_OFFINT (input_beep_priv), TYPE_BOOL},
@@ -674,6 +675,7 @@ load_config (void)
     prefs.gui_pane_right_size = 100;
     prefs.mainwindow_save = 1;
     prefs.bantype = 2;
+    prefs.input_balloon_time = 20;
     prefs.input_flash_priv = prefs.input_flash_hilight = 1;
     prefs.input_tray_priv = prefs.input_tray_hilight = 1;
     prefs.autodccsend = 2;    /* browse mode */
diff -up xchat-2.8.6/src/common/xchat.h.balloon xchat-2.8.6/src/common/xchat.h
--- xchat-2.8.6/src/common/xchat.h.balloon    2008-07-20 01:11:27.000000000 +0200
+++ xchat-2.8.6/src/common/xchat.h    2008-07-20 01:12:20.000000000 +0200
@@ -236,6 +236,7 @@ struct xchatprefs
     unsigned int input_balloon_chans;
     unsigned int input_balloon_hilight;
     unsigned int input_balloon_priv;
+    unsigned int input_balloon_time;
 
     unsigned int input_beep_chans;
     unsigned int input_beep_hilight;
diff -up xchat-2.8.6/src/fe-gtk/plugin-tray.c.balloon xchat-2.8.6/src/fe-gtk/plugin-tray.c
--- xchat-2.8.6/src/fe-gtk/plugin-tray.c.balloon    2008-07-20 01:14:28.000000000 +0200
+++ xchat-2.8.6/src/fe-gtk/plugin-tray.c    2008-07-20 01:16:53.000000000 +0200
@@ -178,7 +178,7 @@ libnotify_notify_new (const char *title,
     g_free ((char *)title);
     g_free ((char *)text);
 
-    nn_set_timeout (noti, 20000);
+    nn_set_timeout (noti, prefs.input_balloon_time*1000);
     nn_show (noti, NULL);
     g_object_unref (G_OBJECT (noti));
 
@@ -198,6 +198,7 @@ fe_tray_set_balloon (const char *title,
 #ifndef WIN32
     const char *argv[8];
     const char *path;
+    char time[16];
     WinStatus ws;
 
     /* no balloons if the window is focused */
@@ -223,13 +224,14 @@ fe_tray_set_balloon (const char *title,
     path = g_find_program_in_path ("notify-send");
     if (path)
     {
+        sprintf(time, "%d000",prefs.input_balloon_time);
         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[4] = time;
         argv[5] = title;
         text = strip_color (text, -1, STRIP_ALL|STRIP_ESCMARKUP);
         argv[6] = text;


Fabien