From 522bde9470bbb321813fa5f1ca8e3c2ebb1bb5cc Mon Sep 17 00:00:00 2001 From: Szymon Kłos Date: Tue, 14 Dec 2021 18:21:39 +0100 Subject: Update styles previews in Idle MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This helps with performance when we do series of actions updating styles. In that case we will only request update. When we will reach idle state we will do it only one time. What removes unnecessary updates in the meantime. Change-Id: I9fc59992833a6cf98c42571c1189b3c5d49ba5a0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126840 Reviewed-by: Luboš Luňák Tested-by: Jenkins CollaboraOffice Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130232 Tested-by: Jenkins Reviewed-by: Szymon Kłos --- svx/source/inc/StylesPreviewWindow.hxx | 24 ++++++++++++++++++++++-- svx/source/tbxctrls/StylesPreviewWindow.cxx | 20 +++++++++++++++----- 2 files changed, 37 insertions(+), 7 deletions(-) (limited to 'svx') diff --git a/svx/source/inc/StylesPreviewWindow.hxx b/svx/source/inc/StylesPreviewWindow.hxx index 73c688fc9498..21f46a5e81b9 100644 --- a/svx/source/inc/StylesPreviewWindow.hxx +++ b/svx/source/inc/StylesPreviewWindow.hxx @@ -74,8 +74,25 @@ private: const tools::Rectangle& aContentRect, const Color& aColor); }; +class StylesListUpdateTask : public Idle +{ + StylesPreviewWindow_Base& m_rStylesList; + +public: + StylesListUpdateTask(StylesPreviewWindow_Base& rStylesList) + : Idle("StylesListUpdateTask") + , m_rStylesList(rStylesList) + { + SetPriority(TaskPriority::HIGH_IDLE); + } + + virtual void Invoke() override; +}; + class StylesPreviewWindow_Base { + friend class StylesListUpdateTask; + protected: static constexpr unsigned STYLES_COUNT = 6; @@ -83,6 +100,8 @@ protected: std::unique_ptr m_xStylesView; + StylesListUpdateTask m_aUpdateTask; + rtl::Reference m_xStatusListener; std::unique_ptr m_pStylePoolChangeListener; @@ -102,10 +121,11 @@ public: ~StylesPreviewWindow_Base(); void Select(const OUString& rStyleName); - void UpdateStylesList(); + void RequestStylesListUpdate(); private: - void Update(); + void UpdateStylesList(); + void UpdateSelection(); bool Command(const CommandEvent& rEvent); }; diff --git a/svx/source/tbxctrls/StylesPreviewWindow.cxx b/svx/source/tbxctrls/StylesPreviewWindow.cxx index 228e322be50a..2c27c2fb834f 100644 --- a/svx/source/tbxctrls/StylesPreviewWindow.cxx +++ b/svx/source/tbxctrls/StylesPreviewWindow.cxx @@ -100,7 +100,7 @@ StylePoolChangeListener::~StylePoolChangeListener() void StylePoolChangeListener::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& /*rHint*/) { - m_pPreviewControl->UpdateStylesList(); + m_pPreviewControl->RequestStylesListUpdate(); } StyleItemController::StyleItemController(const std::pair& aStyleName) @@ -358,6 +358,7 @@ StylesPreviewWindow_Base::StylesPreviewWindow_Base( const css::uno::Reference& xDispatchProvider) : m_xDispatchProvider(xDispatchProvider) , m_xStylesView(xBuilder.weld_icon_view("stylesview")) + , m_aUpdateTask(*this) , m_aDefaultStyles(std::move(aDefaultStyles)) { m_xStylesView->connect_selection_changed(LINK(this, StylesPreviewWindow_Base, Selected)); @@ -368,8 +369,7 @@ StylesPreviewWindow_Base::StylesPreviewWindow_Base( m_pStylePoolChangeListener.reset(new StylePoolChangeListener(this)); - UpdateStylesList(); - Update(); + RequestStylesListUpdate(); } IMPL_LINK(StylesPreviewWindow_Base, Selected, weld::IconView&, rIconView, void) @@ -405,6 +405,8 @@ StylesPreviewWindow_Base::~StylesPreviewWindow_Base() { m_xStatusListener->UnBind(); + m_aUpdateTask.Stop(); + try { m_xStatusListener->dispose(); @@ -420,10 +422,10 @@ void StylesPreviewWindow_Base::Select(const OUString& rStyleName) { m_sSelectedStyle = rStyleName; - Update(); + UpdateSelection(); } -void StylesPreviewWindow_Base::Update() +void StylesPreviewWindow_Base::UpdateSelection() { for (std::vector>::size_type i = 0; i < m_aAllStyles.size(); ++i) { @@ -435,6 +437,14 @@ void StylesPreviewWindow_Base::Update() } } +void StylesPreviewWindow_Base::RequestStylesListUpdate() { m_aUpdateTask.Start(); } + +void StylesListUpdateTask::Invoke() +{ + m_rStylesList.UpdateStylesList(); + m_rStylesList.UpdateSelection(); +} + void StylesPreviewWindow_Base::UpdateStylesList() { m_aAllStyles = m_aDefaultStyles; -- cgit .2 LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Thiebaud <nthiebaud@gmail.com>2013-11-09 15:28:54 -0600
committerNorbert Thiebaud <nthiebaud@gmail.com>2013-11-09 18:48:44 -0600
commit83784fc6a6f0ee50475c0305abc28ba718173adf (patch)
tree4732a3465a6156d438e1f1f64845f313494c1800 /include/svx/xit.hxx
parent7ae156f6934760e744cc58e198589186f41d5f93 (diff)
fdo#65108 inter-module includes <> include/svx