diff -urNp xchat-2.8.8.orig/src/fe-gtk/plugin-tray.c xchat-2.8.8/src/fe-gtk/plugin-tray.c --- xchat-2.8.8.orig/src/fe-gtk/plugin-tray.c 2019-08-16 15:08:14.591032240 +0200 +++ xchat-2.8.8/src/fe-gtk/plugin-tray.c 2019-08-16 15:09:06.772393960 +0200 @@ -65,9 +65,13 @@ static int tray_priv_count = 0; static int tray_pub_count = 0; static int tray_hilight_count = 0; static int tray_file_count = 0; +static int tray_restore_timer = 0; void tray_apply_setup (void); +static gboolean tray_menu_try_restore (void); +static void tray_cleanup (void); +static void tray_init (void); static WinStatus @@ -406,6 +410,34 @@ tray_menu_restore_cb (GtkWidget *item, g } static void +tray_menu_notify_cb (GObject *tray, GParamSpec *pspec, gpointer user_data) +{ + if (sticon) + { + if (!gtk_status_icon_is_embedded (sticon)) + { + tray_restore_timer = g_timeout_add (500, (GSourceFunc)tray_menu_try_restore, NULL); + } + else + { + if (tray_restore_timer) + { + g_source_remove (tray_restore_timer); + tray_restore_timer = 0; + } + } + } +} + +static gboolean +tray_menu_try_restore (void) +{ + tray_cleanup (); + tray_init (); + return TRUE; +} + +static void tray_menu_quit_cb (GtkWidget *item, gpointer userdata) { mg_open_quit_dialog (FALSE); @@ -555,6 +587,8 @@ tray_init (void) G_CALLBACK (tray_menu_cb), sticon); g_signal_connect (G_OBJECT (sticon), "activate", G_CALLBACK (tray_menu_restore_cb), NULL); + g_signal_connect (G_OBJECT (sticon), "notify::embedded", + G_CALLBACK (tray_menu_notify_cb), NULL); } static int