diff --git a/libgitg/gitg-diff-view-request-patch.vala b/libgitg/gitg-diff-view-request-patch.vala index 0ebb8547..de2dc966 100644 --- a/libgitg/gitg-diff-view-request-patch.vala +++ b/libgitg/gitg-diff-view-request-patch.vala @@ -74,7 +74,7 @@ namespace Gitg } } - public override void run_after_async() + protected override InputStream? run_async(Cancellable? cancellable) { var selected_commit = (Gitg.Commit) d_commit; string commit_subject = selected_commit.get_subject(); @@ -97,23 +97,37 @@ namespace Gitg commit_subject = ""; } - var chooser = new Gtk.FileChooserDialog(_("Save Patch File"), null, - Gtk.FileChooserAction.SAVE, - _("_Cancel"), - Gtk.ResponseType.CANCEL, - _("_Save"), - Gtk.ResponseType.OK); - - chooser.do_overwrite_confirmation = true; - chooser.set_current_name(commit_subject + ".patch"); - - chooser.show(); - chooser.response.connect((dialog, id) => { - if (id != -6) { - create_patch (selected_commit, chooser.get_file()); + // Show file chooser and finish create patch in idle. + Idle.add(() => { + if (cancellable.is_cancelled()) + { + return false; } - chooser.destroy(); + + var chooser = new Gtk.FileChooserDialog(_("Save Patch File"), null, + Gtk.FileChooserAction.SAVE, + _("_Cancel"), + Gtk.ResponseType.CANCEL, + _("_Save"), + Gtk.ResponseType.OK); + + chooser.do_overwrite_confirmation = true; + chooser.set_current_name(commit_subject + ".patch"); + + chooser.show(); + chooser.response.connect((dialog, id) => { + if (!cancellable.is_cancelled() && id != -6) + { + create_patch (selected_commit, chooser.get_file()); + } + + chooser.destroy(); + }); + + return false; }); + + return null; } } } diff --git a/libgitg/gitg-diff-view-request.vala b/libgitg/gitg-diff-view-request.vala index 86d174e4..c70d6715 100644 --- a/libgitg/gitg-diff-view-request.vala +++ b/libgitg/gitg-diff-view-request.vala @@ -86,9 +86,6 @@ namespace Gitg return null; } - protected virtual void run_after_async() - {} - private async InputStream? run_impl(Cancellable? cancellable) throws GLib.Error { SourceFunc callback = run_impl.callback; @@ -107,8 +104,6 @@ namespace Gitg return null; }); - run_after_async(); - // Wait for it to finish, yield to caller yield;