From bd06f80114633be741e8db2d69565d191555a539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Fri, 11 Apr 2014 14:45:39 +0100 Subject: [PATCH] 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 (cherry picked from commit e12184393f0591b5c5d9218062cc0a4bced6d4e6) --- sw/source/core/doc/doc.cxx | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 6382d74..6b54528 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -1650,6 +1650,41 @@ void SwDoc::CalculatePagePairsForProspectPrinting( // thus we are done here. } +namespace +{ + class LockAllViews + { + std::stack 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) { @@ -1720,7 +1755,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 xDPS( @@ -1730,6 +1765,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) { -- 1.8.5.3