diff options
Diffstat (limited to 'sw')
-rw-r--r-- | sw/inc/IDocumentTimerAccess.hxx | 40 | ||||
-rw-r--r-- | sw/source/core/doc/DocumentTimerManager.cxx | 24 | ||||
-rw-r--r-- | sw/source/core/inc/DocumentTimerManager.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/inc/docfld.hxx | 2 | ||||
-rw-r--r-- | sw/source/core/inc/rootfrm.hxx | 4 |
5 files changed, 37 insertions, 35 deletions
diff --git a/sw/inc/IDocumentTimerAccess.hxx b/sw/inc/IDocumentTimerAccess.hxx index 6efe1a114963..1ed8679c00ac 100644 --- a/sw/inc/IDocumentTimerAccess.hxx +++ b/sw/inc/IDocumentTimerAccess.hxx @@ -20,42 +20,44 @@ #ifndef INCLUDED_SW_INC_IDOCUMENTTIMERACCESS_HXX #define INCLUDED_SW_INC_IDOCUMENTTIMERACCESS_HXX -/** Manipulate background jobs of the document. It starts with a mode of - 'started' and a block count of 0. +/** + * Handle the background job of the Writer document. + * + * Initially it's disabled and unblocked. + * + * Jobs include: + * * grammar checking + * * field updating + * * document layouting */ class IDocumentTimerAccess { public: /** - Set mode to 'start'. - */ + * Start the idle job depending on the block count. + */ virtual void StartIdling() = 0; /** - Set mode to 'stopped'. - */ + * Stop idle processing. + */ virtual void StopIdling() = 0; /** - Increment block count. - */ + * Increment block count. + * + * Prevents further background idle processing. + */ virtual void BlockIdling() = 0; /** - Decrement block count. - */ + * Decrement block count. + * + * May start the idle job. + */ virtual void UnblockIdling() = 0; /** - Do these jobs asynchronously: do grammar checking, - do layout, and update fields. - They will be delayed until mode is start AND block count == 0. - The implementation might delay them further, for example - it might wait until the application is idle. - */ - virtual void StartBackgroundJobs() = 0; - - /** * Is the document ready to be processed? */ virtual bool IsDocIdle() const = 0; diff --git a/sw/source/core/doc/DocumentTimerManager.cxx b/sw/source/core/doc/DocumentTimerManager.cxx index 5429c6edbda6..35f2eb94dcbd 100644 --- a/sw/source/core/doc/DocumentTimerManager.cxx +++ b/sw/source/core/doc/DocumentTimerManager.cxx @@ -49,9 +49,13 @@ DocumentTimerManager::DocumentTimerManager( SwDoc& i_rSwdoc ) : m_rDoc( i_rSwdoc void DocumentTimerManager::StartIdling() { - mbStartIdleTimer = true; - if( !mIdleBlockCount ) + if( !mIdleBlockCount && !maDocIdle.IsActive() ) + { + mbStartIdleTimer = false; maDocIdle.Start(); + } + else + mbStartIdleTimer = true; } void DocumentTimerManager::StopIdling() @@ -70,14 +74,10 @@ void DocumentTimerManager::UnblockIdling() { --mIdleBlockCount; if( !mIdleBlockCount && mbStartIdleTimer && !maDocIdle.IsActive() ) + { + mbStartIdleTimer = false; maDocIdle.Start(); -} - -void DocumentTimerManager::StartBackgroundJobs() -{ - // Trigger DoIdleJobs(), asynchronously. - if (!maDocIdle.IsActive()) //fdo#73165 if the timer is already running don't restart from 0 - maDocIdle.Start(); + } } DocumentTimerManager::IdleJob DocumentTimerManager::GetNextIdleJob() const @@ -123,13 +123,14 @@ DocumentTimerManager::IdleJob DocumentTimerManager::GetNextIdleJob() const return IdleJob::None; } -IMPL_LINK( DocumentTimerManager, DoIdleJobs, Timer*, pIdle, void ) +IMPL_LINK_NOARG( DocumentTimerManager, DoIdleJobs, Timer*, void ) { #ifdef TIMELOG static ::rtl::Logfile* pModLogFile = 0; if( !pModLogFile ) pModLogFile = new ::rtl::Logfile( "First DoIdleJobs" ); #endif + BlockIdling(); IdleJob eJob = GetNextIdleJob(); @@ -183,7 +184,8 @@ IMPL_LINK( DocumentTimerManager, DoIdleJobs, Timer*, pIdle, void ) } if ( IdleJob::None != eJob ) - pIdle->Start(); + StartIdling(); + UnblockIdling(); #ifdef TIMELOG if( pModLogFile && 1 != (long)pModLogFile ) diff --git a/sw/source/core/inc/DocumentTimerManager.hxx b/sw/source/core/inc/DocumentTimerManager.hxx index d8c1a76b2a14..214c0f626a75 100644 --- a/sw/source/core/inc/DocumentTimerManager.hxx +++ b/sw/source/core/inc/DocumentTimerManager.hxx @@ -54,8 +54,6 @@ public: void UnblockIdling() override; - void StartBackgroundJobs() override; - bool IsDocIdle() const override; private: diff --git a/sw/source/core/inc/docfld.hxx b/sw/source/core/inc/docfld.hxx index 9979d557a8ee..fea8face62de 100644 --- a/sw/source/core/inc/docfld.hxx +++ b/sw/source/core/inc/docfld.hxx @@ -169,7 +169,7 @@ public: if (b) { - pDocument->getIDocumentTimerAccess().StartBackgroundJobs(); + pDocument->getIDocumentTimerAccess().StartIdling(); } } diff --git a/sw/source/core/inc/rootfrm.hxx b/sw/source/core/inc/rootfrm.hxx index 8dfc3452dd94..ae32cc4e6278 100644 --- a/sw/source/core/inc/rootfrm.hxx +++ b/sw/source/core/inc/rootfrm.hxx @@ -244,7 +244,7 @@ public: // May be NULL if called from SfxBaseModel::dispose // (this happens in the build test 'rtfexport'). if (pCurrShell != nullptr) - pCurrShell->GetDoc()->getIDocumentTimerAccess().StartBackgroundJobs(); + pCurrShell->GetDoc()->getIDocumentTimerAccess().StartIdling(); } bool IsIdleFormat() const { return mbIdleFormat; } void ResetIdleFormat() { mbIdleFormat = false; } @@ -260,7 +260,7 @@ public: // May be NULL if called from SfxBaseModel::dispose // (this happens in the build test 'rtfexport'). if (pCurrShell != nullptr) - pCurrShell->GetDoc()->getIDocumentTimerAccess().StartBackgroundJobs(); + pCurrShell->GetDoc()->getIDocumentTimerAccess().StartIdling(); } } |