include/vcl/weld.hxx | 2 ++ vcl/inc/salvtables.hxx | 2 ++ vcl/source/app/salvtables.cxx | 25 ++++++++++++++++++++++--- vcl/unx/gtk3/gtkinst.cxx | 5 +++++ 4 files changed, 31 insertions(+), 3 deletions(-)
New commits: commit 0f17661e045e3e3732cec6e493cd20ac65dbe451 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Fri Dec 10 11:32:23 2021 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Fri Dec 10 14:48:47 2021 +0100 add resize_to_request to popover Change-Id: I4bd549efd934946f355f06645ed816acd370a51d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/126634 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index d296f1bbdd4a..40c2fbd86b49 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -2367,6 +2367,8 @@ public: = 0; virtual void popdown() = 0; + virtual void resize_to_request() = 0; + void connect_closed(const Link<weld::Popover&, void>& rLink) { m_aCloseHdl = rLink; } }; diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index 37c5930e4933..2340169b193b 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -1911,6 +1911,8 @@ public: weld::Placement ePlace = weld::Placement::Under) override; virtual void popdown() override; + + virtual void resize_to_request() override; }; class SalInstanceBox : public SalInstanceContainer, public virtual weld::Box diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index f0a2f9f7a6f4..a35c90fef9a1 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1441,20 +1441,25 @@ css::uno::Reference<css::awt::XWindow> SalInstanceWindow::GetXWindow() return xWindow; } -void SalInstanceWindow::resize_to_request() +namespace +{ +void resize_to_request(vcl::Window* pWindow) { - if (SystemWindow* pSysWin = dynamic_cast<SystemWindow*>(m_xWindow.get())) + if (SystemWindow* pSysWin = dynamic_cast<SystemWindow*>(pWindow)) { pSysWin->setOptimalLayoutSize(); return; } - if (DockingWindow* pDockWin = dynamic_cast<DockingWindow*>(m_xWindow.get())) + if (DockingWindow* pDockWin = dynamic_cast<DockingWindow*>(pWindow)) { pDockWin->setOptimalLayoutSize(); return; } assert(false && "must be system or docking window"); } +} + +void SalInstanceWindow::resize_to_request() { ::resize_to_request(m_xWindow.get()); } void SalInstanceWindow::set_modal(bool bModal) { m_xWindow->ImplGetFrame()->SetModal(bModal); } @@ -6742,6 +6747,20 @@ void SalInstancePopover::ImplPopDown() void SalInstancePopover::popdown() { ImplPopDown(); } +void SalInstancePopover::resize_to_request() +{ + ::resize_to_request(m_xPopover.get()); + + DockingManager* pDockingManager = vcl::Window::GetDockingManager(); + if (pDockingManager->IsInPopupMode(m_xPopover.get())) + { + Size aSize = m_xPopover->get_preferred_size(); + tools::Rectangle aRect = pDockingManager->GetPosSizePixel(m_xPopover.get()); + pDockingManager->SetPosSizePixel(m_xPopover.get(), aRect.Left(), aRect.Top(), aSize.Width(), + aSize.Height(), PosSizeFlags::Size); + } +} + IMPL_LINK_NOARG(SalInstancePopover, PopupModeEndHdl, FloatingWindow*, void) { signal_closed(); } SalInstanceBuilder::SalInstanceBuilder(vcl::Window* pParent, const OUString& rUIRoot, diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index 1e227e87e1b5..3f554e77c9d2 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -22230,6 +22230,11 @@ public: } } + virtual void resize_to_request() override + { + // resizing to request is what gtk does automatically + } + virtual ~GtkInstancePopover() override { PopdownAndFlushClosedSignal();