From 092d005fe0368c57502479bc79fcee63ce07fa48 Mon Sep 17 00:00:00 2001 From: Caolán McNamara Date: Sun, 23 Dec 2018 19:39:39 +0000 Subject: Resolves: tdf#122285 task panel too short MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit there are a bunch of resizes as base starts up, and base will position the splitwin on the first time its big enough to place it and gets stuck too high up, before it goes full size. We don't want this jumping around on every subsequent user size, but we do want it to get placed at the final size during the load. So post the resize event to occur on idle, and when it finally gets a chance to run we'll be at our final size and the placement is good Change-Id: Iccb169bac93a5cf8bc931945bc7e1b71c6c9dd23 Reviewed-on: https://gerrit.libreoffice.org/65586 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- dbaccess/source/ui/control/VertSplitView.cxx | 18 ++++++++++++++++-- dbaccess/source/ui/inc/VertSplitView.hxx | 4 +++- 2 files changed, 19 insertions(+), 3 deletions(-) (limited to 'dbaccess/source') diff --git a/dbaccess/source/ui/control/VertSplitView.cxx b/dbaccess/source/ui/control/VertSplitView.cxx index 956cec1e887e..4f44d180114e 100644 --- a/dbaccess/source/ui/control/VertSplitView.cxx +++ b/dbaccess/source/ui/control/VertSplitView.cxx @@ -32,6 +32,7 @@ OSplitterView::OSplitterView(vcl::Window* _pParent) : Window(_pParent,WB_DIALOGC ,m_pSplitter( nullptr ) ,m_pLeft(nullptr) ,m_pRight(nullptr) + ,m_pResizeId(nullptr) { ImplInitSettings(); } @@ -43,6 +44,11 @@ OSplitterView::~OSplitterView() void OSplitterView::dispose() { + if (m_pResizeId) + { + RemoveUserEvent(m_pResizeId); + m_pResizeId = nullptr; + } m_pSplitter.clear(); m_pLeft.clear(); m_pRight.clear(); @@ -102,9 +108,10 @@ void OSplitterView::GetFocus() m_pRight->GrabFocus(); } -void OSplitterView::Resize() +IMPL_LINK_NOARG(OSplitterView, ResizeHdl, void*, void) { - Window::Resize(); + m_pResizeId = nullptr; + OSL_ENSURE( m_pRight, "No init called!"); Point aSplitPos; @@ -142,7 +149,14 @@ void OSplitterView::Resize() m_pRight->setPosSizePixel( aSplitPos.X(), aPlaygroundPos.Y() + aSplitPos.Y() + aSplitSize.Height(), aPlaygroundSize.Width() , aPlaygroundSize.Height() - aSplitSize.Height() - aSplitPos.Y()); } +} +void OSplitterView::Resize() +{ + Window::Resize(); + if (m_pResizeId) + RemoveUserEvent(m_pResizeId); + m_pResizeId = PostUserEvent(LINK(this, OSplitterView, ResizeHdl), this, true); } void OSplitterView::set(vcl::Window* _pRight,Window* _pLeft) diff --git a/dbaccess/source/ui/inc/VertSplitView.hxx b/dbaccess/source/ui/inc/VertSplitView.hxx index 1ccf6a0683f1..25a0a6442e81 100644 --- a/dbaccess/source/ui/inc/VertSplitView.hxx +++ b/dbaccess/source/ui/inc/VertSplitView.hxx @@ -30,9 +30,11 @@ namespace dbaui VclPtr m_pSplitter; VclPtr m_pLeft; VclPtr m_pRight; + ImplSVEvent *m_pResizeId; void ImplInitSettings(); - DECL_LINK( SplitHdl, Splitter*, void ); + DECL_LINK(SplitHdl, Splitter*, void); + DECL_LINK(ResizeHdl, void*, void); protected: virtual void DataChanged(const DataChangedEvent& rDCEvt) override; public: -- cgit