[Libreoffice-commits] core.git: 3 commits - desktop/source include/sfx2 include/svtools include/vcl sfx2/inc sfx2/source sfx2/uiconfig sfx2/UIConfig_sfx.mk solenv/bin solenv/sanitizers svx/source sw/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue May 28 20:14:40 UTC 2019


 desktop/source/deployment/gui/dp_gui.h                                |    1 
 include/sfx2/dinfdlg.hxx                                              |  245 +--
 include/sfx2/strings.hrc                                              |    1 
 include/svtools/ctrlbox.hxx                                           |    1 
 include/vcl/weld.hxx                                                  |    1 
 sfx2/UIConfig_sfx.mk                                                  |    1 
 sfx2/inc/bitmaps.hlst                                                 |    1 
 sfx2/inc/strings.hxx                                                  |    2 
 sfx2/source/dialog/dinfdlg.cxx                                        |  703 +++-------
 sfx2/uiconfig/ui/cmisinfopage.ui                                      |   51 
 sfx2/uiconfig/ui/custominfopage.ui                                    |   65 
 sfx2/uiconfig/ui/linefragment.ui                                      |  237 +++
 solenv/bin/native-code.py                                             |    1 
 solenv/sanitizers/ui/sfx.suppr                                        |    6 
 svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx |    5 
 sw/source/ui/misc/bookmark.cxx                                        |    1 
 16 files changed, 656 insertions(+), 666 deletions(-)

New commits:
commit 5f2c1a1c9adf0168da36ab1290e235bd352b8914
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue May 28 16:40:07 2019 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue May 28 22:10:51 2019 +0200

    drop unused box
    
    copy and paste from the normal document info page I imagine
    
    Change-Id: Iff40fbf2b4d21dd3d51c63cb6068b0b88b5438ed
    Reviewed-on: https://gerrit.libreoffice.org/73115
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/sfx2/uiconfig/ui/cmisinfopage.ui b/sfx2/uiconfig/ui/cmisinfopage.ui
index 78f1d6e5a8c2..77c7be8b1b2b 100644
--- a/sfx2/uiconfig/ui/cmisinfopage.ui
+++ b/sfx2/uiconfig/ui/cmisinfopage.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="sfx">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkGrid" id="CmisInfoPage">
@@ -37,55 +37,6 @@
       </object>
       <packing>
         <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkBox" id="box1">
-        <property name="can_focus">False</property>
-        <property name="no_show_all">True</property>
-        <property name="hexpand">True</property>
-        <property name="spacing">12</property>
-        <property name="homogeneous">True</property>
-        <child>
-          <object class="GtkLabel" id="name">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes" context="cmisinfopage|name">Name</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="type">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes" context="cmisinfopage|type">Type</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkLabel" id="value">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes" context="cmisinfopage|value">Value</property>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-      </object>
-      <packing>
-        <property name="left_attach">0</property>
         <property name="top_attach">0</property>
       </packing>
     </child>
commit b3e970898b9631344b38613c844b5f1ca8bb1016
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Tue May 28 16:28:01 2019 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue May 28 22:10:35 2019 +0200

    drop some unneeded includes
    
    Change-Id: I42b2ccbb4484ab2acb8208ad88c6f22e4af09f7d
    Reviewed-on: https://gerrit.libreoffice.org/73114
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/desktop/source/deployment/gui/dp_gui.h b/desktop/source/deployment/gui/dp_gui.h
index 01eaadd75936..37c39c04ba58 100644
--- a/desktop/source/deployment/gui/dp_gui.h
+++ b/desktop/source/deployment/gui/dp_gui.h
@@ -30,7 +30,6 @@
 #include <vcl/button.hxx>
 #include <vcl/fixed.hxx>
 #include <salhelper/simplereferenceobject.hxx>
-#include <vcl/headbar.hxx>
 #include <com/sun/star/ucb/XContentEventListener.hpp>
 #include <osl/mutex.hxx>
 
diff --git a/include/sfx2/dinfdlg.hxx b/include/sfx2/dinfdlg.hxx
index 1062cf18dc5b..45444aff0166 100644
--- a/include/sfx2/dinfdlg.hxx
+++ b/include/sfx2/dinfdlg.hxx
@@ -31,8 +31,6 @@
 
 #include <svtools/ctrlbox.hxx>
 
-#include <vcl/headbar.hxx>
-
 #include <vcl/edit.hxx>
 #include <vcl/field.hxx>
 #include <vcl/idle.hxx>
diff --git a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
index 0fe2696c98c5..8e476a550609 100644
--- a/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
+++ b/svx/source/unodialogs/textconversiondlgs/chinese_dictionarydialog.cxx
@@ -27,13 +27,10 @@
 #include <com/sun/star/linguistic2/XConversionPropertyType.hpp>
 #include <com/sun/star/util/XFlushable.hpp>
 #include <com/sun/star/lang/Locale.hpp>
-#include <vcl/headbar.hxx>
-#include <vcl/svlbitm.hxx>
-#include <vcl/treelistentry.hxx>
-#include <vcl/settings.hxx>
 #include <unotools/lingucfg.hxx>
 #include <unotools/linguprops.hxx>
 #include <unotools/intlwrapper.hxx>
+#include <vcl/settings.hxx>
 #include <vcl/svapp.hxx>
 #include <osl/diagnose.h>
 
diff --git a/sw/source/ui/misc/bookmark.cxx b/sw/source/ui/misc/bookmark.cxx
index dfa49f8bfe12..b7de3dc377da 100644
--- a/sw/source/ui/misc/bookmark.cxx
+++ b/sw/source/ui/misc/bookmark.cxx
@@ -21,7 +21,6 @@
 #include <svl/stritem.hxx>
 #include <svx/svxids.hrc>
 #include <vcl/weld.hxx>
-#include <vcl/headbar.hxx>
 #include <com/sun/star/text/XBookmarksSupplier.hpp>
 
 #include <swabstdlg.hxx>
commit 208522ddd3fb6b994aacdab10aca45d4e2562207
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon May 27 10:32:03 2019 +0100
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue May 28 22:09:59 2019 +0200

    weld SfxCustomPropertiesPage
    
    Change-Id: I1b1ba1c2b879d270eb3af486a4d006f170d1b92e
    Reviewed-on: https://gerrit.libreoffice.org/73111
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/sfx2/dinfdlg.hxx b/include/sfx2/dinfdlg.hxx
index 4ededb6bd3fb..1062cf18dc5b 100644
--- a/include/sfx2/dinfdlg.hxx
+++ b/include/sfx2/dinfdlg.hxx
@@ -29,6 +29,8 @@
 #include <svl/stritem.hxx>
 #include <svl/zforlist.hxx>
 
+#include <svtools/ctrlbox.hxx>
+
 #include <vcl/headbar.hxx>
 
 #include <vcl/edit.hxx>
@@ -257,147 +259,109 @@ public:
 // class CustomPropertiesRemoveButton ------------------------------------
 struct CustomPropertyLine;
 
-class CustomPropertiesEdit : public Edit
+class CustomPropertiesDateField
 {
 private:
-    CustomPropertyLine* const       m_pLine;
-
-public:
-    CustomPropertiesEdit(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine)
-        : Edit(pParent, nStyle)
-        , m_pLine(pLine)
-    {
-    }
-
-    CustomPropertyLine*      GetLine() const { return m_pLine; }
-};
-
-class CustomPropertiesTypeBox : public ListBox
-{
-private:
-    CustomPropertyLine* const       m_pLine;
-
-public:
-    CustomPropertiesTypeBox(vcl::Window* pParent, CustomPropertyLine* pLine);
-    CustomPropertyLine*      GetLine() const { return m_pLine; }
-};
-
-class CustomPropertiesDateField : public DateField
-{
+    std::unique_ptr<SvtCalendarBox> m_xDateField;
 public:
     ::boost::optional<sal_Int16> m_TZ;
 
-    CustomPropertiesDateField(vcl::Window* pParent, WinBits nStyle)
-        : DateField(pParent, nStyle)
-    {
-    }
+    CustomPropertiesDateField(SvtCalendarBox* pDateField);
+    void set_visible(bool bVisible) { m_xDateField->set_visible(bVisible); }
+    Date get_date() const { return m_xDateField->get_date(); }
+    void set_date(const Date& rDate) { m_xDateField->set_date(rDate); }
+    ~CustomPropertiesDateField();
 };
 
-class CustomPropertiesTimeField : public TimeField
+class CustomPropertiesTimeField
 {
 public:
+    std::unique_ptr<weld::TimeSpinButton> m_xTimeField;
     bool m_isUTC;
 
-    CustomPropertiesTimeField(vcl::Window* pParent, WinBits nStyle)
-        : TimeField(pParent, nStyle)
-        , m_isUTC(false)
-    {
-    }
+    CustomPropertiesTimeField(std::unique_ptr<weld::TimeSpinButton> xTimeField);
+    void set_visible(bool bVisible) { m_xTimeField->set_visible(bVisible); }
+    tools::Time get_value() const { return m_xTimeField->get_value(); }
+    void set_value(const tools::Time& rTime) { m_xTimeField->set_value(rTime); }
+    ~CustomPropertiesTimeField();
 };
 
-class CustomPropertiesDurationField : public Edit
+class CustomPropertiesDurationField
 {
-    CustomPropertyLine* const       m_pLine;
     css::util::Duration             m_aDuration;
-protected:
-    virtual void    RequestHelp(const HelpEvent& rEvt) override;
+    std::unique_ptr<weld::Entry>    m_xEntry;
+    std::unique_ptr<weld::Button>   m_xEditButton;
+
+    DECL_LINK(ClickHdl, weld::Button&, void);
 public:
-    CustomPropertiesDurationField(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine);
+    CustomPropertiesDurationField(std::unique_ptr<weld::Entry> xEntry,
+                                  std::unique_ptr<weld::Button> xEditButton);
 
     void SetDuration( const css::util::Duration& rDuration );
     const css::util::Duration& GetDuration() const { return m_aDuration; }
-};
 
-class CustomPropertiesEditButton : public PushButton
-{
-    CustomPropertyLine*             m_pLine;
-
-public:
-    CustomPropertiesEditButton(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine);
-
-    DECL_LINK(ClickHdl, Button*, void);
+    void set_visible(bool bVisible);
 };
 
-class CustomPropertiesRemoveButton : public ImageButton
+class CustomPropertiesYesNoButton
 {
 private:
-    CustomPropertyLine* const       m_pLine;
+    std::unique_ptr<weld::Widget> m_xTopLevel;
+    std::unique_ptr<weld::RadioButton> m_xYesButton;
+    std::unique_ptr<weld::RadioButton> m_xNoButton;
 
 public:
-    CustomPropertiesRemoveButton(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine)
-        : ImageButton(pParent, nStyle)
-        , m_pLine(pLine)
-    {
-    }
-
-    CustomPropertyLine*      GetLine() const { return m_pLine; }
+    CustomPropertiesYesNoButton(std::unique_ptr<weld::Widget>,
+                                std::unique_ptr<weld::RadioButton> xYesButton,
+                                std::unique_ptr<weld::RadioButton> xNoButton);
+    ~CustomPropertiesYesNoButton();
+
+    void     CheckYes() { m_xYesButton->set_active(true); }
+    void     CheckNo() { m_xNoButton->set_active(true); }
+    bool     IsYesChecked() const { return m_xYesButton->get_active(); }
+    void     set_visible(bool bVisible) { m_xTopLevel->set_visible(bVisible); }
 };
 
-class CustomPropertiesYesNoButton : public Control
-{
-private:
-    VclPtr<RadioButton>             m_aYesButton;
-    VclPtr<RadioButton>             m_aNoButton;
-
-public:
-    CustomPropertiesYesNoButton(vcl::Window* pParent);
-    virtual ~CustomPropertiesYesNoButton() override;
-    virtual void dispose() override;
-
-    virtual void    Resize() override;
-
-    void     CheckYes() { m_aYesButton->Check(); }
-    void     CheckNo() { m_aNoButton->Check(); }
-    bool     IsYesChecked() const { return m_aYesButton->IsChecked(); }
-};
+class CustomPropertiesWindow;
 
 // struct CustomPropertyLine ---------------------------------------------
-
 struct CustomPropertyLine
 {
-    ScopedVclPtr<VclGrid>                       m_aLine;
-    ScopedVclPtr<ComboBox>                      m_aNameBox;
-    ScopedVclPtr<CustomPropertiesTypeBox>       m_aTypeBox;
-    ScopedVclPtr<CustomPropertiesEdit>          m_aValueEdit;
-    ScopedVclPtr<CustomPropertiesDateField>     m_aDateField;
-    ScopedVclPtr<CustomPropertiesTimeField>     m_aTimeField;
-    const OUString                              m_sDurationFormat;
-    ScopedVclPtr<CustomPropertiesDurationField> m_aDurationField;
-    ScopedVclPtr<CustomPropertiesEditButton>    m_aEditButton;
-    ScopedVclPtr<CustomPropertiesYesNoButton>   m_aYesNoButton;
-    ScopedVclPtr<CustomPropertiesRemoveButton>  m_aRemoveButton;
-
-    bool                                        m_bTypeLostFocus;
-
-    CustomPropertyLine( vcl::Window* pParent );
+    CustomPropertiesWindow* m_pParent;
+
+    std::unique_ptr<weld::Builder> m_xBuilder;
+    std::unique_ptr<weld::Container> m_xLine;
+    std::unique_ptr<weld::ComboBox> m_xNameBox;
+    std::unique_ptr<weld::ComboBox> m_xTypeBox;
+    std::unique_ptr<weld::Entry> m_xValueEdit;
+    std::unique_ptr<weld::Widget> m_xDateTimeBox;
+    std::unique_ptr<CustomPropertiesDateField> m_xDateField;
+    std::unique_ptr<CustomPropertiesTimeField> m_xTimeField;
+    std::unique_ptr<weld::Widget> m_xDurationBox;
+    std::unique_ptr<CustomPropertiesDurationField> m_xDurationField;
+    std::unique_ptr<CustomPropertiesYesNoButton> m_xYesNoButton;
+    std::unique_ptr<weld::Button> m_xRemoveButton;
+
+    bool m_bTypeLostFocus;
+
+    CustomPropertyLine(CustomPropertiesWindow* pParent, weld::Widget* pContainer);
+    DECL_LINK(TypeHdl, weld::ComboBox&, void);
+    DECL_LINK(RemoveHdl, weld::Button&, void);
+    DECL_LINK(EditLoseFocusHdl, weld::Widget&, void);
+    DECL_LINK(BoxLoseFocusHdl, weld::Widget&, void);
+
+    void DoTypeHdl(weld::ComboBox& rBox);
+
     void Clear();
     void Hide();
 };
 
 // class CustomPropertiesWindow ------------------------------------------
 
-class CustomPropertiesWindow : public vcl::Window
+class CustomPropertiesWindow
 {
 private:
-    VclPtr<HeaderBar>                   m_pHeaderBar;
-    VclPtr<ScrollBar>                   m_pScrollBar;
-    VclPtr<FixedText>                   m_pHeaderAccName;
-    VclPtr<FixedText>                   m_pHeaderAccType;
-    VclPtr<FixedText>                   m_pHeaderAccValue;
-
-    sal_Int32                           m_nWidgetHeight;
-    sal_Int32                           m_nRemoveButtonWidth;
-    sal_Int32                           m_nTypeBoxWidth;
+    sal_Int32                           m_nHeight;
     sal_Int32                           m_nLineHeight;
     sal_Int32                           m_nScrollPos;
     std::vector<std::unique_ptr<CustomProperty>> m_aCustomProperties;
@@ -408,11 +372,10 @@ private:
     Idle                                m_aBoxLoseFocusIdle;
     Link<void*,void>                    m_aRemovedHdl;
 
-    DECL_LINK(TypeHdl, ListBox&, void);
-    DECL_LINK(RemoveHdl, Button*, void);
-    DECL_LINK(EditLoseFocusHdl, Control&, void);
-    DECL_LINK(BoxLoseFocusHdl, Control&, void);
-    //add lose focus handlers of Date/TimeField?
+    weld::Container& m_rBody;
+    weld::Label& m_rHeaderAccName;
+    weld::Label& m_rHeaderAccType;
+    weld::Label& m_rHeaderAccValue;
 
     DECL_LINK(EditTimeoutHdl, Timer *, void);
     DECL_LINK(BoxTimeoutHdl, Timer *, void);
@@ -420,76 +383,73 @@ private:
     bool        IsLineValid( CustomPropertyLine* pLine ) const;
     void        ValidateLine( CustomPropertyLine* pLine, bool bIsFromTypeBox );
     void        CreateNewLine();
-    void        ReloadLinesContent();
+    void        FillLine(sal_uInt32 nLine);
     void        StoreCustomProperties();
     sal_uInt32  GetCurrentDataModelPosition() const { return -1 * m_nScrollPos / m_nLineHeight; }
 
 public:
-    CustomPropertiesWindow(vcl::Window* pParent,
-        FixedText *pHeaderAccName,
-        FixedText *pHeaderAccType,
-        FixedText *pHeaderAccValue);
-    void Init(HeaderBar* pHeaderBar, ScrollBar* pScrollBar);
-    virtual ~CustomPropertiesWindow() override;
-    virtual void dispose() override;
+    CustomPropertiesWindow(weld::Container& rParent, weld::Label& rHeaderAccName,
+                           weld::Label& rHeaderAccType, weld::Label& rHeaderAccValue);
+    ~CustomPropertiesWindow();
 
-    virtual void Resize() override;
-    //these consts are unhelpful, this changes the state of the widgets
-    //that belong to CustomPropertyLine, but they are held by VclPtr
-    //and operator-> on a VclPtr is a const method that returns the
-    //non-const contents of the VclPtr, but loplugin:constparams
-    //correctly sees that it could all be set to const, so we end
-    //up with this unhappy situation
-    void                SetWidgetWidths(const CustomPropertyLine* pLine) const;
     sal_uInt16          GetExistingLineCount() const { return m_aCustomPropertiesLines.size(); }
     sal_uInt16          GetTotalLineCount() const { return m_aCustomProperties.size(); }
     sal_uInt16          GetVisibleLineCount() const;
     void                SetVisibleLineCount(sal_uInt32 nCount);
+    sal_Int32           GetHeight() const { return m_nHeight; }
+    void                SetHeight(int nHeight) { m_nHeight = nHeight; }
     sal_Int32           GetLineHeight() const { return m_nLineHeight; }
+    void                SetLineHeight(sal_Int32 nLineHeight) { m_nLineHeight = nLineHeight; }
     void                AddLine( const OUString& sName, css::uno::Any const & rAny );
     bool                AreAllLinesValid() const;
     void                ClearAllLines();
     void                DoScroll( sal_Int32 nNewPos );
+    void                ReloadLinesContent();
 
     css::uno::Sequence< css::beans::PropertyValue >
                         GetCustomProperties();
     void                SetCustomProperties(std::vector< std::unique_ptr<CustomProperty> >&& rProperties);
     void                SetRemovedHdl( const Link<void*,void>& rLink ) { m_aRemovedHdl = rLink; }
+
+    void                BoxLoseFocus(CustomPropertyLine* pLine);
+    void                EditLoseFocus(CustomPropertyLine* pLine);
+    void                Remove(CustomPropertyLine* pLine);
 };
 
 // class CustomPropertiesControl -----------------------------------------
 
-class CustomPropertiesControl : public vcl::Window
+class CustomPropertiesControl
 {
 private:
-    VclPtr<VclVBox>                m_pVBox;
-    VclPtr<HeaderBar>              m_pHeaderBar;
-    VclPtr<VclHBox>                m_pBody;
-    VclPtr<CustomPropertiesWindow> m_pPropertiesWin;
-    VclPtr<ScrollBar>              m_pVertScroll;
-
     sal_Int32               m_nThumbPos;
 
-    DECL_LINK( ScrollHdl, ScrollBar*, void );
+    std::unique_ptr<weld::Widget> m_xBox;
+    std::unique_ptr<weld::Container> m_xBody;
+    std::unique_ptr<CustomPropertiesWindow> m_xPropertiesWin;
+    std::unique_ptr<weld::ScrolledWindow> m_xVertScroll;
+    std::unique_ptr<weld::Label> m_xName;
+    std::unique_ptr<weld::Label> m_xType;
+    std::unique_ptr<weld::Label> m_xValue;
+
+    DECL_LINK( ResizeHdl, const Size&, void );
+    DECL_LINK( ScrollHdl, weld::ScrolledWindow&, void );
     DECL_LINK( RemovedHdl, void*, void );
 
 public:
-    CustomPropertiesControl(vcl::Window* pParent);
-    virtual ~CustomPropertiesControl() override;
-    virtual void dispose() override;
+    CustomPropertiesControl();
+    ~CustomPropertiesControl();
 
     void         AddLine(css::uno::Any const & rAny);
 
-    bool         AreAllLinesValid() const { return m_pPropertiesWin->AreAllLinesValid(); }
-    void         ClearAllLines() { m_pPropertiesWin->ClearAllLines(); }
+    bool         AreAllLinesValid() const { return m_xPropertiesWin->AreAllLinesValid(); }
+    void         ClearAllLines() { m_xPropertiesWin->ClearAllLines(); }
 
     css::uno::Sequence<css::beans::PropertyValue>
                  GetCustomProperties() const
-                        { return m_pPropertiesWin->GetCustomProperties(); }
+                        { return m_xPropertiesWin->GetCustomProperties(); }
     void         SetCustomProperties(std::vector< std::unique_ptr<CustomProperty> >&& rProperties);
 
-    void         Init(VclBuilderContainer& rParent);
-    virtual void Resize() override;
+    void         Init(weld::Builder& rParent);
 };
 
 // class SfxCustomPropertiesPage -----------------------------------------
@@ -497,12 +457,13 @@ public:
 class SfxCustomPropertiesPage : public SfxTabPage
 {
 private:
-    VclPtr<CustomPropertiesControl> m_pPropertiesCtrl;
-
-    DECL_LINK(AddHdl, Button*, void);
+    DECL_LINK(AddHdl, weld::Button&, void);
 
     using TabPage::DeactivatePage;
 
+    std::unique_ptr<CustomPropertiesControl> m_xPropertiesCtrl;
+    std::unique_ptr<weld::Button> m_xAdd;
+
 protected:
     virtual ~SfxCustomPropertiesPage() override;
     virtual void dispose() override;
@@ -512,7 +473,7 @@ protected:
     virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
 
 public:
-    SfxCustomPropertiesPage( vcl::Window* pParent, const SfxItemSet& );
+    SfxCustomPropertiesPage(TabPageParent pParent, const SfxItemSet&);
     static VclPtr<SfxTabPage> Create( TabPageParent pParent, const SfxItemSet* );
 };
 
diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index bb6606a7c620..7c01fd0173df 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -193,7 +193,6 @@
 
 #define STR_SFX_NEWOFFICEDOC                    NC_("STR_SFX_NEWOFFICEDOC", "%PRODUCTNAME document")
 #define SFX_ST_DURATION_FORMAT                  NC_("SFX_ST_DURATION_FORMAT", " Y: %1 M: %2 D: %3 H: %4 M: %5 S: %6")
-#define STR_SFX_REMOVE_PROPERTY                 NC_("STR_SFX_REMOVE_PROPERTY", "Remove Property")
 #define STR_SFX_QUERY_WRONG_TYPE                NC_("STR_SFX_QUERY_WRONG_TYPE", "The value entered does not match the specified type.\nThe value will be stored as text.")
 
 #define STR_QUERY_OVERWRITE                     NC_("STR_QUERY_OVERWRITE", "Style already exists. Overwrite?")
diff --git a/include/svtools/ctrlbox.hxx b/include/svtools/ctrlbox.hxx
index 1923809ba344..d7b9179dd508 100644
--- a/include/svtools/ctrlbox.hxx
+++ b/include/svtools/ctrlbox.hxx
@@ -305,6 +305,7 @@ public:
 
     void set_sensitive(bool bSensitive) { m_xControl->set_sensitive(bSensitive); }
     bool get_sensitive() const { return m_xControl->get_sensitive(); }
+    void set_visible(bool bSensitive) { m_xControl->set_visible(bSensitive); }
     void grab_focus() { m_xControl->grab_focus(); }
 
     void connect_activated(const Link<SvtCalendarBox&, void>& rActivatedHdl) { m_aActivatedHdl = rActivatedHdl; }
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index af7271037a3b..6a793d59ae65 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1511,6 +1511,7 @@ public:
 
     void set_sensitive(bool sensitive) { m_xSpinButton->set_sensitive(sensitive); }
     bool get_sensitive() const { return m_xSpinButton->get_sensitive(); }
+    void set_visible(bool bShow) { m_xSpinButton->set_visible(bShow); }
     bool get_visible() const { return m_xSpinButton->get_visible(); }
     void grab_focus() { m_xSpinButton->grab_focus(); }
     bool has_focus() const { return m_xSpinButton->has_focus(); }
diff --git a/sfx2/UIConfig_sfx.mk b/sfx2/UIConfig_sfx.mk
index 25fa661c203b..f476c66ebe03 100644
--- a/sfx2/UIConfig_sfx.mk
+++ b/sfx2/UIConfig_sfx.mk
@@ -36,6 +36,7 @@ $(eval $(call gb_UIConfig_add_uifiles,sfx,\
 	sfx2/uiconfig/ui/helpsearchpage \
 	sfx2/uiconfig/ui/inputdialog \
 	sfx2/uiconfig/ui/licensedialog \
+	sfx2/uiconfig/ui/linefragment \
 	sfx2/uiconfig/ui/linkeditdialog \
 	sfx2/uiconfig/ui/loadtemplatedialog \
 	sfx2/uiconfig/ui/managestylepage \
diff --git a/sfx2/inc/bitmaps.hlst b/sfx2/inc/bitmaps.hlst
index 654a41df125c..9dbdfb4da5d4 100644
--- a/sfx2/inc/bitmaps.hlst
+++ b/sfx2/inc/bitmaps.hlst
@@ -87,7 +87,6 @@
 #define BMP_128X128_MATH_DOC                "sfx2/res/128x128_math_doc-p.png"
 #define BMP_128X128_WRITER_DOC              "sfx2/res/128x128_writer_doc-p.png"
 
-#define SFX_BMP_PROPERTY_REMOVE             "sfx2/res/deleterow.png"
 #define SFX_BMP_CLOSE_DOC                   "sfx2/res/closedoc.png"
 
 #define RID_SFXBMP_WATERCAN                 "res/sc05554.png"
diff --git a/sfx2/inc/strings.hxx b/sfx2/inc/strings.hxx
index 39a441e742dc..9bd7f51c37cc 100644
--- a/sfx2/inc/strings.hxx
+++ b/sfx2/inc/strings.hxx
@@ -45,8 +45,6 @@
 #define STR_TEMPLATE_NAME29_DEF "Modern business letter serif"
 #define STR_TEMPLATE_NAME30_DEF "Businesscard with logo"
 
-#define SFX_ST_EDIT             "..."
-
 #define CMIS_TYPE_STRING        "String"
 #define CMIS_TYPE_INTEGER       "Integer"
 #define CMIS_TYPE_DECIMAL       "Decimal"
diff --git a/sfx2/source/dialog/dinfdlg.cxx b/sfx2/source/dialog/dinfdlg.cxx
index ec3f57656ab9..4dda6ddb8c26 100644
--- a/sfx2/source/dialog/dinfdlg.cxx
+++ b/sfx2/source/dialog/dinfdlg.cxx
@@ -100,11 +100,6 @@ struct CustomProperty
 
 SfxPoolItem* SfxDocumentInfoItem::CreateDefault() { return new SfxDocumentInfoItem; }
 
-const sal_uInt16 HI_NAME = 1;
-const sal_uInt16 HI_TYPE = 2;
-const sal_uInt16 HI_VALUE = 3;
-const sal_uInt16 HI_ACTION = 4;
-
 namespace {
 
 OUString CreateSizeText( sal_Int64 nSize )
@@ -1161,33 +1156,18 @@ void SfxDocumentInfoDialog::AddFontTabPage()
 
 // class CustomPropertiesYesNoButton -------------------------------------
 
-CustomPropertiesYesNoButton::CustomPropertiesYesNoButton(vcl::Window* pParent)
-    : Control(pParent, WB_DIALOGCONTROL | WB_BORDER)
-    , m_aYesButton(VclPtr<RadioButton>::Create(this, WB_TABSTOP))
-    , m_aNoButton(VclPtr<RadioButton>::Create(this, WB_TABSTOP))
+CustomPropertiesYesNoButton::CustomPropertiesYesNoButton(std::unique_ptr<weld::Widget> xTopLevel,
+                                                         std::unique_ptr<weld::RadioButton> xYesButton,
+                                                         std::unique_ptr<weld::RadioButton> xNoButton)
+    : m_xTopLevel(std::move(xTopLevel))
+    , m_xYesButton(std::move(xYesButton))
+    , m_xNoButton(std::move(xNoButton))
 {
-    m_aYesButton->SetText(MnemonicGenerator::EraseAllMnemonicChars(Button::GetStandardText(StandardButtonType::Yes)));
-    m_aYesButton->Show();
-    m_aNoButton->SetText(MnemonicGenerator::EraseAllMnemonicChars(Button::GetStandardText(StandardButtonType::No)));
-    m_aNoButton->Show();
-    SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetFieldColor() ) );
-    SetBorderStyle( WindowBorderStyle::MONO  );
     CheckNo();
-    Wallpaper aWall( COL_TRANSPARENT );
-    m_aYesButton->SetBackground( aWall );
-    m_aNoButton->SetBackground( aWall );
 }
 
 CustomPropertiesYesNoButton::~CustomPropertiesYesNoButton()
 {
-    disposeOnce();
-}
-
-void CustomPropertiesYesNoButton::dispose()
-{
-    m_aYesButton.disposeAndClear();
-    m_aNoButton.disposeAndClear();
-    Control::dispose();
 }
 
 class DurationDialog_Impl : public weld::GenericDialogController
@@ -1202,11 +1182,11 @@ class DurationDialog_Impl : public weld::GenericDialogController
     std::unique_ptr<weld::SpinButton> m_xMSecondNF;
 
 public:
-    DurationDialog_Impl(weld::Window* pParent, const util::Duration& rDuration);
+    DurationDialog_Impl(weld::Widget* pParent, const util::Duration& rDuration);
     util::Duration  GetDuration() const;
 };
 
-DurationDialog_Impl::DurationDialog_Impl(weld::Window* pParent, const util::Duration& rDuration)
+DurationDialog_Impl::DurationDialog_Impl(weld::Widget* pParent, const util::Duration& rDuration)
     : GenericDialogController(pParent, "sfx/ui/editdurationdialog.ui", "EditDurationDialog")
     , m_xNegativeCB(m_xBuilder->weld_check_button("negative"))
     , m_xYearNF(m_xBuilder->weld_spin_button("years"))
@@ -1241,254 +1221,151 @@ util::Duration  DurationDialog_Impl::GetDuration() const
     return aRet;
 }
 
-CustomPropertiesDurationField::CustomPropertiesDurationField(vcl::Window* pParent, WinBits nStyle,
-                                                             CustomPropertyLine* pLine)
-    : Edit(pParent, nStyle)
-    , m_pLine(pLine)
-
+CustomPropertiesDurationField::CustomPropertiesDurationField(std::unique_ptr<weld::Entry> xEntry,
+                                                             std::unique_ptr<weld::Button> xEditButton)
+    : m_xEntry(std::move(xEntry))
+    , m_xEditButton(std::move(xEditButton))
 {
+    m_xEditButton->connect_clicked(LINK(this, CustomPropertiesDurationField, ClickHdl));
     SetDuration( util::Duration(false, 0, 0, 0, 0, 0, 0, 0) );
 }
 
-void CustomPropertiesDurationField::RequestHelp( const HelpEvent& rHEvt )
+void CustomPropertiesDurationField::set_visible(bool bVisible)
 {
-    if ( rHEvt.GetMode() & HelpEventMode::QUICK )
-    {
-        Size aSize( GetSizePixel() );
-        tools::Rectangle aItemRect( rHEvt.GetMousePosPixel(), aSize );
-        if (Help::IsBalloonHelpEnabled())
-            Help::ShowBalloon( this, rHEvt.GetMousePosPixel(), aItemRect, GetText() );
-        else
-            Help::ShowQuickHelp( this, aItemRect, GetText(),
-                QuickHelpFlags::Left|QuickHelpFlags::VCenter );
-    }
+    m_xEntry->set_visible(bVisible);
+    m_xEditButton->set_visible(bVisible);
 }
 
 void CustomPropertiesDurationField::SetDuration( const util::Duration& rDuration )
 {
     m_aDuration = rDuration;
     OUString sText(rDuration.Negative ? OUString('-') : OUString('+'));
-    sText += m_pLine->m_sDurationFormat;
+    sText += SfxResId(SFX_ST_DURATION_FORMAT);
     sText = sText.replaceFirst( "%1", OUString::number( rDuration.Years ) );
     sText = sText.replaceFirst( "%2", OUString::number( rDuration.Months ) );
     sText = sText.replaceFirst( "%3", OUString::number( rDuration.Days   ) );
     sText = sText.replaceFirst( "%4", OUString::number( rDuration.Hours  ) );
     sText = sText.replaceFirst( "%5", OUString::number( rDuration.Minutes) );
     sText = sText.replaceFirst( "%6", OUString::number( rDuration.Seconds) );
-    SetText( sText );
-}
-
-CustomPropertiesEditButton::CustomPropertiesEditButton(vcl::Window* pParent, WinBits nStyle,
-                                                       CustomPropertyLine* pLine)
-    : PushButton(pParent, nStyle)
-    , m_pLine(pLine)
-{
-    SetClickHdl( LINK( this, CustomPropertiesEditButton, ClickHdl ));
+    m_xEntry->set_text(sText);
 }
 
-IMPL_LINK_NOARG(CustomPropertiesEditButton, ClickHdl, Button*, void)
+IMPL_LINK(CustomPropertiesDurationField, ClickHdl, weld::Button&, rButton, void)
 {
-    DurationDialog_Impl aDurationDlg(GetFrameWeld(), m_pLine->m_aDurationField->GetDuration());
+    DurationDialog_Impl aDurationDlg(&rButton, GetDuration());
     if (aDurationDlg.run() == RET_OK)
-        m_pLine->m_aDurationField->SetDuration(aDurationDlg.GetDuration());
-}
-
-void CustomPropertiesYesNoButton::Resize()
-{
-    Size aParentSize(GetSizePixel());
-    const long nWidth = aParentSize.Width();
-    const long n1Width = LogicToPixel(Size(1, 1), MapMode(MapUnit::MapAppFont)).Width();
-    const long n3Width = LogicToPixel(Size(3, 3), MapMode(MapUnit::MapAppFont)).Width();
-    const long nNewWidth = (nWidth / 2) - n3Width - 2;
-    Size aSize(nNewWidth, m_aYesButton->get_preferred_size().Height());
-    Point aPos(n1Width, (aParentSize.Height() - aSize.Height()) / 2);
-    m_aYesButton->SetPosSizePixel(aPos, aSize);
-    aPos.AdjustX(aSize.Width() + n3Width );
-    m_aNoButton->SetPosSizePixel(aPos, aSize);
+        SetDuration(aDurationDlg.GetDuration());
 }
 
 namespace
 {
-    VclPtr<ComboBox> makeComboBox(vcl::Window *pParent)
+    void fillNameBox(weld::ComboBox& rNameBox)
     {
-        VclPtr<ComboBox> aNameBox(VclPtr<ComboBox>::Create(pParent, WB_TABSTOP|WB_DROPDOWN|WB_AUTOHSCROLL));
         for (size_t i = 0; i < SAL_N_ELEMENTS(SFX_CB_PROPERTY_STRINGARRAY); ++i)
-            aNameBox->InsertEntry(SfxResId(SFX_CB_PROPERTY_STRINGARRAY[i]));
-        aNameBox->EnableAutoSize(true);
-        return aNameBox;
+            rNameBox.append_text(SfxResId(SFX_CB_PROPERTY_STRINGARRAY[i]));
     }
-}
 
-CustomPropertiesTypeBox::CustomPropertiesTypeBox(vcl::Window* pParent, CustomPropertyLine* pLine)
-    : ListBox(pParent, WB_BORDER|WB_DROPDOWN)
-    , m_pLine(pLine)
-{
-    for (size_t i = 0; i < SAL_N_ELEMENTS(SFX_LB_PROPERTY_STRINGARRAY); ++i)
+    void fillTypeBox(weld::ComboBox& rTypeBox)
     {
-        InsertEntry(SfxResId(SFX_LB_PROPERTY_STRINGARRAY[i].first));
-        SetEntryData(i, reinterpret_cast<void*>(SFX_LB_PROPERTY_STRINGARRAY[i].second));
+        for (size_t i = 0; i < SAL_N_ELEMENTS(SFX_LB_PROPERTY_STRINGARRAY); ++i)
+        {
+            OUString sId(OUString::number(SFX_LB_PROPERTY_STRINGARRAY[i].second));
+            rTypeBox.append(sId, SfxResId(SFX_LB_PROPERTY_STRINGARRAY[i].first));
+        }
+        rTypeBox.set_active(0);
     }
-    SelectEntryPos(0);
-    EnableAutoSize(true);
 }
 
 // struct CustomPropertyLine ---------------------------------------------
-CustomPropertyLine::CustomPropertyLine( vcl::Window* pParent ) :
-    m_aLine         ( VclPtr<VclGrid>::Create(pParent) ),
-    m_aNameBox      ( makeComboBox(m_aLine) ),
-    m_aTypeBox      ( VclPtr<CustomPropertiesTypeBox>::Create(m_aLine, this) ),
-    m_aValueEdit    ( VclPtr<CustomPropertiesEdit>::Create(m_aLine, WB_BORDER|WB_TABSTOP|WB_LEFT, this ) ),
-    m_aDateField    ( VclPtr<CustomPropertiesDateField>::Create(m_aLine, WB_BORDER|WB_TABSTOP|WB_SPIN|WB_LEFT ) ),
-    m_aTimeField    ( VclPtr<CustomPropertiesTimeField>::Create(m_aLine, WB_BORDER|WB_TABSTOP|WB_SPIN|WB_LEFT ) ),
-    m_sDurationFormat( SfxResId( SFX_ST_DURATION_FORMAT ) ),
-    m_aDurationField( VclPtr<CustomPropertiesDurationField>::Create(m_aLine, WB_BORDER|WB_TABSTOP|WB_READONLY, this ) ),
-    m_aEditButton   ( VclPtr<CustomPropertiesEditButton>::Create(m_aLine, WB_TABSTOP, this) ),
-    m_aYesNoButton  ( VclPtr<CustomPropertiesYesNoButton>::Create(m_aLine) ),
-    m_aRemoveButton ( VclPtr<CustomPropertiesRemoveButton>::Create(m_aLine, 0, this) ),
-    m_bTypeLostFocus( false )
-{
-    m_aLine->set_column_spacing(4);
-
-    m_aNameBox->set_grid_left_attach(0);
-    m_aNameBox->set_grid_top_attach(0);
-    m_aNameBox->set_margin_left(4);
-    m_aNameBox->Show();
-
-    m_aTypeBox->set_grid_left_attach(1);
-    m_aTypeBox->set_grid_top_attach(0);
-    m_aTypeBox->Show();
-
-    m_aValueEdit->set_grid_left_attach(2);
-    m_aValueEdit->set_grid_top_attach(0);
-    m_aValueEdit->set_hexpand(true);
-    m_aValueEdit->Show();
-
-    m_aDateField->set_grid_left_attach(3);
-    m_aDateField->set_grid_top_attach(0);
-    m_aDateField->set_hexpand(true);
-    m_aDateField->Show();
-
-    m_aTimeField->set_grid_left_attach(4);
-    m_aTimeField->set_grid_top_attach(0);
-    m_aTimeField->set_hexpand(true);
-    m_aTimeField->Show();
-
-    m_aDurationField->set_grid_left_attach(5);
-    m_aDurationField->set_grid_top_attach(0);
-    m_aDurationField->set_hexpand(true);
-    m_aDurationField->Show();
-
-    m_aEditButton->set_grid_left_attach(6);
-    m_aEditButton->set_grid_top_attach(0);
-    m_aEditButton->Show();
-
-    m_aYesNoButton->set_grid_left_attach(7);
-    m_aYesNoButton->set_grid_top_attach(0);
-    m_aYesNoButton->set_hexpand(true);
-    m_aYesNoButton->Show();
-
-    m_aRemoveButton->set_grid_left_attach(8);
-    m_aRemoveButton->set_grid_top_attach(0);
-    m_aRemoveButton->set_margin_right(4);
-    m_aRemoveButton->Show();
-
-    m_aTimeField->SetExtFormat( ExtTimeFieldFormat::Long24H );
-    m_aDateField->SetExtDateFormat( ExtDateFieldFormat::SystemShortYYYY );
-
-    m_aRemoveButton->SetModeImage(Image(StockImage::Yes, SFX_BMP_PROPERTY_REMOVE));
-    m_aRemoveButton->SetQuickHelpText(SfxResId(STR_SFX_REMOVE_PROPERTY));
-
-    m_aEditButton->SetText(SFX_ST_EDIT);
+CustomPropertyLine::CustomPropertyLine(CustomPropertiesWindow* pParent, weld::Widget* pContainer)
+    : m_pParent(pParent)
+    , m_xBuilder(Application::CreateBuilder(pContainer, "sfx/ui/linefragment.ui"))
+    , m_xLine(m_xBuilder->weld_container("lineentry"))
+    , m_xNameBox(m_xBuilder->weld_combo_box("namebox"))
+    , m_xTypeBox(m_xBuilder->weld_combo_box("typebox"))
+    , m_xValueEdit(m_xBuilder->weld_entry("valueedit"))
+    , m_xDateTimeBox(m_xBuilder->weld_widget("datetimebox"))
+    , m_xDateField(new CustomPropertiesDateField(new SvtCalendarBox(m_xBuilder->weld_menu_button("date"))))
+    , m_xTimeField(new CustomPropertiesTimeField(m_xBuilder->weld_time_spin_button("time", TimeFieldFormat::F_SEC)))
+    , m_xDurationBox(m_xBuilder->weld_widget("durationbox"))
+    , m_xDurationField(new CustomPropertiesDurationField(m_xBuilder->weld_entry("duration"),
+                                                         m_xBuilder->weld_button("durationbutton")))
+    , m_xYesNoButton(new CustomPropertiesYesNoButton(m_xBuilder->weld_widget("yesno"),
+                                                     m_xBuilder->weld_radio_button("yes"),
+                                                     m_xBuilder->weld_radio_button("no")))
+    , m_xRemoveButton(m_xBuilder->weld_button("remove"))
+    , m_bTypeLostFocus( false )
+{
+    fillNameBox(*m_xNameBox);
+    fillTypeBox(*m_xTypeBox);
+
+    m_xTypeBox->connect_changed(LINK(this, CustomPropertyLine, TypeHdl));
+    m_xRemoveButton->connect_clicked(LINK(this, CustomPropertyLine, RemoveHdl));
+    m_xValueEdit->connect_focus_out(LINK(this, CustomPropertyLine, EditLoseFocusHdl));
+    //add lose focus handlers of date/time fields
+    m_xTypeBox->connect_focus_out(LINK(this, CustomPropertyLine, BoxLoseFocusHdl));
 }
 
 void CustomPropertyLine::Clear()
 {
-    m_aNameBox->SetNoSelection();
-    m_aValueEdit->SetText(OUString());
+    m_xNameBox->set_active(-1);
+    m_xValueEdit->set_text(OUString());
 
 }
 
 void CustomPropertyLine::Hide()
 {
-    m_aLine->Hide();
+    m_xLine->hide();
 }
 
-CustomPropertiesWindow::CustomPropertiesWindow(vcl::Window* pParent,
-    FixedText *pHeaderAccName,
-    FixedText *pHeaderAccType,
-    FixedText *pHeaderAccValue) :
-    Window(pParent, WB_HIDE | WB_TABSTOP | WB_DIALOGCONTROL),
-    m_pHeaderAccName(pHeaderAccName),
-    m_pHeaderAccType(pHeaderAccType),
-    m_pHeaderAccValue(pHeaderAccValue),
-    m_nScrollPos (0),
-    m_pCurrentLine (nullptr),
-    m_aNumberFormatter( ::comphelper::getProcessComponentContext(),
-                        Application::GetSettings().GetLanguageTag().getLanguageType() )
+CustomPropertiesWindow::CustomPropertiesWindow(weld::Container& rParent, weld::Label& rHeaderAccName,
+                                               weld::Label& rHeaderAccType, weld::Label& rHeaderAccValue)
+    : m_nHeight(0)
+    , m_nLineHeight(0)
+    , m_nScrollPos(0)
+    , m_pCurrentLine(nullptr)
+    , m_aNumberFormatter(::comphelper::getProcessComponentContext(),
+                         Application::GetSettings().GetLanguageTag().getLanguageType())
+    , m_rBody(rParent)
+    , m_rHeaderAccName(rHeaderAccName)
+    , m_rHeaderAccType(rHeaderAccType)
+    , m_rHeaderAccValue(rHeaderAccValue)
 {
-    m_nRemoveButtonWidth = ScopedVclPtrInstance<CustomPropertiesRemoveButton>(pParent, 0, nullptr)->get_preferred_size().Width();
-    Size aSize = ScopedVclPtrInstance<CustomPropertiesTypeBox>(pParent, nullptr)->CalcMinimumSize();
-    m_nTypeBoxWidth = aSize.Width();
-    m_nWidgetHeight = aSize.Height();
-
-    Point aPos(LogicToPixel(Point(0, 2), MapMode(MapUnit::MapAppFont)));
-
     m_aEditLoseFocusIdle.SetPriority( TaskPriority::LOWEST );
     m_aEditLoseFocusIdle.SetInvokeHandler( LINK( this, CustomPropertiesWindow, EditTimeoutHdl ) );
     m_aBoxLoseFocusIdle.SetPriority( TaskPriority::LOWEST );
     m_aBoxLoseFocusIdle.SetInvokeHandler( LINK( this, CustomPropertiesWindow, BoxTimeoutHdl ) );
-
-    m_nLineHeight = (aPos.Y() * 2) + m_nWidgetHeight;
-}
-
-void CustomPropertiesWindow::Init(HeaderBar* pHeaderBar, ScrollBar* pScrollBar)
-{
-    m_pHeaderBar = pHeaderBar;
-    m_pScrollBar = pScrollBar;
 }
 
 CustomPropertiesWindow::~CustomPropertiesWindow()
 {
-    disposeOnce();
-}
-
-void CustomPropertiesWindow::dispose()
-{
     m_aEditLoseFocusIdle.Stop();
     m_aBoxLoseFocusIdle.Stop();
 
-    m_aCustomPropertiesLines.clear();
     m_pCurrentLine = nullptr;
-
-    m_pHeaderBar.clear();
-    m_pScrollBar.clear();
-    m_pHeaderAccName.clear();
-    m_pHeaderAccType.clear();
-    m_pHeaderAccValue.clear();
-    vcl::Window::dispose();
 }
 
-IMPL_LINK(CustomPropertiesWindow, TypeHdl, ListBox&, rListBox, void)
+void CustomPropertyLine::DoTypeHdl(weld::ComboBox& rBox)
 {
-    CustomPropertiesTypeBox* pBox = static_cast<CustomPropertiesTypeBox*>(&rListBox);
-    long nType = reinterpret_cast<long>( pBox->GetSelectedEntryData() );
-    CustomPropertyLine* pLine = pBox->GetLine();
-    pLine->m_aValueEdit->Show( (CUSTOM_TYPE_TEXT == nType) || (CUSTOM_TYPE_NUMBER  == nType) );
-    pLine->m_aDateField->Show( (CUSTOM_TYPE_DATE == nType) || (CUSTOM_TYPE_DATETIME  == nType) );
-    pLine->m_aTimeField->Show( CUSTOM_TYPE_DATETIME  == nType );
-    pLine->m_aDurationField->Show( CUSTOM_TYPE_DURATION == nType );
-    pLine->m_aEditButton->Show( CUSTOM_TYPE_DURATION == nType );
-    pLine->m_aYesNoButton->Show( CUSTOM_TYPE_BOOLEAN == nType );
+    auto nType = rBox.get_active_id().toInt32();
+    m_xValueEdit->set_visible( (CUSTOM_TYPE_TEXT == nType) || (CUSTOM_TYPE_NUMBER  == nType) );
+    m_xDateTimeBox->set_visible( (CUSTOM_TYPE_DATE == nType) || (CUSTOM_TYPE_DATETIME  == nType) );
+    m_xDateField->set_visible( (CUSTOM_TYPE_DATE == nType) || (CUSTOM_TYPE_DATETIME  == nType) );
+    m_xTimeField->set_visible( CUSTOM_TYPE_DATETIME  == nType );
+    m_xDurationBox->set_visible( CUSTOM_TYPE_DURATION == nType );
+    m_xDurationField->set_visible( CUSTOM_TYPE_DURATION == nType );
+    m_xYesNoButton->set_visible( CUSTOM_TYPE_BOOLEAN == nType );
+}
 
-    pLine->m_aLine->SetSizePixel(Size(GetSizePixel().Width(), m_nWidgetHeight));
+IMPL_LINK(CustomPropertyLine, TypeHdl, weld::ComboBox&, rBox, void)
+{
+    DoTypeHdl(rBox);
 }
 
-IMPL_LINK( CustomPropertiesWindow, RemoveHdl, Button*, pBtn, void )
+void CustomPropertiesWindow::Remove(CustomPropertyLine* pLine)
 {
     StoreCustomProperties();
 
-    CustomPropertiesRemoveButton* pButton = static_cast<CustomPropertiesRemoveButton*>(pBtn);
-    CustomPropertyLine* pLine = pButton->GetLine();
     auto pFound = std::find_if( m_aCustomPropertiesLines.begin(), m_aCustomPropertiesLines.end(),
                     [&] (const std::unique_ptr<CustomPropertyLine>& p) { return p.get() == pLine; });
     if ( pFound != m_aCustomPropertiesLines.end() )
@@ -1503,25 +1380,36 @@ IMPL_LINK( CustomPropertiesWindow, RemoveHdl, Button*, pBtn, void )
     m_aRemovedHdl.Call(nullptr);
 }
 
-IMPL_LINK( CustomPropertiesWindow, EditLoseFocusHdl, Control&, rControl, void )
+IMPL_LINK_NOARG(CustomPropertyLine, RemoveHdl, weld::Button&, void)
 {
-    CustomPropertiesEdit* pEdit = static_cast<CustomPropertiesEdit*>(&rControl);
-    CustomPropertyLine* pLine = pEdit->GetLine();
-    if ( !pLine->m_bTypeLostFocus )
-    {
-        m_pCurrentLine = pLine;
-        m_aEditLoseFocusIdle.Start();
-    }
+    m_pParent->Remove(this);
+}
+
+void CustomPropertiesWindow::EditLoseFocus(CustomPropertyLine* pLine)
+{
+    m_pCurrentLine = pLine;
+    m_aEditLoseFocusIdle.Start();
+}
+
+IMPL_LINK_NOARG(CustomPropertyLine, EditLoseFocusHdl, weld::Widget&, void)
+{
+    if (!m_bTypeLostFocus)
+        m_pParent->EditLoseFocus(this);
     else
-        pLine->m_bTypeLostFocus = false;
+        m_bTypeLostFocus = false;
 }
 
-IMPL_LINK( CustomPropertiesWindow, BoxLoseFocusHdl, Control&, rControl, void )
+void CustomPropertiesWindow::BoxLoseFocus(CustomPropertyLine* pLine)
 {
-    m_pCurrentLine = static_cast<CustomPropertiesTypeBox*>(&rControl)->GetLine();
+    m_pCurrentLine = pLine;
     m_aBoxLoseFocusIdle.Start();
 }
 
+IMPL_LINK_NOARG(CustomPropertyLine, BoxLoseFocusHdl, weld::Widget&, void)
+{
+    m_pParent->BoxLoseFocus(this);
+}
+
 IMPL_LINK_NOARG(CustomPropertiesWindow, EditTimeoutHdl, Timer *, void)
 {
     ValidateLine( m_pCurrentLine, false );
@@ -1536,9 +1424,8 @@ bool CustomPropertiesWindow::IsLineValid( CustomPropertyLine* pLine ) const
 {
     bool bIsValid = true;
     pLine->m_bTypeLostFocus = false;
-    long nType = reinterpret_cast<long>(
-                     pLine->m_aTypeBox->GetSelectedEntryData() );
-    OUString sValue = pLine->m_aValueEdit->GetText();
+    auto nType = pLine->m_xTypeBox->get_active_id().toInt32();
+    OUString sValue = pLine->m_xValueEdit->get_text();
     if ( sValue.isEmpty() )
         return true;
 
@@ -1570,64 +1457,19 @@ void CustomPropertiesWindow::ValidateLine( CustomPropertyLine* pLine, bool bIsFr
     {
         if ( bIsFromTypeBox ) // LoseFocus of TypeBox
             pLine->m_bTypeLostFocus = true;
-        vcl::Window* pParent = GetParent()->GetParent();
-        std::unique_ptr<weld::MessageDialog> xMessageBox(Application::CreateMessageDialog(pParent ? pParent->GetFrameWeld() : nullptr,
+        std::unique_ptr<weld::MessageDialog> xMessageBox(Application::CreateMessageDialog(&m_rBody,
                                                          VclMessageType::Question, VclButtonsType::OkCancel, SfxResId(STR_SFX_QUERY_WRONG_TYPE)));
         if (xMessageBox->run() == RET_OK)
-            pLine->m_aTypeBox->SelectEntryPos(pLine->m_aTypeBox->GetEntryPos(reinterpret_cast<void*>(CUSTOM_TYPE_TEXT)));
+            pLine->m_xTypeBox->set_active_id(OUString::number(CUSTOM_TYPE_TEXT));
         else
-            pLine->m_aValueEdit->GrabFocus();
+            pLine->m_xValueEdit->grab_focus();
     }
 }
 
-void CustomPropertiesWindow::SetWidgetWidths(const CustomPropertyLine* pLine) const
-{
-    const long nOffset = 4;
-    long nItemWidth = m_pHeaderBar->GetItemSize(HI_NAME);
-    nItemWidth -= nOffset;
-
-    pLine->m_aNameBox->set_width_request(nItemWidth);
-    pLine->m_aTypeBox->set_width_request(m_nTypeBoxWidth);
-    pLine->m_aValueEdit->set_width_request(nItemWidth);
-
-    long nTimeWidth = nItemWidth;
-    nTimeWidth /= 2;
-    nTimeWidth -= 2;
-
-    pLine->m_aDateField->set_width_request(nTimeWidth);
-    pLine->m_aTimeField->set_width_request(nTimeWidth);
-
-    pLine->m_aDurationField->set_width_request(nItemWidth - (pLine->m_aEditButton->get_preferred_size().Width() + nOffset));
-    pLine->m_aYesNoButton->set_width_request(nItemWidth);
-    pLine->m_aRemoveButton->set_width_request(m_nRemoveButtonWidth);
-
-    pLine->m_aLine->SetSizePixel(Size(GetSizePixel().Width(), m_nWidgetHeight));
-}
-
-void CustomPropertiesWindow::Resize()
-{
-    const long nOffset = 4;
-    const long nScrollBarWidth = m_pScrollBar->GetSizePixel().Width();
-    long nButtonWidth = m_nRemoveButtonWidth + nScrollBarWidth + nOffset;
-    long nTypeWidth = m_nTypeBoxWidth + (2 * nOffset);
-    long nFullWidth = m_pHeaderBar->GetSizePixel().Width();
-    long nItemWidth = ( nFullWidth - nTypeWidth - nButtonWidth ) / 2;
-    m_pHeaderBar->SetItemSize( HI_NAME, nItemWidth );
-    m_pHeaderBar->SetItemSize( HI_TYPE, nTypeWidth );
-    m_pHeaderBar->SetItemSize( HI_VALUE, nItemWidth );
-    m_pHeaderBar->SetItemSize( HI_ACTION, nButtonWidth );
-
-    for (std::unique_ptr<CustomPropertyLine>& pLine : m_aCustomPropertiesLines)
-        SetWidgetWidths(pLine.get());
-
-    SetVisibleLineCount(GetVisibleLineCount());
-    ReloadLinesContent();
-}
-
 sal_uInt16 CustomPropertiesWindow::GetVisibleLineCount() const
 {
     sal_Int32 nScrollOffset = GetLineHeight();
-    sal_uInt16 nCount = ceil(static_cast<double>(GetSizePixel().Height()) / nScrollOffset);
+    sal_uInt16 nCount = ceil(static_cast<double>(GetHeight()) / nScrollOffset);
     return nCount;
 }
 
@@ -1647,31 +1489,18 @@ void CustomPropertiesWindow::AddLine(const OUString& sName, Any const & rAny)
 
 void CustomPropertiesWindow::CreateNewLine()
 {
-    CustomPropertyLine* pNewLine = new CustomPropertyLine( this );
-    pNewLine->m_aTypeBox->SetSelectHdl( LINK( this, CustomPropertiesWindow, TypeHdl ) );
-    pNewLine->m_aRemoveButton->SetClickHdl( LINK( this, CustomPropertiesWindow, RemoveHdl ) );
-    pNewLine->m_aValueEdit->SetLoseFocusHdl( LINK( this, CustomPropertiesWindow, EditLoseFocusHdl ) );
-    //add lose focus handlers of date/time fields
-
-    pNewLine->m_aTypeBox->SetLoseFocusHdl( LINK( this, CustomPropertiesWindow, BoxLoseFocusHdl ) );
-
-    pNewLine->m_aNameBox->add_mnemonic_label(m_pHeaderAccName);
-    pNewLine->m_aNameBox->SetAccessibleName(m_pHeaderAccName->GetText());
-    pNewLine->m_aTypeBox->add_mnemonic_label(m_pHeaderAccType);
-    pNewLine->m_aTypeBox->SetAccessibleName(m_pHeaderAccType->GetText());
-    pNewLine->m_aValueEdit->add_mnemonic_label(m_pHeaderAccValue);
-    pNewLine->m_aValueEdit->SetAccessibleName(m_pHeaderAccValue->GetText());
+    CustomPropertyLine* pNewLine = new CustomPropertyLine(this, &m_rBody);
+    pNewLine->m_xNameBox->set_accessible_relation_labeled_by(&m_rHeaderAccName);
+    pNewLine->m_xNameBox->set_accessible_name(m_rHeaderAccName.get_label());
+    pNewLine->m_xTypeBox->set_accessible_relation_labeled_by(&m_rHeaderAccType);
+    pNewLine->m_xTypeBox->set_accessible_name(m_rHeaderAccType.get_label());
+    pNewLine->m_xValueEdit->set_accessible_relation_labeled_by(&m_rHeaderAccValue);
+    pNewLine->m_xValueEdit->set_accessible_name(m_rHeaderAccValue.get_label());
 
-    sal_Int32 nPos = GetExistingLineCount() * GetLineHeight();
-    nPos += LogicToPixel(Size(0, 2), MapMode(MapUnit::MapAppFont)).Height();
     m_aCustomPropertiesLines.emplace_back( pNewLine );
 
-    SetWidgetWidths(pNewLine);
-    pNewLine->m_aLine->SetPosSizePixel(Point(0, nPos + m_nScrollPos), Size(GetSizePixel().Width(), m_nWidgetHeight));
-    pNewLine->m_aLine->Show();
-
-    TypeHdl(*pNewLine->m_aTypeBox.get());
-    pNewLine->m_aNameBox->GrabFocus();
+    pNewLine->DoTypeHdl(*pNewLine->m_xTypeBox);
+    pNewLine->m_xNameBox->grab_focus();
 }
 
 bool CustomPropertiesWindow::AreAllLinesValid() const
@@ -1703,7 +1532,6 @@ void CustomPropertiesWindow::ClearAllLines()
 void CustomPropertiesWindow::DoScroll( sal_Int32 nNewPos )
 {
     StoreCustomProperties();
-
     m_nScrollPos += nNewPos;
     ReloadLinesContent();
 }
@@ -1723,6 +1551,27 @@ Sequence< beans::PropertyValue > CustomPropertiesWindow::GetCustomProperties()
     return aPropertiesSeq;
 }
 
+CustomPropertiesTimeField::CustomPropertiesTimeField(std::unique_ptr<weld::TimeSpinButton> xTimeField)
+    : m_xTimeField(std::move(xTimeField))
+    , m_isUTC(false)
+{
+}
+
+CustomPropertiesTimeField::~CustomPropertiesTimeField()
+{
+}
+
+CustomPropertiesDateField::CustomPropertiesDateField(SvtCalendarBox* pDateField)
+    : m_xDateField(pDateField)
+{
+    DateTime aDateTime(DateTime::SYSTEM);
+    m_xDateField->set_date(aDateTime);
+}
+
+CustomPropertiesDateField::~CustomPropertiesDateField()
+{
+}
+
 void CustomPropertiesWindow::StoreCustomProperties()
 {
     sal_uInt32 nDataModelPos = GetCurrentDataModelPosition();
@@ -1731,38 +1580,37 @@ void CustomPropertiesWindow::StoreCustomProperties()
     {
         CustomPropertyLine* pLine = m_aCustomPropertiesLines[i].get();
 
-        OUString sPropertyName = pLine->m_aNameBox->GetText();
+        OUString sPropertyName = pLine->m_xNameBox->get_active_text();
         if (!sPropertyName.isEmpty())
         {
             m_aCustomProperties[nDataModelPos + i]->m_sName = sPropertyName;
-            long nType = reinterpret_cast<long>(
-                pLine->m_aTypeBox->GetSelectedEntryData());
+            auto nType = pLine->m_xTypeBox->get_active_id().toInt32();
             if (CUSTOM_TYPE_NUMBER == nType)
             {
                 double nValue = 0;
                 sal_uInt32 nIndex = m_aNumberFormatter.GetFormatIndex(NF_NUMBER_SYSTEM);
                 bool bIsNum = m_aNumberFormatter.
-                    IsNumberFormat(pLine->m_aValueEdit->GetText(), nIndex, nValue);
+                    IsNumberFormat(pLine->m_xValueEdit->get_text(), nIndex, nValue);
                 if (bIsNum)
                     m_aCustomProperties[nDataModelPos + i]->m_aValue <<= nValue;
             }
             else if (CUSTOM_TYPE_BOOLEAN == nType)
             {
-                bool bValue = pLine->m_aYesNoButton->IsYesChecked();
+                bool bValue = pLine->m_xYesNoButton->IsYesChecked();
                 m_aCustomProperties[nDataModelPos + i]->m_aValue <<= bValue;
             }
             else if (CUSTOM_TYPE_DATETIME == nType)
             {
-                Date aTmpDate = pLine->m_aDateField->GetDate();
-                tools::Time aTmpTime = pLine->m_aTimeField->GetTime();
+                Date aTmpDate = pLine->m_xDateField->get_date();
+                tools::Time aTmpTime = pLine->m_xTimeField->get_value();
                 util::DateTime const aDateTime(aTmpTime.GetNanoSec(),
                     aTmpTime.GetSec(), aTmpTime.GetMin(), aTmpTime.GetHour(),
                     aTmpDate.GetDay(), aTmpDate.GetMonth(), aTmpDate.GetYear(),
-                    pLine->m_aTimeField->m_isUTC);
-                if (pLine->m_aDateField->m_TZ.is_initialized())
+                    pLine->m_xTimeField->m_isUTC);
+                if (pLine->m_xDateField->m_TZ.is_initialized())
                 {
                     m_aCustomProperties[nDataModelPos + i]->m_aValue <<= util::DateTimeWithTimezone(
-                        aDateTime, pLine->m_aDateField->m_TZ.get());
+                        aDateTime, pLine->m_xDateField->m_TZ.get());
                 }
                 else
                 {
@@ -1771,13 +1619,13 @@ void CustomPropertiesWindow::StoreCustomProperties()
             }
             else if (CUSTOM_TYPE_DATE == nType)
             {
-                Date aTmpDate = pLine->m_aDateField->GetDate();
+                Date aTmpDate = pLine->m_xDateField->get_date();
                 util::Date const aDate(aTmpDate.GetDay(), aTmpDate.GetMonth(),
                     aTmpDate.GetYear());
-                if (pLine->m_aDateField->m_TZ.is_initialized())
+                if (pLine->m_xDateField->m_TZ.is_initialized())
                 {
                     m_aCustomProperties[nDataModelPos + i]->m_aValue <<= util::DateWithTimezone(
-                        aDate, pLine->m_aDateField->m_TZ.get());
+                        aDate, pLine->m_xDateField->m_TZ.get());
                 }
                 else
                 {
@@ -1786,11 +1634,11 @@ void CustomPropertiesWindow::StoreCustomProperties()
             }
             else if (CUSTOM_TYPE_DURATION == nType)
             {
-                m_aCustomProperties[nDataModelPos + i]->m_aValue <<= pLine->m_aDurationField->GetDuration();
+                m_aCustomProperties[nDataModelPos + i]->m_aValue <<= pLine->m_xDurationField->GetDuration();
             }
             else
             {
-                OUString sValue(pLine->m_aValueEdit->GetText());
+                OUString sValue(pLine->m_xValueEdit->get_text());
                 m_aCustomProperties[nDataModelPos + i]->m_aValue <<= sValue;
             }
         }
@@ -1829,18 +1677,18 @@ void CustomPropertiesWindow::ReloadLinesContent()
         CustomPropertyLine* pLine = m_aCustomPropertiesLines[i].get();
         pLine->Clear();
 
-        pLine->m_aNameBox->SetText(rName);
-        pLine->m_aLine->Show();
+        pLine->m_xNameBox->set_entry_text(rName);
+        pLine->m_xLine->show();
 
         if (!rAny.hasValue())
         {
-            pLine->m_aValueEdit->SetText(OUString());
+            pLine->m_xValueEdit->set_text(OUString());
         }
         else if (rAny >>= nTmpValue)
         {
             sal_uInt32 nIndex = m_aNumberFormatter.GetFormatIndex(NF_NUMBER_SYSTEM);
             m_aNumberFormatter.GetInputLineString(nTmpValue, nIndex, sValue);
-            pLine->m_aValueEdit->SetText(sValue);
+            pLine->m_xValueEdit->set_text(sValue);
             nType = CUSTOM_TYPE_NUMBER;
         }
         else if (rAny >>= bTmpValue)
@@ -1850,41 +1698,41 @@ void CustomPropertiesWindow::ReloadLinesContent()
         }
         else if (rAny >>= sTmpValue)
         {
-            pLine->m_aValueEdit->SetText(sTmpValue);
+            pLine->m_xValueEdit->set_text(sTmpValue);
             nType = CUSTOM_TYPE_TEXT;
         }
         else if (rAny >>= aTmpDate)
         {
-            pLine->m_aDateField->SetDate(Date(aTmpDate));
+            pLine->m_xDateField->set_date(Date(aTmpDate));
             nType = CUSTOM_TYPE_DATE;
         }
         else if (rAny >>= aTmpDateTime)
         {
-            pLine->m_aDateField->SetDate(Date(aTmpDateTime));
-            pLine->m_aTimeField->SetTime(tools::Time(aTmpDateTime));
-            pLine->m_aTimeField->m_isUTC = aTmpDateTime.IsUTC;
+            pLine->m_xDateField->set_date(Date(aTmpDateTime));
+            pLine->m_xTimeField->set_value(tools::Time(aTmpDateTime));
+            pLine->m_xTimeField->m_isUTC = aTmpDateTime.IsUTC;
             nType = CUSTOM_TYPE_DATETIME;
         }
         else if (rAny >>= aTmpDateTZ)
         {
-            pLine->m_aDateField->SetDate(Date(aTmpDateTZ.DateInTZ.Day,
+            pLine->m_xDateField->set_date(Date(aTmpDateTZ.DateInTZ.Day,
                 aTmpDateTZ.DateInTZ.Month, aTmpDateTZ.DateInTZ.Year));
-            pLine->m_aDateField->m_TZ = aTmpDateTZ.Timezone;
+            pLine->m_xDateField->m_TZ = aTmpDateTZ.Timezone;
             nType = CUSTOM_TYPE_DATE;
         }
         else if (rAny >>= aTmpDateTimeTZ)
         {
             util::DateTime const& rDT(aTmpDateTimeTZ.DateTimeInTZ);
-            pLine->m_aDateField->SetDate(Date(rDT));
-            pLine->m_aTimeField->SetTime(tools::Time(rDT));
-            pLine->m_aTimeField->m_isUTC = rDT.IsUTC;
-            pLine->m_aDateField->m_TZ = aTmpDateTimeTZ.Timezone;
+            pLine->m_xDateField->set_date(Date(rDT));
+            pLine->m_xTimeField->set_value(tools::Time(rDT));
+            pLine->m_xTimeField->m_isUTC = rDT.IsUTC;
+            pLine->m_xDateField->m_TZ = aTmpDateTimeTZ.Timezone;
             nType = CUSTOM_TYPE_DATETIME;
         }
         else if (rAny >>= aTmpDuration)
         {
             nType = CUSTOM_TYPE_DURATION;
-            pLine->m_aDurationField->SetDuration(aTmpDuration);
+            pLine->m_xDurationField->SetDuration(aTmpDuration);
         }
 
         if (nType != CUSTOM_TYPE_UNKNOWN)
@@ -1892,15 +1740,16 @@ void CustomPropertiesWindow::ReloadLinesContent()
             if (CUSTOM_TYPE_BOOLEAN == nType)
             {
                 if (bTmpValue)
-                    pLine->m_aYesNoButton->CheckYes();
+                    pLine->m_xYesNoButton->CheckYes();
                 else
-                    pLine->m_aYesNoButton->CheckNo();
+                    pLine->m_xYesNoButton->CheckNo();
             }
-            pLine->m_aTypeBox->SelectEntryPos(pLine->m_aTypeBox->GetEntryPos(reinterpret_cast<void*>(nType)));
+            pLine->m_xTypeBox->set_active_id(OUString::number(nType));
         }
 
-        TypeHdl(*pLine->m_aTypeBox.get());
+        pLine->DoTypeHdl(*pLine->m_xTypeBox);
     }
+
     while (nDataModelPos + i >= GetTotalLineCount() && i < GetExistingLineCount())
     {
         CustomPropertyLine* pLine = m_aCustomPropertiesLines[i].get();
@@ -1909,151 +1758,113 @@ void CustomPropertiesWindow::ReloadLinesContent()
     }
 }
 
-CustomPropertiesControl::CustomPropertiesControl(vcl::Window* pParent)
-    : Window(pParent, WB_HIDE | WB_CLIPCHILDREN | WB_TABSTOP | WB_DIALOGCONTROL | WB_BORDER)
-    , m_pVBox(nullptr)
-    , m_pHeaderBar(nullptr)
-    , m_pBody(nullptr)
-    , m_pPropertiesWin(nullptr)
-    , m_pVertScroll(nullptr)
-    , m_nThumbPos(0)
+CustomPropertiesControl::CustomPropertiesControl()
+    : m_nThumbPos(0)
 {
-    Size aRequest(LogicToPixel(Size(320, 141), MapMode(MapUnit::MapAppFont)));
-    set_width_request(aRequest.Width());
 }
 
-void CustomPropertiesControl::Init(VclBuilderContainer& rBuilder)
+void CustomPropertiesControl::Init(weld::Builder& rBuilder)
 {
-    m_pVBox = VclPtr<VclVBox>::Create(this);
-    m_pHeaderBar = VclPtr<HeaderBar>::Create(m_pVBox, WB_BUTTONSTYLE | WB_BOTTOMBORDER);
-    m_pBody = VclPtr<VclHBox>::Create(m_pVBox);
-    FixedText* pName = rBuilder.get<FixedText>("name");
-    FixedText* pType = rBuilder.get<FixedText>("type");
-    FixedText* pValue = rBuilder.get<FixedText>("value");
-    OUString sName = pName->GetText();
-    OUString sType = pType->GetText();
-    OUString sValue = pValue->GetText();
-    m_pPropertiesWin = VclPtr<CustomPropertiesWindow>::Create(m_pBody, pName, pType, pValue);
-    m_pVertScroll = VclPtr<ScrollBar>::Create(m_pBody, WB_VERT);
-    m_pPropertiesWin->Init(m_pHeaderBar, m_pVertScroll);
-
-    set_hexpand(true);
-    set_vexpand(true);
-    set_expand(true);
-    set_fill(true);
+    m_xBox = rBuilder.weld_widget("box");
+    m_xBody = rBuilder.weld_container("properties");
 
-    m_pVBox->set_hexpand(true);
-    m_pVBox->set_vexpand(true);
-    m_pVBox->set_expand(true);
-    m_pVBox->set_fill(true);
-    m_pVBox->Show();
+    m_xName = rBuilder.weld_label("name");
+    m_xType = rBuilder.weld_label("type");
+    m_xValue = rBuilder.weld_label("value");
+    m_xVertScroll = rBuilder.weld_scrolled_window("scroll");
+    m_xVertScroll->set_user_managed_scrolling();
+    m_xPropertiesWin.reset(new CustomPropertiesWindow(*m_xBody, *m_xName, *m_xType, *m_xValue));
 
-    m_pBody->set_hexpand(true);
-    m_pBody->set_vexpand(true);
-    m_pBody->set_expand(true);
-    m_pBody->set_fill(true);
-    m_pBody->Show();
+    m_xBox->set_stack_background();
+    m_xVertScroll->show();
 
-    m_pPropertiesWin->set_hexpand(true);
-    m_pPropertiesWin->set_vexpand(true);
-    m_pPropertiesWin->set_expand(true);
-    m_pPropertiesWin->set_fill(true);
-    m_pPropertiesWin->Show();
+    std::unique_ptr<CustomPropertyLine> xNewLine(new CustomPropertyLine(m_xPropertiesWin.get(), m_xBody.get()));
+    Size aLineSize(xNewLine->m_xLine->get_preferred_size());
+    m_xPropertiesWin->SetLineHeight(aLineSize.Height() + 6);
+    m_xBody->set_size_request(aLineSize.Width(), -1);
+    auto nHeight = aLineSize.Height() * 8;
+    m_xVertScroll->set_size_request(-1, nHeight + 6);
 
-    m_pPropertiesWin->SetBackground( Wallpaper( GetSettings().GetStyleSettings().GetFieldColor() ) );
-    m_pVertScroll->EnableDrag();
-    m_pVertScroll->Show();
+    m_xPropertiesWin->SetHeight(nHeight);
+    m_xVertScroll->connect_size_allocate(LINK(this, CustomPropertiesControl, ResizeHdl));
 
-    m_pHeaderBar->set_height_request(GetTextHeight() + 6);
+    m_xName->set_size_request(xNewLine->m_xNameBox->get_preferred_size().Width(), -1);
+    m_xType->set_size_request(xNewLine->m_xTypeBox->get_preferred_size().Width(), -1);
+    m_xValue->set_size_request(xNewLine->m_xValueEdit->get_preferred_size().Width(), -1);
 
-    const HeaderBarItemBits nHeadBits = HeaderBarItemBits::FIXED | HeaderBarItemBits::FIXEDPOS | HeaderBarItemBits::LEFT;
+    m_xPropertiesWin->SetRemovedHdl( LINK( this, CustomPropertiesControl, RemovedHdl ) );
 
-    m_pHeaderBar->InsertItem( HI_NAME, sName, 0, nHeadBits );
-    m_pHeaderBar->InsertItem( HI_TYPE, sType, 0, nHeadBits );
-    m_pHeaderBar->InsertItem( HI_VALUE, sValue, 0, nHeadBits );
-    m_pHeaderBar->InsertItem( HI_ACTION, OUString(), 0, nHeadBits );
-    m_pHeaderBar->Show();
+    m_xVertScroll->vadjustment_set_lower(0);
+    m_xVertScroll->vadjustment_set_upper(0);
+    m_xVertScroll->vadjustment_set_page_size(0xFFFF);
 
-    m_pPropertiesWin->SetRemovedHdl( LINK( this, CustomPropertiesControl, RemovedHdl ) );
-
-    m_pVertScroll->SetRangeMin( 0 );
-    m_pVertScroll->SetRangeMax( 0 );
-    m_pVertScroll->SetVisibleSize( 0xFFFF );
-
-    Link<ScrollBar*,void> aScrollLink = LINK( this, CustomPropertiesControl, ScrollHdl );
-    m_pVertScroll->SetScrollHdl( aScrollLink );
+    Link<weld::ScrolledWindow&,void> aScrollLink = LINK( this, CustomPropertiesControl, ScrollHdl );
+    m_xVertScroll->connect_vadjustment_changed(aScrollLink);
 }
 
-void CustomPropertiesControl::Resize()
+IMPL_LINK(CustomPropertiesControl, ResizeHdl, const Size&, rSize, void)
 {
-    if (m_pVBox)
-    {
-        m_pVBox->SetSizePixel(GetSizePixel());
-        sal_Int32 nScrollOffset = m_pPropertiesWin->GetLineHeight();
-        sal_Int32 nVisibleEntries = m_pPropertiesWin->GetSizePixel().Height() / nScrollOffset;
-        m_pPropertiesWin->SetVisibleLineCount( nVisibleEntries );
-        m_pVertScroll->SetPageSize( nVisibleEntries - 1 );
-        m_pVertScroll->SetVisibleSize( nVisibleEntries );
-    }
-    Window::Resize();
+    int nHeight = rSize.Height() - 6;
+    m_xPropertiesWin->SetHeight(nHeight);
+    sal_Int32 nScrollOffset = m_xPropertiesWin->GetLineHeight();
+    sal_Int32 nVisibleEntries = nHeight / nScrollOffset;
+    m_xPropertiesWin->SetVisibleLineCount( nVisibleEntries );
+    m_xVertScroll->vadjustment_set_page_increment( nVisibleEntries - 1 );
+    m_xVertScroll->vadjustment_set_page_size( nVisibleEntries );
+    m_xPropertiesWin->ReloadLinesContent();
 }
 
-VCL_BUILDER_FACTORY(CustomPropertiesControl)
-
 CustomPropertiesControl::~CustomPropertiesControl()
 {
-    disposeOnce();
 }
 
-void CustomPropertiesControl::dispose()
+IMPL_LINK( CustomPropertiesControl, ScrollHdl, weld::ScrolledWindow&, rScrollBar, void )
 {
-    m_pVertScroll.disposeAndClear();
-    m_pPropertiesWin.disposeAndClear();
-    m_pBody.disposeAndClear();
-    m_pHeaderBar.disposeAndClear();
-    m_pVBox.disposeAndClear();
-    vcl::Window::dispose();
-}
-
-IMPL_LINK( CustomPropertiesControl, ScrollHdl, ScrollBar*, pScrollBar, void )
-{
-    sal_Int32 nOffset = m_pPropertiesWin->GetLineHeight();
-    nOffset *= ( m_nThumbPos - pScrollBar->GetThumbPos() );
-    m_nThumbPos = pScrollBar->GetThumbPos();
-    m_pPropertiesWin->DoScroll( nOffset );
+    sal_Int32 nOffset = m_xPropertiesWin->GetLineHeight();
+    int nThumbPos = rScrollBar.vadjustment_get_value();
+    nOffset *= ( m_nThumbPos - nThumbPos );
+    m_nThumbPos = nThumbPos;
+    m_xPropertiesWin->DoScroll( nOffset );
 }
 
 IMPL_LINK_NOARG(CustomPropertiesControl, RemovedHdl, void*, void)
 {
-    long nLineCount = m_pPropertiesWin->GetTotalLineCount();
-    m_pVertScroll->SetRangeMax(nLineCount + 1);
-    if ( m_pPropertiesWin->GetTotalLineCount() > m_pPropertiesWin->GetExistingLineCount() )
-        m_pVertScroll->DoScrollAction ( ScrollType::LineUp );
+    auto nLineCount = m_xPropertiesWin->GetTotalLineCount();
+    m_xVertScroll->vadjustment_set_upper(nLineCount + 1);
+    if (m_xPropertiesWin->GetTotalLineCount() > m_xPropertiesWin->GetExistingLineCount())
+    {
+        m_xVertScroll->vadjustment_set_value(nLineCount - 1);
+        ScrollHdl(*m_xVertScroll);
+    }
 }
 
 void CustomPropertiesControl::AddLine( Any const & rAny )
 {
-    m_pPropertiesWin->AddLine( OUString(), rAny );
-    long nLineCount = m_pPropertiesWin->GetTotalLineCount();
-    m_pVertScroll->SetRangeMax(nLineCount + 1);
-    if ( m_pPropertiesWin->GetOutputSizePixel().Height() < nLineCount * m_pPropertiesWin->GetLineHeight() )
-        m_pVertScroll->DoScroll(nLineCount + 1);
+    m_xPropertiesWin->AddLine( OUString(), rAny );
+    auto nLineCount = m_xPropertiesWin->GetTotalLineCount();
+    m_xVertScroll->vadjustment_set_upper(nLineCount + 1);
+    if (m_xPropertiesWin->GetHeight() < nLineCount * m_xPropertiesWin->GetLineHeight())
+    {
+        m_xVertScroll->vadjustment_set_value(nLineCount + 1);
+        ScrollHdl(*m_xVertScroll);
+    }
 }
 
 void CustomPropertiesControl::SetCustomProperties(std::vector< std::unique_ptr<CustomProperty> >&& rProperties)
 {
-    m_pPropertiesWin->SetCustomProperties(std::move(rProperties));
-    long nLineCount = m_pPropertiesWin->GetTotalLineCount();
-    m_pVertScroll->SetRangeMax(nLineCount + 1);
+    m_xPropertiesWin->SetCustomProperties(std::move(rProperties));
+    auto nLineCount = m_xPropertiesWin->GetTotalLineCount();
+    m_xVertScroll->vadjustment_set_upper(nLineCount + 1);
 }
 
 // class SfxCustomPropertiesPage -----------------------------------------
-SfxCustomPropertiesPage::SfxCustomPropertiesPage( vcl::Window* pParent, const SfxItemSet& rItemSet )
-    : SfxTabPage(pParent, "CustomInfoPage", "sfx/ui/custominfopage.ui", &rItemSet)
+SfxCustomPropertiesPage::SfxCustomPropertiesPage(TabPageParent pParent, const SfxItemSet& rItemSet )
+    : SfxTabPage(pParent, "sfx/ui/custominfopage.ui", "CustomInfoPage", &rItemSet)
+    , m_xPropertiesCtrl(new CustomPropertiesControl)
+    , m_xAdd(m_xBuilder->weld_button("add"))
 {
-    get(m_pPropertiesCtrl, "properties");
-    m_pPropertiesCtrl->Init(*this);
-    get<PushButton>("add")->SetClickHdl(LINK(this, SfxCustomPropertiesPage, AddHdl));
+    m_xPropertiesCtrl->Init(*m_xBuilder);
+    m_xAdd->connect_clicked(LINK(this, SfxCustomPropertiesPage, AddHdl));
 }
 
 SfxCustomPropertiesPage::~SfxCustomPropertiesPage()
@@ -2063,17 +1874,17 @@ SfxCustomPropertiesPage::~SfxCustomPropertiesPage()
 
 void SfxCustomPropertiesPage::dispose()
 {
-    m_pPropertiesCtrl.clear();
+    m_xPropertiesCtrl.reset();
     SfxTabPage::dispose();
 }
 
-IMPL_LINK_NOARG(SfxCustomPropertiesPage, AddHdl, Button*, void)
+IMPL_LINK_NOARG(SfxCustomPropertiesPage, AddHdl, weld::Button&, void)
 {
     // tdf#115853: reload current lines before adding a brand new one
     // indeed the info are deleted by ClearCustomProperties
     // each time SfxDocumentInfoItem destructor is called
     SfxDocumentInfoItem pInfo;
-    Sequence< beans::PropertyValue > aPropertySeq = m_pPropertiesCtrl->GetCustomProperties();
+    Sequence< beans::PropertyValue > aPropertySeq = m_xPropertiesCtrl->GetCustomProperties();
     sal_Int32 i = 0, nCount = aPropertySeq.getLength();
     for ( ; i < nCount; ++i )
     {
@@ -2084,7 +1895,7 @@ IMPL_LINK_NOARG(SfxCustomPropertiesPage, AddHdl, Button*, void)
     }
 
     Any aAny;
-    m_pPropertiesCtrl->AddLine(aAny);
+    m_xPropertiesCtrl->AddLine(aAny);
 }
 
 bool SfxCustomPropertiesPage::FillItemSet( SfxItemSet* rSet )
@@ -2115,7 +1926,7 @@ bool SfxCustomPropertiesPage::FillItemSet( SfxItemSet* rSet )
         }
 
         pInfo->ClearCustomProperties();
-        Sequence< beans::PropertyValue > aPropertySeq = m_pPropertiesCtrl->GetCustomProperties();
+        Sequence< beans::PropertyValue > aPropertySeq = m_xPropertiesCtrl->GetCustomProperties();
         sal_Int32 i = 0, nCount = aPropertySeq.getLength();
         for ( ; i < nCount; ++i )
         {
@@ -2135,23 +1946,23 @@ bool SfxCustomPropertiesPage::FillItemSet( SfxItemSet* rSet )
 
 void SfxCustomPropertiesPage::Reset( const SfxItemSet* rItemSet )
 {
-    m_pPropertiesCtrl->ClearAllLines();
+    m_xPropertiesCtrl->ClearAllLines();
     const SfxDocumentInfoItem& rInfoItem = rItemSet->Get(SID_DOCINFO);
     std::vector< std::unique_ptr<CustomProperty> > aCustomProps = rInfoItem.GetCustomProperties();
-    m_pPropertiesCtrl->SetCustomProperties(std::move(aCustomProps));
+    m_xPropertiesCtrl->SetCustomProperties(std::move(aCustomProps));
 }
 
 DeactivateRC SfxCustomPropertiesPage::DeactivatePage( SfxItemSet* /*pSet*/ )
 {
     DeactivateRC nRet = DeactivateRC::LeavePage;
-    if ( !m_pPropertiesCtrl->AreAllLinesValid() )
+    if ( !m_xPropertiesCtrl->AreAllLinesValid() )
         nRet = DeactivateRC::KeepPage;
     return nRet;
 }
 
 VclPtr<SfxTabPage> SfxCustomPropertiesPage::Create( TabPageParent pParent, const SfxItemSet* rItemSet )
 {
-    return VclPtr<SfxCustomPropertiesPage>::Create( pParent.pParent, *rItemSet );
+    return VclPtr<SfxCustomPropertiesPage>::Create( pParent, *rItemSet );
 }
 
 CmisValue::CmisValue( vcl::Window* pParent, const OUString& aStr )
diff --git a/sfx2/uiconfig/ui/custominfopage.ui b/sfx2/uiconfig/ui/custominfopage.ui
index 5aee55047caa..304b33a216f8 100644
--- a/sfx2/uiconfig/ui/custominfopage.ui
+++ b/sfx2/uiconfig/ui/custominfopage.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.18.3 -->
+<!-- Generated with glade 3.22.1 -->
 <interface domain="sfx">
   <requires lib="gtk+" version="3.18"/>
   <object class="GtkGrid" id="CustomInfoPage">
@@ -24,29 +24,17 @@
       </packing>
     </child>
     <child>
-      <object class="sfxlo-CustomPropertiesControl" id="properties">
+      <object class="GtkBox" id="headerbox">
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="hexpand">True</property>
-        <property name="vexpand">True</property>
-      </object>
-      <packing>
-        <property name="left_attach">0</property>
-        <property name="top_attach">1</property>
-      </packing>
-    </child>
-    <child>
-      <object class="GtkBox" id="box1">
-        <property name="can_focus">False</property>
-        <property name="no_show_all">True</property>
-        <property name="hexpand">True</property>
         <property name="spacing">12</property>
-        <property name="homogeneous">True</property>
         <child>
           <object class="GtkLabel" id="name">
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="label" translatable="yes" context="custominfopage|name">Name</property>
+            <property name="xalign">0</property>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -59,6 +47,7 @@
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="label" translatable="yes" context="custominfopage|type">Type</property>
+            <property name="xalign">0</property>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -71,6 +60,7 @@
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="label" translatable="yes" context="custominfopage|value">Value</property>
+            <property name="xalign">0</property>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -84,5 +74,50 @@
         <property name="top_attach">0</property>
       </packing>
     </child>
+    <child>
+      <object class="GtkScrolledWindow" id="scroll">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="hexpand">True</property>
+        <property name="vexpand">True</property>
+        <property name="hscrollbar_policy">never</property>
+        <property name="vscrollbar_policy">always</property>
+        <property name="shadow_type">in</property>
+        <child>
+          <object class="GtkViewport">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkBox" id="box">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="orientation">vertical</property>
+                <child>
+                  <object class="GtkBox" id="properties">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="border_width">3</property>
+                    <property name="orientation">vertical</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <placeholder/>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">1</property>
+      </packing>
+    </child>
   </object>
 </interface>
diff --git a/sfx2/uiconfig/ui/linefragment.ui b/sfx2/uiconfig/ui/linefragment.ui
new file mode 100644
index 000000000000..86e247c1f8a8
--- /dev/null
+++ b/sfx2/uiconfig/ui/linefragment.ui
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface domain="sfx">
+  <requires lib="gtk+" version="3.18"/>
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">86400000</property>
+    <property name="step_increment">1000</property>
+    <property name="page_increment">60000</property>
+  </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="icon_name">sfx2/res/deleterow.png</property>
+  </object>
+  <object class="GtkGrid" id="lineentry">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="no_show_all">True</property>
+    <property name="valign">start</property>
+    <property name="hexpand">True</property>
+    <property name="vexpand">True</property>
+    <property name="column_spacing">4</property>
+    <child>
+      <object class="GtkComboBoxText" id="namebox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="has_entry">True</property>
+        <child internal-child="entry">
+          <object class="GtkEntry">
+            <property name="can_focus">True</property>
+            <property name="width_chars">27</property>
+          </object>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">0</property>
+        <property name="top_attach">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkComboBoxText" id="typebox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+      </object>
+      <packing>
+        <property name="left_attach">1</property>
+        <property name="top_attach">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkButton" id="remove">
+        <property name="visible">True</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">True</property>
+        <property name="tooltip_text" translatable="yes" context="linefragment|STR_SFX_REMOVE_PROPERTY">Remove Property</property>
+        <property name="image">image1</property>
+        <property name="always_show_image">True</property>
+      </object>
+      <packing>
+        <property name="left_attach">3</property>
+        <property name="top_attach">0</property>
+      </packing>
+    </child>
+    <child>
+      <object class="GtkBox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="hexpand">True</property>
+        <property name="orientation">vertical</property>
+        <child>
+          <object class="GtkEntry" id="valueedit">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="width_chars">32</property>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="datetimebox">
+            <property name="can_focus">False</property>
+            <property name="no_show_all">True</property>
+            <property name="hexpand">True</property>
+            <property name="spacing">3</property>
+            <child>
+              <object class="GtkMenuButton" id="date">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="draw_indicator">True</property>
+                <child>
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSpinButton" id="time">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="adjustment">adjustment1</property>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkBox" id="durationbox">
+            <property name="can_focus">False</property>
+            <property name="no_show_all">True</property>
+            <property name="spacing">3</property>
+            <child>
+              <object class="GtkEntry" id="duration">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="hexpand">True</property>
+                <property name="editable">False</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="durationbutton">
+                <property name="label" translatable="yes" context="linefragment|SFX_ST_EDIT">...</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScrolledWindow" id="yesno">
+            <property name="can_focus">True</property>
+            <property name="no_show_all">True</property>
+            <property name="hscrollbar_policy">never</property>
+            <property name="vscrollbar_policy">never</property>
+            <property name="shadow_type">in</property>
+            <child>
+              <object class="GtkViewport">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <child>
+                  <object class="GtkBox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="homogeneous">True</property>
+                    <child>
+                      <object class="GtkRadioButton" id="yes">
+                        <property name="label" translatable="yes" context="linefragment|yes">Yes</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="xalign">0</property>
+                        <property name="active">True</property>
+                        <property name="draw_indicator">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkRadioButton" id="no">
+                        <property name="label" translatable="yes" context="linefragment|no">No</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="xalign">0</property>
+                        <property name="active">True</property>
+                        <property name="draw_indicator">True</property>
+                        <property name="group">yes</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+      </object>
+      <packing>
+        <property name="left_attach">2</property>
+        <property name="top_attach">0</property>
+      </packing>
+    </child>
+  </object>
+  <object class="GtkSizeGroup" id="sizegroup">
+    <widgets>
+      <widget name="namebox"/>
+      <widget name="valueedit"/>
+      <widget name="datetimebox"/>
+      <widget name="durationbox"/>
+      <widget name="yesno"/>
+    </widgets>
+  </object>
+</interface>
diff --git a/solenv/bin/native-code.py b/solenv/bin/native-code.py
index 28cb68f12fd4..405f98fd71d3 100755
--- a/solenv/bin/native-code.py
+++ b/solenv/bin/native-code.py
@@ -439,7 +439,6 @@ custom_widgets = [
     'ContentListBox',
     'ContextVBox',
     'CustomAnimationList',
-    'CustomPropertiesControl',
     'DataTreeListBox',
     'DriverListControl',
     'DropdownBox',
diff --git a/solenv/sanitizers/ui/sfx.suppr b/solenv/sanitizers/ui/sfx.suppr
index 30a4bd775f29..1bea91f7953f 100644
--- a/solenv/sanitizers/ui/sfx.suppr
+++ b/solenv/sanitizers/ui/sfx.suppr
@@ -43,7 +43,7 @@ sfx2/uiconfig/ui/cmisline.ui://GtkLabel[@id='type'] orphan-label
 sfx2/uiconfig/ui/cmisline.ui://GtkEntry[@id='value'] no-labelled-by
 sfx2/uiconfig/ui/cmisline.ui://GtkSpinButton[@id='date:yy:mm:dd'] no-labelled-by
 sfx2/uiconfig/ui/cmisline.ui://GtkSpinButton[@id='time:hh:mm'] no-labelled-by
-sfx2/uiconfig/ui/custominfopage.ui://sfxlo-CustomPropertiesControl[@id='properties'] no-labelled-by
+sfx2/uiconfig/ui/custominfopage.ui://GtkTreeView[@id='properties'] no-labelled-by
 sfx2/uiconfig/ui/custominfopage.ui://GtkLabel[@id='name'] orphan-label
 sfx2/uiconfig/ui/custominfopage.ui://GtkLabel[@id='type'] orphan-label
 sfx2/uiconfig/ui/custominfopage.ui://GtkLabel[@id='value'] orphan-label
@@ -79,3 +79,7 @@ sfx2/uiconfig/ui/versioncommentdialog.ui://GtkTextView[@id='textview'] no-labell
 sfx2/uiconfig/ui/versionscmis.ui://GtkLabel[@id='datetime'] orphan-label
 sfx2/uiconfig/ui/versionscmis.ui://GtkLabel[@id='savedby'] orphan-label
 sfx2/uiconfig/ui/versionscmis.ui://GtkLabel[@id='comments'] orphan-label
+sfx2/uiconfig/ui/linefragment.ui://GtkEntry[@id='duration'] no-labelled-by
+sfx2/uiconfig/ui/linefragment.ui://GtkEntry[@id='valueedit'] no-labelled-by
+sfx2/uiconfig/ui/linefragment.ui://GtkMenuButton[@id='date'] button-no-label
+sfx2/uiconfig/ui/linefragment.ui://GtkSpinButton[@id='time'] no-labelled-by


More information about the Libreoffice-commits mailing list