[Libreoffice-commits] core.git: sw/source

Caolán McNamara caolanm at redhat.com
Fri Apr 11 06:48:16 PDT 2014


 sw/source/core/doc/doc.cxx |   40 +++++++++++++++++++++++++++++++++++++++-
 1 file changed, 39 insertions(+), 1 deletion(-)

New commits:
commit e12184393f0591b5c5d9218062cc0a4bced6d4e6
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Apr 11 14:45:39 2014 +0100

    Resolves: rhbz#1081176: don't jump to cursor pos when...
    
    launching a new window view of a document. This was happening because of
    (temporary) activation of the modified flag (from updating the document stats
    in the bottom bar) triggering a scrolll to the current cursor position of the
    old document
    
    Change-Id: I6e1a3c07b66ff6373345850d1449f17c1f0baa17

diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx
index ed1e6ac..cd046df 100644
--- a/sw/source/core/doc/doc.cxx
+++ b/sw/source/core/doc/doc.cxx
@@ -1653,6 +1653,41 @@ void SwDoc::CalculatePagePairsForProspectPrinting(
     // thus we are done here.
 }
 
+namespace
+{
+    class LockAllViews
+    {
+        std::stack<bool> m_aViewWasLocked;
+        SwViewShell* m_pViewShell;
+    public:
+        LockAllViews(SwViewShell *pViewShell)
+            : m_pViewShell(pViewShell)
+        {
+            if (!m_pViewShell)
+                return;
+            SwViewShell *pSh = m_pViewShell;
+            do
+            {
+                m_aViewWasLocked.push(pSh->IsViewLocked());
+                pSh->LockView(true);
+                pSh = (SwViewShell*)pSh->GetNext();
+            } while (pSh != m_pViewShell);
+        }
+        ~LockAllViews()
+        {
+            if (!m_pViewShell)
+                return;
+            SwViewShell *pSh = m_pViewShell;
+            do
+            {
+                pSh->LockView(m_aViewWasLocked.top());
+                m_aViewWasLocked.pop();
+                pSh = (SwViewShell*)pSh->GetNext();
+            } while (pSh != m_pViewShell);
+        }
+    };
+}
+
 // returns true while there is more to do
 bool SwDoc::IncrementalDocStatCalculate(long nChars, bool bFields)
 {
@@ -1723,7 +1758,7 @@ bool SwDoc::IncrementalDocStatCalculate(long nChars, bool bFields)
     aStat[n++].Value <<= (sal_Int32)mpDocStat->nCharExcludingSpaces;
 
     // For e.g. autotext documents there is no pSwgInfo (#i79945)
-    SfxObjectShell * const pObjShell( GetDocShell() );
+    SwDocShell* pObjShell(GetDocShell());
     if (pObjShell)
     {
         const uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
@@ -1733,6 +1768,9 @@ bool SwDoc::IncrementalDocStatCalculate(long nChars, bool bFields)
         // #i96786#: do not set modified flag when updating statistics
         const bool bDocWasModified( IsModified() );
         const ModifyBlocker_Impl b(pObjShell);
+        // rhbz#1081176: don't jump to cursor pos because of (temporary)
+        // activation of modified flag triggering move to input position
+        LockAllViews aViewGuard((SwViewShell*)pObjShell->GetWrtShell());
         xDocProps->setDocumentStatistics(aStat);
         if (!bDocWasModified)
         {


More information about the Libreoffice-commits mailing list