[Libreoffice-commits] core.git: cui/source cui/uiconfig include/sfx2 include/vcl sc/source sd/source sfx2/source sw/source sw/uiconfig vcl/inc vcl/source vcl/unx

Caolán McNamara caolanm at redhat.com
Wed Apr 4 14:03:44 UTC 2018


 cui/source/dialogs/insdlg.cxx             |  306 ++++++++++++------------------
 cui/source/factory/dlgfact.cxx            |   29 +-
 cui/source/factory/dlgfact.hxx            |   13 -
 cui/source/inc/insdlg.hxx                 |   92 ++++-----
 cui/uiconfig/ui/insertfloatingframe.ui    |  137 +++++++------
 cui/uiconfig/ui/insertoleobject.ui        |   57 +++++
 include/sfx2/filedlghelper.hxx            |   13 +
 include/sfx2/sfxdlg.hxx                   |    4 
 include/vcl/weld.hxx                      |    2 
 sc/source/ui/drawfunc/fuins2.cxx          |    2 
 sd/source/ui/func/fuinsert.cxx            |    2 
 sfx2/source/appl/shutdownicon.cxx         |    2 
 sfx2/source/dialog/dinfdlg.cxx            |    3 
 sfx2/source/dialog/filedlghelper.cxx      |   76 +++++--
 sfx2/source/dialog/filedlgimpl.hxx        |   14 +
 sfx2/source/doc/iframe.cxx                |    2 
 sw/source/uibase/wrtsh/wrtsh1.cxx         |    6 
 sw/uiconfig/swriter/ui/autoformattable.ui |    2 
 vcl/inc/unx/gtk/gtkinst.hxx               |  111 ++++++++++
 vcl/source/app/salvtables.cxx             |    8 
 vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx  |   21 +-
 vcl/unx/gtk3/gtk3gtkinst.cxx              |   14 +
 22 files changed, 563 insertions(+), 353 deletions(-)

New commits:
commit 3ff4800fe400de916c97f587322104af06cc0879
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 4 10:22:34 2018 +0100

    weld SvInsertOleDlg
    
    and
    
    weld SfxInsertFloatingFrameDialog
    
    and smuggle in the parent widget for the Gtk File dialog via
    an XWindow interface
    
    Change-Id: I971b3a0ffe661c9268115fd5d00bf8eee80e77b3
    Reviewed-on: https://gerrit.libreoffice.org/52373
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/cui/source/dialogs/insdlg.cxx b/cui/source/dialogs/insdlg.cxx
index 9db02b3b467f..a20a282ae513 100644
--- a/cui/source/dialogs/insdlg.cxx
+++ b/cui/source/dialogs/insdlg.cxx
@@ -78,24 +78,23 @@ uno::Reference< io::XInputStream > InsertObjectDialog_Impl::GetIconIfIconified(
     return uno::Reference< io::XInputStream >();
 }
 
-InsertObjectDialog_Impl::InsertObjectDialog_Impl(vcl::Window * pParent, const OUString& rID,
-    const OUString& rUIXMLDescription,
+InsertObjectDialog_Impl::InsertObjectDialog_Impl(weld::Window* pParent,
+    const OUString& rUIXMLDescription, const OString& rID,
     const css::uno::Reference < css::embed::XStorage >& xStorage)
-    : ModalDialog(pParent, rID, rUIXMLDescription)
+    : GenericDialogController(pParent, rUIXMLDescription, rID)
     , m_xStorage( xStorage )
     , aCnt( m_xStorage )
 {
 }
 
-
-IMPL_LINK_NOARG(SvInsertOleDlg, DoubleClickHdl, ListBox&, void)
+IMPL_LINK_NOARG(SvInsertOleDlg, DoubleClickHdl, weld::TreeView&, void)
 {
-    EndDialog( RET_OK );
+    m_xDialog->response(RET_OK);
 }
 
-IMPL_LINK_NOARG(SvInsertOleDlg, BrowseHdl, Button*, void)
+IMPL_LINK_NOARG(SvInsertOleDlg, BrowseHdl, weld::Button&, void)
 {
-    sfx2::FileDialogHelper aHelper(ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, FileDialogFlags::NONE, this);
+    sfx2::FileDialogHelper aHelper(ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, FileDialogFlags::NONE, m_xDialog.get());
     Reference< XFilePicker3 > xFilePicker = aHelper.GetFilePicker();
 
     // add filter
@@ -115,73 +114,49 @@ IMPL_LINK_NOARG(SvInsertOleDlg, BrowseHdl, Button*, void)
     {
         Sequence< OUString > aPathSeq( xFilePicker->getSelectedFiles() );
         INetURLObject aObj( aPathSeq[0] );
-        m_pEdFilepath->SetText( aObj.PathToFileName() );
+        m_xEdFilepath->set_text(aObj.PathToFileName());
     }
 }
 
-
-IMPL_LINK_NOARG(SvInsertOleDlg, RadioHdl, Button*, void)
+IMPL_LINK_NOARG(SvInsertOleDlg, RadioHdl, weld::Button&, void)
 {
-    if ( m_pRbNewObject->IsChecked() )
+    if (m_xRbNewObject->get_active())
     {
-        m_pObjectTypeFrame->Show();
-        m_pFileFrame->Hide();
+        m_xObjectTypeFrame->show();
+        m_xFileFrame->hide();
     }
     else
     {
-        m_pFileFrame->Show();
-        m_pObjectTypeFrame->Hide();
+        m_xFileFrame->show();
+        m_xObjectTypeFrame->hide();
     }
 }
 
-
-SvInsertOleDlg::SvInsertOleDlg
-(
-    vcl::Window* pParent,
-    const Reference < embed::XStorage >& xStorage,
-    const SvObjectServerList* pServers
-)
-    : InsertObjectDialog_Impl( pParent, "InsertOLEObjectDialog", "cui/ui/insertoleobject.ui", xStorage ),
-    m_pServers( pServers )
-{
-    get(m_pRbNewObject, "createnew");
-    get(m_pRbObjectFromfile, "createfromfile");
-    get(m_pObjectTypeFrame, "objecttypeframe");
-    get(m_pLbObjecttype, "types");
-    get(m_pFileFrame, "fileframe");
-    get(m_pEdFilepath, "urled");
-    get(m_pBtnFilepath, "urlbtn");
-    get(m_pCbFilelink, "linktofile");
-    get(m_pCbAsIcon, "asicon");
-    m_pLbObjecttype->SetDoubleClickHdl( LINK( this, SvInsertOleDlg, DoubleClickHdl ) );
-    m_pBtnFilepath->SetClickHdl( LINK( this, SvInsertOleDlg, BrowseHdl ) );
-    Link<Button*,void> aLink( LINK( this, SvInsertOleDlg, RadioHdl ) );
-    m_pRbNewObject->SetClickHdl( aLink );
-    m_pRbObjectFromfile->SetClickHdl( aLink );
-    m_pRbNewObject->Check();
-    RadioHdl( nullptr );
-}
-
-SvInsertOleDlg::~SvInsertOleDlg()
-{
-    disposeOnce();
-}
-
-void SvInsertOleDlg::dispose()
+SvInsertOleDlg::SvInsertOleDlg(weld::Window* pParent, const Reference<embed::XStorage>& xStorage,
+        const SvObjectServerList* pServers)
+    : InsertObjectDialog_Impl( pParent, "cui/ui/insertoleobject.ui", "InsertOLEObjectDialog", xStorage)
+    , m_pServers( pServers )
+    , m_xRbNewObject(m_xBuilder->weld_radio_button("createnew"))
+    , m_xRbObjectFromfile(m_xBuilder->weld_radio_button("createfromfile"))
+    , m_xObjectTypeFrame(m_xBuilder->weld_frame("objecttypeframe"))
+    , m_xLbObjecttype(m_xBuilder->weld_tree_view("types"))
+    , m_xFileFrame(m_xBuilder->weld_frame("fileframe"))
+    , m_xEdFilepath(m_xBuilder->weld_entry("urled"))
+    , m_xBtnFilepath(m_xBuilder->weld_button("urlbtn"))
+    , m_xCbFilelink(m_xBuilder->weld_check_button("linktofile"))
+    , m_xCbAsIcon(m_xBuilder->weld_check_button("asicon"))
 {
-    m_pRbNewObject.clear();
-    m_pRbObjectFromfile.clear();
-    m_pObjectTypeFrame.clear();
-    m_pLbObjecttype.clear();
-    m_pFileFrame.clear();
-    m_pEdFilepath.clear();
-    m_pBtnFilepath.clear();
-    m_pCbFilelink.clear();
-    m_pCbAsIcon.clear();
-    InsertObjectDialog_Impl::dispose();
+    m_xLbObjecttype->set_size_request(m_xLbObjecttype->get_approximate_digit_width() * 32,
+                                      m_xLbObjecttype->get_height_rows(6));
+    m_xLbObjecttype->connect_row_activated(LINK(this, SvInsertOleDlg, DoubleClickHdl));
+    m_xBtnFilepath->connect_clicked(LINK( this, SvInsertOleDlg, BrowseHdl));
+    Link<weld::Button&,void> aLink( LINK( this, SvInsertOleDlg, RadioHdl ) );
+    m_xRbNewObject->connect_clicked( aLink );
+    m_xRbObjectFromfile->connect_clicked( aLink );
+    m_xRbNewObject->set_active(true);
 }
 
-short SvInsertOleDlg::Execute()
+short SvInsertOleDlg::execute()
 {
     short nRet = RET_OK;
     SvObjectServerList  aObjS;
@@ -193,22 +168,22 @@ short SvInsertOleDlg::Execute()
     }
 
     // fill listbox and select default
-    m_pLbObjecttype->SetUpdateMode( false );
+    m_xLbObjecttype->freeze();
     for ( sal_uLong i = 0; i < m_pServers->Count(); i++ )
-        m_pLbObjecttype->InsertEntry( (*m_pServers)[i].GetHumanName() );
-    m_pLbObjecttype->SetUpdateMode( true );
-    m_pLbObjecttype->SelectEntryPos(0);
+        m_xLbObjecttype->append_text((*m_pServers)[i].GetHumanName());
+    m_xLbObjecttype->thaw();
+    m_xLbObjecttype->select(0);
     OUString aName;
 
     DBG_ASSERT( m_xStorage.is(), "No storage!");
-    if ( m_xStorage.is() && ( nRet = Dialog::Execute() ) == RET_OK )
+    if ( m_xStorage.is() && ( nRet = run() ) == RET_OK )
     {
         OUString aFileName;
         bool bCreateNew = IsCreateNew();
         if ( bCreateNew )
         {
             // create and insert new embedded object
-            OUString aServerName = m_pLbObjecttype->GetSelectedEntry();
+            OUString aServerName = m_xLbObjecttype->get_selected();
             const SvObjectServer* pS = m_pServers->Get( aServerName );
             if ( pS )
             {
@@ -268,7 +243,7 @@ short SvInsertOleDlg::Execute()
                         OUString aErr(SvtResId(STR_ERROR_OBJNOCREATE_FROM_FILE));
                         aErr = aErr.replaceFirst( "%", aFileName );
 
-                        std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+                        std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
                                                                   VclMessageType::Warning, VclButtonsType::Ok, aErr));
                         xBox->run();
                     }
@@ -279,7 +254,7 @@ short SvInsertOleDlg::Execute()
                         OUString aErr(SvtResId(STR_ERROR_OBJNOCREATE));
                         aErr = aErr.replaceFirst( "%", aServerName );
 
-                        std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+                        std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
                                                                   VclMessageType::Warning, VclButtonsType::Ok, aErr));
                         xBox->run();
                     }
@@ -288,12 +263,12 @@ short SvInsertOleDlg::Execute()
         }
         else
         {
-            aFileName = m_pEdFilepath->GetText();
+            aFileName = m_xEdFilepath->get_text();
             INetURLObject aURL;
             aURL.SetSmartProtocol( INetProtocol::File );
             aURL.SetSmartURL( aFileName );
             aFileName = aURL.GetMainURL( INetURLObject::DecodeMechanism::NONE );
-            bool bLink = m_pCbFilelink->IsChecked();
+            bool bLink = m_xCbFilelink->get_active();
 
             if ( !aFileName.isEmpty() )
             {
@@ -323,13 +298,13 @@ short SvInsertOleDlg::Execute()
                 OUString aErr(SvtResId(STR_ERROR_OBJNOCREATE_FROM_FILE));
                 aErr = aErr.replaceFirst( "%", aFileName );
 
-                std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
+                std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(m_xDialog.get(),
                                                           VclMessageType::Warning, VclButtonsType::Ok, aErr));
                 xBox->run();
             }
             else
             {
-                if (m_pCbAsIcon->IsChecked())
+                if (m_xCbAsIcon->get_active())
                 {
                     //something nice here I guess would be to write the filename into
                     //the image with this icon above it
@@ -361,78 +336,54 @@ uno::Reference< io::XInputStream > SvInsertOleDlg::GetIconIfIconified( OUString*
 }
 
 
-SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( vcl::Window *pParent,
-                            const css::uno::Reference < css::embed::XStorage >& xStorage )
-    : InsertObjectDialog_Impl( pParent, "InsertFloatingFrameDialog", "cui/ui/insertfloatingframe.ui",
-                              xStorage )
+SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog(weld::Window *pParent,
+                            const css::uno::Reference < css::embed::XStorage >& xStorage)
+    : InsertObjectDialog_Impl(pParent, "cui/ui/insertfloatingframe.ui", "InsertFloatingFrameDialog",
+                              xStorage)
 {
     Init();
 }
 
-SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog( vcl::Window *pParent,
-                            const uno::Reference < embed::XEmbeddedObject >& xObj )
-    : InsertObjectDialog_Impl( pParent, "InsertFloatingFrameDialog", "cui/ui/insertfloatingframe.ui",
-                              uno::Reference < embed::XStorage >() )
+SfxInsertFloatingFrameDialog::SfxInsertFloatingFrameDialog(weld::Window *pParent,
+                            const uno::Reference < embed::XEmbeddedObject >& xObj)
+    : InsertObjectDialog_Impl(pParent, "cui/ui/insertfloatingframe.ui", "InsertFloatingFrameDialog",
+                              uno::Reference<embed::XStorage>())
 {
     m_xObj = xObj;
 
     Init();
 }
 
-SfxInsertFloatingFrameDialog::~SfxInsertFloatingFrameDialog()
-{
-    disposeOnce();
-}
-
-void SfxInsertFloatingFrameDialog::dispose()
-{
-    m_pEDName.clear();
-    m_pEDURL.clear();
-    m_pBTOpen.clear();
-    m_pRBScrollingOn.clear();
-    m_pRBScrollingOff.clear();
-    m_pRBScrollingAuto.clear();
-    m_pRBFrameBorderOn.clear();
-    m_pRBFrameBorderOff.clear();
-    m_pFTMarginWidth.clear();
-    m_pNMMarginWidth.clear();
-    m_pCBMarginWidthDefault.clear();
-    m_pFTMarginHeight.clear();
-    m_pNMMarginHeight.clear();
-    m_pCBMarginHeightDefault.clear();
-    InsertObjectDialog_Impl::dispose();
-}
-
 void SfxInsertFloatingFrameDialog::Init()
 {
-    get(m_pEDName, "edname");
-    get(m_pEDURL, "edurl");
-    get(m_pBTOpen, "buttonbrowse");
-    get(m_pRBScrollingOn, "scrollbaron");
-    get(m_pRBScrollingOff, "scrollbaroff");
-    get(m_pRBScrollingAuto, "scrollbarauto");
-    get(m_pRBFrameBorderOn, "borderon");
-    get(m_pRBFrameBorderOff, "borderoff");
-    get(m_pFTMarginWidth, "widthlabel");
-    get(m_pNMMarginWidth, "width");
-    get(m_pCBMarginWidthDefault, "defaultwidth");
-    get(m_pFTMarginHeight, "heightlabel");
-    get(m_pNMMarginHeight, "height");
-    get(m_pCBMarginHeightDefault, "defaultheight");
-
-    Link<Button*, void> aLink( LINK( this, SfxInsertFloatingFrameDialog, CheckHdl ) );
-    m_pCBMarginWidthDefault->SetClickHdl( aLink );
-    m_pCBMarginHeightDefault->SetClickHdl( aLink );
-
-    m_pCBMarginWidthDefault->Check();
-    m_pCBMarginHeightDefault->Check();
-    m_pRBScrollingAuto->Check();
-    m_pRBFrameBorderOn->Check();
-
-    m_pBTOpen->SetClickHdl( LINK( this, SfxInsertFloatingFrameDialog, OpenHdl ) );
+    m_xEDName.reset(m_xBuilder->weld_entry("edname"));
+    m_xEDURL.reset(m_xBuilder->weld_entry("edurl"));
+    m_xBTOpen.reset(m_xBuilder->weld_button("buttonbrowse"));
+    m_xRBScrollingOn.reset(m_xBuilder->weld_radio_button("scrollbaron"));
+    m_xRBScrollingOff.reset(m_xBuilder->weld_radio_button("scrollbaroff"));
+    m_xRBScrollingAuto.reset(m_xBuilder->weld_radio_button("scrollbarauto"));
+    m_xRBFrameBorderOn.reset(m_xBuilder->weld_radio_button("borderon"));
+    m_xRBFrameBorderOff.reset(m_xBuilder->weld_radio_button("borderoff"));
+    m_xFTMarginWidth.reset(m_xBuilder->weld_label("widthlabel"));
+    m_xNMMarginWidth.reset(m_xBuilder->weld_spin_button("width"));
+    m_xCBMarginWidthDefault.reset(m_xBuilder->weld_check_button("defaultwidth"));
+    m_xFTMarginHeight.reset(m_xBuilder->weld_label("heightlabel"));
+    m_xNMMarginHeight.reset(m_xBuilder->weld_spin_button("height"));
+    m_xCBMarginHeightDefault.reset(m_xBuilder->weld_check_button("defaultheight"));
+
+    Link<weld::Button&, void> aLink(LINK(this, SfxInsertFloatingFrameDialog, CheckHdl));
+    m_xCBMarginWidthDefault->connect_clicked(aLink);
+    m_xCBMarginHeightDefault->connect_clicked(aLink);
+
+    m_xCBMarginWidthDefault->set_active(true);
+    m_xCBMarginHeightDefault->set_active(true);
+    m_xRBScrollingAuto->set_active(true);
+    m_xRBFrameBorderOn->set_active(true);
+
+    m_xBTOpen->connect_clicked(LINK(this, SfxInsertFloatingFrameDialog, OpenHdl));
 }
 
-short SfxInsertFloatingFrameDialog::Execute()
+short SfxInsertFloatingFrameDialog::execute()
 {
     short nRet = RET_OK;
     bool bOK = false;
@@ -447,10 +398,10 @@ short SfxInsertFloatingFrameDialog::Execute()
             OUString aStr;
             uno::Any aAny = xSet->getPropertyValue( "FrameURL" );
             if ( aAny >>= aStr )
-                m_pEDURL->SetText( aStr );
+                m_xEDURL->set_text( aStr );
             aAny = xSet->getPropertyValue( "FrameName" );
             if ( aAny >>= aStr )
-                m_pEDName->SetText( aStr );
+                m_xEDName->set_text(aStr);
 
             sal_Int32 nSize = SIZE_NOT_SET;
             aAny = xSet->getPropertyValue( "FrameMarginWidth" );
@@ -458,26 +409,26 @@ short SfxInsertFloatingFrameDialog::Execute()
 
             if ( nSize == SIZE_NOT_SET )
             {
-                m_pCBMarginWidthDefault->Check();
-                m_pNMMarginWidth->SetText( OUString::number(DEFAULT_MARGIN_WIDTH) );
-                m_pFTMarginWidth->Enable( false );
-                m_pNMMarginWidth->Enable( false );
+                m_xCBMarginWidthDefault->set_active(true);
+                m_xNMMarginWidth->set_text(OUString::number(DEFAULT_MARGIN_WIDTH));
+                m_xFTMarginWidth->set_sensitive(false);
+                m_xNMMarginWidth->set_sensitive(false);
             }
             else
-                m_pNMMarginWidth->SetText( OUString::number( nSize ) );
+                m_xNMMarginWidth->set_text(OUString::number(nSize));
 
             aAny = xSet->getPropertyValue( "FrameMarginHeight" );
             aAny >>= nSize;
 
             if ( nSize == SIZE_NOT_SET )
             {
-                m_pCBMarginHeightDefault->Check();
-                m_pNMMarginHeight->SetText( OUString::number(DEFAULT_MARGIN_HEIGHT) );
-                m_pFTMarginHeight->Enable( false );
-                m_pNMMarginHeight->Enable( false );
+                m_xCBMarginHeightDefault->set_active(true);
+                m_xNMMarginHeight->set_text(OUString::number(DEFAULT_MARGIN_HEIGHT));
+                m_xFTMarginHeight->set_sensitive(false);
+                m_xNMMarginHeight->set_sensitive(false);
             }
             else
-                m_pNMMarginHeight->SetText( OUString::number( nSize ) );
+                m_xNMMarginHeight->set_text(OUString::number(nSize));
 
             bool bScrollOn = false;
             bool bScrollOff = false;
@@ -496,9 +447,9 @@ short SfxInsertFloatingFrameDialog::Execute()
             else
                 bScrollAuto = true;
 
-            m_pRBScrollingOn->Check( bScrollOn );
-            m_pRBScrollingOff->Check( bScrollOff );
-            m_pRBScrollingAuto->Check( bScrollAuto );
+            m_xRBScrollingOn->set_sensitive(bScrollOn);
+            m_xRBScrollingOff->set_sensitive(bScrollOff);
+            m_xRBScrollingAuto->set_sensitive(bScrollAuto);
 
             bSet = false;
             aAny = xSet->getPropertyValue( "FrameIsAutoBorder" );
@@ -507,11 +458,11 @@ short SfxInsertFloatingFrameDialog::Execute()
             {
                 aAny = xSet->getPropertyValue( "FrameIsBorder" );
                 aAny >>= bSet;
-                m_pRBFrameBorderOn->Check( bSet );
-                m_pRBFrameBorderOff->Check( !bSet );
+                m_xRBFrameBorderOn->set_active(bSet);
+                m_xRBFrameBorderOff->set_active(!bSet);
             }
 
-            SetUpdateMode( true );
+//TODO            SetUpdateMode( true );
             bOK = true;
         }
         catch ( uno::Exception& )
@@ -525,15 +476,15 @@ short SfxInsertFloatingFrameDialog::Execute()
         bOK = m_xStorage.is();
     }
 
-    if ( bOK && ( nRet = Dialog::Execute() ) == RET_OK )
+    if ( bOK && ( nRet = run() ) == RET_OK )
     {
         OUString aURL;
-        if ( !m_pEDURL->GetText().isEmpty() )
+        if (!m_xEDURL->get_text().isEmpty())
         {
             // URL can be a valid and absolute URL or a system file name
             INetURLObject aObj;
             aObj.SetSmartProtocol( INetProtocol::File );
-            if ( aObj.SetSmartURL( m_pEDURL->GetText() ) )
+            if ( aObj.SetSmartURL( m_xEDURL->get_text() ) )
                 aURL = aObj.GetMainURL( INetURLObject::DecodeMechanism::NONE );
         }
 
@@ -556,26 +507,26 @@ short SfxInsertFloatingFrameDialog::Execute()
                 if ( bIPActive )
                     m_xObj->changeState( embed::EmbedStates::RUNNING );
 
-                OUString aName = m_pEDName->GetText();
+                OUString aName = m_xEDName->get_text();
                 ScrollingMode eScroll = ScrollingMode::No;
-                if ( m_pRBScrollingOn->IsChecked() )
+                if (m_xRBScrollingOn->get_active())
                     eScroll = ScrollingMode::Yes;
-                if ( m_pRBScrollingOff->IsChecked() )
+                if (m_xRBScrollingOff->get_active())
                     eScroll = ScrollingMode::No;
-                if ( m_pRBScrollingAuto->IsChecked() )
+                if (m_xRBScrollingAuto->get_active())
                     eScroll = ScrollingMode::Auto;
 
-                bool bHasBorder = m_pRBFrameBorderOn->IsChecked();
+                bool bHasBorder = m_xRBFrameBorderOn->get_active();
 
                 long lMarginWidth;
-                if ( !m_pCBMarginWidthDefault->IsChecked() )
-                    lMarginWidth = static_cast<long>(m_pNMMarginWidth->GetText().toInt32());
+                if (!m_xCBMarginWidthDefault->get_active())
+                    lMarginWidth = static_cast<long>(m_xNMMarginWidth->get_text().toInt32());
                 else
                     lMarginWidth = SIZE_NOT_SET;
 
                 long lMarginHeight;
-                if ( !m_pCBMarginHeightDefault->IsChecked() )
-                    lMarginHeight = static_cast<long>(m_pNMMarginHeight->GetText().toInt32());
+                if (!m_xCBMarginHeightDefault->get_active())
+                    lMarginHeight = static_cast<long>(m_xNMMarginHeight->get_text().toInt32());
                 else
                     lMarginHeight = SIZE_NOT_SET;
 
@@ -604,42 +555,39 @@ short SfxInsertFloatingFrameDialog::Execute()
     return nRet;
 }
 
-
-IMPL_LINK( SfxInsertFloatingFrameDialog, CheckHdl, Button*, pButton, void )
+IMPL_LINK(SfxInsertFloatingFrameDialog, CheckHdl, weld::Button&, rButton, void)
 {
-    CheckBox* pCB = static_cast<CheckBox*>(pButton);
-    if ( pCB == m_pCBMarginWidthDefault )
+    weld::CheckButton& rCB = dynamic_cast<weld::CheckButton&>(rButton);
+    if (&rCB == m_xCBMarginWidthDefault.get())
     {
-        if ( pCB->IsChecked() )
-            m_pNMMarginWidth->SetText( OUString::number(DEFAULT_MARGIN_WIDTH) );
-        m_pFTMarginWidth->Enable( !pCB->IsChecked() );
-        m_pNMMarginWidth->Enable( !pCB->IsChecked() );
+        if (rCB.get_active())
+            m_xNMMarginWidth->set_text(OUString::number(DEFAULT_MARGIN_WIDTH));
+        m_xFTMarginWidth->set_sensitive(!rCB.get_active());
+        m_xNMMarginWidth->set_sensitive(!rCB.get_active());
     }
 
-    if ( pCB == m_pCBMarginHeightDefault )
+    if (&rCB == m_xCBMarginHeightDefault.get())
     {
-        if ( pCB->IsChecked() )
-            m_pNMMarginHeight->SetText( OUString::number(DEFAULT_MARGIN_HEIGHT) );
-        m_pFTMarginHeight->Enable( !pCB->IsChecked() );
-        m_pNMMarginHeight->Enable( !pCB->IsChecked() );
+        if (rCB.get_active())
+            m_xNMMarginHeight->set_text(OUString::number(DEFAULT_MARGIN_HEIGHT));
+        m_xFTMarginHeight->set_sensitive(!rCB.get_active());
+        m_xNMMarginHeight->set_sensitive(!rCB.get_active());
     }
 }
 
-
-IMPL_LINK_NOARG( SfxInsertFloatingFrameDialog, OpenHdl, Button*, void)
+IMPL_LINK_NOARG( SfxInsertFloatingFrameDialog, OpenHdl, weld::Button&, void)
 {
     // create the file dialog
     sfx2::FileDialogHelper aFileDlg(
             ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, FileDialogFlags::NONE, OUString(),
-            SfxFilterFlags::NONE, SfxFilterFlags::NONE, this);
+            SfxFilterFlags::NONE, SfxFilterFlags::NONE, m_xDialog.get());
 
     // set the title
     aFileDlg.SetTitle(CuiResId(RID_SVXSTR_SELECT_FILE_IFRAME));
 
     // show the dialog
     if ( aFileDlg.Execute() == ERRCODE_NONE )
-        m_pEDURL->SetText(
-            INetURLObject( aFileDlg.GetPath() ).GetMainURL( INetURLObject::DecodeMechanism::WithCharset ) );
+        m_xEDURL->set_text(INetURLObject(aFileDlg.GetPath()).GetMainURL(INetURLObject::DecodeMechanism::WithCharset));
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/factory/dlgfact.cxx b/cui/source/factory/dlgfact.cxx
index 644326aa7c5a..8a8647b088af 100644
--- a/cui/source/factory/dlgfact.cxx
+++ b/cui/source/factory/dlgfact.cxx
@@ -158,7 +158,11 @@ short AbstractPasteDialog_Impl::Execute()
     return m_xDlg->run();
 }
 
-IMPL_ABSTDLG_BASE(AbstractInsertObjectDialog_Impl);
+short AbstractInsertObjectDialog_Impl::Execute()
+{
+    return m_xDlg->execute();
+}
+
 IMPL_ABSTDLG_BASE(AbstractLinksDialog_Impl);
 IMPL_ABSTDLG_BASE(AbstractSpellDialog_Impl);
 IMPL_ABSTDLG_BASE(AbstractSvxPostItDialog_Impl);
@@ -390,17 +394,17 @@ vcl::Window* AbstractHyphenWordDialog_Impl::GetWindow()
 
 Reference < css::embed::XEmbeddedObject > AbstractInsertObjectDialog_Impl::GetObject()
 {
-   return pDlg->GetObject();
+   return m_xDlg->GetObject();
 }
 
 bool AbstractInsertObjectDialog_Impl::IsCreateNew()
 {
-    return pDlg->IsCreateNew();
+    return m_xDlg->IsCreateNew();
 }
 
 ::Reference< css::io::XInputStream > AbstractInsertObjectDialog_Impl::GetIconIfIconified( OUString* pGraphicMediaType )
 {
-   return pDlg->GetIconIfIconified( pGraphicMediaType );
+   return m_xDlg->GetIconIfIconified( pGraphicMediaType );
 }
 
 void AbstractPasteDialog_Impl::Insert(SotClipboardFormatId nFormat, const OUString& rFormatName)
@@ -1478,15 +1482,14 @@ GetTabPageRanges AbstractDialogFactory_Impl::GetTabPageRangesFunc( sal_uInt16 nI
     return nullptr;
 }
 
-VclPtr<SfxAbstractInsertObjectDialog> AbstractDialogFactory_Impl::CreateInsertObjectDialog( vcl::Window* pParent, const OUString& rCommand,
-            const Reference < css::embed::XStorage >& xStor,
-            const SvObjectServerList* pList )
+VclPtr<SfxAbstractInsertObjectDialog> AbstractDialogFactory_Impl::CreateInsertObjectDialog(weld::Window* pParent, const OUString& rCommand,
+            const Reference <css::embed::XStorage>& xStor, const SvObjectServerList* pList)
 {
     InsertObjectDialog_Impl* pDlg=nullptr;
     if ( rCommand == ".uno:InsertObject" )
-        pDlg = VclPtr<SvInsertOleDlg>::Create( pParent, xStor, pList );
+        pDlg = new SvInsertOleDlg(pParent, xStor, pList);
     else if ( rCommand == ".uno:InsertObjectFloatingFrame" )
-        pDlg = VclPtr<SfxInsertFloatingFrameDialog>::Create( pParent, xStor );
+        pDlg = new SfxInsertFloatingFrameDialog(pParent, xStor);
 
     if ( pDlg )
     {
@@ -1496,14 +1499,14 @@ VclPtr<SfxAbstractInsertObjectDialog> AbstractDialogFactory_Impl::CreateInsertOb
     return nullptr;
 }
 
-VclPtr<VclAbstractDialog> AbstractDialogFactory_Impl::CreateEditObjectDialog( const OUString& rCommand,
-            const Reference < css::embed::XEmbeddedObject >& xObj )
+VclPtr<VclAbstractDialog> AbstractDialogFactory_Impl::CreateEditObjectDialog(weld::Window* pParent, const OUString& rCommand,
+            const Reference<css::embed::XEmbeddedObject>& xObj)
 {
     if ( rCommand == ".uno:InsertObjectFloatingFrame" )
     {
-        VclPtrInstance<SfxInsertFloatingFrameDialog> pDlg( nullptr, xObj );
+        SfxInsertFloatingFrameDialog* pDlg = new SfxInsertFloatingFrameDialog(pParent, xObj);
         pDlg->SetHelpId( OUStringToOString( rCommand, RTL_TEXTENCODING_UTF8 ) );
-        return VclPtr<CuiVclAbstractDialog_Impl>::Create( pDlg );
+        return VclPtr<AbstractInsertObjectDialog_Impl>::Create( pDlg );
     }
     return nullptr;
 }
diff --git a/cui/source/factory/dlgfact.hxx b/cui/source/factory/dlgfact.hxx
index 771f6eafd611..ae87ab25bb72 100644
--- a/cui/source/factory/dlgfact.hxx
+++ b/cui/source/factory/dlgfact.hxx
@@ -432,7 +432,14 @@ class AbstractSvxAreaTabDialog_Impl :public AbstractSvxAreaTabDialog
 
 class AbstractInsertObjectDialog_Impl : public SfxAbstractInsertObjectDialog
 {
-    DECL_ABSTDLG_BASE(AbstractInsertObjectDialog_Impl, InsertObjectDialog_Impl)
+protected:
+    std::unique_ptr<InsertObjectDialog_Impl> m_xDlg;
+public:
+    explicit AbstractInsertObjectDialog_Impl(InsertObjectDialog_Impl* p)
+        : m_xDlg(p)
+    {
+    }
+    virtual short Execute() override;
     virtual css::uno::Reference < css::embed::XEmbeddedObject > GetObject() override;
     virtual css::uno::Reference< css::io::XInputStream > GetIconIfIconified( OUString* pGraphicMediaType ) override;
     virtual bool IsCreateNew() override;
@@ -555,10 +562,10 @@ public:
     virtual VclPtr<AbstractSvxDistributeDialog>
                                           CreateSvxDistributeDialog(const SfxItemSet& rAttr) override;
     virtual VclPtr<SfxAbstractInsertObjectDialog>
-                                           CreateInsertObjectDialog( vcl::Window* pParent, const OUString& rCommmand,
+                                           CreateInsertObjectDialog(weld::Window* pParent, const OUString& rCommmand,
                                             const css::uno::Reference < css::embed::XStorage >& xStor,
                                             const SvObjectServerList* pList ) override;
-    virtual VclPtr<VclAbstractDialog>      CreateEditObjectDialog( const OUString& rCommmand,
+    virtual VclPtr<VclAbstractDialog>      CreateEditObjectDialog(weld::Window* pParent, const OUString& rCommmand,
                                             const css::uno::Reference < css::embed::XEmbeddedObject >& xObj ) override;
     virtual VclPtr<SfxAbstractPasteDialog> CreatePasteDialog(weld::Window* pParent) override;
     virtual VclPtr<SfxAbstractLinksDialog> CreateLinksDialog( vcl::Window* pParent, sfx2::LinkManager* pMgr, bool bHTML = false, sfx2::SvBaseLink* p=nullptr  ) override;
diff --git a/cui/source/inc/insdlg.hxx b/cui/source/inc/insdlg.hxx
index 102eb19d421f..fadddf94d570 100644
--- a/cui/source/inc/insdlg.hxx
+++ b/cui/source/inc/insdlg.hxx
@@ -30,6 +30,7 @@
 #include <vcl/field.hxx>
 #include <vcl/edit.hxx>
 #include <vcl/lstbox.hxx>
+#include <vcl/weld.hxx>
 #include <svtools/svmedit.hxx>
 #include <comphelper/embeddedobjectcontainer.hxx>
 
@@ -37,52 +38,51 @@ class VclFrame;
 
 class INetURLObject;
 
-class InsertObjectDialog_Impl : public ModalDialog
+class InsertObjectDialog_Impl : public weld::GenericDialogController
 {
 protected:
     css::uno::Reference < css::embed::XEmbeddedObject > m_xObj;
     const css::uno::Reference < css::embed::XStorage > m_xStorage;
     comphelper::EmbeddedObjectContainer aCnt;
 
-    InsertObjectDialog_Impl(vcl::Window * pParent, const OUString& rID,
-        const OUString& rUIXMLDescription,
+    InsertObjectDialog_Impl(weld::Window * pParent,
+        const OUString& rUIXMLDescription, const OString& rID,
         const css::uno::Reference < css::embed::XStorage >& xStorage);
 public:
-    const css::uno::Reference < css::embed::XEmbeddedObject >& GetObject()
-                        { return m_xObj; }
-    virtual css::uno::Reference< css::io::XInputStream > GetIconIfIconified( OUString* pGraphicMediaType );
+    const css::uno::Reference<css::embed::XEmbeddedObject>& GetObject() { return m_xObj; }
+    virtual css::uno::Reference<css::io::XInputStream> GetIconIfIconified(OUString* pGraphicMediaType);
+    void SetHelpId(const OString& rHelpId) { m_xDialog->set_help_id(rHelpId); }
     virtual bool IsCreateNew() const;
+    virtual short execute() = 0;
 };
 
 class SvInsertOleDlg : public InsertObjectDialog_Impl
 {
-    VclPtr<RadioButton> m_pRbNewObject;
-    VclPtr<RadioButton> m_pRbObjectFromfile;
-    VclPtr<VclFrame> m_pObjectTypeFrame;
-    VclPtr<ListBox> m_pLbObjecttype;
-    VclPtr<VclFrame> m_pFileFrame;
-    VclPtr<Edit> m_pEdFilepath;
-    VclPtr<PushButton> m_pBtnFilepath;
-    VclPtr<CheckBox> m_pCbFilelink;
-    VclPtr<CheckBox> m_pCbAsIcon;
     const SvObjectServerList* m_pServers;
 
     css::uno::Sequence< sal_Int8 > m_aIconMetaFile;
     OUString m_aIconMediaType;
 
-    DECL_LINK(DoubleClickHdl, ListBox&, void);
-    DECL_LINK(BrowseHdl, Button*, void);
-    DECL_LINK(RadioHdl, Button*, void);
-    bool IsCreateNew() const override
-        { return m_pRbNewObject->IsChecked(); }
+    std::unique_ptr<weld::RadioButton> m_xRbNewObject;
+    std::unique_ptr<weld::RadioButton> m_xRbObjectFromfile;
+    std::unique_ptr<weld::Frame> m_xObjectTypeFrame;
+    std::unique_ptr<weld::TreeView> m_xLbObjecttype;
+    std::unique_ptr<weld::Frame> m_xFileFrame;
+    std::unique_ptr<weld::Entry> m_xEdFilepath;
+    std::unique_ptr<weld::Button> m_xBtnFilepath;
+    std::unique_ptr<weld::CheckButton> m_xCbFilelink;
+    std::unique_ptr<weld::CheckButton> m_xCbAsIcon;
+
+    DECL_LINK(DoubleClickHdl, weld::TreeView&, void);
+    DECL_LINK(BrowseHdl, weld::Button&, void);
+    DECL_LINK(RadioHdl, weld::Button&, void);
+    bool IsCreateNew() const override { return m_xRbNewObject->get_active(); }
 
 public:
-    SvInsertOleDlg( vcl::Window* pParent,
+    SvInsertOleDlg(weld::Window* pParent,
         const css::uno::Reference < css::embed::XStorage >& xStorage,
         const SvObjectServerList* pServers );
-    virtual ~SvInsertOleDlg() override;
-    virtual void dispose() override;
-    virtual short Execute() override;
+    virtual short execute() override;
 
     /// get replacement for the iconified embedded object and the mediatype of the replacement
     css::uno::Reference< css::io::XInputStream > GetIconIfIconified( OUString* pGraphicMediaType ) override;
@@ -91,37 +91,35 @@ public:
 class SfxInsertFloatingFrameDialog : public InsertObjectDialog_Impl
 {
 private:
-    VclPtr<Edit> m_pEDName;
-    VclPtr<Edit> m_pEDURL;
-    VclPtr<PushButton> m_pBTOpen;
+    std::unique_ptr<weld::Entry> m_xEDName;
+    std::unique_ptr<weld::Entry> m_xEDURL;
+    std::unique_ptr<weld::Button> m_xBTOpen;
 
-    VclPtr<RadioButton> m_pRBScrollingOn;
-    VclPtr<RadioButton> m_pRBScrollingOff;
-    VclPtr<RadioButton> m_pRBScrollingAuto;
+    std::unique_ptr<weld::RadioButton> m_xRBScrollingOn;
+    std::unique_ptr<weld::RadioButton> m_xRBScrollingOff;
+    std::unique_ptr<weld::RadioButton> m_xRBScrollingAuto;
 
-    VclPtr<RadioButton> m_pRBFrameBorderOn;
-    VclPtr<RadioButton> m_pRBFrameBorderOff;
+    std::unique_ptr<weld::RadioButton> m_xRBFrameBorderOn;
+    std::unique_ptr<weld::RadioButton> m_xRBFrameBorderOff;
 
-    VclPtr<FixedText> m_pFTMarginWidth;
-    VclPtr<NumericField> m_pNMMarginWidth;
-    VclPtr<CheckBox> m_pCBMarginWidthDefault;
-    VclPtr<FixedText> m_pFTMarginHeight;
-    VclPtr<NumericField> m_pNMMarginHeight;
-    VclPtr<CheckBox> m_pCBMarginHeightDefault;
+    std::unique_ptr<weld::Label> m_xFTMarginWidth;
+    std::unique_ptr<weld::SpinButton> m_xNMMarginWidth;
+    std::unique_ptr<weld::CheckButton> m_xCBMarginWidthDefault;
+    std::unique_ptr<weld::Label> m_xFTMarginHeight;
+    std::unique_ptr<weld::SpinButton> m_xNMMarginHeight;
+    std::unique_ptr<weld::CheckButton> m_xCBMarginHeightDefault;
 
-    DECL_LINK(OpenHdl, Button*, void );
-    DECL_LINK(CheckHdl, Button*, void );
+    DECL_LINK(OpenHdl, weld::Button&, void);
+    DECL_LINK(CheckHdl, weld::Button&, void);
 
     void Init();
 
 public:
-    SfxInsertFloatingFrameDialog(vcl::Window *pParent,
-        const css::uno::Reference < css::embed::XStorage >& xStorage );
-    SfxInsertFloatingFrameDialog( vcl::Window* pParent,
-        const css::uno::Reference < css::embed::XEmbeddedObject >& xObj );
-    virtual ~SfxInsertFloatingFrameDialog() override;
-    virtual void dispose() override;
-    virtual short Execute() override;
+    SfxInsertFloatingFrameDialog(weld::Window *pParent,
+        const css::uno::Reference<css::embed::XStorage>& xStorage);
+    SfxInsertFloatingFrameDialog(weld::Window* pParent,
+        const css::uno::Reference<css::embed::XEmbeddedObject>& xObj);
+    virtual short execute() override;
 };
 
 #endif // INCLUDED_CUI_SOURCE_INC_INSDLG_HXX
diff --git a/cui/uiconfig/ui/insertfloatingframe.ui b/cui/uiconfig/ui/insertfloatingframe.ui
index 08528d2f71ed..d12d9e160da4 100644
--- a/cui/uiconfig/ui/insertfloatingframe.ui
+++ b/cui/uiconfig/ui/insertfloatingframe.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.20.4 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkAdjustment" id="adjustment1">
@@ -7,16 +7,81 @@
     <property name="step_increment">1</property>
     <property name="page_increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="upper">99</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkDialog" id="InsertFloatingFrameDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="insertfloatingframe|InsertFloatingFrameDialog">Floating Frame Properties</property>
+    <property name="modal">True</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
       <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area1">
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="ok">
+                <property name="label">gtk-ok</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="cancel">
+                <property name="label">gtk-cancel</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="help">
+                <property name="label">gtk-help</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+                <property name="secondary">True</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkBox" id="box1">
             <property name="visible">True</property>
@@ -132,7 +197,6 @@
                                 <property name="xalign">0</property>
                                 <property name="active">True</property>
                                 <property name="draw_indicator">True</property>
-                                <property name="group">scrollbaroff</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -148,7 +212,7 @@
                                 <property name="receives_default">False</property>
                                 <property name="xalign">0</property>
                                 <property name="draw_indicator">True</property>
-                                <property name="group">scrollbarauto</property>
+                                <property name="group">scrollbaron</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -220,7 +284,6 @@
                                 <property name="xalign">0</property>
                                 <property name="active">True</property>
                                 <property name="draw_indicator">True</property>
-                                <property name="group">borderoff</property>
                               </object>
                               <packing>
                                 <property name="expand">False</property>
@@ -291,8 +354,8 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="margin_right">12</property>
-                                <property name="xalign">0</property>
                                 <property name="label" translatable="yes" context="insertfloatingframe|widthlabel">Width:</property>
+                                <property name="xalign">0</property>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>
@@ -304,8 +367,8 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">False</property>
                                 <property name="margin_right">12</property>
-                                <property name="xalign">0</property>
                                 <property name="label" translatable="yes" context="insertfloatingframe|heightlabel">Height:</property>
+                                <property name="xalign">0</property>
                               </object>
                               <packing>
                                 <property name="left_attach">0</property>
@@ -329,7 +392,7 @@
                                 <property name="visible">True</property>
                                 <property name="can_focus">True</property>
                                 <property name="margin_right">12</property>
-                                <property name="adjustment">adjustment1</property>
+                                <property name="adjustment">adjustment2</property>
                               </object>
                               <packing>
                                 <property name="left_attach">1</property>
@@ -400,63 +463,6 @@
             <property name="position">0</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkButtonBox" id="dialog-action_area1">
-            <property name="can_focus">False</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="ok">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="has_default">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="cancel">
-                <property name="label">gtk-cancel</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="help">
-                <property name="label">gtk-help</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="receives_default">True</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">True</property>
-                <property name="position">2</property>
-                <property name="secondary">True</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="pack_type">end</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
       </object>
     </child>
     <action-widgets>
@@ -464,5 +470,8 @@
       <action-widget response="-6">cancel</action-widget>
       <action-widget response="-11">help</action-widget>
     </action-widgets>
+    <child>
+      <placeholder/>
+    </child>
   </object>
 </interface>
diff --git a/cui/uiconfig/ui/insertoleobject.ui b/cui/uiconfig/ui/insertoleobject.ui
index 67ac37dcdb21..c37a9ff733b7 100644
--- a/cui/uiconfig/ui/insertoleobject.ui
+++ b/cui/uiconfig/ui/insertoleobject.ui
@@ -1,15 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.20.0 -->
+<!-- Generated with glade 3.20.4 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.18"/>
+  <object class="GtkListStore" id="liststore1">
+    <columns>
+      <!-- column-name text -->
+      <column type="gchararray"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkDialog" id="InsertOLEObjectDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="insertoleobject|InsertOLEObjectDialog">Insert OLE Object</property>
+    <property name="modal">True</property>
+    <property name="default_width">0</property>
+    <property name="default_height">0</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
       <object class="GtkBox" id="dialog-vbox1">
         <property name="can_focus">False</property>
+        <property name="hexpand">True</property>
+        <property name="vexpand">True</property>
         <property name="orientation">vertical</property>
         <property name="spacing">12</property>
         <child internal-child="action_area">
@@ -71,9 +84,10 @@
         </child>
         <child>
           <object class="GtkBox" id="box1">
-            <property name="width_request">400</property>
             <property name="visible">True</property>
             <property name="can_focus">False</property>
+            <property name="hexpand">True</property>
+            <property name="vexpand">True</property>
             <property name="orientation">vertical</property>
             <property name="spacing">12</property>
             <child>
@@ -125,20 +139,50 @@
               <object class="GtkFrame" id="objecttypeframe">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="hexpand">True</property>
+                <property name="vexpand">True</property>
                 <property name="label_xalign">0</property>
                 <property name="shadow_type">none</property>
                 <child>
                   <object class="GtkAlignment" id="alignment1">
                     <property name="visible">True</property>
                     <property name="can_focus">False</property>
+                    <property name="hexpand">True</property>
+                    <property name="vexpand">True</property>
                     <property name="top_padding">6</property>
                     <property name="left_padding">12</property>
                     <child>
-                      <object class="GtkTreeView" id="types:border">
+                      <object class="GtkScrolledWindow">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <child internal-child="selection">
-                          <object class="GtkTreeSelection" id="treeview-selection1"/>
+                        <property name="hexpand">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="shadow_type">in</property>
+                        <child>
+                          <object class="GtkTreeView" id="types">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="hexpand">True</property>
+                            <property name="vexpand">True</property>
+                            <property name="model">liststore1</property>
+                            <property name="headers_visible">False</property>
+                            <property name="headers_clickable">False</property>
+                            <property name="search_column">0</property>
+                            <property name="show_expanders">False</property>
+                            <child internal-child="selection">
+                              <object class="GtkTreeSelection" id="treeview-selection1"/>
+                            </child>
+                            <child>
+                              <object class="GtkTreeViewColumn" id="treeviewcolumn1">
+                                <child>
+                                  <object class="GtkCellRendererText" id="cellrenderertext1"/>
+                                  <attributes>
+                                    <attribute name="text">0</attribute>
+                                  </attributes>
+                                </child>
+                              </object>
+                            </child>
+                          </object>
                         </child>
                       </object>
                     </child>
@@ -269,5 +313,8 @@
       <action-widget response="-6">cancel</action-widget>
       <action-widget response="-11">help</action-widget>
     </action-widgets>
+    <child>
+      <placeholder/>
+    </child>
   </object>
 </interface>
diff --git a/include/sfx2/filedlghelper.hxx b/include/sfx2/filedlghelper.hxx
index 5a6cefa5ba5a..8a5b0015a705 100644
--- a/include/sfx2/filedlghelper.hxx
+++ b/include/sfx2/filedlghelper.hxx
@@ -107,6 +107,10 @@ public:
 
                             FileDialogHelper(sal_Int16 nDialogType,
                                              FileDialogFlags nFlags,
+                                             weld::Window* _pPreferredParent);
+
+                            FileDialogHelper(sal_Int16 nDialogType,
+                                             FileDialogFlags nFlags,
                                              const OUString& rFactory,
                                              SfxFilterFlags nMust,
                                              SfxFilterFlags nDont,
@@ -115,6 +119,13 @@ public:
                             FileDialogHelper(sal_Int16 nDialogType,
                                              FileDialogFlags nFlags,
                                              const OUString& rFactory,
+                                             SfxFilterFlags nMust,
+                                             SfxFilterFlags nDont,
+                                             weld::Window* _pPreferredParent);
+
+                            FileDialogHelper(sal_Int16 nDialogType,
+                                             FileDialogFlags nFlags,
+                                             const OUString& rFactory,
                                              sal_Int16 nDialog,
                                              SfxFilterFlags nMust,
                                              SfxFilterFlags nDont,
@@ -255,7 +266,7 @@ ErrCode FileOpenDialog_Impl( const vcl::Window* pParent,
                              const css::uno::Sequence< OUString >& rBlackList = css::uno::Sequence< OUString >());
 
 
-ErrCode RequestPassword(const std::shared_ptr<const SfxFilter>& pCurrentFilter, OUString const & aURL, SfxItemSet* pSet, vcl::Window* pParent);
+ErrCode RequestPassword(const std::shared_ptr<const SfxFilter>& pCurrentFilter, OUString const & aURL, SfxItemSet* pSet, const css::uno::Reference<css::awt::XWindow>& rParent);
 }
 
 #endif
diff --git a/include/sfx2/sfxdlg.hxx b/include/sfx2/sfxdlg.hxx
index 732bb30f2ee7..9d3f23f0e3d2 100644
--- a/include/sfx2/sfxdlg.hxx
+++ b/include/sfx2/sfxdlg.hxx
@@ -134,10 +134,10 @@ public:
                                             const css::uno::Reference< css::frame::XFrame >& xViewFrame ) = 0;
     virtual CreateTabPage               GetTabPageCreatorFunc( sal_uInt16 nId ) = 0;
     virtual GetTabPageRanges            GetTabPageRangesFunc( sal_uInt16 nId ) = 0;
-    virtual VclPtr<SfxAbstractInsertObjectDialog> CreateInsertObjectDialog( vcl::Window* pParent, const OUString& rCommand,
+    virtual VclPtr<SfxAbstractInsertObjectDialog> CreateInsertObjectDialog(weld::Window* pParent, const OUString& rCommand,
             const css::uno::Reference < css::embed::XStorage >& xStor,
             const SvObjectServerList* pList )=0;
-    virtual VclPtr<VclAbstractDialog>          CreateEditObjectDialog( const OUString& rCommand,
+    virtual VclPtr<VclAbstractDialog>          CreateEditObjectDialog(weld::Window* pParent, const OUString& rCommand,
             const css::uno::Reference < css::embed::XEmbeddedObject >& xObj )=0;
     virtual VclPtr<SfxAbstractPasteDialog>    CreatePasteDialog(weld::Window* pParent) = 0;
     virtual VclPtr<SfxAbstractLinksDialog>    CreateLinksDialog( vcl::Window* pParent, sfx2::LinkManager* pMgr, bool bHTML=false, sfx2::SvBaseLink* p=nullptr )=0;
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 63b27b0f7162..52f247921289 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -142,6 +142,8 @@ public:
     virtual OUString get_title() const = 0;
     virtual void set_busy_cursor(bool bBusy) = 0;
 
+    virtual css::uno::Reference<css::awt::XWindow> GetXWindow() = 0;
+
     void connect_help(const Link<Widget&, bool>& rLink) { m_aHelpRequestHdl = rLink; }
 };
 
diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx
index 948e13d40797..b56a1c1d7f0a 100644
--- a/sc/source/ui/drawfunc/fuins2.cxx
+++ b/sc/source/ui/drawfunc/fuins2.cxx
@@ -267,7 +267,7 @@ FuInsertOLE::FuInsertOLE(ScTabViewShell* pViewSh, vcl::Window* pWin, ScDrawView*
             {
                 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
                 ScopedVclPtr<SfxAbstractInsertObjectDialog> pDlg(
-                        pFact->CreateInsertObjectDialog( pViewShell->GetWindow(), SC_MOD()->GetSlotPool()->GetSlot(nSlot)->GetCommandString(),
+                        pFact->CreateInsertObjectDialog( pViewShell->GetFrameWeld(), SC_MOD()->GetSlotPool()->GetSlot(nSlot)->GetCommandString(),
                         xStorage, &aServerLst ));
                 if ( pDlg )
                 {
diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx
index b31b22ef0d11..312a03d4c557 100644
--- a/sd/source/ui/func/fuinsert.cxx
+++ b/sd/source/ui/func/fuinsert.cxx
@@ -494,7 +494,7 @@ void FuInsertOLE::DoExecute( SfxRequest& rReq )
                 {
                     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
                     ScopedVclPtr<SfxAbstractInsertObjectDialog> pDlg(
-                            pFact->CreateInsertObjectDialog( mpViewShell->GetActiveWindow(), SD_MOD()->GetSlotPool()->GetSlot(nSlotId)->GetCommandString(),
+                            pFact->CreateInsertObjectDialog( mpViewShell->GetFrameWeld(), SD_MOD()->GetSlotPool()->GetSlot(nSlotId)->GetCommandString(),
                             xStorage, &aServerLst ));
                     if ( pDlg )
                     {
diff --git a/sfx2/source/appl/shutdownicon.cxx b/sfx2/source/appl/shutdownicon.cxx
index be129dabac5f..60b279fe2d0a 100644
--- a/sfx2/source/appl/shutdownicon.cxx
+++ b/sfx2/source/appl/shutdownicon.cxx
@@ -329,7 +329,7 @@ void ShutdownIcon::StartFileDialog()
     if ( !m_pFileDlg )
         m_pFileDlg = new FileDialogHelper(
                 ui::dialogs::TemplateDescription::FILEOPEN_READONLY_VERSION,
-                FileDialogFlags::MultiSelection, OUString(), SfxFilterFlags::NONE, SfxFilterFlags::NONE, nullptr );
+                FileDialogFlags::MultiSelection, OUString(), SfxFilterFlags::NONE, SfxFilterFlags::NONE, static_cast<const vcl::Window*>(nullptr) );
     m_pFileDlg->StartExecuteModal( LINK( this, ShutdownIcon, DialogClosedHdl_Impl ) );
 }
 
diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx
index 78d5a3a409a4..d0f87eda0829 100644
--- a/sfx2/source/dialog/dinfdlg.cxx
+++ b/sfx2/source/dialog/dinfdlg.cxx
@@ -30,6 +30,7 @@
 #include <unotools/useroptions.hxx>
 #include <svtools/controldims.hxx>
 #include <svtools/imagemgr.hxx>
+#include <toolkit/helper/vclunohelper.hxx>
 
 #include <memory>
 
@@ -869,7 +870,7 @@ IMPL_LINK_NOARG(SfxDocumentPage, ChangePassHdl, Button*, void)
         if (!pFilter)
             break;
 
-        sfx2::RequestPassword(pFilter, OUString(), pMedSet, GetParentDialog());
+        sfx2::RequestPassword(pFilter, OUString(), pMedSet, VCLUnoHelper::GetInterface(GetParentDialog()));
         pShell->SetModified();
     }
     while (false);
diff --git a/sfx2/source/dialog/filedlghelper.cxx b/sfx2/source/dialog/filedlghelper.cxx
index 8c2e0ecc4175..c8f2ad762e85 100644
--- a/sfx2/source/dialog/filedlghelper.cxx
+++ b/sfx2/source/dialog/filedlghelper.cxx
@@ -847,12 +847,22 @@ static open_or_save_t lcl_OpenOrSave(sal_Int16 const nDialogType)
 
 // FileDialogHelper_Impl
 
+css::uno::Reference<css::awt::XWindow> FileDialogHelper_Impl::GetFrameInterface()
+{
+    if (mpFrameWeld)
+        return mpFrameWeld->GetXWindow();
+    if (mpPreferredParentWindow)
+        return VCLUnoHelper::GetInterface(mpPreferredParentWindow);
+    return css::uno::Reference<css::awt::XWindow>();
+}
+
 FileDialogHelper_Impl::FileDialogHelper_Impl(
     FileDialogHelper* _pAntiImpl,
     sal_Int16 nDialogType,
     FileDialogFlags nFlags,
     sal_Int16 nDialog,
-    const vcl::Window* _pPreferredParentWindow,
+    const vcl::Window* pPreferredParentWindow,
+    weld::Window* pFrameWeld,
     const OUString& sStandardDir,
     const css::uno::Sequence< OUString >& rBlackList
     )
@@ -881,7 +891,8 @@ FileDialogHelper_Impl::FileDialogHelper_Impl(
     // create the file open dialog
     // the flags can be SFXWB_INSERT or SFXWB_MULTISELECTION
 
-    mpPreferredParentWindow = _pPreferredParentWindow ? _pPreferredParentWindow->GetSystemWindow() : nullptr;
+    mpPreferredParentWindow = pPreferredParentWindow ? pPreferredParentWindow->GetSystemWindow() : nullptr;
+    mpFrameWeld             = pFrameWeld;
     mpAntiImpl              = _pAntiImpl;
     mbHasAutoExt            = false;
     mbHasPassword           = false;
@@ -1035,7 +1046,9 @@ FileDialogHelper_Impl::FileDialogHelper_Impl(
             maPreviewIdle.SetInvokeHandler( LINK( this, FileDialogHelper_Impl, TimeOutHdl_Impl ) );
         }
 
-        Sequence < Any > aInitArguments( !mpPreferredParentWindow ? 3 : 4 );
+        auto xWindow = GetFrameInterface();
+
+        Sequence < Any > aInitArguments(!xWindow.is() ? 3 : 4);
 
         // This is a hack. We currently know that the internal file picker implementation
         // supports the extended arguments as specified below.
@@ -1045,8 +1058,8 @@ FileDialogHelper_Impl::FileDialogHelper_Impl(
         if ( mbSystemPicker )
         {
             aInitArguments[0] <<= nTemplateDescription;
-            if ( mpPreferredParentWindow )
-                aInitArguments[1] <<= VCLUnoHelper::GetInterface( mpPreferredParentWindow );
+            if (xWindow.is())
+                aInitArguments[1] <<= xWindow;
         }
         else
         {
@@ -1066,11 +1079,8 @@ FileDialogHelper_Impl::FileDialogHelper_Impl(
                                 );
 
 
-            if ( mpPreferredParentWindow )
-                aInitArguments[3] <<= NamedValue(
-                                        "ParentWindow",
-                                        makeAny( VCLUnoHelper::GetInterface( mpPreferredParentWindow ) )
-                                    );
+            if (xWindow.is())
+                aInitArguments[3] <<= NamedValue("ParentWindow", makeAny(xWindow));
         }
 
         try
@@ -1513,7 +1523,7 @@ ErrCode FileDialogHelper_Impl::execute( std::vector<OUString>& rpURLList,
                 {
                     // ask for a password
                     OUString aDocName(rpURLList[0]);
-                    ErrCode errCode = RequestPassword(pCurrentFilter, aDocName, rpSet, mpPreferredParentWindow);
+                    ErrCode errCode = RequestPassword(pCurrentFilter, aDocName, rpSet, GetFrameInterface());
                     if (errCode != ERRCODE_NONE)
                         return errCode;
                 }
@@ -1540,7 +1550,7 @@ ErrCode FileDialogHelper_Impl::execute( std::vector<OUString>& rpURLList,
                         }
                         catch( const IllegalArgumentException& )
                         {
-                            std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(mpPreferredParentWindow ? mpPreferredParentWindow->GetFrameWeld() : nullptr,
+                            std::unique_ptr<weld::MessageDialog> xBox(Application::CreateMessageDialog(GetFrameWeld(),
                                                                                      VclMessageType::Warning, VclButtonsType::Ok,
                                                                                      SfxResId(RID_SVXSTR_GPG_ENCRYPT_FAILURE)));
                             xBox->run();
@@ -2274,9 +2284,25 @@ FileDialogHelper::FileDialogHelper(
     const OUString& rFact,
     SfxFilterFlags nMust,
     SfxFilterFlags nDont,
-    const vcl::Window* _pPreferredParent)
+    const vcl::Window* pPreferredParent)
+    :   m_nError(0),
+        mpImpl(new FileDialogHelper_Impl(this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, pPreferredParent, nullptr))
+{
+
+    // create the list of filters
+    mpImpl->addFilters(
+            SfxObjectShell::GetServiceNameFromFactory(rFact), nMust, nDont );
+}
+
+FileDialogHelper::FileDialogHelper(
+    sal_Int16 nDialogType,
+    FileDialogFlags nFlags,
+    const OUString& rFact,
+    SfxFilterFlags nMust,
+    SfxFilterFlags nDont,
+    weld::Window* pPreferredParent)
     :   m_nError(0),
-        mpImpl(new FileDialogHelper_Impl(this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, _pPreferredParent))
+        mpImpl(new FileDialogHelper_Impl(this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, nullptr, pPreferredParent))
 {
 
     // create the list of filters
@@ -2293,9 +2319,9 @@ FileDialogHelper::FileDialogHelper(
     SfxFilterFlags nDont,
     const OUString& rStandardDir,
     const css::uno::Sequence< OUString >& rBlackList,
-    const vcl::Window* _pPreferredParent)
+    const vcl::Window* pPreferredParent)
     :   m_nError(0),
-        mpImpl( new FileDialogHelper_Impl( this, nDialogType, nFlags, nDialog, _pPreferredParent, rStandardDir, rBlackList ) )
+        mpImpl( new FileDialogHelper_Impl( this, nDialogType, nFlags, nDialog, pPreferredParent, nullptr, rStandardDir, rBlackList ) )
 {
     // create the list of filters
     mpImpl->addFilters(
@@ -2305,9 +2331,15 @@ FileDialogHelper::FileDialogHelper(
 FileDialogHelper::FileDialogHelper(
     sal_Int16 nDialogType,
     FileDialogFlags nFlags,
-    const vcl::Window* _pPreferredParent )
+    const vcl::Window* pPreferredParent )
+    :   m_nError(0),
+        mpImpl( new FileDialogHelper_Impl( this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, pPreferredParent, nullptr ) )
+{
+}
+
+FileDialogHelper::FileDialogHelper(sal_Int16 nDialogType, FileDialogFlags nFlags, weld::Window* pPreferredParent)
     :   m_nError(0),
-        mpImpl( new FileDialogHelper_Impl( this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, _pPreferredParent ) )
+        mpImpl( new FileDialogHelper_Impl( this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, nullptr, pPreferredParent ) )
 {
 }
 
@@ -2318,9 +2350,9 @@ FileDialogHelper::FileDialogHelper(
     const OUString& aExtName,
     const OUString& rStandardDir,
     const css::uno::Sequence< OUString >& rBlackList,
-    const vcl::Window* _pPreferredParent )
+    const vcl::Window* pPreferredParent )
     :   m_nError(0),
-        mpImpl( new FileDialogHelper_Impl( this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, _pPreferredParent,rStandardDir, rBlackList ) )
+        mpImpl( new FileDialogHelper_Impl( this, nDialogType, nFlags, SFX2_IMPL_DIALOG_CONFIG, pPreferredParent, nullptr, rStandardDir, rBlackList ) )
 {
     // the wildcard here is expected in form "*.extension"
     OUString aWildcard;
@@ -2662,9 +2694,9 @@ ErrCode FileOpenDialog_Impl( const vcl::Window* pParent,
     return nRet;
 }
 
-ErrCode RequestPassword(const std::shared_ptr<const SfxFilter>& pCurrentFilter, OUString const & aURL, SfxItemSet* pSet, vcl::Window* pPreferredParentWindow)
+ErrCode RequestPassword(const std::shared_ptr<const SfxFilter>& pCurrentFilter, OUString const & aURL, SfxItemSet* pSet, const css::uno::Reference<css::awt::XWindow>& rParent)
 {
-    uno::Reference<task::XInteractionHandler2> xInteractionHandler = task::InteractionHandler::createWithParent(::comphelper::getProcessComponentContext(), VCLUnoHelper::GetInterface(pPreferredParentWindow));
+    uno::Reference<task::XInteractionHandler2> xInteractionHandler = task::InteractionHandler::createWithParent(::comphelper::getProcessComponentContext(), rParent);
     // TODO: need a save way to distinguish MS filters from other filters
     // for now MS-filters are the only alien filters that support encryption
     bool bMSType = !pCurrentFilter->IsOwnFormat();
diff --git a/sfx2/source/dialog/filedlgimpl.hxx b/sfx2/source/dialog/filedlgimpl.hxx
index 38a894e0d42e..0d7de0b2cf22 100644
--- a/sfx2/source/dialog/filedlgimpl.hxx
+++ b/sfx2/source/dialog/filedlgimpl.hxx
@@ -53,6 +53,7 @@ namespace sfx2
         std::unique_ptr<GraphicFilter> mpGraphicFilter;
         FileDialogHelper*           mpAntiImpl;
         VclPtr<vcl::Window>         mpPreferredParentWindow;
+        weld::Window*               mpFrameWeld;
 
         ::std::vector< OUString > mlLastURLs;
 
@@ -171,7 +172,7 @@ namespace sfx2
                                     const short nDialogType,
                                     FileDialogFlags nFlags,
                                     sal_Int16 nDialog,
-                                    const vcl::Window* _pPreferredParentWindow,
+                                    const vcl::Window* _pPreferredParentWindow, weld::Window* pFrameWeld,
                                     const OUString& sStandardDir = OUString(),
                                     const css::uno::Sequence< OUString >&   rBlackList = css::uno::Sequence< OUString >()
                                 );
@@ -209,6 +210,17 @@ namespace sfx2
 
         bool             isSystemFilePicker() const { return mbSystemPicker; }
         bool             isPasswordEnabled() const { return mbIsPwdEnabled; }
+
+        weld::Window* GetFrameWeld()
+        {
+            if (mpFrameWeld)
+                return mpFrameWeld;
+            if (mpPreferredParentWindow)
+                return mpPreferredParentWindow->GetFrameWeld();
+            return nullptr;
+        }
+
+        css::uno::Reference<css::awt::XWindow> GetFrameInterface();
     };
 
 }   // end of namespace sfx2
diff --git a/sfx2/source/doc/iframe.cxx b/sfx2/source/doc/iframe.cxx
index 5a05e36aeec4..ccc726dbc865 100644
--- a/sfx2/source/doc/iframe.cxx
+++ b/sfx2/source/doc/iframe.cxx
@@ -393,7 +393,7 @@ void SAL_CALL IFrameObject::removeVetoableChangeListener(const OUString&, const
 ::sal_Int16 SAL_CALL IFrameObject::execute()
 {
     SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
-    ScopedVclPtr<VclAbstractDialog> pDlg(pFact->CreateEditObjectDialog( ".uno:InsertObjectFloatingFrame", mxObj ));
+    ScopedVclPtr<VclAbstractDialog> pDlg(pFact->CreateEditObjectDialog(nullptr, ".uno:InsertObjectFloatingFrame", mxObj)); //TODO
     if ( pDlg )
         pDlg->Execute();
     return 0;
diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx
index 59962673e9ef..12a2c158da63 100644
--- a/sw/source/uibase/wrtsh/wrtsh1.cxx
+++ b/sw/source/uibase/wrtsh/wrtsh1.cxx
@@ -375,8 +375,10 @@ void SwWrtShell::InsertObject( const svt::EmbeddedObjectRef& xRef, SvGlobalName
                     OString aCmd(".uno:");
                     aCmd += pSlot->GetUnoName();
                     SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
-                    ScopedVclPtr<SfxAbstractInsertObjectDialog> pDlg( pFact->CreateInsertObjectDialog( GetWin(), OUString::fromUtf8( aCmd ), xStor, &aServerList ));
-                    if ( pDlg )
+                    vcl::Window* pWin = GetWin();
+                    ScopedVclPtr<SfxAbstractInsertObjectDialog> pDlg(pFact->CreateInsertObjectDialog(pWin ? pWin->GetFrameWeld() : nullptr,
+                                OUString::fromUtf8( aCmd ), xStor, &aServerList));
+                    if (pDlg)
                     {
                         pDlg->Execute();
                         bDoVerb = pDlg->IsCreateNew();
diff --git a/sw/uiconfig/swriter/ui/autoformattable.ui b/sw/uiconfig/swriter/ui/autoformattable.ui
index 1d9a6eb4f8be..84539082ac5c 100644
--- a/sw/uiconfig/swriter/ui/autoformattable.ui
+++ b/sw/uiconfig/swriter/ui/autoformattable.ui
@@ -6,6 +6,8 @@
     <columns>
       <!-- column-name text -->
       <column type="gchararray"/>
+      <!-- column-name id -->
+      <column type="gchararray"/>
     </columns>
   </object>
   <object class="GtkDialog" id="AutoFormatTableDialog">
diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx
index 2da209730e93..9a3cb48dfe03 100644
--- a/vcl/inc/unx/gtk/gtkinst.hxx
+++ b/vcl/inc/unx/gtk/gtkinst.hxx
@@ -251,6 +251,117 @@ private:
     mutable std::shared_ptr<vcl::unx::GtkPrintWrapper> m_xPrintWrapper;
 };
 
+typedef cppu::WeakComponentImplHelper<css::awt::XWindow> SalGtkXWindow_Base;
+
+class SalGtkXWindow : public SalGtkXWindow_Base
+{
+private:
+    osl::Mutex m_aHelperMtx;
+    GtkWidget* m_pWidget;
+public:
+
+    SalGtkXWindow(GtkWidget* pWidget)
+        : SalGtkXWindow_Base(m_aHelperMtx)
+        , m_pWidget(pWidget)
+    {
+    }
+
+    void clear()
+    {
+        m_pWidget = nullptr;
+    }
+
+    GtkWidget * getWidget() const
+    {
+        return m_pWidget;
+    }
+
+    // css::awt::XWindow
+    void SAL_CALL setPosSize(sal_Int32, sal_Int32, sal_Int32, sal_Int32, sal_Int16) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    css::awt::Rectangle SAL_CALL getPosSize() override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL setVisible(sal_Bool) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL setEnable(sal_Bool) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL setFocus() override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL addWindowListener(const css::uno::Reference< css::awt::XWindowListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+    void SAL_CALL removeWindowListener(const css::uno::Reference< css::awt::XWindowListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL addFocusListener(const css::uno::Reference< css::awt::XFocusListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL removeFocusListener(const css::uno::Reference< css::awt::XFocusListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL addKeyListener(const css::uno::Reference< css::awt::XKeyListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL removeKeyListener(const css::uno::Reference< css::awt::XKeyListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL addMouseListener(const css::uno::Reference< css::awt::XMouseListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL removeMouseListener(const css::uno::Reference< css::awt::XMouseListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL addMouseMotionListener(const css::uno::Reference< css::awt::XMouseMotionListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL removeMouseMotionListener(const css::uno::Reference< css::awt::XMouseMotionListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL addPaintListener(const css::uno::Reference< css::awt::XPaintListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+
+    void SAL_CALL removePaintListener(const css::uno::Reference< css::awt::XPaintListener >& ) override
+    {
+        throw css::uno::RuntimeException("not implemented");
+    }
+};
+
 #endif // INCLUDED_VCL_INC_UNX_GTK_GTKINST_HXX
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 48f1959f0d74..d473f7b59ddd 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -501,6 +501,12 @@ public:
             m_xWindow->LeaveWait();
     }
 
+    virtual css::uno::Reference<css::awt::XWindow> GetXWindow() override
+    {
+        css::uno::Reference<css::awt::XWindow> xWindow(m_xWindow->GetComponentInterface(), css::uno::UNO_QUERY);
+        return xWindow;
+    }
+
     virtual ~SalInstanceWindow() override
     {
         clear_child_help(m_xWindow);
@@ -1017,7 +1023,7 @@ public:
 
     virtual void insert_text(const OUString& rText, int pos) override
     {
-        m_xTreeView->InsertEntry(rText, pos);
+        m_xTreeView->InsertEntry(rText, pos == -1 ? LISTBOX_APPEND : pos);
     }
 
     virtual void insert(int pos, const OUString& rId, const OUString& rStr, const OUString& rImage) override
diff --git a/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx b/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx
index 7437bf44cb2a..e499350b12b4 100644
--- a/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx
+++ b/vcl/unx/gtk/fpicker/SalGtkFilePicker.cxx
@@ -1582,15 +1582,20 @@ void SAL_CALL SalGtkFilePicker::initialize( const uno::Sequence<uno::Any>& aArgu
 
     if (xParentWindow.is())
     {
-        css::uno::Reference<css::awt::XSystemDependentWindowPeer> xSysDepWin(xParentWindow, css::uno::UNO_QUERY);
-        if (xSysDepWin.is())
+        if (SalGtkXWindow* pGtkXWindow = dynamic_cast<SalGtkXWindow*>(xParentWindow.get()))
+            m_pParentWidget = pGtkXWindow->getWidget();
+        else
         {
-            css::uno::Sequence<sal_Int8> aProcessIdent(16);
-            rtl_getGlobalProcessId(reinterpret_cast<sal_uInt8*>(aProcessIdent.getArray()));
-            aAny = xSysDepWin->getWindowHandle(aProcessIdent, css::lang::SystemDependent::SYSTEM_XWINDOW);
-            css::awt::SystemDependentXWindow tmp;
-            aAny >>= tmp;
-            m_pParentWidget = GetGtkSalData()->GetGtkDisplay()->findGtkWidgetForNativeHandle(tmp.WindowHandle);
+            css::uno::Reference<css::awt::XSystemDependentWindowPeer> xSysDepWin(xParentWindow, css::uno::UNO_QUERY);
+            if (xSysDepWin.is())
+            {
+                css::uno::Sequence<sal_Int8> aProcessIdent(16);
+                rtl_getGlobalProcessId(reinterpret_cast<sal_uInt8*>(aProcessIdent.getArray()));
+                aAny = xSysDepWin->getWindowHandle(aProcessIdent, css::lang::SystemDependent::SYSTEM_XWINDOW);
+                css::awt::SystemDependentXWindow tmp;
+                aAny >>= tmp;
+                m_pParentWidget = GetGtkSalData()->GetGtkDisplay()->findGtkWidgetForNativeHandle(tmp.WindowHandle);
+            }
         }
     }
 
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index ebe1e226b723..916fda03ff74 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1577,6 +1577,7 @@ class GtkInstanceWindow : public GtkInstanceContainer, public virtual weld::Wind
 {
 private:
     GtkWindow* m_pWindow;
+    rtl::Reference<SalGtkXWindow> m_xWindow; //uno api
 
     static void help_pressed(GtkAccelGroup*, GObject*, guint, GdkModifierType, gpointer widget)
     {
@@ -1608,6 +1609,13 @@ public:
         return OUString(pStr, pStr ? strlen(pStr) : 0, RTL_TEXTENCODING_UTF8);
     }
 
+    virtual css::uno::Reference<css::awt::XWindow> GetXWindow() override
+    {
+        if (!m_xWindow.is())
+            m_xWindow.set(new SalGtkXWindow(m_pWidget));
+        return css::uno::Reference<css::awt::XWindow>(m_xWindow.get());
+    }
+
     virtual void set_busy_cursor(bool bBusy) override
     {
         gtk_widget_realize(m_pWidget);
@@ -1618,6 +1626,12 @@ public:
         if (pCursor)
             g_object_unref(pCursor);
     }
+
+    virtual ~GtkInstanceWindow() override
+    {
+        if (m_xWindow.is())
+            m_xWindow->clear();
+    }
 };
 
 namespace


More information about the Libreoffice-commits mailing list