summaryrefslogtreecommitdiff
path: root/sw/source/core/doc/DocumentTimerManager.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sw/source/core/doc/DocumentTimerManager.cxx')
-rw-r--r--sw/source/core/doc/DocumentTimerManager.cxx26
1 files changed, 23 insertions, 3 deletions
diff --git a/sw/source/core/doc/DocumentTimerManager.cxx b/sw/source/core/doc/DocumentTimerManager.cxx
index 4a0176b2811d..ce4af8b3353c 100644
--- a/sw/source/core/doc/DocumentTimerManager.cxx
+++ b/sw/source/core/doc/DocumentTimerManager.cxx
@@ -33,6 +33,7 @@
#include <docsh.hxx>
#include <docfld.hxx>
#include <fldbas.hxx>
+#include <comphelper/lok.hxx>
namespace sw
{
@@ -45,6 +46,10 @@ DocumentTimerManager::DocumentTimerManager( SwDoc& i_rSwdoc ) : m_rDoc( i_rSwdoc
maIdle.SetPriority( SchedulerPriority::LOWEST );
maIdle.SetIdleHdl( LINK( this, DocumentTimerManager, DoIdleJobs) );
maIdle.SetDebugName( "sw::DocumentTimerManager maIdle" );
+
+ maFireIdleJobsTimer.SetTimeoutHdl(LINK(this, DocumentTimerManager, FireIdleJobsTimeout));
+ maFireIdleJobsTimer.SetTimeout(1000); // Enough time for LOK to render the first tiles.
+ maFireIdleJobsTimer.SetDebugName("sw::DocumentTimerManager maFireIdleJobsTimer");
}
void DocumentTimerManager::StartIdling()
@@ -75,9 +80,24 @@ void DocumentTimerManager::UnblockIdling()
void DocumentTimerManager::StartBackgroundJobs()
{
- // Trigger DoIdleJobs(), asynchronously.
- if (!maIdle.IsActive()) //fdo#73165 if the timer is already running don't restart from 0
- maIdle.Start();
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ /// Reset the timer to fire after the last StartBackgroundJobs.
+ maFireIdleJobsTimer.Start();
+ StopIdling();
+ }
+ else
+ {
+ // Trigger DoIdleJobs(), asynchronously.
+ if (!maIdle.IsActive()) //fdo#73165 if the timer is already running don't restart from 0
+ maIdle.Start();
+ }
+}
+
+IMPL_LINK( DocumentTimerManager, FireIdleJobsTimeout, Timer *, pTimer, void )
+{
+ (void)pTimer;
+ StartIdling();
}
IMPL_LINK( DocumentTimerManager, DoIdleJobs, Idle*, pIdle, void )