commit 9d1031771e4a30548d89efa49580e3d8b6dae119
Author: Pavel Sanda <[email protected]>
Date:   Sat Apr 3 13:19:53 2021 +0200

    Fix #4658: showing diff between original and emergency files.
    
    https://www.mail-archive.com/[email protected]/msg215796.html
---
 src/Buffer.cpp                  |   17 ++++++++++++++++-
 src/frontends/qt/GuiCompare.cpp |   16 +++++++++++++---
 2 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/Buffer.cpp b/src/Buffer.cpp
index fdce444..e848b0f 100644
--- a/src/Buffer.cpp
+++ b/src/Buffer.cpp
@@ -4694,7 +4694,7 @@ Buffer::ReadStatus Buffer::loadEmergency()
                "%1$s exists.\n\nRecover emergency save?"), file);
 
        int const load_emerg = Alert::prompt(_("Load emergency save?"), text,
-               0, 2, _("&Recover"), _("&Load Original"), _("&Cancel"));
+               0, 3, _("&Recover"), _("&Load Original"), _("&Only show 
difference"), _("&Cancel"));
 
        switch (load_emerg)
        {
@@ -4769,6 +4769,21 @@ Buffer::ReadStatus Buffer::loadEmergency()
                return ReadOriginal;
        }
 
+       case 2: {
+               string f1 = d->filename.absFileName();
+               string f2 = emergencyFile.absFileName();
+               if (loadThisLyXFile(d->filename) != ReadSuccess)
+                       return ReadCancel;
+               string par = "compare run-blocking " + quoteName(f1) + " " + 
quoteName(f2);
+               LYXERR(Debug::FILES, par << "\n");
+               lyx::dispatch(FuncRequest(LFUN_DIALOG_SHOW, par));
+
+               //release the emergency buffer loaded by compare
+               Buffer * emerBuffer = theBufferList().getBuffer(emergencyFile);
+               if (emerBuffer) theBufferList().release(emerBuffer);
+
+               return ReadCancel; //Release the buffer of Original immediatelly
+       }
        default:
                break;
        }
diff --git a/src/frontends/qt/GuiCompare.cpp b/src/frontends/qt/GuiCompare.cpp
index e48be86..7f6b00f 100644
--- a/src/frontends/qt/GuiCompare.cpp
+++ b/src/frontends/qt/GuiCompare.cpp
@@ -318,7 +318,13 @@ int GuiCompare::run(bool blocking_mode)
                return 0;
 
        dest_buffer_->changed(true);
-       dest_buffer_->markDirty();
+       if (blocking_mode)
+               //blocking mode is infinitive and we don't want diff autosave
+               //if user decides to kill ther running lyx instance
+               dest_buffer_->markClean();
+       else
+               dest_buffer_->markDirty();
+
 
        // get the options from the dialog
        CompareOptions options;
@@ -364,10 +370,14 @@ bool GuiCompare::initialiseParams(std::string const &par)
                                return false;
                        }
 
-                       // Wait for the Compare function to process in a thread 
(2 minute timeout)
-                       compare_->wait(120000);
+                       // Wait for the Compare function to process in a thread
+                       compare_->wait();
 
                        finished(false);
+                       //Hiding dialog does not work as intended through 
finished routine, because showView
+                       //is triggered after initialiseParams returns true. So 
we return false, warning will
+                       //show on the terminal though.
+                       return false;
                }
        }
 
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to