diff -r 655ca0b4d79e -r c51c70f5545a pidgin/gtknotify.c --- a/pidgin/gtknotify.c Wed Nov 07 10:52:57 2012 +0200 +++ b/pidgin/gtknotify.c Thu Nov 08 15:00:50 2012 -0600 @@ -375,11 +375,37 @@ static void reset_mail_dialog(GtkDialog *unused) { + g_return_if_fail(mail_dialog != NULL); + if (mail_dialog->in_use) return; gtk_widget_destroy(mail_dialog->dialog); g_free(mail_dialog); mail_dialog = NULL; + purple_signal_emit(purple_notify_get_handle(), "displaying-emails-clear"); +} + +gboolean +pidgin_notify_emails_pending() +{ +#if GTK_CHECK_VERSION(2,18,0) + return mail_dialog != NULL + && !gtk_widget_get_visible(mail_dialog->dialog); +#else + return mail_dialog != NULL + && !GTK_WIDGET_VISIBLE(mail_dialog->dialog); +#endif +} + +void pidgin_notify_emails_present(void *data) +{ + if (pidgin_notify_emails_pending()) { + gtk_widget_show_all(mail_dialog->dialog); + mail_dialog->in_use = TRUE; + pidgin_blist_set_headline(NULL, NULL, NULL, NULL, NULL); + mail_dialog->in_use = FALSE; + } + purple_signal_emit(purple_notify_get_handle(), "displaying-emails-clear"); } static void @@ -796,7 +822,7 @@ remove the notifications when replacing an old notification. */ pidgin_blist_set_headline(label_text, - pixbuf, G_CALLBACK(gtk_widget_show_all), mail_dialog->dialog, + pixbuf, G_CALLBACK(pidgin_notify_emails_present), mail_dialog->dialog, (GDestroyNotify)reset_mail_dialog); mail_dialog->in_use = FALSE; g_free(label_text);