From 903652fafacf5268aeac4a702d52de44a8388652 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 | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx index 6382d74..047b8b3 100644 --- a/sw/source/core/doc/doc.cxx +++ b/sw/source/core/doc/doc.cxx @@ -1650,6 +1650,40 @@ void SwDoc::CalculatePagePairsForProspectPrinting( // thus we are done here. } +namespace +{ + class LockAllViews + { + std::vector m_aViewWasUnLocked; + SwViewShell* m_pViewShell; + public: + LockAllViews(SwViewShell *pViewShell) + : m_pViewShell(pViewShell) + { + if (!m_pViewShell) + return; + SwViewShell *pSh = m_pViewShell; + do + { + if (!pSh->IsViewLocked()) + { + m_aViewWasUnLocked.push_back(pSh); + pSh->LockView(true); + } + pSh = (SwViewShell*)pSh->GetNext(); + } while (pSh != m_pViewShell); + } + ~LockAllViews() + { + for (std::vector::iterator aI = m_aViewWasUnLocked.begin(); aI != m_aViewWasUnLocked.end(); ++aI) + { + SwViewShell *pSh = *aI; + pSh->LockView(false); + } + } + }; +} + // returns true while there is more to do bool SwDoc::IncrementalDocStatCalculate(long nChars, bool bFields) { @@ -1720,7 +1754,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 +1764,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