From 37329c68f3f4c77ee2baa88a70e9ba6701e4008f Mon Sep 17 00:00:00 2001
From: John Darrington <john@darrington.wattle.id.au>
Date: Tue, 14 Apr 2009 19:09:24 +0800
Subject: [PATCH] Make the gui more thread safe

---
 src/ui/gui/message-dialog.c | 5 +++++
 src/ui/gui/psppire-dialog.c | 2 ++
 2 files changed, 7 insertions(+)

diff --git a/src/ui/gui/message-dialog.c b/src/ui/gui/message-dialog.c
index 866f8c6d..81c08f8c 100644
--- a/src/ui/gui/message-dialog.c
+++ b/src/ui/gui/message-dialog.c
@@ -192,6 +192,8 @@ popup_messages (gpointer unused UNUSED)
   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;
@@ -204,6 +206,7 @@ popup_messages (gpointer unused UNUSED)
     {
       ds_destroy (&lead);
       ds_destroy (&msg);
+      gdk_threads_leave ();
       return TRUE;
     }
 
@@ -266,6 +269,7 @@ popup_messages (gpointer unused UNUSED)
   ds_destroy (&lead);
   ds_destroy (&msg);
 
+  gdk_threads_leave ();
   return FALSE;
 
 use_fallback:
@@ -274,6 +278,7 @@ use_fallback:
   fputs (ds_cstr (&msg), stderr);
   ds_destroy (&lead);
   ds_destroy (&msg);
+  gdk_threads_leave ();
   return FALSE;
 }
 
diff --git a/src/ui/gui/psppire-dialog.c b/src/ui/gui/psppire-dialog.c
index dbe4612f..cea51346 100644
--- a/src/ui/gui/psppire-dialog.c
+++ b/src/ui/gui/psppire-dialog.c
@@ -513,7 +513,9 @@ psppire_dialog_run (PsppireDialog *dialog)
 
   g_signal_emit (dialog, signals [DIALOG_REFRESH], 0);
 
+  gdk_threads_leave ();
   g_main_loop_run (dialog->loop);
+  gdk_threads_enter ();
 
   g_main_loop_unref (dialog->loop);
 
-- 
2.30.2