Make the gui more thread safe
authorJohn Darrington <john@darrington.wattle.id.au>
Tue, 14 Apr 2009 11:09:24 +0000 (19:09 +0800)
committerJohn Darrington <john@darrington.wattle.id.au>
Tue, 14 Apr 2009 11:09:24 +0000 (19:09 +0800)
src/ui/gui/message-dialog.c
src/ui/gui/psppire-dialog.c

index 866f8c6d91f1065762ba0a636291c255bd05c67a..81c08f8cd95a3455c8cff37c657795cdf2ba9fac 100644 (file)
@@ -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;
 }
 
index dbe4612f026a160f29592553894be93caff3e3ca..cea5134630c8483e095c365e95693b595fddb47e 100644 (file)
@@ -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);