Hopefully fixed all the modal dialogs combinations.
[captive.git] / src / install / acquire / ui-gnome.c
index 8f98f98..b05d158 100644 (file)
@@ -36,6 +36,7 @@
 #include <libgnomeui/gnome-druid-page-edge.h>
 #include "final.h"
 #include <libgnomevfs/gnome-vfs-utils.h>
+#include <libgnomeui/gnome-dialog.h>
 
 #include <captive/macros.h>
 #include <captive/captivemodid.h>
@@ -593,6 +594,7 @@ static void on_DruidButtonOK_clicked_dialog_callback(gint reply,gint *replyp /*
        g_return_if_fail(replyp!=NULL);
 
        *replyp=reply;
+       gtk_main_quit();
 }
 
 void on_DruidButtonOK_clicked(GtkButton *button,gpointer user_data /* unused */)
@@ -614,13 +616,18 @@ gint reply;
                        (GnomeReplyCallback)on_DruidButtonOK_clicked_dialog_callback,
                        &reply);        /* data */
        g_signal_connect((gpointer)dialog,"close",G_CALLBACK(gtk_main_quit),NULL);
+       gnome_dialog_set_close(GNOME_DIALOG(dialog),FALSE);
        /* Never call gtk_main() from other thread than the initial one.
         * We would have to switch GTK+ context (g_main_context()?).
         */
        gtk_main();
-       /* 'dialog' gets destroyed automatically */
        if (reply==0)   /* 0 for 'OK', 1 for 'Cancel', left -1 for dialog close. */
                exit(EXIT_SUCCESS);
+       /* It is still needed despite: gnome_dialog_set_close(,TRUE);
+        * in: libgnomeui-2.10.0-1
+        * There may be some races regarding when is ran: gtk_main_quit();
+        */
+       gtk_widget_destroy(dialog);
 }
 
 static void button_stock_set_label(GtkWidget *widget,const gchar *label_text_new /* callback_data */)
@@ -745,9 +752,13 @@ GtkWidget *dialog;
                dialog=gnome_app_message(App,message);
 
        gtk_window_set_modal(GTK_WINDOW(dialog),TRUE);
-       g_signal_connect((gpointer)dialog,"close",G_CALLBACK(gtk_main_quit),NULL);
+       /* See also around: gnome_dialog_set_close(); */
+       gnome_dialog_set_close(GNOME_DIALOG(dialog),FALSE);
+       g_signal_connect((gpointer)dialog,"close"  ,G_CALLBACK(gtk_main_quit),NULL);
+       g_signal_connect((gpointer)dialog,"clicked",G_CALLBACK(gtk_main_quit),NULL);
        gtk_main();
-       /* 'dialog' gets destroyed automatically */
+       /* See also around: gnome_dialog_set_close(); */
+       gtk_widget_destroy(dialog);
 
        gdk_flush();
        gdk_threads_leave();