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();

Reply via email to