summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-02-16 20:45:06 +0000
committerCaolán McNamara <caolanm@redhat.com>2020-02-17 12:05:37 +0100
commite05c7017a04a1c2a2ee4dc22ee53ae8d66847c32 (patch)
tree9e65dbc8c9e54b15c4de02bb076802ea8b8a73c9 /vcl
parent9abe0acb8e2b11c360b569f023d89d1e9c502f83 (diff)
Related: tdf#130414 implement queue_resize for ChildFrame
so it can respond to changes to its childrens layout request state Change-Id: I32235c1df9f315954b9d91b500388abe663fa16d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/88824 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx53
1 files changed, 40 insertions, 13 deletions
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index f6414f2f9d8c..bdaf11ffecf6 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -3461,20 +3461,47 @@ public:
}
};
- class ChildFrame : public WorkWindow
+class ChildFrame : public WorkWindow
+{
+private:
+ Idle maLayoutIdle;
+
+ DECL_LINK(ImplHandleLayoutTimerHdl, Timer*, void);
+public:
+ ChildFrame(vcl::Window* pParent, WinBits nStyle)
+ : WorkWindow(pParent, nStyle)
{
- public:
- ChildFrame(vcl::Window* pParent, WinBits nStyle)
- : WorkWindow(pParent, nStyle)
- {
- }
- virtual void Resize() override
- {
- WorkWindow::Resize();
- if (vcl::Window *pChild = GetWindow(GetWindowType::FirstChild))
- pChild->SetPosSizePixel(Point(0, 0), GetSizePixel());
- }
- };
+ maLayoutIdle.SetPriority(TaskPriority::RESIZE);
+ maLayoutIdle.SetInvokeHandler( LINK( this, ChildFrame, ImplHandleLayoutTimerHdl ) );
+ maLayoutIdle.SetDebugName( "ChildFrame maLayoutIdle" );
+ }
+
+ virtual void dispose() override
+ {
+ maLayoutIdle.Stop();
+ WorkWindow::dispose();
+ }
+
+ virtual void queue_resize(StateChangedType eReason = StateChangedType::Layout) override
+ {
+ WorkWindow::queue_resize(eReason);
+ if (maLayoutIdle.IsActive())
+ return;
+ maLayoutIdle.Start();
+ }
+
+ virtual void Resize() override
+ {
+ WorkWindow::Resize();
+ queue_resize();
+ }
+};
+
+IMPL_LINK_NOARG(ChildFrame, ImplHandleLayoutTimerHdl, Timer*, void)
+{
+ if (vcl::Window *pChild = GetWindow(GetWindowType::FirstChild))
+ pChild->SetPosSizePixel(Point(0, 0), GetSizePixel());
+}
class GtkInstanceContainer : public GtkInstanceWidget, public virtual weld::Container
{