include/svx/svdetc.hxx | 1 - include/vcl/timer.hxx | 8 +++++++- svx/source/svdraw/svdetc.cxx | 23 +++++++++-------------- 3 files changed, 16 insertions(+), 16 deletions(-)
New commits: commit e824a49a1c12533047d6a5ab8544377e8ff29863 Author: Jan-Marek Glogowski <glo...@fbihome.de> Date: Thu Aug 24 18:54:21 2017 +0200 Don't run the OLEObjCache timer for an empty cache Change-Id: I210f6bdec14491bea6d15bca133011059091f21b diff --git a/include/svx/svdetc.hxx b/include/svx/svdetc.hxx index 171e8d1318ba..33e6a8fbeec1 100644 --- a/include/svx/svdetc.hxx +++ b/include/svx/svdetc.hxx @@ -179,7 +179,6 @@ class OLEObjCache size_t nSize; AutoTimer* pTimer; - void UnloadOnDemand(); static bool UnloadObj( SdrOle2Obj* pObj ); DECL_LINK( UnloadCheckHdl, Timer*, void ); diff --git a/include/vcl/timer.hxx b/include/vcl/timer.hxx index d26004cc5312..ad2206f1e41c 100644 --- a/include/vcl/timer.hxx +++ b/include/vcl/timer.hxx @@ -59,11 +59,17 @@ public: void SetTimeout( sal_uInt64 nTimeoutMs ); sal_uInt64 GetTimeout() const { return mnTimeout; } + /** + * Activates the timer task + * + * If the timer is already active, it's reset! + * Check with Task::IsActive() to prevent reset. + */ virtual void Start() override; }; /// An auto-timer is a multi-shot timer re-emitting itself at -/// interval until destroyed. +/// interval until destroyed or stopped. class VCL_DLLPUBLIC AutoTimer : public Timer { public: diff --git a/svx/source/svdraw/svdetc.cxx b/svx/source/svdraw/svdetc.cxx index 7ea0e0b686ba..89c17590984c 100644 --- a/svx/source/svdraw/svdetc.cxx +++ b/svx/source/svdraw/svdetc.cxx @@ -112,8 +112,6 @@ OLEObjCache::OLEObjCache() pTimer = new AutoTimer( "svx OLEObjCache pTimer UnloadCheck" ); pTimer->SetInvokeHandler( LINK(this, OLEObjCache, UnloadCheckHdl) ); pTimer->SetTimeout(20000); - pTimer->Invoke(); - pTimer->Start(); } OLEObjCache::~OLEObjCache() @@ -122,7 +120,7 @@ OLEObjCache::~OLEObjCache() delete pTimer; } -void OLEObjCache::UnloadOnDemand() +IMPL_LINK_NOARG(OLEObjCache, UnloadCheckHdl, Timer*, void) { if (nSize >= maObjs.size()) return; @@ -190,11 +188,12 @@ void OLEObjCache::InsertObj(SdrOle2Obj* pObj) // insert object into first position maObjs.insert(maObjs.begin(), pObj); - if ( !bFound ) - { - // a new object was inserted, recalculate the cache - UnloadOnDemand(); - } + // if a new object was inserted, recalculate the cache + if (!bFound) + pTimer->Invoke(); + + if (!bFound || !pTimer->IsActive()) + pTimer->Start(); } void OLEObjCache::RemoveObj(SdrOle2Obj* pObj) @@ -202,6 +201,8 @@ void OLEObjCache::RemoveObj(SdrOle2Obj* pObj) std::vector<SdrOle2Obj*>::iterator it = std::find(maObjs.begin(), maObjs.end(), pObj); if (it != maObjs.end()) maObjs.erase(it); + if (maObjs.empty()) + pTimer->Stop(); } size_t OLEObjCache::size() const @@ -243,12 +244,6 @@ bool OLEObjCache::UnloadObj(SdrOle2Obj* pObj) return bUnloaded; } -IMPL_LINK_NOARG(OLEObjCache, UnloadCheckHdl, Timer*, void) -{ - UnloadOnDemand(); -} - - bool GetDraftFillColor(const SfxItemSet& rSet, Color& rCol) { drawing::FillStyle eFill=static_cast<const XFillStyleItem&>(rSet.Get(XATTR_FILLSTYLE)).GetValue(); _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits