+ }
+
+ if (g_queue_get_length (early_queue) < MAX_EARLY_MESSAGES)
+ {
+ if (g_queue_is_empty (early_queue))
+ g_idle_add (popup_messages, NULL);
+ g_queue_push_tail (early_queue, m);
+ }
+ else
+ {
+ if (g_queue_get_length (late_queue) >= MAX_LATE_MESSAGES)
+ {
+ struct msg *m = g_queue_pop_head (late_queue);
+ msg_destroy (m);
+ dropped_messages++;
+ }
+ g_queue_push_tail (late_queue, m);
+ }
+}
+
+static gboolean
+popup_messages (gpointer unused UNUSED)
+{
+ GtkTextBuffer *text_buffer;
+ GtkTextIter end;
+ GtkTextView *text_view;
+ GtkLabel *label;
+ struct string lead = DS_EMPTY_INITIALIZER;
+ struct string msg = DS_EMPTY_INITIALIZER;
+ int message_cnt;
+
+ gdk_threads_enter ();
+
+ /* Set up the dialog. */
+ if (message_xml == NULL || message_dialog == NULL)
+ goto use_fallback;
+
+ /* If a pointer grab is in effect, then the combination of that, and
+ a modal dialog box, will cause an impossible situation.
+ So don't pop it up just yet.
+ */
+ if ( gdk_display_pointer_is_grabbed (gtk_widget_get_display (message_dialog)))