diff options
-rw-r--r-- | sw/source/core/doc/DocumentTimerManager.cxx | 26 | ||||
-rw-r--r-- | sw/source/core/inc/DocumentTimerManager.hxx | 6 |
2 files changed, 29 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 ) diff --git a/sw/source/core/inc/DocumentTimerManager.hxx b/sw/source/core/inc/DocumentTimerManager.hxx index b8575192eba3..d744392b79f2 100644 --- a/sw/source/core/inc/DocumentTimerManager.hxx +++ b/sw/source/core/inc/DocumentTimerManager.hxx @@ -23,6 +23,7 @@ #include <IDocumentTimerAccess.hxx> #include <vcl/idle.hxx> +#include <vcl/timer.hxx> #include <sal/types.h> #include <tools/link.hxx> @@ -50,6 +51,10 @@ public: // Our own 'IdleTimer' calls the following method DECL_LINK( DoIdleJobs, Idle *, void ); + /// Delay starting idle jobs to allow for post-load activity. + /// Used by LOK only. + DECL_LINK( FireIdleJobsTimeout, Timer *, void ); + virtual ~DocumentTimerManager() override; private: @@ -62,6 +67,7 @@ private: bool mbStartIdleTimer; //< idle timer mode start/stop sal_Int32 mIdleBlockCount; Idle maIdle; + Timer maFireIdleJobsTimer; }; } |