+static void enqueue_msg (const struct msg *m);
+
+
+static GQueue *message_queue;
+
+
+void
+message_dialog_init (struct source_stream *ss)
+{
+ message_queue = g_queue_new ();
+ msg_init (ss, enqueue_msg);
+}
+
+void
+message_dialog_done (void)
+{
+ msg_done ();
+ g_queue_free (message_queue);
+}
+
+static gboolean
+dequeue_message (gpointer data)
+{
+ struct msg * m ;
+
+ /* 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_pointer_is_grabbed ())
+ return TRUE;