include/vcl/scheduler.hxx | 6 ++++-- toolkit/source/awt/vclxtoolkit.cxx | 2 +- vcl/source/app/scheduler.cxx | 21 +++++++++++++++++++-- 3 files changed, 24 insertions(+), 5 deletions(-)
New commits: commit 6a7e4abb8a280a2db39475b58ac774031c22f0ba Author: Michael Meeks <[email protected]> Date: Thu Nov 26 10:42:10 2015 +0000 vcl: fix event processing to idle - for JUnit tests. Reviewed-on: https://gerrit.libreoffice.org/20197 Reviewed-by: Michael Meeks <[email protected]> Tested-by: Michael Meeks <[email protected]> (cherry picked from commit fbdeef6b7f74a3602792d178b1e750020b2cac89) Change-Id: Ibeb1f6627815fc34c6e166357c88e076b75f6abb Reviewed-on: https://gerrit.libreoffice.org/24723 Reviewed-by: Ashod Nakashian <[email protected]> Tested-by: Ashod Nakashian <[email protected]> diff --git a/include/vcl/scheduler.hxx b/include/vcl/scheduler.hxx index 28072c1..b27e609 100644 --- a/include/vcl/scheduler.hxx +++ b/include/vcl/scheduler.hxx @@ -89,8 +89,10 @@ public: // Process one pending Timer with highhest priority static void CallbackTaskScheduling( bool ignore ); - /// Process one pending task ahead of time with highhest priority. - static void ProcessTaskScheduling( bool bTimer ); + /// Process one pending task ahead of time with highest priority. + static bool ProcessTaskScheduling( bool bTimerOnly ); + /// Process all events until we are idle + static void ProcessEventsToIdle(); }; #endif // INCLUDED_VCL_SCHEDULER_HXX diff --git a/toolkit/source/awt/vclxtoolkit.cxx b/toolkit/source/awt/vclxtoolkit.cxx index ee1f9b8..f11e167 100644 --- a/toolkit/source/awt/vclxtoolkit.cxx +++ b/toolkit/source/awt/vclxtoolkit.cxx @@ -1892,7 +1892,7 @@ void SAL_CALL VCLXToolkit::processEventsToIdle() throw (::com::sun::star::uno::RuntimeException, std::exception) { SolarMutexGuard aSolarGuard; - Scheduler::ProcessTaskScheduling(false); + Scheduler::ProcessEventsToIdle(); } } diff --git a/vcl/source/app/scheduler.cxx b/vcl/source/app/scheduler.cxx index c3cea78..1b7a9bb 100644 --- a/vcl/source/app/scheduler.cxx +++ b/vcl/source/app/scheduler.cxx @@ -109,7 +109,7 @@ void Scheduler::CallbackTaskScheduling(bool ignore) Scheduler::ProcessTaskScheduling( true ); } -void Scheduler::ProcessTaskScheduling( bool bTimer ) +bool Scheduler::ProcessTaskScheduling( bool bTimerOnly ) { // process all pending Tasks // if bTimer True, only handle timer @@ -119,12 +119,14 @@ void Scheduler::ProcessTaskScheduling( bool bTimer ) sal_uInt64 nTime = tools::Time::GetSystemTicks(); sal_uInt64 nMinPeriod = MAX_TIMER_PERIOD; pSVData->mnUpdateStack++; + bool bProcessed = false; // tdf#91727 - NB. bTimer is ultimately not used - if ((pSchedulerData = ImplSchedulerData::GetMostImportantTask(bTimer))) + if ((pSchedulerData = ImplSchedulerData::GetMostImportantTask(bTimerOnly))) { pSchedulerData->mnUpdateTime = nTime; pSchedulerData->Invoke(); + bProcessed = true; } pSchedulerData = pSVData->mpFirstSchedulerData; @@ -169,6 +171,21 @@ void Scheduler::ProcessTaskScheduling( bool bTimer ) Timer::ImplStartTimer( pSVData, nMinPeriod ); } pSVData->mnUpdateStack--; + return bProcessed; +} + +void Scheduler::ProcessEventsToIdle() +{ + // FIXME: really we should process incoming OS events too ... + int nSanity = 1000; + while (Scheduler::ProcessTaskScheduling(false)) + { + if (nSanity-- < 0) + { + SAL_WARN("vcl.schedule", "Unexpected volume of events to process"); + break; + } + } } void Scheduler::SetPriority( SchedulerPriority ePriority ) _______________________________________________ Libreoffice-commits mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
