Use our own explicit loop instead of main_loop_run
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 3 Mar 2013 10:15:59 +0000 (11:15 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 3 Mar 2013 10:15:59 +0000 (11:15 +0100)
src/ui/gui/page-assistant.c
src/ui/gui/text-data-import-dialog.c
src/ui/gui/text-data-import-dialog.h

index f1c95f71fd249ddfeec615176f8e9eee384fa486..e10d83d0c6a817d57c24bca512d15363b35f8fc0 100644 (file)
@@ -65,7 +65,6 @@ static void on_cancel (GtkAssistant *assistant, struct import_assistant *);
 static void on_close (GtkAssistant *assistant, struct import_assistant *);
 static void on_paste (GtkButton *button, struct import_assistant *);
 static void on_reset (GtkButton *button, struct import_assistant *);
-static void close_assistant (struct import_assistant *, int response);
 
 /* Initializes IA's asst substructure.  PARENT_WINDOW must be the
    window to use as the assistant window's parent.  */
@@ -239,7 +238,10 @@ static void
 close_assistant (struct import_assistant *ia, int response)
 {
   ia->asst.response = response;
-  g_main_loop_quit (ia->asst.main_loop);
+  /*  Use our loop_done variable until we find out
+      why      g_main_loop_quit (ia->asst.main_loop); doesn't work.
+  */
+  ia->asst.loop_done = true;
   gtk_widget_hide (GTK_WIDGET (ia->asst.assistant));
 }
 
index fe08caa9b115a4a8f039415ca41af9cbb60d2970..a9cf86054e907f7675f19ae2c1b93cd28c883963 100644 (file)
@@ -105,7 +105,20 @@ text_data_import_assistant (PsppireDataWindow *dw)
   gtk_widget_show_all (GTK_WIDGET (ia->asst.assistant));
 
   ia->asst.main_loop = g_main_loop_new (NULL, false);
-  g_main_loop_run (ia->asst.main_loop);
+
+  {  
+  /*
+    Instead of this block,
+    A simple     g_main_loop_run (ia->asst.main_loop);  should work here.  But it seems to crash.
+    I have no idea why.
+  */
+    GMainContext *ctx = g_main_loop_get_context (ia->asst.main_loop);
+    ia->asst.loop_done = false;
+    while (! ia->asst.loop_done)
+      {
+       g_main_context_iteration (ctx, TRUE);
+      }
+  }
   g_main_loop_unref (ia->asst.main_loop);
 
   switch (ia->asst.response)
index 847a1af6c6b304f742c80fc3bc393f75a9f2a1e2..dc8bef03c79aada7caf67b48ad446c490e5e52f5 100644 (file)
@@ -47,6 +47,7 @@ struct assistant
     GtkBuilder *builder;
     GtkAssistant *assistant;
     GMainLoop *main_loop;
+    bool loop_done;
     GtkWidget *paste_button;
     GtkWidget *reset_button;
     int response;