summaryrefslogtreecommitdiff
path: root/sfx2/source
diff options
context:
space:
mode:
authorNoel Grandin <noelgrandin@gmail.com>2022-09-13 22:10:15 +0200
committerNoel Grandin <noel.grandin@collabora.co.uk>2022-09-14 08:37:12 +0200
commit57145acf9ec47c23e307b7a5c0029d21d937cc35 (patch)
tree4d19e248603462502bddbfa14ef80b6be49ff2e3 /sfx2/source
parentfd3888c69abd813462360f49f853fa988764596c (diff)
simplify SfxItemDisruptor_Impl, just use Application::PostUserEvent
Change-Id: I365fb5182bff59ace3eb0ad25222d2ee53814f72 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139882 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'sfx2/source')
-rw-r--r--sfx2/source/control/itemdel.cxx47
1 files changed, 13 insertions, 34 deletions
diff --git a/sfx2/source/control/itemdel.cxx b/sfx2/source/control/itemdel.cxx
index 2b8e7db73fc6..8182595acea2 100644
--- a/sfx2/source/control/itemdel.cxx
+++ b/sfx2/source/control/itemdel.cxx
@@ -22,56 +22,35 @@
#include <itemdel.hxx>
#include <svl/poolitem.hxx>
#include <vcl/idle.hxx>
+#include <vcl/svapp.hxx>
#include <tools/debug.hxx>
class SfxItemDisruptor_Impl
{
- std::unique_ptr<SfxPoolItem> pItem;
- Idle m_Idle;
-
-private:
- DECL_LINK(Delete, Timer*, void);
-
public:
- explicit SfxItemDisruptor_Impl(std::unique_ptr<SfxPoolItem> pItemToDesrupt);
- void LaunchDeleteOnIdle();
- ~SfxItemDisruptor_Impl();
- SfxItemDisruptor_Impl(const SfxItemDisruptor_Impl&) = delete;
- SfxItemDisruptor_Impl& operator=(const SfxItemDisruptor_Impl&) = delete;
+ static void DeleteItemOnIdle(std::unique_ptr<SfxPoolItem> pItem)
+ {
+ pItem->SetKind(SfxItemKind::DeleteOnIdle);
+ Application::PostUserEvent(LINK(nullptr, SfxItemDisruptor_Impl, Delete), pItem.release());
+ // coverity[leaked_storage] - pDesruptor takes care of its own destruction at idle time
+ }
+
+ DECL_STATIC_LINK(SfxItemDisruptor_Impl, Delete, void*, void);
};
-SfxItemDisruptor_Impl::SfxItemDisruptor_Impl(std::unique_ptr<SfxPoolItem> pItemToDisrupt)
- : pItem(std::move(pItemToDisrupt))
- , m_Idle("sfx::SfxItemDisruptor_Impl m_Idle")
-{
- m_Idle.SetInvokeHandler(LINK(this, SfxItemDisruptor_Impl, Delete));
- m_Idle.SetPriority(TaskPriority::DEFAULT_IDLE);
-
- DBG_ASSERT(0 == pItem->GetRefCount(), "disrupting pooled item");
- pItem->SetKind(SfxItemKind::DeleteOnIdle);
-}
-
-void SfxItemDisruptor_Impl::LaunchDeleteOnIdle() { m_Idle.Start(); }
-
-SfxItemDisruptor_Impl::~SfxItemDisruptor_Impl()
+IMPL_STATIC_LINK(SfxItemDisruptor_Impl, Delete, void*, p, void)
{
- m_Idle.Stop();
-
+ SfxPoolItem* pItem = static_cast<SfxPoolItem*>(p);
// reset RefCount (was set to SFX_ITEMS_SPECIAL before!)
pItem->SetRefCount(0);
-
- pItem.reset();
+ delete pItem;
}
-IMPL_LINK_NOARG(SfxItemDisruptor_Impl, Delete, Timer*, void) { delete this; }
-
void DeleteItemOnIdle(std::unique_ptr<SfxPoolItem> pItem)
{
DBG_ASSERT(0 == pItem->GetRefCount(), "deleting item in use");
- SfxItemDisruptor_Impl* pDesruptor = new SfxItemDisruptor_Impl(std::move(pItem));
- pDesruptor->LaunchDeleteOnIdle();
- // coverity[leaked_storage] - pDesruptor takes care of its own destruction at idle time
+ SfxItemDisruptor_Impl::DeleteItemOnIdle(std::move(pItem));
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */