comparison pidgin/gtkdocklet-gtk.c @ 31839:7281d151e492

merged from im.pidgin.pidgin
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Thu, 17 Mar 2011 20:25:26 +0900
parents fa88dc1dcabb cdbca568eaf3
children
comparison
equal deleted inserted replaced
31648:fa88dc1dcabb 31839:7281d151e492
45 } 45 }
46 46
47 static gboolean 47 static gboolean
48 docklet_gtk_embed_timeout_cb(gpointer data) 48 docklet_gtk_embed_timeout_cb(gpointer data)
49 { 49 {
50 /* The docklet was not embedded within the timeout. 50 #if !GTK_CHECK_VERSION(2,12,0)
51 * Remove it as a visibility manager, but leave the plugin 51 if (gtk_status_icon_is_embedded(docklet)) {
52 * loaded so that it can embed automatically if/when a notification 52 /* Older GTK+ (<2.12) don't implement the embedded signal, but the
53 * area becomes available. 53 information is still accessable through the above function. */
54 */ 54 purple_debug_info("docklet", "embedded\n");
55 purple_debug_info("docklet", "failed to embed within timeout\n"); 55
56 pidgin_docklet_remove(); 56 pidgin_docklet_embedded();
57 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE); 57 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", TRUE);
58 58 }
59 else
60 #endif
61 {
62 /* The docklet was not embedded within the timeout.
63 * Remove it as a visibility manager, but leave the plugin
64 * loaded so that it can embed automatically if/when a notification
65 * area becomes available.
66 */
67 purple_debug_info("docklet", "failed to embed within timeout\n");
68 pidgin_docklet_remove();
69 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE);
70 }
71
72 #if GTK_CHECK_VERSION(2,12,0)
59 embed_timeout = 0; 73 embed_timeout = 0;
60 return FALSE; 74 return FALSE;
61 } 75 #else
62 76 return TRUE;
77 #endif
78 }
79
80 #if GTK_CHECK_VERSION(2,12,0)
63 static gboolean 81 static gboolean
64 docklet_gtk_embedded_cb(GtkWidget *widget, gpointer data) 82 docklet_gtk_embedded_cb(GtkWidget *widget, gpointer data)
65 { 83 {
66 if (embed_timeout) { 84 if (embed_timeout) {
67 purple_timeout_remove(embed_timeout); 85 purple_timeout_remove(embed_timeout);
80 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE); 98 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded", FALSE);
81 } 99 }
82 100
83 return TRUE; 101 return TRUE;
84 } 102 }
103 #endif
85 104
86 static void 105 static void
87 docklet_gtk_destroyed_cb(GtkWidget *widget, gpointer data) 106 docklet_gtk_destroyed_cb(GtkWidget *widget, gpointer data)
88 { 107 {
89 purple_debug_info("docklet", "destroyed\n"); 108 purple_debug_info("docklet", "destroyed\n");
204 docklet = gtk_status_icon_new(); 223 docklet = gtk_status_icon_new();
205 g_return_if_fail(docklet != NULL); 224 g_return_if_fail(docklet != NULL);
206 225
207 g_signal_connect(G_OBJECT(docklet), "activate", G_CALLBACK(docklet_gtk_status_activated_cb), NULL); 226 g_signal_connect(G_OBJECT(docklet), "activate", G_CALLBACK(docklet_gtk_status_activated_cb), NULL);
208 g_signal_connect(G_OBJECT(docklet), "popup-menu", G_CALLBACK(docklet_gtk_status_clicked_cb), NULL); 227 g_signal_connect(G_OBJECT(docklet), "popup-menu", G_CALLBACK(docklet_gtk_status_clicked_cb), NULL);
228 #if GTK_CHECK_VERSION(2,12,0)
209 g_signal_connect(G_OBJECT(docklet), "notify::embedded", G_CALLBACK(docklet_gtk_embedded_cb), NULL); 229 g_signal_connect(G_OBJECT(docklet), "notify::embedded", G_CALLBACK(docklet_gtk_embedded_cb), NULL);
230 #endif
210 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_gtk_destroyed_cb), NULL); 231 g_signal_connect(G_OBJECT(docklet), "destroy", G_CALLBACK(docklet_gtk_destroyed_cb), NULL);
211 232
212 gtk_status_icon_set_visible(docklet, TRUE); 233 gtk_status_icon_set_visible(docklet, TRUE);
213 234
214 /* This is a hack to avoid a race condition between the docklet getting 235 /* This is a hack to avoid a race condition between the docklet getting
224 * time it was run. This should hopefully solve problems with the buddy 245 * time it was run. This should hopefully solve problems with the buddy
225 * list not properly starting hidden when Pidgin is started on login. 246 * list not properly starting hidden when Pidgin is started on login.
226 */ 247 */
227 if (!recreate) { 248 if (!recreate) {
228 pidgin_docklet_embedded(); 249 pidgin_docklet_embedded();
250 #if GTK_CHECK_VERSION(2,12,0)
229 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded")) { 251 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded")) {
230 embed_timeout = purple_timeout_add_seconds(LONG_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL); 252 embed_timeout = purple_timeout_add_seconds(LONG_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
231 } else { 253 } else {
232 embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL); 254 embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
233 } 255 }
256 #else
257 embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL);
258 #endif
234 } 259 }
235 260
236 purple_debug_info("docklet", "GTK+ created\n"); 261 purple_debug_info("docklet", "GTK+ created\n");
237 } 262 }
238 263