diff -ruN nautilus-1.1.15.ori/libnautilus-private/nautilus-program-choosing.c nautilus-1.1.15/libnautilus-private/nautilus-program-choosing.c --- nautilus-1.1.15.ori/libnautilus-private/nautilus-program-choosing.c Mon Mar 4 13:07:20 2002 +++ nautilus-1.1.15/libnautilus-private/nautilus-program-choosing.c Sun May 12 18:19:59 2002 @@ -296,6 +296,27 @@ choose_component_destroy (choose_data); } +static void +callback_manager_application(GtkWidget *dialog, + gint button_number, + ChooseApplicationCallbackData *choose_data) +{ +GnomeVFSMimeApplication *application; + + application = NULL; + + if (button_number == GTK_RESPONSE_OK) { + application = nautilus_program_chooser_get_application (NAUTILUS_PROGRAM_CHOOSER (dialog)); + } + + (* choose_data->callback) (application, choose_data->callback_data); + if (dialog != NULL) { + gtk_widget_destroy (GTK_WIDGET (dialog)); + } + + choose_application_destroy (choose_data); +} + /** * nautilus_choose_application_for_file: * @@ -333,29 +354,16 @@ if (nautilus_mime_has_any_applications_for_file_type (file)) { dialog = set_up_program_chooser (file, GNOME_VFS_MIME_ACTION_TYPE_APPLICATION, choose_data->parent_window); - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { - application = nautilus_program_chooser_get_application (NAUTILUS_PROGRAM_CHOOSER (dialog)); - } + g_signal_connect(GTK_OBJECT(dialog), "response", + GTK_SIGNAL_FUNC(callback_manager_application), + choose_data); + gtk_widget_show(dialog); } else { nautilus_program_chooser_show_no_choices_message (GNOME_VFS_MIME_ACTION_TYPE_APPLICATION, file, choose_data->parent_window); } - /* Call callback even if identifier is NULL, so caller can - * free callback_data if necessary and present some cancel - * UI if desired. - */ - (* choose_data->callback) (application, choose_data->callback_data); - - if (dialog != NULL) { - /* Destroy only after callback, since application struct will - * be destroyed too. - */ - gtk_widget_destroy (GTK_WIDGET (dialog)); - } - - choose_application_destroy (choose_data); } void