sw/source/core/undo/docundo.cxx |    6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

New commits:
commit ea030aeffd839f1078c137cb19cb1694d0581d42
Author:     Szymon Kłos <szymon.k...@collabora.com>
AuthorDate: Thu Jun 22 16:46:22 2023 +0200
Commit:     Szymon Kłos <szymon.k...@collabora.com>
CommitDate: Wed Jul 5 13:05:38 2023 +0200

    lok: use correct shell when doing undo
    
    When doing undo we save EditShell reference in the context object.
    Later it is used to get cursor we want to move to the place
    where modification was done (in sw/source/core/undo/unins.cxx:281).
    
    In LOK case when 2 different sessions were used and undo was done
    by user A - then user's B cursor was moved. This fixes that issue.
    
    We use current shell instead of getting it indirectly through
    SwDoc::GetEditShell()
    
    Change-Id: I7a10ea98587f48818e8d0aaa9ad739d4eed514f5
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153461
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Michael Meeks <michael.me...@collabora.com>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/153986
    Tested-by: Jenkins
    Reviewed-by: Szymon Kłos <szymon.k...@collabora.com>

diff --git a/sw/source/core/undo/docundo.cxx b/sw/source/core/undo/docundo.cxx
index a9efc248259a..57202fe3632a 100644
--- a/sw/source/core/undo/docundo.cxx
+++ b/sw/source/core/undo/docundo.cxx
@@ -30,6 +30,7 @@
 #include <pam.hxx>
 #include <swundo.hxx>
 #include <UndoCore.hxx>
+#include <wrtsh.hxx>
 #include <editsh.hxx>
 #include <unobaseclass.hxx>
 #include <IDocumentDrawModelAccess.hxx>
@@ -666,7 +667,10 @@ bool UndoManager::impl_DoUndoRedo(UndoOrRedoType 
undoOrRedo, size_t nUndoOffset)
 
     UnoActionContext c(& rDoc); // exception-safe StartAllAction/EndAllAction
 
-    SwEditShell *const pEditShell(rDoc.GetEditShell());
+    SwView* pViewShell = dynamic_cast<SwView*>(SfxViewShell::Current());
+    SwEditShell *const pEditShell(
+        comphelper::LibreOfficeKit::isActive() && pViewShell ? 
pViewShell->GetWrtShellPtr()
+        : rDoc.GetEditShell());
     OSL_ENSURE(pEditShell, "sw::UndoManager needs a SwEditShell!");
     if (!pEditShell)
     {

Reply via email to