| 356 if (event->type == GDK_LEAVE_NOTIFY && (event->detail == GDK_NOTIFY_ANCESTOR || |
356 if (event->type == GDK_LEAVE_NOTIFY && (event->detail == GDK_NOTIFY_ANCESTOR || |
| 357 event->detail == GDK_NOTIFY_UNKNOWN)) { |
357 event->detail == GDK_NOTIFY_UNKNOWN)) { |
| 358 purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu leave-notify-event\n"); |
358 purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu leave-notify-event\n"); |
| 359 /* Add some slop so that the menu doesn't annoyingly disappear when mousing around */ |
359 /* Add some slop so that the menu doesn't annoyingly disappear when mousing around */ |
| 360 if (hide_docklet_timer == 0) { |
360 if (hide_docklet_timer == 0) { |
| 361 hide_docklet_timer = purple_timeout_add(500, |
361 hide_docklet_timer = g_timeout_add(500, |
| 362 hide_docklet_menu, menu); |
362 hide_docklet_menu, menu); |
| 363 } |
363 } |
| 364 } else if (event->type == GDK_ENTER_NOTIFY && event->detail == GDK_NOTIFY_ANCESTOR) { |
364 } else if (event->type == GDK_ENTER_NOTIFY && event->detail == GDK_NOTIFY_ANCESTOR) { |
| 365 purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu enter-notify-event\n"); |
365 purple_debug(PURPLE_DEBUG_INFO, "docklet", "menu enter-notify-event\n"); |
| 366 if (hide_docklet_timer != 0) { |
366 if (hide_docklet_timer != 0) { |
| 367 /* Cancel the hiding if we reenter */ |
367 /* Cancel the hiding if we reenter */ |
| 368 |
368 |
| 369 purple_timeout_remove(hide_docklet_timer); |
369 g_source_remove(hide_docklet_timer); |
| 370 hide_docklet_timer = 0; |
370 hide_docklet_timer = 0; |
| 371 } |
371 } |
| 372 } |
372 } |
| 373 return FALSE; |
373 return FALSE; |
| 374 } |
374 } |
| 838 |
838 |
| 839 static gboolean |
839 static gboolean |
| 840 docklet_gtk_embedded_cb(GtkWidget *widget, gpointer data) |
840 docklet_gtk_embedded_cb(GtkWidget *widget, gpointer data) |
| 841 { |
841 { |
| 842 if (embed_timeout) { |
842 if (embed_timeout) { |
| 843 purple_timeout_remove(embed_timeout); |
843 g_source_remove(embed_timeout); |
| 844 embed_timeout = 0; |
844 embed_timeout = 0; |
| 845 } |
845 } |
| 846 |
846 |
| 847 if (gtk_status_icon_is_embedded(docklet)) { |
847 if (gtk_status_icon_is_embedded(docklet)) { |
| 848 purple_debug_info("docklet", "embedded\n"); |
848 purple_debug_info("docklet", "embedded\n"); |
| 883 g_return_if_fail(docklet != NULL); |
883 g_return_if_fail(docklet != NULL); |
| 884 |
884 |
| 885 pidgin_docklet_remove(); |
885 pidgin_docklet_remove(); |
| 886 |
886 |
| 887 if (embed_timeout) { |
887 if (embed_timeout) { |
| 888 purple_timeout_remove(embed_timeout); |
888 g_source_remove(embed_timeout); |
| 889 embed_timeout = 0; |
889 embed_timeout = 0; |
| 890 } |
890 } |
| 891 |
891 |
| 892 gtk_status_icon_set_visible(docklet, FALSE); |
892 gtk_status_icon_set_visible(docklet, FALSE); |
| 893 g_object_unref(G_OBJECT(docklet)); |
893 g_object_unref(G_OBJECT(docklet)); |
| 931 */ |
931 */ |
| 932 if (!recreate) { |
932 if (!recreate) { |
| 933 pidgin_docklet_embedded(); |
933 pidgin_docklet_embedded(); |
| 934 #ifndef _WIN32 |
934 #ifndef _WIN32 |
| 935 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded")) { |
935 if (purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/docklet/gtk/embedded")) { |
| 936 embed_timeout = purple_timeout_add_seconds(LONG_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL); |
936 embed_timeout = g_timeout_add_seconds(LONG_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL); |
| 937 } else { |
937 } else { |
| 938 embed_timeout = purple_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL); |
938 embed_timeout = g_timeout_add_seconds(SHORT_EMBED_TIMEOUT, docklet_gtk_embed_timeout_cb, NULL); |
| 939 } |
939 } |
| 940 #endif |
940 #endif |
| 941 } |
941 } |
| 942 |
942 |
| 943 purple_debug_info("docklet", "GTK+ created\n"); |
943 purple_debug_info("docklet", "GTK+ created\n"); |