summary refs log tree commit diff stats
path: root/src/fe-gtk
diff options
context:
space:
mode:
Diffstat (limited to 'src/fe-gtk')
-rw-r--r--src/fe-gtk/plugin-tray.c36
1 files changed, 36 insertions, 0 deletions
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
@@ -421,6 +425,35 @@ tray_menu_restore_cb (GtkWidget *item, gpointer userdata)
 }
 
 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)
 {
 	mg_open_quit_dialog (FALSE);
@@ -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
8'>48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113