summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/inc/IDocumentTimerAccess.hxx40
-rw-r--r--sw/source/core/doc/DocumentTimerManager.cxx24
-rw-r--r--sw/source/core/inc/DocumentTimerManager.hxx2
-rw-r--r--sw/source/core/inc/docfld.hxx2
-rw-r--r--sw/source/core/inc/rootfrm.hxx4
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();
}
}