[Libreoffice-commits] core.git: include/sfx2 include/svtools include/vcl sc/source sfx2/source sfx2/uiconfig starmath/inc starmath/source svtools/source svtools/uiconfig sw/inc sw/source sw/uiconfig vcl/headless vcl/inc vcl/osx vcl/source vcl/unx vcl/win

Caolán McNamara caolanm at redhat.com
Mon Apr 23 10:34:51 UTC 2018


 include/sfx2/prnmon.hxx                       |   19 +-
 include/sfx2/tabdlg.hxx                       |    4 
 include/sfx2/viewsh.hxx                       |    2 
 include/svtools/prnsetup.hxx                  |   50 +++----
 include/vcl/print.hxx                         |    7 -
 include/vcl/weld.hxx                          |    6 
 sc/source/ui/inc/prevwsh.hxx                  |    2 
 sc/source/ui/inc/tabvwsh.hxx                  |    2 
 sc/source/ui/inc/tpprint.hxx                  |   10 -
 sc/source/ui/optdlg/tpprint.cxx               |   54 +++-----
 sc/source/ui/view/prevwsh.cxx                 |    4 
 sc/source/ui/view/tabvwsh4.cxx                |    4 
 sfx2/source/view/printer.cxx                  |   47 +------
 sfx2/source/view/viewprn.cxx                  |   43 ++----
 sfx2/uiconfig/ui/printeroptionsdialog.ui      |   11 +
 starmath/inc/view.hxx                         |    2 
 starmath/source/view.cxx                      |    4 
 svtools/source/dialogs/prnsetup.cxx           |  173 +++++++++++---------------
 svtools/uiconfig/ui/printersetupdialog.ui     |   22 +--
 sw/inc/swabstdlg.hxx                          |    2 
 sw/inc/view.hxx                               |    4 
 sw/source/ui/config/optpage.cxx               |    6 
 sw/source/ui/dbui/mmresultdialogs.cxx         |  121 +++++++-----------
 sw/source/ui/dialog/swdlgfact.cxx             |    6 
 sw/source/ui/dialog/swdlgfact.hxx             |    2 
 sw/source/ui/envelp/envprt.cxx                |    7 -
 sw/source/ui/envelp/labprt.cxx                |    7 -
 sw/source/ui/inc/mmresultdialogs.hxx          |   38 ++---
 sw/source/uibase/app/apphdl.cxx               |    2 
 sw/source/uibase/inc/pview.hxx                |    2 
 sw/source/uibase/uiview/pview.cxx             |    4 
 sw/source/uibase/uiview/viewprt.cxx           |   16 +-
 sw/uiconfig/swriter/ui/mmresultprintdialog.ui |   35 ++++-
 vcl/headless/svpprn.cxx                       |    2 
 vcl/inc/headless/svpprn.hxx                   |    2 
 vcl/inc/osx/salprn.h                          |    2 
 vcl/inc/salprn.hxx                            |    2 
 vcl/inc/unx/genprn.h                          |    2 
 vcl/inc/win/salprn.h                          |    2 
 vcl/osx/salprn.cxx                            |    2 
 vcl/source/app/salvtables.cxx                 |   16 ++
 vcl/source/gdi/print.cxx                      |   13 +
 vcl/source/gdi/print3.cxx                     |    2 
 vcl/source/window/printdlg.cxx                |    2 
 vcl/unx/generic/print/genprnpsp.cxx           |    4 
 vcl/unx/gtk3/gtk3gtkinst.cxx                  |   16 ++
 vcl/win/gdi/salprn.cxx                        |    8 -
 47 files changed, 388 insertions(+), 405 deletions(-)

New commits:
commit c0af8057188c0e95831f9e6d1ef96a424da6f9b2
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Fri Apr 20 13:05:24 2018 +0100

    weld SfxPrintOptionsDialog
    
    and SwMMResultPrintDialog
    
    Change-Id: Icded6a26a3a151293bea0c9173334cf634283e89
    Reviewed-on: https://gerrit.libreoffice.org/53299
    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/include/sfx2/prnmon.hxx b/include/sfx2/prnmon.hxx
index 4f1bacd93e80..66dec0442723 100644
--- a/include/sfx2/prnmon.hxx
+++ b/include/sfx2/prnmon.hxx
@@ -22,33 +22,32 @@
 #include <memory>
 #include <sal/config.h>
 #include <sfx2/dllapi.h>
-
-#include <vcl/button.hxx>
-#include <vcl/dialog.hxx>
 #include <sfx2/printer.hxx>
+#include <vcl/weld.hxx>
 
 
 class SfxViewShell;
 
 
 struct SfxPrintOptDlg_Impl;
-class SfxPrintOptionsDialog : public ModalDialog
+class SfxPrintOptionsDialog : public weld::GenericDialogController
 {
 private:
     std::unique_ptr<SfxPrintOptDlg_Impl>   pDlgImpl;
     SfxViewShell*           pViewSh;
     std::unique_ptr<SfxItemSet>            pOptions;
     VclPtr<SfxTabPage>      pPage;
+    std::unique_ptr<weld::Widget>    m_xHelpBtn;
+    std::unique_ptr<weld::Container> m_xContainer;
 
+    DECL_LINK(HelpRequestHdl, weld::Widget&, bool);
 public:
-                            SfxPrintOptionsDialog( vcl::Window *pParent,
-                                                   SfxViewShell *pViewShell,
-                                                   const SfxItemSet *rOptions );
+                            SfxPrintOptionsDialog(weld::Window *pParent,
+                                                  SfxViewShell *pViewShell,
+                                                  const SfxItemSet *rOptions);
     virtual                 ~SfxPrintOptionsDialog() override;
-    virtual void            dispose() override;
 
-    virtual short           Execute() override;
-    virtual bool            EventNotify( NotifyEvent& rNEvt ) override;
+    short execute();
 
     const SfxItemSet&       GetOptions() const { return *pOptions; }
     void                    DisableHelp();
diff --git a/include/sfx2/tabdlg.hxx b/include/sfx2/tabdlg.hxx
index 72ba2378fcfe..f171de346dce 100644
--- a/include/sfx2/tabdlg.hxx
+++ b/include/sfx2/tabdlg.hxx
@@ -47,13 +47,13 @@ struct TabPageParent
         , pPage(nullptr)
     {
     }
-    TabPageParent(weld::Window* _pPage)
+    TabPageParent(weld::Container* _pPage)
         : pParent(nullptr)
         , pPage(_pPage)
     {
     }
     VclPtr<vcl::Window> pParent;
-    weld::Widget* pPage;
+    weld::Container* pPage;
 };
 
 typedef VclPtr<SfxTabPage> (*CreateTabPage)(TabPageParent pParent, const SfxItemSet *rAttrSet);
diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx
index f29f94c87591..8f72837bbdaa 100644
--- a/include/sfx2/viewsh.hxx
+++ b/include/sfx2/viewsh.hxx
@@ -244,7 +244,7 @@ public:
     virtual SfxPrinter*         GetPrinter( bool bCreate = false );
     virtual sal_uInt16          SetPrinter( SfxPrinter *pNewPrinter, SfxPrinterChangeFlags nDiffFlags = SFX_PRINTER_ALL );
     virtual bool                HasPrintOptionsPage() const;
-    virtual VclPtr<SfxTabPage>  CreatePrintOptionsPage( TabPageParent pParent, const SfxItemSet &rOptions );
+    virtual VclPtr<SfxTabPage>  CreatePrintOptionsPage(weld::Container* pPage, const SfxItemSet &rOptions);
     Printer*                    GetActivePrinter() const;
 
     // Working set
diff --git a/include/svtools/prnsetup.hxx b/include/svtools/prnsetup.hxx
index 64c2ed5d4d7e..f1f5b6c73832 100644
--- a/include/svtools/prnsetup.hxx
+++ b/include/svtools/prnsetup.hxx
@@ -21,64 +21,58 @@
 #define INCLUDED_SVTOOLS_PRNSETUP_HXX
 
 #include <svtools/svtdllapi.h>
-
-#include <vcl/dialog.hxx>
-#include <vcl/fixed.hxx>
-#include <vcl/button.hxx>
-#include <vcl/group.hxx>
-#include <vcl/lstbox.hxx>
+#include <vcl/weld.hxx>
 #include <vcl/timer.hxx>
 
 class Printer;
 class QueueInfo;
 
-
-class SVT_DLLPUBLIC PrinterSetupDialog : public ModalDialog
+class SVT_DLLPUBLIC PrinterSetupDialog : public weld::GenericDialogController
 {
 private:
-    VclPtr<ListBox>        m_pLbName;
-    VclPtr<PushButton>     m_pBtnProperties;
-    VclPtr<PushButton>     m_pBtnOptions;
-    VclPtr<FixedText>      m_pFiStatus;
-    VclPtr<FixedText>      m_pFiType;
-    VclPtr<FixedText>      m_pFiLocation;
-    VclPtr<FixedText>      m_pFiComment;
+    std::unique_ptr<weld::ComboBoxText>        m_xLbName;
+    std::unique_ptr<weld::Button>     m_xBtnProperties;
+    std::unique_ptr<weld::Button>     m_xBtnOptions;
+    std::unique_ptr<weld::Label>      m_xFiStatus;
+    std::unique_ptr<weld::Label>      m_xFiType;
+    std::unique_ptr<weld::Label>      m_xFiLocation;
+    std::unique_ptr<weld::Label>      m_xFiComment;
     AutoTimer              maStatusTimer;
     VclPtr<Printer>        mpPrinter;
     VclPtr<Printer>        mpTempPrinter;
 
     SVT_DLLPRIVATE void         ImplSetInfo();
 
-                    DECL_DLLPRIVATE_LINK( ImplPropertiesHdl, Button*, void );
-                    DECL_DLLPRIVATE_LINK( ImplChangePrinterHdl, ListBox&, void );
-                    DECL_DLLPRIVATE_LINK( ImplStatusHdl, Timer*, void );
+    DECL_DLLPRIVATE_LINK( ImplPropertiesHdl, weld::Button&, void );
+    DECL_DLLPRIVATE_LINK( ImplChangePrinterHdl, weld::ComboBoxText&, void );
+    DECL_DLLPRIVATE_LINK( ImplGetFocusHdl, weld::Widget&, void );
+    DECL_DLLPRIVATE_LINK( ImplStatusHdl, Timer*, void );
+    DECL_DLLPRIVATE_LINK( ImplDataChangedHdl, VclSimpleEvent&, void);
 
 public:
-                    PrinterSetupDialog( vcl::Window* pWindow );
+    PrinterSetupDialog(weld::Window* pWindow);
     virtual         ~PrinterSetupDialog() override;
-    virtual void    dispose() override;
 
     void            SetPrinter( Printer* pNewPrinter ) { mpPrinter = pNewPrinter; }
     Printer*        GetPrinter() const { return mpPrinter; }
 
-    virtual void    DataChanged( const DataChangedEvent& rDCEvt ) override;
-    virtual bool    EventNotify( NotifyEvent& rNEvt ) override;
+    short   execute();
 
-    virtual short   Execute() override;
+    weld::Window*   GetFrameWeld() const { return m_xDialog.get(); }
 
-    void            SetOptionsHdl( const Link<Button*,void>& rLink );
+    void            SetOptionsHdl( const Link<weld::Button&,void>& rLink );
 };
 
 
 #define IMPL_PRINTDLG_STATUS_UPDATE     15000
 
 void ImplFillPrnDlgListBox( const Printer* pPrinter,
-                            ListBox* pBox, PushButton* pPropBtn );
-void ImplFreePrnDlgListBox( ListBox* pBox, bool bClear = true );
-Printer* ImplPrnDlgListBoxSelect( ListBox const * pBox, PushButton* pPropBtn,
+                            weld::ComboBoxText* pBox, weld::Button* pPropBtn );
+void ImplFreePrnDlgListBox( weld::ComboBoxText* pBox, bool bClear = true );
+Printer* ImplPrnDlgListBoxSelect( weld::ComboBoxText const * pBox, weld::Button* pPropBtn,
                                   Printer const * pPrinter, Printer* pTempPrinter );
 Printer* ImplPrnDlgUpdatePrinter( Printer const * pPrinter, Printer* pTempPrinter );
-void ImplPrnDlgUpdateQueueInfo( ListBox const * pBox, QueueInfo& rInfo );
+void ImplPrnDlgUpdateQueueInfo( weld::ComboBoxText const * pBox, QueueInfo& rInfo );
 OUString ImplPrnDlgGetStatusText( const QueueInfo& rInfo );
 
 #endif // INCLUDED_SVTOOLS_PRNSETUP_HXX
diff --git a/include/vcl/print.hxx b/include/vcl/print.hxx
index ae40d76ce96f..0c14fb3f2955 100644
--- a/include/vcl/print.hxx
+++ b/include/vcl/print.hxx
@@ -51,6 +51,7 @@ namespace vcl {
     class PrintDialog;
 }
 
+namespace weld { class Window; }
 
 enum class PrinterSupport
 {
@@ -291,8 +292,8 @@ public:
     bool                        SetJobSetup( const JobSetup& rSetup );
     const JobSetup&             GetJobSetup() const { return maJobSetup; }
 
-    bool                        Setup( vcl::Window* pWindow,
-                                       PrinterSetupMode eMode = PrinterSetupMode::DocumentGlobal );
+    bool                        Setup(weld::Window* pWindow,
+                                      PrinterSetupMode eMode = PrinterSetupMode::DocumentGlobal);
     bool                        SetPrinterProps( const Printer* pPrinter );
 
     /** SetPrinterOptions is used internally only now
@@ -559,7 +560,7 @@ public:
     SAL_DLLPRIVATE    void              pushPropertiesToPrinter();
     SAL_DLLPRIVATE    void              resetPaperToLastConfigured();
     VCL_PLUGIN_PUBLIC void              setJobState( css::view::PrintableState );
-    SAL_DLLPRIVATE    void              setupPrinter( vcl::Window* i_pDlgParent );
+    SAL_DLLPRIVATE    void              setupPrinter( weld::Window* i_pDlgParent );
 
     SAL_DLLPRIVATE    int               getPageCountProtected() const;
     SAL_DLLPRIVATE    css::uno::Sequence< css::beans::PropertyValue >
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index ae9931eb2b0c..93c5b55ed644 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -37,7 +37,8 @@ public:
     virtual void set_sensitive(bool sensitive) = 0;
     virtual bool get_sensitive() const = 0;
     virtual void set_visible(bool visible) = 0;
-    virtual bool get_visible() const = 0;
+    virtual bool get_visible() const = 0; //if this widget visibility is true
+    virtual bool is_visible() const = 0; //if this widget visibility and all parents is true
     virtual void grab_focus() = 0;
     virtual bool has_focus() const = 0;
     virtual void show() = 0;
@@ -155,6 +156,8 @@ public:
 
     void connect_help(const Link<Widget&, bool>& rLink) { m_aHelpRequestHdl = rLink; }
 
+    virtual SystemEnvData get_system_data() const = 0;
+
     virtual void resize_to_request() = 0;
 };
 
@@ -189,6 +192,7 @@ public:
         = 0;
     virtual void set_default_response(int response) = 0;
     virtual Button* get_widget_for_response(int response) = 0;
+    virtual Container* weld_content_area() = 0;
 };
 
 class VCL_DLLPUBLIC MessageDialog : virtual public Dialog
diff --git a/sc/source/ui/inc/prevwsh.hxx b/sc/source/ui/inc/prevwsh.hxx
index 179e6b1de882..bfeb685faa99 100644
--- a/sc/source/ui/inc/prevwsh.hxx
+++ b/sc/source/ui/inc/prevwsh.hxx
@@ -105,7 +105,7 @@ public:
     virtual SfxPrinter*     GetPrinter( bool bCreate = false ) override;
     virtual sal_uInt16      SetPrinter( SfxPrinter* pNewPrinter, SfxPrinterChangeFlags nDiffFlags = SFX_PRINTER_ALL ) override;
     virtual bool            HasPrintOptionsPage() const override;
-    virtual VclPtr<SfxTabPage> CreatePrintOptionsPage( TabPageParent pParent, const SfxItemSet &rOptions ) override;
+    virtual VclPtr<SfxTabPage> CreatePrintOptionsPage(weld::Container* pPage, const SfxItemSet &rOptions) override;
 
     void            AddAccessibilityObject( SfxListener& rObject );
     void            RemoveAccessibilityObject( SfxListener& rObject );
diff --git a/sc/source/ui/inc/tabvwsh.hxx b/sc/source/ui/inc/tabvwsh.hxx
index 17bc4ecf1b76..126811185faf 100644
--- a/sc/source/ui/inc/tabvwsh.hxx
+++ b/sc/source/ui/inc/tabvwsh.hxx
@@ -318,7 +318,7 @@ public:
                                           SfxPrinterChangeFlags nDiffFlags = SFX_PRINTER_ALL ) override;
 
     virtual bool            HasPrintOptionsPage() const override;
-    virtual VclPtr<SfxTabPage> CreatePrintOptionsPage( TabPageParent pParent, const SfxItemSet &rOptions ) override;
+    virtual VclPtr<SfxTabPage> CreatePrintOptionsPage(weld::Container* pPage, const SfxItemSet &rOptions) override;
 
     void            ConnectObject( const SdrOle2Obj* pObj );
     void            ActivateObject( SdrOle2Obj* pObj, long nVerb );
diff --git a/sc/source/ui/inc/tpprint.hxx b/sc/source/ui/inc/tpprint.hxx
index fb201a5b852c..9ddae6ec4dae 100644
--- a/sc/source/ui/inc/tpprint.hxx
+++ b/sc/source/ui/inc/tpprint.hxx
@@ -21,19 +21,17 @@
 #define INCLUDED_SC_SOURCE_UI_INC_TPPRINT_HXX
 
 #include <sfx2/tabdlg.hxx>
-#include <vcl/fixed.hxx>
 
 class ScTpPrintOptions : public SfxTabPage
 {
     friend class VclPtr<ScTpPrintOptions>;
-    VclPtr<CheckBox>       m_pSkipEmptyPagesCB;
-    VclPtr<CheckBox>       m_pSelectedSheetsCB;
-    VclPtr<CheckBox>       m_pForceBreaksCB;
+    std::unique_ptr<weld::CheckButton>       m_xSkipEmptyPagesCB;
+    std::unique_ptr<weld::CheckButton>       m_xSelectedSheetsCB;
+    std::unique_ptr<weld::CheckButton>       m_xForceBreaksCB;
 
-            ScTpPrintOptions( vcl::Window* pParent, const SfxItemSet& rCoreSet );
+    ScTpPrintOptions(TabPageParent pPage, const SfxItemSet& rCoreSet);
 public:
     virtual ~ScTpPrintOptions() override;
-    virtual void dispose() override;
     static VclPtr<SfxTabPage>  Create( TabPageParent pParent, const SfxItemSet* rCoreSet );
     virtual bool        FillItemSet( SfxItemSet* rCoreSet ) override;
     virtual void        Reset( const SfxItemSet* rCoreSet ) override;
diff --git a/sc/source/ui/optdlg/tpprint.cxx b/sc/source/ui/optdlg/tpprint.cxx
index 9c8dcbc77300..f38a2f5cc7b7 100644
--- a/sc/source/ui/optdlg/tpprint.cxx
+++ b/sc/source/ui/optdlg/tpprint.cxx
@@ -26,34 +26,22 @@
 #include <scmod.hxx>
 #include <sc.hrc>
 
-ScTpPrintOptions::ScTpPrintOptions( vcl::Window*           pParent,
+ScTpPrintOptions::ScTpPrintOptions( TabPageParent pPage,
                                     const SfxItemSet& rCoreAttrs )
-    :   SfxTabPage      ( pParent,
-                          "optCalcPrintPage",
-                          "modules/scalc/ui/optdlg.ui",
-                          &rCoreAttrs )
+    : SfxTabPage(pPage, "modules/scalc/ui/optdlg.ui", "optCalcPrintPage", &rCoreAttrs )
+    , m_xSkipEmptyPagesCB(m_xBuilder->weld_check_button("suppressCB"))
+    , m_xSelectedSheetsCB(m_xBuilder->weld_check_button("printCB"))
+    , m_xForceBreaksCB(m_xBuilder->weld_check_button("forceBreaksCB"))
 {
-    get( m_pSkipEmptyPagesCB , "suppressCB" );
-    get( m_pSelectedSheetsCB , "printCB" );
-    get( m_pForceBreaksCB, "forceBreaksCB" );
 }
 
 ScTpPrintOptions::~ScTpPrintOptions()
 {
-    disposeOnce();
 }
 
-void ScTpPrintOptions::dispose()
+VclPtr<SfxTabPage> ScTpPrintOptions::Create(TabPageParent pParent, const SfxItemSet* rAttrSet)
 {
-    m_pSkipEmptyPagesCB.clear();
-    m_pSelectedSheetsCB.clear();
-    m_pForceBreaksCB.clear();
-    SfxTabPage::dispose();
-}
-
-VclPtr<SfxTabPage> ScTpPrintOptions::Create( TabPageParent pParent, const SfxItemSet* rAttrSet )
-{
-    return VclPtr<ScTpPrintOptions>::Create( pParent.pParent, *rAttrSet );
+    return VclPtr<ScTpPrintOptions>::Create(pParent, *rAttrSet);
 }
 
 DeactivateRC ScTpPrintOptions::DeactivatePage( SfxItemSet* pSetP )
@@ -80,38 +68,38 @@ void ScTpPrintOptions::Reset( const SfxItemSet* rCoreSet )
     if ( SfxItemState::SET == rCoreSet->GetItemState( SID_PRINT_SELECTEDSHEET, false , &pItem ) )
     {
         bool bChecked = static_cast<const SfxBoolItem*>(pItem)->GetValue();
-        m_pSelectedSheetsCB->Check( bChecked );
+        m_xSelectedSheetsCB->set_active( bChecked );
     }
     else
     {
-        m_pSelectedSheetsCB->Check( !aOptions.GetAllSheets() );
+        m_xSelectedSheetsCB->set_active( !aOptions.GetAllSheets() );
     }
 
-    m_pSkipEmptyPagesCB->Check( aOptions.GetSkipEmpty() );
-    m_pSkipEmptyPagesCB->SaveValue();
-    m_pSelectedSheetsCB->SaveValue();
-    m_pForceBreaksCB->Check( aOptions.GetForceBreaks() );
-    m_pForceBreaksCB->SaveValue();
+    m_xSkipEmptyPagesCB->set_active( aOptions.GetSkipEmpty() );
+    m_xSkipEmptyPagesCB->save_state();
+    m_xSelectedSheetsCB->save_state();
+    m_xForceBreaksCB->set_active( aOptions.GetForceBreaks() );
+    m_xForceBreaksCB->save_state();
 }
 
 bool ScTpPrintOptions::FillItemSet( SfxItemSet* rCoreAttrs )
 {
     rCoreAttrs->ClearItem( SID_PRINT_SELECTEDSHEET );
 
-    bool bSkipEmptyChanged = m_pSkipEmptyPagesCB->IsValueChangedFromSaved();
-    bool bSelectedSheetsChanged = m_pSelectedSheetsCB->IsValueChangedFromSaved();
-    bool bForceBreaksChanged = m_pForceBreaksCB->IsValueChangedFromSaved();
+    bool bSkipEmptyChanged = m_xSkipEmptyPagesCB->get_state_changed_from_saved();
+    bool bSelectedSheetsChanged = m_xSelectedSheetsCB->get_state_changed_from_saved();
+    bool bForceBreaksChanged = m_xForceBreaksCB->get_state_changed_from_saved();
 
     if ( bSkipEmptyChanged || bSelectedSheetsChanged || bForceBreaksChanged )
     {
         ScPrintOptions aOpt;
-        aOpt.SetSkipEmpty( m_pSkipEmptyPagesCB->IsChecked() );
-        aOpt.SetAllSheets( !m_pSelectedSheetsCB->IsChecked() );
-        aOpt.SetForceBreaks( m_pForceBreaksCB->IsChecked() );
+        aOpt.SetSkipEmpty( m_xSkipEmptyPagesCB->get_active() );
+        aOpt.SetAllSheets( !m_xSelectedSheetsCB->get_active() );
+        aOpt.SetForceBreaks( m_xForceBreaksCB->get_active() );
         rCoreAttrs->Put( ScTpPrintItem( aOpt ) );
         if ( bSelectedSheetsChanged )
         {
-            rCoreAttrs->Put( SfxBoolItem( SID_PRINT_SELECTEDSHEET, m_pSelectedSheetsCB->IsChecked() ) );
+            rCoreAttrs->Put( SfxBoolItem( SID_PRINT_SELECTEDSHEET, m_xSelectedSheetsCB->get_active() ) );
         }
         return true;
     }
diff --git a/sc/source/ui/view/prevwsh.cxx b/sc/source/ui/view/prevwsh.cxx
index ac3f87758d0a..3d8360d52747 100644
--- a/sc/source/ui/view/prevwsh.cxx
+++ b/sc/source/ui/view/prevwsh.cxx
@@ -516,13 +516,13 @@ bool ScPreviewShell::HasPrintOptionsPage() const
     return true;
 }
 
-VclPtr<SfxTabPage> ScPreviewShell::CreatePrintOptionsPage( TabPageParent pParent, const SfxItemSet &rOptions )
+VclPtr<SfxTabPage> ScPreviewShell::CreatePrintOptionsPage(weld::Container* pPage, const SfxItemSet &rOptions)
 {
     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     ::CreateTabPage ScTpPrintOptionsCreate = pFact->GetTabPageCreatorFunc(RID_SC_TP_PRINT);
     if ( ScTpPrintOptionsCreate )
-        return ScTpPrintOptionsCreate( pParent, &rOptions );
+        return ScTpPrintOptionsCreate(pPage, &rOptions);
     return VclPtr<SfxTabPage>();
 }
 
diff --git a/sc/source/ui/view/tabvwsh4.cxx b/sc/source/ui/view/tabvwsh4.cxx
index f5d0815f1570..401cca9ebd95 100644
--- a/sc/source/ui/view/tabvwsh4.cxx
+++ b/sc/source/ui/view/tabvwsh4.cxx
@@ -1049,13 +1049,13 @@ bool ScTabViewShell::HasPrintOptionsPage() const
     return true;
 }
 
-VclPtr<SfxTabPage> ScTabViewShell::CreatePrintOptionsPage( TabPageParent pParent, const SfxItemSet &rOptions )
+VclPtr<SfxTabPage> ScTabViewShell::CreatePrintOptionsPage(weld::Container* pPage, const SfxItemSet &rOptions )
 {
     ScAbstractDialogFactory* pFact = ScAbstractDialogFactory::Create();
     OSL_ENSURE(pFact, "ScAbstractFactory create fail!");
     ::CreateTabPage ScTpPrintOptionsCreate = pFact->GetTabPageCreatorFunc(RID_SC_TP_PRINT);
     if ( ScTpPrintOptionsCreate )
-        return ScTpPrintOptionsCreate( pParent, &rOptions );
+        return ScTpPrintOptionsCreate(pPage, &rOptions);
     return VclPtr<SfxTabPage>();
 }
 
diff --git a/sfx2/source/view/printer.cxx b/sfx2/source/view/printer.cxx
index ee1b6e7f7edd..4b8ef5bd1cc9 100644
--- a/sfx2/source/view/printer.cxx
+++ b/sfx2/source/view/printer.cxx
@@ -190,50 +190,38 @@ void SfxPrinter::SetOptions( const SfxItemSet &rNewOptions )
 }
 
 
-SfxPrintOptionsDialog::SfxPrintOptionsDialog(vcl::Window *pParent,
-                                              SfxViewShell *pViewShell,
-                                              const SfxItemSet *pSet)
-
-    : ModalDialog(pParent, "PrinterOptionsDialog",
-        "sfx/ui/printeroptionsdialog.ui")
+SfxPrintOptionsDialog::SfxPrintOptionsDialog(weld::Window *pParent,
+                                             SfxViewShell *pViewShell,
+                                             const SfxItemSet *pSet)
+    : GenericDialogController(pParent, "sfx/ui/printeroptionsdialog.ui", "PrinterOptionsDialog")
     , pDlgImpl(new SfxPrintOptDlg_Impl)
     , pViewSh(pViewShell)
     , pOptions(pSet->Clone())
+    , m_xHelpBtn(m_xBuilder->weld_widget("help"))
+    , m_xContainer(m_xDialog->weld_content_area())
 {
-    VclContainer *pVBox = get_content_area();
-
     // Insert TabPage
-    pPage.reset(pViewSh->CreatePrintOptionsPage(pVBox, *pOptions));
+    pPage.reset(pViewSh->CreatePrintOptionsPage(m_xContainer.get(), *pOptions));
     DBG_ASSERT( pPage, "CreatePrintOptions != SFX_VIEW_HAS_PRINTOPTIONS" );
     if( pPage )
     {
         pPage->Reset( pOptions.get() );
-        SetHelpId( pPage->GetHelpId() );
-        pPage->Show();
+        m_xDialog->set_help_id(pPage->GetHelpId());
     }
 }
 
 
 SfxPrintOptionsDialog::~SfxPrintOptionsDialog()
 {
-    disposeOnce();
-}
-
-void SfxPrintOptionsDialog::dispose()
-{
-    pDlgImpl.reset();
     pPage.disposeAndClear();
-    pOptions.reset();
-    ModalDialog::dispose();
 }
 
-
-short SfxPrintOptionsDialog::Execute()
+short SfxPrintOptionsDialog::execute()
 {
     if( ! pPage )
         return RET_CANCEL;
 
-    short nRet = ModalDialog::Execute();
+    short nRet = m_xDialog->run();
     if ( nRet == RET_OK )
         pPage->FillItemSet( pOptions.get() );
     else
@@ -241,24 +229,15 @@ short SfxPrintOptionsDialog::Execute()
     return nRet;
 }
 
-
-bool SfxPrintOptionsDialog::EventNotify( NotifyEvent& rNEvt )
+IMPL_LINK_NOARG(SfxPrintOptionsDialog, HelpRequestHdl, weld::Widget&, bool)
 {
-    if ( rNEvt.GetType() == MouseNotifyEvent::KEYINPUT )
-    {
-        if ( rNEvt.GetKeyEvent()->GetKeyCode().GetCode() == KEY_F1 && pDlgImpl->mbHelpDisabled )
-            return true; // help disabled -> <F1> does nothing
-    }
-
-    return ModalDialog::EventNotify( rNEvt );
+    return !pDlgImpl->mbHelpDisabled;
 }
 
-
 void SfxPrintOptionsDialog::DisableHelp()
 {
     pDlgImpl->mbHelpDisabled = true;
-
-    get<HelpButton>("help")->Disable();
+    m_xHelpBtn->set_sensitive(false);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/view/viewprn.cxx b/sfx2/source/view/viewprn.cxx
index 44cc9d509045..19534cb129e1 100644
--- a/sfx2/source/view/viewprn.cxx
+++ b/sfx2/source/view/viewprn.cxx
@@ -407,38 +407,36 @@ class SfxDialogExecutor_Impl
 {
 private:
     SfxViewShell*           _pViewSh;
-    VclPtr<PrinterSetupDialog>  _pSetupParent;
+    PrinterSetupDialog&  _rSetupParent;
     std::unique_ptr<SfxItemSet> _pOptions;
     bool                    _bHelpDisabled;
 
-    DECL_LINK( Execute, Button*, void );
+    DECL_LINK( Execute, weld::Button&, void );
 
 public:
-            SfxDialogExecutor_Impl( SfxViewShell* pViewSh, PrinterSetupDialog* pParent );
+    SfxDialogExecutor_Impl( SfxViewShell* pViewSh, PrinterSetupDialog& rParent );
 
-    Link<Button*, void> GetLink() const { return LINK(const_cast<SfxDialogExecutor_Impl*>(this), SfxDialogExecutor_Impl, Execute); }
+    Link<weld::Button&, void> GetLink() const { return LINK(const_cast<SfxDialogExecutor_Impl*>(this), SfxDialogExecutor_Impl, Execute); }
     const SfxItemSet*   GetOptions() const { return _pOptions.get(); }
     void                DisableHelp() { _bHelpDisabled = true; }
 };
 
-SfxDialogExecutor_Impl::SfxDialogExecutor_Impl( SfxViewShell* pViewSh, PrinterSetupDialog* pParent ) :
+SfxDialogExecutor_Impl::SfxDialogExecutor_Impl( SfxViewShell* pViewSh, PrinterSetupDialog& rParent ) :
 
     _pViewSh        ( pViewSh ),
-    _pSetupParent   ( pParent ),
+    _rSetupParent   ( rParent ),
     _pOptions       ( nullptr ),
     _bHelpDisabled  ( false )
 
 {
 }
 
-IMPL_LINK_NOARG(SfxDialogExecutor_Impl, Execute, Button*, void)
+IMPL_LINK_NOARG(SfxDialogExecutor_Impl, Execute, weld::Button&, void)
 {
     // Options noted locally
     if ( !_pOptions )
     {
-        DBG_ASSERT( _pSetupParent, "no dialog parent" );
-        if( _pSetupParent )
-            _pOptions = static_cast<SfxPrinter*>( _pSetupParent->GetPrinter() )->GetOptions().Clone();
+        _pOptions = static_cast<SfxPrinter*>( _rSetupParent.GetPrinter() )->GetOptions().Clone();
     }
 
     assert(_pOptions);
@@ -446,13 +444,12 @@ IMPL_LINK_NOARG(SfxDialogExecutor_Impl, Execute, Button*, void)
         return;
 
     // Create Dialog
-    VclPtrInstance<SfxPrintOptionsDialog> pDlg( static_cast<vcl::Window*>(_pSetupParent),
-                                                _pViewSh, _pOptions.get() );
-    if ( _bHelpDisabled )
-        pDlg->DisableHelp();
-    if ( pDlg->Execute() == RET_OK )
+    SfxPrintOptionsDialog aDlg(_rSetupParent.GetFrameWeld(), _pViewSh, _pOptions.get() );
+    if (_bHelpDisabled)
+        aDlg.DisableHelp();
+    if (aDlg.execute() == RET_OK)
     {
-        _pOptions = pDlg->GetOptions().Clone();
+        _pOptions = aDlg.GetOptions().Clone();
     }
 }
 
@@ -824,20 +821,20 @@ void SfxViewShell::ExecPrint_Impl( SfxRequest &rReq )
                 VclPtr<SfxPrinter> pDlgPrinter = pPrinter->Clone();
 
                 // execute PrinterSetupDialog
-                VclPtrInstance<PrinterSetupDialog> pPrintSetupDlg( GetWindow() );
+                PrinterSetupDialog aPrintSetupDlg(GetFrameWeld());
                 std::unique_ptr<SfxDialogExecutor_Impl> pExecutor;
 
                 if (pImpl->m_bHasPrintOptions && HasPrintOptionsPage())
                 {
                     // additional controls for dialog
-                    pExecutor.reset( new SfxDialogExecutor_Impl( this, pPrintSetupDlg ) );
+                    pExecutor.reset( new SfxDialogExecutor_Impl( this, aPrintSetupDlg ) );
                     if ( bPrintOnHelp )
                         pExecutor->DisableHelp();
-                    pPrintSetupDlg->SetOptionsHdl( pExecutor->GetLink() );
+                    aPrintSetupDlg.SetOptionsHdl( pExecutor->GetLink() );
                 }
 
-                pPrintSetupDlg->SetPrinter( pDlgPrinter );
-                nDialogRet = pPrintSetupDlg->Execute();
+                aPrintSetupDlg.SetPrinter( pDlgPrinter );
+                nDialogRet = aPrintSetupDlg.execute();
 
                 if ( pExecutor && pExecutor->GetOptions() )
                 {
@@ -851,8 +848,6 @@ void SfxViewShell::ExecPrint_Impl( SfxRequest &rReq )
                     }
                 }
 
-                pPrintSetupDlg.disposeAndClear();
-
                 // no recording of PrinterSetup except printer name (is printer dependent)
                 rReq.Ignore();
 
@@ -897,7 +892,7 @@ sal_uInt16 SfxViewShell::SetPrinter( SfxPrinter* /*pNewPrinter*/, SfxPrinterChan
 
 VclPtr<SfxTabPage> SfxViewShell::CreatePrintOptionsPage
 (
-    TabPageParent       /*pParent*/,
+    weld::Container* /*pPage*/,
     const SfxItemSet&   /*rOptions*/
 )
 {
diff --git a/sfx2/uiconfig/ui/printeroptionsdialog.ui b/sfx2/uiconfig/ui/printeroptionsdialog.ui
index b041fffe0efc..f502002486f2 100644
--- a/sfx2/uiconfig/ui/printeroptionsdialog.ui
+++ b/sfx2/uiconfig/ui/printeroptionsdialog.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="sfx">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkDialog" id="PrinterOptionsDialog">
@@ -7,6 +7,9 @@
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="printeroptionsdialog|PrinterOptionsDialog">Printer Options</property>
     <property name="resizable">False</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">
@@ -22,6 +25,8 @@
                 <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>
@@ -36,6 +41,7 @@
                 <property name="label">gtk-cancel</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
+                <property name="can_default">True</property>
                 <property name="receives_default">True</property>
                 <property name="use_stock">True</property>
               </object>
@@ -78,5 +84,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/starmath/inc/view.hxx b/starmath/inc/view.hxx
index 7b6e741895bb..f0d8af2424f5 100644
--- a/starmath/inc/view.hxx
+++ b/starmath/inc/view.hxx
@@ -251,7 +251,7 @@ protected:
     void InsertFrom(SfxMedium &rMedium);
 
     virtual bool HasPrintOptionsPage() const override;
-    virtual VclPtr<SfxTabPage> CreatePrintOptionsPage(TabPageParent pParent,
+    virtual VclPtr<SfxTabPage> CreatePrintOptionsPage(weld::Container* pPage,
                                                       const SfxItemSet &rOptions) override;
     virtual void Deactivate(bool IsMDIActivate) override;
     virtual void Activate(bool IsMDIActivate) override;
diff --git a/starmath/source/view.cxx b/starmath/source/view.cxx
index 819aaec2da13..5850194c3468 100644
--- a/starmath/source/view.cxx
+++ b/starmath/source/view.cxx
@@ -1260,10 +1260,10 @@ bool SmViewShell::HasPrintOptionsPage() const
     return true;
 }
 
-VclPtr<SfxTabPage> SmViewShell::CreatePrintOptionsPage(TabPageParent pParent,
+VclPtr<SfxTabPage> SmViewShell::CreatePrintOptionsPage(weld::Container* pPage,
                                                        const SfxItemSet &rOptions)
 {
-    return SmPrintOptionsTabPage::Create(pParent, rOptions);
+    return SmPrintOptionsTabPage::Create(pPage, rOptions);
 }
 
 SmEditWindow *SmViewShell::GetEditWindow()
diff --git a/svtools/source/dialogs/prnsetup.cxx b/svtools/source/dialogs/prnsetup.cxx
index d7a8b06a7900..3d97febb7d30 100644
--- a/svtools/source/dialogs/prnsetup.cxx
+++ b/svtools/source/dialogs/prnsetup.cxx
@@ -20,11 +20,11 @@
 #include <svtools/prnsetup.hxx>
 #include <svtools/strings.hrc>
 #include <svtools/svtresid.hxx>
+#include <vcl/svapp.hxx>
 #include <vcl/print.hxx>
 
-
 void ImplFillPrnDlgListBox( const Printer* pPrinter,
-                            ListBox* pBox, PushButton* pPropBtn )
+                            weld::ComboBoxText* pBox, weld::Button* pPropBtn )
 {
     ImplFreePrnDlgListBox( pBox );
 
@@ -33,29 +33,29 @@ void ImplFillPrnDlgListBox( const Printer* pPrinter,
     if ( nCount )
     {
         for( unsigned int i = 0; i < nCount; i++ )
-            pBox->InsertEntry( rPrinters[i] );
-        pBox->SelectEntry( pPrinter->GetName() );
+            pBox->append_text( rPrinters[i] );
+        pBox->set_active( pPrinter->GetName() );
     }
 
-    pBox->Enable( nCount != 0 );
-    pPropBtn->Show( pPrinter->HasSupport( PrinterSupport::SetupDialog ) );
+    pBox->set_sensitive(nCount != 0);
+    pPropBtn->show( pPrinter->HasSupport( PrinterSupport::SetupDialog ) );
 }
 
 
-void ImplFreePrnDlgListBox( ListBox* pBox, bool bClear )
+void ImplFreePrnDlgListBox( weld::ComboBoxText* pBox, bool bClear )
 {
     if ( bClear )
-        pBox->Clear();
+        pBox->clear();
 }
 
 
-Printer* ImplPrnDlgListBoxSelect( ListBox const * pBox, PushButton* pPropBtn,
+Printer* ImplPrnDlgListBoxSelect( const weld::ComboBoxText* pBox, weld::Button* pPropBtn,
                                   Printer const * pPrinter, Printer* pTempPrinterIn )
 {
     VclPtr<Printer> pTempPrinter( pTempPrinterIn );
-    if ( pBox->GetSelectedEntryPos() != LISTBOX_ENTRY_NOTFOUND )
+    if ( pBox->get_active() != -1 )
     {
-        const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->GetSelectedEntry(), true );
+        const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->get_active_text(), true );
         if( pInfo)
         {
             if ( !pTempPrinter )
@@ -76,13 +76,13 @@ Printer* ImplPrnDlgListBoxSelect( ListBox const * pBox, PushButton* pPropBtn,
                 }
             }
 
-            pPropBtn->Enable( pTempPrinter->HasSupport( PrinterSupport::SetupDialog ) );
+            pPropBtn->set_sensitive(pTempPrinter->HasSupport(PrinterSupport::SetupDialog));
         }
         else
-            pPropBtn->Disable();
+            pPropBtn->set_sensitive(false);
     }
     else
-        pPropBtn->Disable();
+        pPropBtn->set_sensitive(false);
 
     return pTempPrinter;
 }
@@ -107,11 +107,11 @@ Printer* ImplPrnDlgUpdatePrinter( Printer const * pPrinter, Printer* pTempPrinte
 }
 
 
-void ImplPrnDlgUpdateQueueInfo( ListBox const * pBox, QueueInfo& rInfo )
+void ImplPrnDlgUpdateQueueInfo( const weld::ComboBoxText* pBox, QueueInfo& rInfo )
 {
-    if ( pBox->GetSelectedEntryPos() != LISTBOX_ENTRY_NOTFOUND )
+    if ( pBox->get_active() != -1 )
     {
-        const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->GetSelectedEntry(), true );
+        const QueueInfo* pInfo = Printer::GetQueueInfo( pBox->get_active_text(), true );
         if( pInfo )
             rInfo = *pInfo;
     }
@@ -207,147 +207,128 @@ OUString ImplPrnDlgGetStatusText( const QueueInfo& rInfo )
     return aStr;
 }
 
-
-PrinterSetupDialog::PrinterSetupDialog(vcl::Window* pParent)
-    : ModalDialog(pParent, "PrinterSetupDialog",
-        "svt/ui/printersetupdialog.ui")
+PrinterSetupDialog::PrinterSetupDialog(weld::Window* pParent)
+    : GenericDialogController(pParent, "svt/ui/printersetupdialog.ui", "PrinterSetupDialog")
+    , m_xLbName(m_xBuilder->weld_combo_box_text("name"))
+    , m_xBtnProperties(m_xBuilder->weld_button("properties"))
+    , m_xBtnOptions(m_xBuilder->weld_button("options"))
+    , m_xFiStatus(m_xBuilder->weld_label("status"))
+    , m_xFiType(m_xBuilder->weld_label("type"))
+    , m_xFiLocation(m_xBuilder->weld_label("location"))
+    , m_xFiComment(m_xBuilder->weld_label("comment"))
 {
-    get(m_pLbName, "name");
-    m_pLbName->SetStyle(m_pLbName->GetStyle() | WB_SORT);
-    get(m_pBtnProperties, "properties");
-    get(m_pBtnOptions, "options");
-    get(m_pFiStatus, "status");
-    get(m_pFiType, "type");
-    get(m_pFiLocation, "location");
-    get(m_pFiComment, "comment");
+    m_xLbName->make_sorted();
 
     // show options button only if link is set
-    m_pBtnOptions->Hide();
+    m_xBtnOptions->hide();
 
     mpPrinter       = nullptr;
     mpTempPrinter   = nullptr;
 
     maStatusTimer.SetTimeout( IMPL_PRINTDLG_STATUS_UPDATE );
     maStatusTimer.SetInvokeHandler( LINK( this, PrinterSetupDialog, ImplStatusHdl ) );
-    m_pBtnProperties->SetClickHdl( LINK( this, PrinterSetupDialog, ImplPropertiesHdl ) );
-    m_pLbName->SetSelectHdl( LINK( this, PrinterSetupDialog, ImplChangePrinterHdl ) );
+    m_xBtnProperties->connect_clicked( LINK( this, PrinterSetupDialog, ImplPropertiesHdl ) );
+    m_xLbName->connect_changed( LINK( this, PrinterSetupDialog, ImplChangePrinterHdl ) );
+    m_xDialog->connect_focus_in( LINK( this, PrinterSetupDialog, ImplGetFocusHdl ) );
+    Application::AddEventListener(LINK( this, PrinterSetupDialog, ImplDataChangedHdl ) );
 }
 
-
 PrinterSetupDialog::~PrinterSetupDialog()
 {
-    disposeOnce();
-}
-
-void PrinterSetupDialog::dispose()
-{
-    ImplFreePrnDlgListBox(m_pLbName, false);
-    m_pLbName.clear();
-    m_pBtnProperties.clear();
-    m_pBtnOptions.clear();
-    m_pFiStatus.clear();
-    m_pFiType.clear();
-    m_pFiLocation.clear();
-    m_pFiComment.clear();
-    mpTempPrinter.disposeAndClear();
-    mpPrinter.clear();
-    ModalDialog::dispose();
+    Application::RemoveEventListener(LINK( this, PrinterSetupDialog, ImplDataChangedHdl ) );
+    ImplFreePrnDlgListBox(m_xLbName.get(), false);
 }
 
-void PrinterSetupDialog::SetOptionsHdl( const Link<Button*,void>& rLink )
+void PrinterSetupDialog::SetOptionsHdl(const Link<weld::Button&, void>& rLink)
 {
-    m_pBtnOptions->SetClickHdl( rLink );
-    m_pBtnOptions->Show( rLink.IsSet() );
+    m_xBtnOptions->connect_clicked(rLink);
+    m_xBtnOptions->show(rLink.IsSet());
 }
 
 void PrinterSetupDialog::ImplSetInfo()
 {
-    const QueueInfo* pInfo = Printer::GetQueueInfo(m_pLbName->GetSelectedEntry(), true);
+    const QueueInfo* pInfo = Printer::GetQueueInfo(m_xLbName->get_active_text(), true);
     if ( pInfo )
     {
-        m_pFiType->SetText( pInfo->GetDriver() );
-        m_pFiLocation->SetText( pInfo->GetLocation() );
-        m_pFiComment->SetText( pInfo->GetComment() );
-        m_pFiStatus->SetText( ImplPrnDlgGetStatusText( *pInfo ) );
+        m_xFiType->set_label( pInfo->GetDriver() );
+        m_xFiLocation->set_label( pInfo->GetLocation() );
+        m_xFiComment->set_label( pInfo->GetComment() );
+        m_xFiStatus->set_label( ImplPrnDlgGetStatusText( *pInfo ) );
     }
     else
     {
         OUString aTempStr;
-        m_pFiType->SetText( aTempStr );
-        m_pFiLocation->SetText( aTempStr );
-        m_pFiComment->SetText( aTempStr );
-        m_pFiStatus->SetText( aTempStr );
+        m_xFiType->set_label( aTempStr );
+        m_xFiLocation->set_label( aTempStr );
+        m_xFiComment->set_label( aTempStr );
+        m_xFiStatus->set_label( aTempStr );
     }
 }
 
-
 IMPL_LINK_NOARG(PrinterSetupDialog, ImplStatusHdl, Timer *, void)
 {
     QueueInfo aInfo;
-    ImplPrnDlgUpdateQueueInfo(m_pLbName, aInfo);
-    m_pFiStatus->SetText( ImplPrnDlgGetStatusText( aInfo ) );
+    ImplPrnDlgUpdateQueueInfo(m_xLbName.get(), aInfo);
+    m_xFiStatus->set_label( ImplPrnDlgGetStatusText( aInfo ) );
 }
 
 
-IMPL_LINK_NOARG(PrinterSetupDialog, ImplPropertiesHdl, Button*, void)
+IMPL_LINK_NOARG(PrinterSetupDialog, ImplPropertiesHdl, weld::Button&, void)
 {
     if ( !mpTempPrinter )
         mpTempPrinter = VclPtr<Printer>::Create( mpPrinter->GetJobSetup() );
-    mpTempPrinter->Setup( this );
+    mpTempPrinter->Setup(m_xDialog.get());
 }
 
-
-IMPL_LINK_NOARG(PrinterSetupDialog, ImplChangePrinterHdl, ListBox&, void)
+IMPL_LINK_NOARG(PrinterSetupDialog, ImplChangePrinterHdl, weld::ComboBoxText&, void)
 {
-    mpTempPrinter = ImplPrnDlgListBoxSelect(m_pLbName, m_pBtnProperties,
-                                             mpPrinter, mpTempPrinter );
+    mpTempPrinter = ImplPrnDlgListBoxSelect(m_xLbName.get(), m_xBtnProperties.get(),
+                                             mpPrinter, mpTempPrinter);
     ImplSetInfo();
 }
 
-
-bool PrinterSetupDialog::EventNotify( NotifyEvent& rNEvt )
+IMPL_LINK(PrinterSetupDialog, ImplGetFocusHdl, weld::Widget&, rWidget, void)
 {
-    if ( (rNEvt.GetType() == MouseNotifyEvent::GETFOCUS) && IsReallyVisible() )
-        ImplStatusHdl( &maStatusTimer );
-
-    return ModalDialog::EventNotify( rNEvt );
+    if (rWidget.is_visible())
+        ImplStatusHdl(&maStatusTimer);
 }
 
-
-void PrinterSetupDialog::DataChanged( const DataChangedEvent& rDCEvt )
+IMPL_LINK(PrinterSetupDialog, ImplDataChangedHdl, VclSimpleEvent&, rEvt, void)
 {
-    if ( rDCEvt.GetType() == DataChangedEventType::PRINTER )
-    {
-        mpTempPrinter = ImplPrnDlgUpdatePrinter( mpPrinter, mpTempPrinter );
-        Printer* pPrn;
-        if ( mpTempPrinter )
-            pPrn = mpTempPrinter;
-        else
-            pPrn = mpPrinter;
-        ImplFillPrnDlgListBox(pPrn, m_pLbName, m_pBtnProperties);
-        ImplSetInfo();
-    }
-
-    ModalDialog::DataChanged( rDCEvt );
+    VclEventId nEvent = rEvt.GetId();
+    if (nEvent != VclEventId::ApplicationDataChanged)
+        return;
+
+    DataChangedEvent* pData = static_cast<DataChangedEvent*>(static_cast<VclWindowEvent&>(rEvt).GetData());
+    if (!pData || pData->GetType() != DataChangedEventType::PRINTER)
+        return;
+
+    mpTempPrinter = ImplPrnDlgUpdatePrinter(mpPrinter, mpTempPrinter);
+    Printer* pPrn;
+    if (mpTempPrinter)
+        pPrn = mpTempPrinter;
+    else
+        pPrn = mpPrinter;
+    ImplFillPrnDlgListBox(pPrn, m_xLbName.get(), m_xBtnProperties.get());
+    ImplSetInfo();
 }
 
-
-short PrinterSetupDialog::Execute()
+short PrinterSetupDialog::execute()
 {
     if ( !mpPrinter || mpPrinter->IsPrinting() || mpPrinter->IsJobActive() )
     {
-        SAL_WARN( "svtools.dialogs", "PrinterSetupDialog::Execute() - No Printer or printer is printing" );
+        SAL_WARN( "svtools.dialogs", "PrinterSetupDialog::execute() - No Printer or printer is printing" );
         return RET_CANCEL;
     }
 
     Printer::updatePrinters();
 
-    ImplFillPrnDlgListBox(mpPrinter, m_pLbName, m_pBtnProperties);
+    ImplFillPrnDlgListBox(mpPrinter, m_xLbName.get(), m_xBtnProperties.get());
     ImplSetInfo();
     maStatusTimer.Start();
 
     // start dialog
-    short nRet = ModalDialog::Execute();
+    short nRet = m_xDialog->run();
 
     // update data if the dialog was terminated with OK
     if ( nRet == RET_OK )
diff --git a/svtools/uiconfig/ui/printersetupdialog.ui b/svtools/uiconfig/ui/printersetupdialog.ui
index 0ccfccdbfc02..354d7a7e441d 100644
--- a/svtools/uiconfig/ui/printersetupdialog.ui
+++ b/svtools/uiconfig/ui/printersetupdialog.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="svt">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkDialog" id="PrinterSetupDialog">
@@ -7,6 +7,9 @@
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="printersetupdialog|PrinterSetupDialog">Printer Setup</property>
     <property name="resizable">False</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">
@@ -43,7 +46,6 @@
                 <property name="expand">False</property>
                 <property name="fill">True</property>
                 <property name="position">1</property>
-                <property name="secondary">True</property>
               </packing>
             </child>
             <child>
@@ -107,10 +109,10 @@
                       <object class="GtkLabel" id="label2">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
                         <property name="label" translatable="yes" context="printersetupdialog|label2">Name:</property>
                         <property name="use_underline">True</property>
                         <property name="mnemonic_widget">name</property>
+                        <property name="xalign">1</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -121,8 +123,8 @@
                       <object class="GtkLabel" id="label3">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
                         <property name="label" translatable="yes" context="printersetupdialog|label3">Status:</property>
+                        <property name="xalign">1</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -133,8 +135,8 @@
                       <object class="GtkLabel" id="label4">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
                         <property name="label" translatable="yes" context="printersetupdialog|label4">Type:</property>
+                        <property name="xalign">1</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -145,8 +147,8 @@
                       <object class="GtkLabel" id="label5">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
                         <property name="label" translatable="yes" context="printersetupdialog|label5">Location:</property>
+                        <property name="xalign">1</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -157,8 +159,8 @@
                       <object class="GtkLabel" id="label6">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">1</property>
                         <property name="label" translatable="yes" context="printersetupdialog|label6">Comment:</property>
+                        <property name="xalign">1</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -226,7 +228,7 @@
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkComboBox" id="name">
+                      <object class="GtkComboBoxText" id="name">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="hexpand">True</property>
@@ -261,9 +263,11 @@
     </child>
     <action-widgets>
       <action-widget response="-11">help</action-widget>
-      <action-widget response="0">options</action-widget>
       <action-widget response="-5">ok</action-widget>
       <action-widget response="-6">cancel</action-widget>
     </action-widgets>
+    <child>
+      <placeholder/>
+    </child>
   </object>
 </interface>
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index 14d352f4e481..63411ef6b03c 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -499,7 +499,7 @@ public:
     virtual CreateTabPage               GetTabPageCreatorFunc( sal_uInt16 nId ) = 0;
 
     virtual void ExecuteMMResultSaveDialog() = 0;
-    virtual void ExecuteMMResultPrintDialog() = 0;
+    virtual void ExecuteMMResultPrintDialog(weld::Window* pParent) = 0;
     virtual void ExecuteMMResultEmailDialog() = 0;
 
 protected:
diff --git a/sw/inc/view.hxx b/sw/inc/view.hxx
index 73a9138455b0..2dedb5ff5f99 100644
--- a/sw/inc/view.hxx
+++ b/sw/inc/view.hxx
@@ -618,7 +618,7 @@ public:
     // methods for printing
     SAL_DLLPRIVATE virtual   SfxPrinter*     GetPrinter( bool bCreate = false ) override;
     SAL_DLLPRIVATE virtual bool  HasPrintOptionsPage() const override;
-    SAL_DLLPRIVATE virtual VclPtr<SfxTabPage> CreatePrintOptionsPage( TabPageParent pParent,
+    SAL_DLLPRIVATE virtual VclPtr<SfxTabPage> CreatePrintOptionsPage(weld::Container* pParent,
                                                     const SfxItemSet& rSet) override;
     static SvxSearchItem* GetSearchItem() { return m_pSrchItem; }
     /// See SfxViewShell::getPart().
@@ -646,7 +646,7 @@ inline const SwDocShell *SwView::GetDocShell() const
     return const_cast<SwView*>(this)->GetDocShell();
 }
 
-VclPtr<SfxTabPage> CreatePrintOptionsPage( TabPageParent pParent,
+VclPtr<SfxTabPage> CreatePrintOptionsPage( weld::Container* pPage,
                                            const SfxItemSet &rOptions,
                                            bool bPreview);
 
diff --git a/sw/source/ui/config/optpage.cxx b/sw/source/ui/config/optpage.cxx
index 03006daf0728..133b423ae433 100644
--- a/sw/source/ui/config/optpage.cxx
+++ b/sw/source/ui/config/optpage.cxx
@@ -451,7 +451,11 @@ void    SwAddPrinterTabPage::Reset( const SfxItemSet*  )
         m_xEndRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::EndDoc ) ;
         m_xEndPageRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::EndPage ) ;
         m_xInMarginsRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::InMargins ) ;
-        m_xFaxLB->set_active( pAddPrinterAttr->m_sFaxName );
+        auto nFound = m_xFaxLB->find_text(pAddPrinterAttr->m_sFaxName);
+        if (nFound != -1)
+            m_xFaxLB->set_active(nFound);
+        else
+            m_xFaxLB->set_active(0);
     }
     if (m_xProspectCB->get_active())
     {
diff --git a/sw/source/ui/dbui/mmresultdialogs.cxx b/sw/source/ui/dbui/mmresultdialogs.cxx
index e19dee61342f..6fcd3740d58f 100644
--- a/sw/source/ui/dbui/mmresultdialogs.cxx
+++ b/sw/source/ui/dbui/mmresultdialogs.cxx
@@ -254,54 +254,36 @@ void SwMMResultSaveDialog::dispose()
     SfxModalDialog::dispose();
 }
 
-SwMMResultPrintDialog::SwMMResultPrintDialog()
-    : SfxModalDialog(nullptr, "MMResultPrintDialog", "modules/swriter/ui/mmresultprintdialog.ui")
-    , m_pTempPrinter(nullptr)
+SwMMResultPrintDialog::SwMMResultPrintDialog(weld::Window* pParent)
+    : GenericDialogController(pParent, "modules/swriter/ui/mmresultprintdialog.ui", "MMResultPrintDialog")
+    , m_xPrinterFT(m_xBuilder->weld_label("printerft"))
+    , m_xPrinterLB(m_xBuilder->weld_combo_box_text("printers"))
+    , m_xPrinterSettingsPB(m_xBuilder->weld_button("printersettings"))
+    , m_xPrintAllRB(m_xBuilder->weld_radio_button("printallrb"))
+    , m_xFromRB(m_xBuilder->weld_radio_button("fromrb"))
+    , m_xFromNF(m_xBuilder->weld_spin_button("from"))
+    , m_xToFT(m_xBuilder->weld_label("toft"))
+    , m_xToNF(m_xBuilder->weld_spin_button("to"))
+    , m_xOKButton(m_xBuilder->weld_button("ok"))
 {
-    get(m_pPrinterFT, "printerft");
-    get(m_pPrinterLB, "printers");
-    m_pPrinterLB->SetStyle(m_pPrinterLB->GetStyle() | WB_SORT);
-    get(m_pPrinterSettingsPB, "printersettings");
-    get(m_pPrintAllRB, "printallrb");
-    get(m_pFromRB, "fromrb");
-    get(m_pFromNF, "from-nospin");
-    get(m_pToFT, "toft");
-    get(m_pToNF, "to-nospin");
-    get(m_pOKButton, "ok");
+    m_xPrinterLB->make_sorted();
 
-    m_pPrinterLB->SetSelectHdl(LINK(this, SwMMResultPrintDialog, PrinterChangeHdl_Impl));
-    m_pPrinterSettingsPB->SetClickHdl(LINK(this, SwMMResultPrintDialog, PrinterSetupHdl_Impl));
+    m_xPrinterLB->connect_changed(LINK(this, SwMMResultPrintDialog, PrinterChangeHdl_Impl));
+    m_xPrinterSettingsPB->connect_clicked(LINK(this, SwMMResultPrintDialog, PrinterSetupHdl_Impl));
 
-    Link<Button*,void> aLink = LINK(this, SwMMResultPrintDialog, DocumentSelectionHdl_Impl);
-    m_pPrintAllRB->SetClickHdl(aLink);
-    m_pFromRB->SetClickHdl(aLink);
+    Link<weld::ToggleButton&,void> aLink = LINK(this, SwMMResultPrintDialog, DocumentSelectionHdl_Impl);
+    m_xPrintAllRB->connect_toggled(aLink);
+    m_xFromRB->connect_toggled(aLink);
     // m_pPrintAllRB is the default, so disable m_pFromNF and m_pToNF initially.
-    aLink.Call(m_pPrintAllRB);
+    aLink.Call(*m_xPrintAllRB);
 
-    m_pOKButton->SetClickHdl(LINK(this, SwMMResultPrintDialog, PrintHdl_Impl));
+    m_xOKButton->connect_clicked(LINK(this, SwMMResultPrintDialog, PrintHdl_Impl));
 
     FillInPrinterSettings();
 }
 
 SwMMResultPrintDialog::~SwMMResultPrintDialog()
 {
-    disposeOnce();
-}
-
-void SwMMResultPrintDialog::dispose()
-{
-    m_pPrinterFT.clear();
-    m_pPrinterLB.clear();
-    m_pPrinterSettingsPB.clear();
-    m_pPrintAllRB.clear();
-    m_pFromRB.clear();
-    m_pFromNF.clear();
-    m_pToFT.clear();
-    m_pToNF.clear();
-    m_pOKButton.clear();
-    m_pTempPrinter.clear();
-
-    SfxModalDialog::dispose();
 }
 
 SwMMResultEmailDialog::SwMMResultEmailDialog()
@@ -375,33 +357,30 @@ void SwMMResultPrintDialog::FillInPrinterSettings()
     const std::vector<OUString>& rPrinters = Printer::GetPrinterQueues();
     unsigned int nCount = rPrinters.size();
     bool bMergePrinterExists = false;
-    if ( nCount )
-    {
-        for( unsigned int i = 0; i < nCount; i++ )
-        {
-            m_pPrinterLB->InsertEntry( rPrinters[i] );
-            if( !bMergePrinterExists && rPrinters[i] == xConfigItem->GetSelectedPrinter() )
-                bMergePrinterExists = true;
-        }
 
+    for (unsigned int i = 0; i < nCount; ++i)
+    {
+        m_xPrinterLB->append_text( rPrinters[i] );
+        if( !bMergePrinterExists && rPrinters[i] == xConfigItem->GetSelectedPrinter() )
+            bMergePrinterExists = true;
     }
 
     assert(xConfigItem);
     if(!bMergePrinterExists)
     {
         SfxPrinter* pPrinter = pView->GetWrtShell().getIDocumentDeviceAccess().getPrinter( true );
-        m_pPrinterLB->SelectEntry(pPrinter->GetName());
+        m_xPrinterLB->set_active(pPrinter->GetName());
     }
     else
     {
-        m_pPrinterLB->SelectEntry(xConfigItem->GetSelectedPrinter());
+        m_xPrinterLB->set_active(xConfigItem->GetSelectedPrinter());
     }
 
     sal_Int32 count = xConfigItem->GetMergedDocumentCount();
-    m_pToNF->SetValue(count);
-    m_pToNF->SetMax(count);
+    m_xToNF->set_value(count);
+    m_xToNF->set_max(count);
 
-    m_pPrinterLB->SelectEntry(xConfigItem->GetSelectedPrinter());
+    m_xPrinterLB->set_active(xConfigItem->GetSelectedPrinter());
 }
 
 void SwMMResultEmailDialog::FillInEmailSettings()
@@ -469,12 +448,12 @@ IMPL_LINK(SwMMResultSaveDialog, DocumentSelectionHdl_Impl, Button*, pButton, voi
     m_pToNF->Enable(bEnableFromTo);
 }
 
-IMPL_LINK(SwMMResultPrintDialog, DocumentSelectionHdl_Impl, Button*, pButton, void)
+IMPL_LINK(SwMMResultPrintDialog, DocumentSelectionHdl_Impl, weld::ToggleButton&, rButton, void)
 {
-    bool bEnableFromTo = pButton == m_pFromRB;
-    m_pFromNF->Enable(bEnableFromTo);
-    m_pToFT->Enable(bEnableFromTo);
-    m_pToNF->Enable(bEnableFromTo);
+    bool bEnableFromTo = &rButton == m_xFromRB.get();
+    m_xFromNF->set_sensitive(bEnableFromTo);
+    m_xToFT->set_sensitive(bEnableFromTo);
+    m_xToNF->set_sensitive(bEnableFromTo);
 }
 
 IMPL_LINK(SwMMResultEmailDialog, DocumentSelectionHdl_Impl, Button*, pButton, void)
@@ -748,14 +727,14 @@ IMPL_LINK(SwMMResultSaveDialog, SaveOutputHdl_Impl, Button*, pButton, void)
     endDialog(pButton);
 }
 
-IMPL_LINK(SwMMResultPrintDialog, PrinterChangeHdl_Impl, ListBox&, rBox, void)
+IMPL_LINK(SwMMResultPrintDialog, PrinterChangeHdl_Impl, weld::ComboBoxText&, rBox, void)
 {
     SwView* pView = ::GetActiveView();
     std::shared_ptr<SwMailMergeConfigItem> xConfigItem = pView->GetMailMergeConfigItem();
     assert(xConfigItem);
-    if (rBox.GetSelectedEntryPos() != LISTBOX_ENTRY_NOTFOUND)
+    if (rBox.get_active() != -1)
     {
-        const QueueInfo* pInfo = Printer::GetQueueInfo( rBox.GetSelectedEntry(), false );
+        const QueueInfo* pInfo = Printer::GetQueueInfo( rBox.get_active_text(), false );
 
         if( pInfo )
         {
@@ -776,15 +755,15 @@ IMPL_LINK(SwMMResultPrintDialog, PrinterChangeHdl_Impl, ListBox&, rBox, void)
         else if( ! m_pTempPrinter )
             m_pTempPrinter = VclPtr<Printer>::Create();
 
-        m_pPrinterSettingsPB->Enable( m_pTempPrinter->HasSupport( PrinterSupport::SetupDialog ) );
+        m_xPrinterSettingsPB->set_sensitive(m_pTempPrinter->HasSupport(PrinterSupport::SetupDialog));
     }
     else
-        m_pPrinterSettingsPB->Disable();
+        m_xPrinterSettingsPB->set_sensitive(false);
 
-    xConfigItem->SetSelectedPrinter(rBox.GetSelectedEntry());
+    xConfigItem->SetSelectedPrinter(rBox.get_active_text());
 }
 
-IMPL_LINK(SwMMResultPrintDialog, PrintHdl_Impl, Button*, pButton, void)
+IMPL_LINK_NOARG(SwMMResultPrintDialog, PrintHdl_Impl, weld::Button&, void)
 {
     SwView* pView = ::GetActiveView();
     std::shared_ptr<SwMailMergeConfigItem> xConfigItem = pView->GetMailMergeConfigItem();
@@ -799,15 +778,15 @@ IMPL_LINK(SwMMResultPrintDialog, PrintHdl_Impl, Button*, pButton, void)
     sal_uInt32 nEnd = 0;
     sal_uInt32 documentCount = xConfigItem->GetMergedDocumentCount();
 
-    if(m_pPrintAllRB->IsChecked())
+    if (m_xPrintAllRB->get_active())
     {
         nBegin = 0;
         nEnd = documentCount;
     }
     else
     {
-        nBegin  = static_cast< sal_Int32 >(m_pFromNF->GetValue() - 1);
-        nEnd    = static_cast< sal_Int32 >(m_pToNF->GetValue());
+        nBegin  = m_xFromNF->get_value() - 1;
+        nEnd    = m_xToNF->get_value();
         if(nEnd > documentCount)
             nEnd = documentCount;
     }
@@ -838,15 +817,15 @@ IMPL_LINK(SwMMResultPrintDialog, PrintHdl_Impl, Button*, pButton, void)
     pTargetView->ExecPrint( aProps, false, true );
     SfxGetpApp()->NotifyEvent(SfxEventHint(SfxEventHintId::SwMailMergeEnd, SwDocShell::GetEventName(STR_SW_EVENT_MAIL_MERGE_END), pObjSh));
 
-    endDialog(pButton);
+    m_xDialog->response(RET_OK);
 }
 
-IMPL_LINK(SwMMResultPrintDialog, PrinterSetupHdl_Impl, Button*, pButton, void)
+IMPL_LINK_NOARG(SwMMResultPrintDialog, PrinterSetupHdl_Impl, weld::Button&, void)
 {
-    if( !m_pTempPrinter )
-        PrinterChangeHdl_Impl(*m_pPrinterLB);
-    if(m_pTempPrinter)
-        m_pTempPrinter->Setup(pButton);
+    if (!m_pTempPrinter)
+        PrinterChangeHdl_Impl(*m_xPrinterLB);
+    if (m_pTempPrinter)
+        m_pTempPrinter->Setup(m_xDialog.get());
 }
 
 IMPL_LINK(SwMMResultEmailDialog, SendTypeHdl_Impl, ListBox&, rBox, void)
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index fd0e2009e953..a5a6ca3ded6c 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -1139,10 +1139,10 @@ void SwAbstractDialogFactory_Impl::ExecuteMMResultSaveDialog()
     pDialog->Execute();
 }
 
-void SwAbstractDialogFactory_Impl::ExecuteMMResultPrintDialog()
+void SwAbstractDialogFactory_Impl::ExecuteMMResultPrintDialog(weld::Window* pParent)
 {
-    ScopedVclPtrInstance<SwMMResultPrintDialog> pDialog;
-    pDialog->Execute();
+    SwMMResultPrintDialog aDialog(pParent);
+    aDialog.run();
 }
 
 void SwAbstractDialogFactory_Impl::ExecuteMMResultEmailDialog()
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index 48fd7f95c91f..fd13c1d76100 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -649,7 +649,7 @@ public:
     virtual CreateTabPage               GetTabPageCreatorFunc( sal_uInt16 nId ) override;
 
     virtual void ExecuteMMResultSaveDialog() override;
-    virtual void ExecuteMMResultPrintDialog() override;
+    virtual void ExecuteMMResultPrintDialog(weld::Window* pParent) override;
     virtual void ExecuteMMResultEmailDialog() override;
 };
 
diff --git a/sw/source/ui/envelp/envprt.cxx b/sw/source/ui/envelp/envprt.cxx
index 0e52ab4a7f98..7605bd485354 100644
--- a/sw/source/ui/envelp/envprt.cxx
+++ b/sw/source/ui/envelp/envprt.cxx
@@ -115,10 +115,9 @@ IMPL_LINK( SwEnvPrtPage, ButtonHdl, Button *, pBtn, void )
         // Call printer setup
         if (pPrt)
         {
-            VclPtrInstance< PrinterSetupDialog > pDlg(this);
-            pDlg->SetPrinter(pPrt);
-            pDlg->Execute();
-            pDlg.reset();
+            PrinterSetupDialog aDlg(GetFrameWeld());
+            aDlg.SetPrinter(pPrt);
+            aDlg.execute();
             GrabFocus();
             m_pPrinterInfo->SetText(pPrt->GetName());
         }
diff --git a/sw/source/ui/envelp/labprt.cxx b/sw/source/ui/envelp/labprt.cxx
index c876f2e2eece..faecd0ee8018 100644
--- a/sw/source/ui/envelp/labprt.cxx
+++ b/sw/source/ui/envelp/labprt.cxx
@@ -87,10 +87,9 @@ IMPL_LINK( SwLabPrtPage, CountHdl, Button *, pButton, void )
         if (!pPrinter)
             pPrinter = VclPtr<Printer>::Create();
 
-        VclPtrInstance< PrinterSetupDialog > pDlg(this);
-        pDlg->SetPrinter(pPrinter);
-        pDlg->Execute();
-        pDlg.disposeAndClear();
+        PrinterSetupDialog aDlg(GetFrameWeld());
+        aDlg.SetPrinter(pPrinter);
+        aDlg.execute();
         GrabFocus();
         m_pPrinterInfo->SetText(pPrinter->GetName());
         return;
diff --git a/sw/source/ui/inc/mmresultdialogs.hxx b/sw/source/ui/inc/mmresultdialogs.hxx
index 01e89826372c..a63a6653c418 100644
--- a/sw/source/ui/inc/mmresultdialogs.hxx
+++ b/sw/source/ui/inc/mmresultdialogs.hxx
@@ -25,6 +25,7 @@
 #include <vcl/field.hxx>
 #include <vcl/lstbox.hxx>
 #include <vcl/prgsbar.hxx>
+#include <vcl/weld.hxx>
 #include <sfx2/objsh.hxx>
 #include <sfx2/basedlgs.hxx>
 #include <svtools/simptabl.hxx>
@@ -68,35 +69,30 @@ public:
 };
 
 /// Dialog implementing the printing of the result document.
-class SwMMResultPrintDialog : public SfxModalDialog
+class SwMMResultPrintDialog : public weld::GenericDialogController
 {
-    VclPtr<FixedText>      m_pPrinterFT;
-    VclPtr<ListBox>        m_pPrinterLB;
-    VclPtr<PushButton>     m_pPrinterSettingsPB;
-
-    VclPtr<RadioButton>    m_pPrintAllRB;
-
-    VclPtr<RadioButton>    m_pFromRB;
-    VclPtr<NumericField>   m_pFromNF;
-    VclPtr<FixedText>      m_pToFT;
-    VclPtr<NumericField>   m_pToNF;
-
-    VclPtr<Button>         m_pOKButton;
-
     VclPtr<Printer>        m_pTempPrinter;
 
-    DECL_LINK(PrinterChangeHdl_Impl, ListBox&,void );
-    DECL_LINK(PrintHdl_Impl, Button*, void);
-    DECL_LINK(PrinterSetupHdl_Impl, Button*, void );
-    DECL_LINK(DocumentSelectionHdl_Impl, Button*, void);
+    std::unique_ptr<weld::Label>        m_xPrinterFT;
+    std::unique_ptr<weld::ComboBoxText> m_xPrinterLB;
+    std::unique_ptr<weld::Button>       m_xPrinterSettingsPB;
+    std::unique_ptr<weld::RadioButton>  m_xPrintAllRB;
+    std::unique_ptr<weld::RadioButton>  m_xFromRB;
+    std::unique_ptr<weld::SpinButton>   m_xFromNF;
+    std::unique_ptr<weld::Label>        m_xToFT;
+    std::unique_ptr<weld::SpinButton>   m_xToNF;
+    std::unique_ptr<weld::Button>       m_xOKButton;
+
+    DECL_LINK(PrinterChangeHdl_Impl, weld::ComboBoxText&, void );
+    DECL_LINK(PrintHdl_Impl, weld::Button&, void);
+    DECL_LINK(PrinterSetupHdl_Impl, weld::Button&, void );
+    DECL_LINK(DocumentSelectionHdl_Impl, weld::ToggleButton&, void);
 
     void FillInPrinterSettings();
 
 public:
-    SwMMResultPrintDialog();
+    SwMMResultPrintDialog(weld::Window* pParent);
     virtual ~SwMMResultPrintDialog() override;
-
-    virtual void dispose() override;
 };
 
 /// Dialog implementing the sending as email of the result document.
diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx
index 1a74f3f64f11..6be30033a10f 100644
--- a/sw/source/uibase/app/apphdl.cxx
+++ b/sw/source/uibase/app/apphdl.cxx
@@ -816,7 +816,7 @@ void SwModule::ExecOther(SfxRequest& rReq)
             switch (nWhich)
             {
                 case FN_MAILMERGE_SAVE_DOCUMENTS: pFact->ExecuteMMResultSaveDialog(); break;
-                case FN_MAILMERGE_PRINT_DOCUMENTS: pFact->ExecuteMMResultPrintDialog(); break;
+                case FN_MAILMERGE_PRINT_DOCUMENTS: pFact->ExecuteMMResultPrintDialog(rReq.GetFrameWeld()); break;
                 case FN_MAILMERGE_EMAIL_DOCUMENTS: pFact->ExecuteMMResultEmailDialog(); break;
             }
         }
diff --git a/sw/source/uibase/inc/pview.hxx b/sw/source/uibase/inc/pview.hxx
index 5d046f60933e..059aecd1c060 100644
--- a/sw/source/uibase/inc/pview.hxx
+++ b/sw/source/uibase/inc/pview.hxx
@@ -201,7 +201,7 @@ class SW_DLLPUBLIC SwPagePreview: public SfxViewShell
     SAL_DLLPRIVATE virtual SfxPrinter*     GetPrinter( bool bCreate = false ) override;
     SAL_DLLPRIVATE virtual sal_uInt16      SetPrinter( SfxPrinter *pNewPrinter, SfxPrinterChangeFlags nDiffFlags = SFX_PRINTER_ALL ) override;
     SAL_DLLPRIVATE virtual bool            HasPrintOptionsPage() const override;
-    SAL_DLLPRIVATE virtual VclPtr<SfxTabPage> CreatePrintOptionsPage(TabPageParent pParent, const SfxItemSet &rOptions) override;
+    SAL_DLLPRIVATE virtual VclPtr<SfxTabPage> CreatePrintOptionsPage(weld::Container* pParent, const SfxItemSet &rOptions) override;
 
     SAL_DLLPRIVATE void CalcAndSetBorderPixel( SvBorder &rToFill );
 
diff --git a/sw/source/uibase/uiview/pview.cxx b/sw/source/uibase/uiview/pview.cxx
index cd2248684316..76f46c2a46dc 100644
--- a/sw/source/uibase/uiview/pview.cxx
+++ b/sw/source/uibase/uiview/pview.cxx
@@ -1706,10 +1706,10 @@ bool SwPagePreview::HasPrintOptionsPage() const
     return true;
 }
 
-VclPtr<SfxTabPage> SwPagePreview::CreatePrintOptionsPage( TabPageParent pParent,
+VclPtr<SfxTabPage> SwPagePreview::CreatePrintOptionsPage( weld::Container* pPage,
                                                           const SfxItemSet &rOptions )
 {
-    return ::CreatePrintOptionsPage( TabPageParent(pParent.pParent), rOptions, !m_bNormalPrint );
+    return ::CreatePrintOptionsPage(pPage, rOptions, !m_bNormalPrint);
 }
 
 void SwPagePreviewWin::SetViewShell( SwViewShell* pShell )
diff --git a/sw/source/uibase/uiview/viewprt.cxx b/sw/source/uibase/uiview/viewprt.cxx
index f840dc3a4160..d7ac18727985 100644
--- a/sw/source/uibase/uiview/viewprt.cxx
+++ b/sw/source/uibase/uiview/viewprt.cxx
@@ -170,10 +170,10 @@ namespace
 
 // TabPage for application-specific print options
 
-VclPtr<SfxTabPage> SwView::CreatePrintOptionsPage(TabPageParent pParent,
+VclPtr<SfxTabPage> SwView::CreatePrintOptionsPage(weld::Container* pPage,
                                                   const SfxItemSet& rSet)
 {
-    return ::CreatePrintOptionsPage( pParent, rSet, false );
+    return ::CreatePrintOptionsPage(pPage, rSet, false);
 }
 
 // Print dispatcher
@@ -303,7 +303,7 @@ void SwView::NotifyCursor(SfxViewShell* pViewShell) const
 
 // Create page printer/additions for SwView and SwPagePreview
 
-VclPtr<SfxTabPage> CreatePrintOptionsPage( TabPageParent pParent,
+VclPtr<SfxTabPage> CreatePrintOptionsPage( weld::Container* pPage,
                                            const SfxItemSet &rOptions,
                                            bool bPreview )
 {
@@ -317,16 +317,16 @@ VclPtr<SfxTabPage> CreatePrintOptionsPage( TabPageParent pParent,
     if (!fnCreatePage)
         return nullptr;
 
-    VclPtr<SfxTabPage> pPage = fnCreatePage(pParent, &rOptions);
-    OSL_ENSURE(pPage, "No page");
-    if (!pPage)
+    VclPtr<SfxTabPage> pSfxPage = fnCreatePage(pPage, &rOptions);
+    OSL_ENSURE(pSfxPage, "No page");
+    if (!pSfxPage)
         return nullptr;
 
     SfxAllItemSet aSet(*(rOptions.GetPool()));
     aSet.Put(SfxBoolItem(SID_PREVIEWFLAG_TYPE, bPreview));
     aSet.Put(SfxBoolItem(SID_FAX_LIST, true));
-    pPage->PageCreated(aSet);
-    return pPage;
+    pSfxPage->PageCreated(aSet);
+    return pSfxPage;
 }
 
 void SetAppPrintOptions( SwViewShell* pSh, bool bWeb )
diff --git a/sw/uiconfig/swriter/ui/mmresultprintdialog.ui b/sw/uiconfig/swriter/ui/mmresultprintdialog.ui
index e1ef3d8aae08..64096ab8776c 100644
--- a/sw/uiconfig/swriter/ui/mmresultprintdialog.ui
+++ b/sw/uiconfig/swriter/ui/mmresultprintdialog.ui
@@ -1,11 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.20.4 -->
 <interface domain="sw">
   <requires lib="gtk+" version="3.18"/>
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="lower">1</property>
+    <property name="upper">100000</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="lower">1</property>
+    <property name="upper">100000</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+  </object>
   <object class="GtkDialog" id="MMResultPrintDialog">
     <property name="can_focus">False</property>
     <property name="border_width">6</property>
     <property name="title" translatable="yes" context="mmresultprintdialog|MMResultPrintDialog">Print merged document</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">
@@ -57,6 +72,7 @@
                 <property name="expand">False</property>
                 <property name="fill">True</property>
                 <property name="position">2</property>
+                <property name="secondary">True</property>
               </packing>
             </child>
           </object>
@@ -93,10 +109,10 @@
                       <object class="GtkLabel" id="printerft">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="xalign">0</property>
                         <property name="label" translatable="yes" context="mmresultprintdialog|printerft">_Printer</property>
                         <property name="use_underline">True</property>
                         <property name="mnemonic_widget">printers</property>
+                        <property name="xalign">0</property>
                       </object>
                       <packing>
                         <property name="left_attach">0</property>
@@ -205,7 +221,7 @@
                             <property name="draw_indicator">True</property>
                             <property name="group">printallrb</property>
                             <accessibility>
-                              <relation type="label-for" target="from-nospin"/>
+                              <relation type="label-for" target="from"/>
                             </accessibility>
                           </object>
                           <packing>
@@ -219,7 +235,7 @@
                             <property name="can_focus">False</property>
                             <property name="label" translatable="yes" context="mmresultprintdialog|toft">_To</property>
                             <property name="use_underline">True</property>
-                            <property name="mnemonic_widget">to-nospin</property>
+                            <property name="mnemonic_widget">to</property>
                           </object>
                           <packing>
                             <property name="left_attach">2</property>
@@ -227,10 +243,11 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkSpinButton" id="from-nospin">
+                          <object class="GtkSpinButton" id="from">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="text" translatable="no">1</property>
+                            <property name="text">1</property>
+                            <property name="adjustment">adjustment1</property>
                             <property name="value">1</property>
                             <accessibility>
                               <relation type="labelled-by" target="fromrb"/>
@@ -242,10 +259,11 @@
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkSpinButton" id="to-nospin">
+                          <object class="GtkSpinButton" id="to">
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="text">1</property>
+                            <property name="adjustment">adjustment2</property>
                             <property name="value">1</property>
                           </object>
                           <packing>
@@ -288,5 +306,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/vcl/headless/svpprn.cxx b/vcl/headless/svpprn.cxx
index a0ec78290429..e54c01a4c437 100644
--- a/vcl/headless/svpprn.cxx
+++ b/vcl/headless/svpprn.cxx
@@ -267,7 +267,7 @@ GenPspGraphics *SvpSalInstance::CreatePrintGraphics()
     return new GenPspGraphics();
 }
 
-bool SvpSalInfoPrinter::Setup( SalFrame*, ImplJobSetup* )
+bool SvpSalInfoPrinter::Setup( weld::Window*, ImplJobSetup* )
 {
     return false;
 }
diff --git a/vcl/inc/headless/svpprn.hxx b/vcl/inc/headless/svpprn.hxx
index d38d36d13091..a7572af2f2e3 100644
--- a/vcl/inc/headless/svpprn.hxx
+++ b/vcl/inc/headless/svpprn.hxx
@@ -30,7 +30,7 @@
 class SvpSalInfoPrinter : public PspSalInfoPrinter
 {
 public:
-    virtual bool Setup( SalFrame* pFrame, ImplJobSetup* pSetupData ) override;
+    virtual bool Setup( weld::Window* pFrame, ImplJobSetup* pSetupData ) override;
 };
 
 class SvpSalPrinter : public PspSalPrinter
diff --git a/vcl/inc/osx/salprn.h b/vcl/inc/osx/salprn.h
index 8f9c04017a66..717c8e15e61c 100644
--- a/vcl/inc/osx/salprn.h
+++ b/vcl/inc/osx/salprn.h
@@ -68,7 +68,7 @@ class AquaSalInfoPrinter : public SalInfoPrinter
 
     virtual SalGraphics*        AcquireGraphics() override;
     virtual void                ReleaseGraphics( SalGraphics* i_pGraphics ) override;
-    virtual bool                Setup( SalFrame* i_pFrame, ImplJobSetup* i_pSetupData ) override;
+    virtual bool                Setup( weld::Window* i_pFrame, ImplJobSetup* i_pSetupData ) override;
     virtual bool                SetPrinterData( ImplJobSetup* pSetupData ) override;
     virtual bool                SetData( JobSetFlags i_nFlags, ImplJobSetup* i_pSetupData ) override;
     virtual void                GetPageInfo( const ImplJobSetup* i_pSetupData,
diff --git a/vcl/inc/salprn.hxx b/vcl/inc/salprn.hxx
index d9da1a6d80ed..d2af082164ee 100644
--- a/vcl/inc/salprn.hxx
+++ b/vcl/inc/salprn.hxx
@@ -60,7 +60,7 @@ public:
     virtual SalGraphics*            AcquireGraphics() = 0;
     virtual void                    ReleaseGraphics( SalGraphics* pGraphics ) = 0;
 
-    virtual bool                    Setup( SalFrame* pFrame, ImplJobSetup* pSetupData ) = 0;
+    virtual bool                    Setup(weld::Window* pFrame, ImplJobSetup* pSetupData) = 0;
     // This function set the driver data and
     // set the new indepen data in pSetupData
     virtual bool                    SetPrinterData( ImplJobSetup* pSetupData ) = 0;
diff --git a/vcl/inc/unx/genprn.h b/vcl/inc/unx/genprn.h
index 9d80de32f99b..a8ad4fb062c1 100644
--- a/vcl/inc/unx/genprn.h
+++ b/vcl/inc/unx/genprn.h
@@ -40,7 +40,7 @@ public:
     // override all pure virtual methods
     virtual SalGraphics*            AcquireGraphics() override;
     virtual void                    ReleaseGraphics( SalGraphics* pGraphics ) override;
-    virtual bool                    Setup( SalFrame* pFrame, ImplJobSetup* pSetupData ) override;
+    virtual bool                    Setup( weld::Window* pFrame, ImplJobSetup* pSetupData ) override;
     virtual bool                    SetPrinterData( ImplJobSetup* pSetupData ) override;
     virtual bool                    SetData( JobSetFlags nFlags, ImplJobSetup* pSetupData ) override;
     virtual void                    GetPageInfo( const ImplJobSetup* pSetupData,
diff --git a/vcl/inc/win/salprn.h b/vcl/inc/win/salprn.h
index f9be4757ad13..c0c6e7fb7932 100644
--- a/vcl/inc/win/salprn.h
+++ b/vcl/inc/win/salprn.h
@@ -55,7 +55,7 @@ public:
 
     virtual SalGraphics*            AcquireGraphics() override;
     virtual void                    ReleaseGraphics( SalGraphics* pGraphics ) override;
-    virtual bool                    Setup( SalFrame* pFrame, ImplJobSetup* pSetupData ) override;
+    virtual bool                    Setup( weld::Window* pFrame, ImplJobSetup* pSetupData ) override;
     virtual bool                    SetPrinterData( ImplJobSetup* pSetupData ) override;
     virtual bool                    SetData( JobSetFlags nFlags, ImplJobSetup* pSetupData ) override;
     virtual void                    GetPageInfo( const ImplJobSetup* pSetupData,
diff --git a/vcl/osx/salprn.cxx b/vcl/osx/salprn.cxx
index b87585de91db..baeb6c6d71d9 100644
--- a/vcl/osx/salprn.cxx
+++ b/vcl/osx/salprn.cxx
@@ -148,7 +148,7 @@ void AquaSalInfoPrinter::ReleaseGraphics( SalGraphics* )
     mbGraphics = false;
 }
 
-bool AquaSalInfoPrinter::Setup( SalFrame*, ImplJobSetup* )
+bool AquaSalInfoPrinter::Setup( weld::Window*, ImplJobSetup* )
 {
     return false;
 }
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index ab1d797c8aba..a22721c52276 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -37,6 +37,7 @@
 #include <vcl/layout.hxx>
 #include <vcl/menubtn.hxx>
 #include <vcl/slider.hxx>
+#include <vcl/sysdata.hxx>
 #include <vcl/tabctrl.hxx>
 #include <vcl/tabpage.hxx>
 #include <vcl/unowrap.hxx>
@@ -215,6 +216,11 @@ public:
         return m_xWidget->IsVisible();
     }
 
+    virtual bool is_visible() const override
+    {
+        return m_xWidget->IsReallyVisible();
+    }
+
     virtual void grab_focus() override
     {
         m_xWidget->GrabFocus();
@@ -562,6 +568,11 @@ public:
         return true;
     }
 
+    virtual SystemEnvData get_system_data() const override
+    {
+        return *m_xWindow->GetSystemData();
+    }
+
     virtual ~SalInstanceWindow() override
     {
         clear_child_help(m_xWindow);
@@ -622,6 +633,11 @@ public:
     {
         m_xDialog->set_default_response(nResponse);
     }
+
+    virtual Container* weld_content_area() override
+    {
+        return new SalInstanceContainer(m_xDialog->get_content_area(), false);
+    }
 };
 
 class SalInstanceMessageDialog : public SalInstanceDialog, public virtual weld::MessageDialog
diff --git a/vcl/source/gdi/print.cxx b/vcl/source/gdi/print.cxx
index 8e068cbde877..b697e9e01557 100644
--- a/vcl/source/gdi/print.cxx
+++ b/vcl/source/gdi/print.cxx
@@ -1043,7 +1043,7 @@ bool Printer::SetJobSetup( const JobSetup& rSetup )
     return false;
 }
 
-bool Printer::Setup( vcl::Window* pWindow, PrinterSetupMode eMode )
+bool Printer::Setup(weld::Window* pWindow, PrinterSetupMode eMode)
 {
     if ( IsDisplayPrinter() )
         return false;
@@ -1056,18 +1056,19 @@ bool Printer::Setup( vcl::Window* pWindow, PrinterSetupMode eMode )
     rData.SetPrinterSetupMode( eMode );
     // TODO: orig page size
 
-    SalFrame* pFrame;
-    if ( !pWindow )
-        pWindow = ImplGetDefaultWindow();
+    if (!pWindow)
+    {
+        vcl::Window* pDefWin = ImplGetDefaultWindow();
+        pWindow = pDefWin ? pDefWin->GetFrameWeld() : nullptr;
+    }
     if( !pWindow )
         return false;
 
-    pFrame = pWindow->ImplGetFrame();
     ReleaseGraphics();
     ImplSVData* pSVData = ImplGetSVData();
     pSVData->maAppData.mnModalMode++;
     nImplSysDialog++;
-    bool bSetup = mpInfoPrinter->Setup( pFrame, &rData );
+    bool bSetup = mpInfoPrinter->Setup(pWindow, &rData);
     pSVData->maAppData.mnModalMode--;
     nImplSysDialog--;
     if ( bSetup )
diff --git a/vcl/source/gdi/print3.cxx b/vcl/source/gdi/print3.cxx
index 48647b8d4921..544e07ce02d4 100644
--- a/vcl/source/gdi/print3.cxx
+++ b/vcl/source/gdi/print3.cxx
@@ -796,7 +796,7 @@ void PrinterController::resetPrinterOptions( bool i_bFileOutput )
     mpImplData->mxPrinter->SetPrinterOptions( aOpt );
 }
 
-void PrinterController::setupPrinter( vcl::Window* i_pParent )
+void PrinterController::setupPrinter( weld::Window* i_pParent )
 {
     bool bRet = false;
 
diff --git a/vcl/source/window/printdlg.cxx b/vcl/source/window/printdlg.cxx
index 6ca8876aea27..a7ef48c01e83 100644
--- a/vcl/source/window/printdlg.cxx
+++ b/vcl/source/window/printdlg.cxx
@@ -1720,7 +1720,7 @@ IMPL_LINK( PrintDialog, ClickHdl, Button*, pButton, void )
     {
         if( pButton == maJobPage.mpSetupButton )
         {
-            maPController->setupPrinter( this );
+            maPController->setupPrinter(GetFrameWeld());
 
             // tdf#63905 don't use cache: page size may change
             preparePreview();
diff --git a/vcl/unx/generic/print/genprnpsp.cxx b/vcl/unx/generic/print/genprnpsp.cxx
index b2d46d91d753..dc1d4ebf54cd 100644
--- a/vcl/unx/generic/print/genprnpsp.cxx
+++ b/vcl/unx/generic/print/genprnpsp.cxx
@@ -524,7 +524,7 @@ void PspSalInfoPrinter::ReleaseGraphics( SalGraphics* pGraphics )
     }
 }
 
-bool PspSalInfoPrinter::Setup( SalFrame* pFrame, ImplJobSetup* pJobSetup )
+bool PspSalInfoPrinter::Setup( weld::Window* pFrame, ImplJobSetup* pJobSetup )
 {
     if( ! pFrame || ! pJobSetup )
         return false;
@@ -540,7 +540,7 @@ bool PspSalInfoPrinter::Setup( SalFrame* pFrame, ImplJobSetup* pJobSetup )
     aInfo.m_bPapersizeFromSetup = pJobSetup->GetPapersizeFromSetup();
     aInfo.meSetupMode = pJobSetup->GetPrinterSetupMode();
 
-    if (SetupPrinterDriver(pFrame->GetFrameWeld(), aInfo))
+    if (SetupPrinterDriver(pFrame, aInfo))
     {
         aInfo.resolveDefaultBackend();
         rtl_freeMemory( const_cast<sal_uInt8*>(pJobSetup->GetDriverData()) );
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 20f94158612e..74a4c3473011 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1226,6 +1226,11 @@ public:
         return gtk_widget_get_visible(m_pWidget);
     }
 
+    virtual bool is_visible() const override
+    {
+        return gtk_widget_is_visible(m_pWidget);
+    }
+
     virtual void grab_focus() override
     {
         gtk_widget_grab_focus(m_pWidget);
@@ -1805,6 +1810,12 @@ public:
         return ret;
     }
 
+    virtual SystemEnvData get_system_data() const override
+    {
+        assert(false && "nothing should call this impl, yet anyway, if ever");
+        return SystemEnvData();
+    }
+
     virtual ~GtkInstanceWindow() override
     {
         if (m_xWindow.is())
@@ -2025,6 +2036,11 @@ public:
 
     virtual weld::Button* get_widget_for_response(int nResponse) override;
 
+    virtual Container* weld_content_area() override
+    {
+        return new GtkInstanceContainer(GTK_CONTAINER(gtk_dialog_get_content_area(m_pDialog)), false);
+    }
+
     virtual ~GtkInstanceDialog() override
     {
         g_signal_handler_disconnect(m_pDialog, m_nCloseSignalId);
diff --git a/vcl/win/gdi/salprn.cxx b/vcl/win/gdi/salprn.cxx
index 37b72ebfadcd..a682f9d33f0a 100644
--- a/vcl/win/gdi/salprn.cxx
+++ b/vcl/win/gdi/salprn.cxx
@@ -348,7 +348,7 @@ static bool ImplTestSalJobSetup( WinSalInfoPrinter const * pPrinter,
 }
 
 static bool ImplUpdateSalJobSetup( WinSalInfoPrinter const * pPrinter, ImplJobSetup* pSetupData,
-                                   bool bIn, WinSalFrame* pVisibleDlgParent )
+                                   bool bIn, weld::Window* pVisibleDlgParent )
 {
     HANDLE hPrn;
     LPWSTR pPrinterNameW = const_cast<LPWSTR>(o3tl::toW(pPrinter->maDeviceName.getStr()));
@@ -392,7 +392,7 @@ static bool ImplUpdateSalJobSetup( WinSalInfoPrinter const * pPrinter, ImplJobSe
     // check if the dialog should be shown
     if ( pVisibleDlgParent )
     {
-        hWnd = pVisibleDlgParent->mhWnd;
+        hWnd = pVisibleDlgParent->get_system_data().hWnd;
         nMode |= DM_IN_PROMPT;
     }
 
@@ -1164,9 +1164,9 @@ void WinSalInfoPrinter::ReleaseGraphics( SalGraphics* )
     mbGraphics = FALSE;
 }
 
-bool WinSalInfoPrinter::Setup( SalFrame* pFrame, ImplJobSetup* pSetupData )
+bool WinSalInfoPrinter::Setup(weld::Window* pFrame, ImplJobSetup* pSetupData)
 {
-    if ( ImplUpdateSalJobSetup( this, pSetupData, true, static_cast<WinSalFrame*>(pFrame) ) )
+    if ( ImplUpdateSalJobSetup(this, pSetupData, true, pFrame))
     {
         ImplDevModeToJobSetup( this, pSetupData, JobSetFlags::ALL );
         return ImplUpdateSalPrnIC( this, pSetupData );


More information about the Libreoffice-commits mailing list