Index: trayicon.tcl
===================================================================
--- trayicon.tcl	(revisión: 11905)
+++ trayicon.tcl	(copia de trabajo)
@@ -529,10 +529,18 @@
 }
 
 proc restart_tray { } {
-
     status_log "RESTARTING the traydock"
 
     statusicon_proc "REMOVE"
     statusicon_proc [::MSN::myStatusIs]
-    
 }
+
+proc remove_all_icons { } {
+    mailicon_proc 0
+    statusicon_proc "REMOVE"
+}
+
+proc create_all_icons { } {
+    statusicon_proc [::MSN::myStatusIs]
+    mailicon_proc [::hotmail::unreadMessages]
+}
Index: utils/linux/traydock/libtray.c
===================================================================
--- utils/linux/traydock/libtray.c	(revisión: 11905)
+++ utils/linux/traydock/libtray.c	(copia de trabajo)
@@ -79,6 +79,7 @@
 Tcl_TimerToken timer=NULL;
 //static int tooltip=0;
 Tcl_Interp * globalinterp;
+static int tray_is_managed = 0;
 
 
 static Window
@@ -252,7 +253,19 @@
 static int
 MessageEvent (Tk_Window tkwin, XEvent *eventPtr)
 {
-//	printf("Message\n");
+	if (_GetSystemTray () == 0) {
+      if (tray_is_managed == 1) {
+        tray_is_managed = 0;
+        //printf("Destroy tray!\n");
+        Tcl_Eval(globalinterp, "remove_all_icons");
+      }
+    } else {
+      if (tray_is_managed == 0) {
+        tray_is_managed = 1;
+        //printf("Create tray!\n");
+        Tcl_Eval(globalinterp, "create_all_icons");
+      }
+    }
 	return 0;
 }
 
@@ -333,6 +346,8 @@
 		return TCL_ERROR;
 	}
 
+    tray_is_managed = 1;
+    
 	/* Get memory for trayicon data and zero it*/
 	icon = (TrayIcon *) malloc(sizeof(TrayIcon));
 	memset((void *) icon, 0, (sizeof(TrayIcon)));
@@ -418,6 +433,7 @@
 		mask = StructureNotifyMask | ExposureMask | EnterWindowMask | LeaveWindowMask  | PropertyChangeMask;
 		Tk_CreateEventHandler(icon->win, mask, IconEvent, (ClientData) icon);
 		Tk_CreateClientMessageHandler(MessageEvent);
+        Tk_CreateGenericHandler(MessageEvent, (ClientData)icon);
 		
 		/* Set default icon size hint */
 		hint = XAllocSizeHints();
