[Libreoffice-commits] core.git: vcl/unx
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Mon Feb 17 11:06:13 UTC 2020
vcl/unx/gtk3/gtk3gtkinst.cxx | 53 ++++++++++++++++++++++++++++++++-----------
1 file changed, 40 insertions(+), 13 deletions(-)
New commits:
commit e05c7017a04a1c2a2ee4dc22ee53ae8d66847c32
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Sun Feb 16 20:45:06 2020 +0000
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Feb 17 12:05:37 2020 +0100
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 at redhat.com>
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
{
More information about the Libreoffice-commits
mailing list