From 9aa33ad1d36c345a6fa34d142d2839127a742cde Mon Sep 17 00:00:00 2001 From: TingPing Date: Fri, 21 Dec 2012 15:09:00 -0500 Subject: add glebihans disappearing tray patch --- src/fe-gtk/plugin-tray.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'src') diff --git a/src/fe-gtk/plugin-tray.c b/src/fe-gtk/plugin-tray.c index 9f0eff32..73a7572b 100644 --- a/src/fe-gtk/plugin-tray.c +++ b/src/fe-gtk/plugin-tray.c @@ -73,9 +73,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 (); +static void tray_cleanup (void); +static void tray_init (void); static WinStatus @@ -420,6 +424,35 @@ tray_menu_restore_cb (GtkWidget *item, gpointer userdata) tray_toggle_visibility (FALSE); } +static void +tray_menu_notify_cb (GObject *tray, GParamSpec *pspec, gpointer user_data) +{ + if (sticon && strcmp (pspec->name, "embedded") == 0) + { + 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 () +{ + tray_cleanup(); + tray_init(); + return TRUE; +} + + static void tray_menu_quit_cb (GtkWidget *item, gpointer userdata) { @@ -627,6 +660,9 @@ tray_init (void) g_signal_connect (G_OBJECT (sticon), "activate", G_CALLBACK (tray_menu_restore_cb), NULL); + + g_signal_connect (G_OBJECT (sticon), "notify", + G_CALLBACK (tray_menu_notify_cb), NULL); } static int -- cgit 1.4.1