Mercurial > pidgin.yaz
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 |