[Libreoffice-commits] core.git: include/vcl vcl/source
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Fri Jul 24 12:56:57 UTC 2020
include/vcl/InterimItemWindow.hxx | 8 ++++++++
vcl/source/control/InterimItemWindow.cxx | 25 ++++++++++++++++++++++++-
2 files changed, 32 insertions(+), 1 deletion(-)
New commits:
commit 60259499f4cf2785dd12cfb2f4e678e5fe6e0fd6
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Fri Jul 24 11:39:18 2020 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Fri Jul 24 14:56:16 2020 +0200
add Idle layout timer to InterimItemWindow
and queue_resize trigger so if its size doesn't change, but its
children's size change that they get re-layed out
Change-Id: Ia118547d1eb6e7a87b91f80b54917cd43e3bd8e2
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/99367
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/include/vcl/InterimItemWindow.hxx b/include/vcl/InterimItemWindow.hxx
index 882a01f9bd5f..4f8f9ece2848 100644
--- a/include/vcl/InterimItemWindow.hxx
+++ b/include/vcl/InterimItemWindow.hxx
@@ -11,6 +11,7 @@
#include <vcl/dllapi.h>
#include <vcl/ctrl.hxx>
+#include <vcl/idle.hxx>
#include <vcl/weld.hxx>
class VCL_DLLPUBLIC InterimItemWindow : public Control
@@ -22,6 +23,7 @@ public:
virtual void Resize() override;
virtual Size GetOptimalSize() const override;
virtual void StateChanged(StateChangedType nStateChange) override;
+ virtual void queue_resize(StateChangedType eReason = StateChangedType::Layout) override;
virtual void GetFocus() override;
bool ControlHasFocus() const;
@@ -44,6 +46,12 @@ protected:
weld::Widget* m_pWidget;
private:
+ Idle m_aLayoutIdle;
+
+ void StartIdleLayout();
+
+ DECL_LINK(DoResize, Timer*, void);
+
virtual void ImplPaintToDevice(::OutputDevice* pTargetOutDev, const Point& rPos) override;
};
diff --git a/vcl/source/control/InterimItemWindow.cxx b/vcl/source/control/InterimItemWindow.cxx
index 8b815815fbfb..e32bf52eb907 100644
--- a/vcl/source/control/InterimItemWindow.cxx
+++ b/vcl/source/control/InterimItemWindow.cxx
@@ -15,6 +15,10 @@ InterimItemWindow::InterimItemWindow(vcl::Window* pParent, const OUString& rUIXM
: Control(pParent, WB_TABSTOP | WB_DIALOGCONTROL)
, m_pWidget(nullptr) // inheritors are expected to call InitControlBase
{
+ m_aLayoutIdle.SetPriority(TaskPriority::RESIZE);
+ m_aLayoutIdle.SetInvokeHandler(LINK(this, InterimItemWindow, DoResize));
+ m_aLayoutIdle.SetDebugName("InterimItemWindow m_aLayoutIdle");
+
m_xVclContentArea = VclPtr<VclVBox>::Create(this);
m_xVclContentArea->Show();
m_xBuilder.reset(
@@ -42,10 +46,29 @@ void InterimItemWindow::dispose()
m_xBuilder.reset();
m_xVclContentArea.disposeAndClear();
+ m_aLayoutIdle.Stop();
+
Control::dispose();
}
-void InterimItemWindow::Resize()
+void InterimItemWindow::StartIdleLayout()
+{
+ if (!m_xVclContentArea)
+ return;
+ if (m_aLayoutIdle.IsActive())
+ return;
+ m_aLayoutIdle.Start();
+}
+
+void InterimItemWindow::queue_resize(StateChangedType eReason)
+{
+ Control::queue_resize(eReason);
+ StartIdleLayout();
+}
+
+void InterimItemWindow::Resize() { StartIdleLayout(); }
+
+IMPL_LINK_NOARG(InterimItemWindow, DoResize, Timer*, void)
{
vcl::Window* pChild = GetWindow(GetWindowType::FirstChild);
assert(pChild);
More information about the Libreoffice-commits
mailing list