cui/Library_cui.mk                      |    1 
 cui/source/inc/cuioptgenrl.hxx          |    2 
 cui/source/inc/cuitabarea.hxx           |    2 
 cui/source/inc/dbregister.hxx           |    2 
 cui/source/inc/optasian.hxx             |    3 
 cui/source/inc/optlingu.hxx             |    2 
 cui/source/inc/optpath.hxx              |    2 
 cui/source/inc/treeopt.hxx              |   49 ++
 cui/source/options/connpooloptions.cxx  |   16 
 cui/source/options/connpooloptions.hxx  |    1 
 cui/source/options/dbregister.cxx       |    7 
 cui/source/options/fontsubs.cxx         |   16 
 cui/source/options/fontsubs.hxx         |    3 
 cui/source/options/optaccessibility.cxx |   17 
 cui/source/options/optaccessibility.hxx |    3 
 cui/source/options/optasian.cxx         |   20 
 cui/source/options/optbasic.cxx         |   17 
 cui/source/options/optbasic.hxx         |    3 
 cui/source/options/optchart.cxx         |   16 
 cui/source/options/optchart.hxx         |    3 
 cui/source/options/optcolor.cxx         |   12 
 cui/source/options/optcolor.hxx         |    2 
 cui/source/options/optctl.cxx           |   21 
 cui/source/options/optctl.hxx           |    3 
 cui/source/options/optdeepl.cxx         |   13 
 cui/source/options/optdeepl.hxx         |    2 
 cui/source/options/optfltr.cxx          |   35 +
 cui/source/options/optfltr.hxx          |    4 
 cui/source/options/optgdlg.cxx          |   61 ++
 cui/source/options/optgdlg.hxx          |    6 
 cui/source/options/optgenrl.cxx         |   17 
 cui/source/options/opthtml.cxx          |   18 
 cui/source/options/opthtml.hxx          |    2 
 cui/source/options/optinet2.cxx         |   52 ++
 cui/source/options/optinet2.hxx         |    8 
 cui/source/options/optjava.cxx          |   21 
 cui/source/options/optjava.hxx          |    2 
 cui/source/options/optjsearch.cxx       |   33 +
 cui/source/options/optjsearch.hxx       |    2 
 cui/source/options/optlanguagetool.cxx  |   20 
 cui/source/options/optlanguagetool.hxx  |    2 
 cui/source/options/optlingu.cxx         |   13 
 cui/source/options/optopencl.cxx        |   13 
 cui/source/options/optopencl.hxx        |    1 
 cui/source/options/optpath.cxx          |    6 
 cui/source/options/optsave.cxx          |   20 
 cui/source/options/optsave.hxx          |    2 
 cui/source/options/optupdt.cxx          |   25 +
 cui/source/options/optupdt.hxx          |    2 
 cui/source/options/personalization.cxx  |   13 
 cui/source/options/personalization.hxx  |    2 
 cui/source/options/treeopt.cxx          |  721 ++++++++++++++++++++++++++++++--
 cui/source/options/treeopthelper.cxx    |  184 ++++++++
 cui/source/tabpages/tparea.cxx          |   12 
 cui/uiconfig/ui/optionsdialog.ui        |   75 ++-
 include/sfx2/printopt.hxx               |    3 
 include/sfx2/tabdlg.hxx                 |    1 
 include/svx/optgrid.hxx                 |    2 
 sc/source/ui/inc/opredlin.hxx           |    2 
 sc/source/ui/inc/tpcalc.hxx             |    3 
 sc/source/ui/inc/tpcompatibility.hxx    |    2 
 sc/source/ui/inc/tpdefaults.hxx         |    2 
 sc/source/ui/inc/tpformula.hxx          |    2 
 sc/source/ui/inc/tpprint.hxx            |    2 
 sc/source/ui/inc/tpusrlst.hxx           |    3 
 sc/source/ui/inc/tpview.hxx             |    6 
 sc/source/ui/optdlg/opredlin.cxx        |   11 
 sc/source/ui/optdlg/tpcalc.cxx          |   24 +
 sc/source/ui/optdlg/tpcompatibility.cxx |   13 
 sc/source/ui/optdlg/tpdefaults.cxx      |   13 
 sc/source/ui/optdlg/tpformula.cxx       |   28 +
 sc/source/ui/optdlg/tpprint.cxx         |   16 
 sc/source/ui/optdlg/tpusrlst.cxx        |   16 
 sc/source/ui/optdlg/tpview.cxx          |   43 +
 sd/source/ui/dlg/prntopts.cxx           |   24 +
 sd/source/ui/dlg/tpoption.cxx           |   37 +
 sd/source/ui/inc/prntopts.hxx           |    2 
 sd/source/ui/inc/tpoption.hxx           |    4 
 sfx2/source/dialog/printopt.cxx         |   30 +
 sfx2/source/dialog/tabdlg.cxx           |   13 
 starmath/inc/dialog.hxx                 |    2 
 starmath/source/dialog.cxx              |   22 
 svx/source/dialog/optgrid.cxx           |   20 
 sw/source/ui/config/mailconfigpage.cxx  |   22 
 sw/source/ui/config/optcomp.cxx         |   13 
 sw/source/ui/config/optload.cxx         |   38 +
 sw/source/ui/config/optpage.cxx         |  163 +++++++
 sw/source/uibase/inc/mailconfigpage.hxx |    2 
 sw/source/uibase/inc/optcomp.hxx        |    2 
 sw/source/uibase/inc/optload.hxx        |    4 
 sw/source/uibase/inc/optpage.hxx        |   16 
 91 files changed, 2169 insertions(+), 47 deletions(-)

New commits:
commit a4633dadb4233ad5587bd238449671d610540c81
Author:     Bayram Çiçek <bayram.ci...@libreoffice.org>
AuthorDate: Fri Jun 2 08:24:25 2023 +0300
Commit:     Andreas Heinisch <andreas.heini...@yahoo.de>
CommitDate: Tue Aug 29 18:01:40 2023 +0200

    tdf#49895: Add search functionality to Options dialog
    
    - Search field added.
    - Dialog names of all treeview nodes with their parent names
      were included in searching.
    - Strings of labels, check buttons, radio buttons,
      toggle buttons, link buttons and buttons were
      included in searching.
    
    Change-Id: Idf67c160519402ee390d94b1b3135b56324f3990
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152519
    Tested-by: Jenkins
    Reviewed-by: Andreas Heinisch <andreas.heini...@yahoo.de>

diff --git a/cui/Library_cui.mk b/cui/Library_cui.mk
index 43d13810d5c1..9c621a17171a 100644
--- a/cui/Library_cui.mk
+++ b/cui/Library_cui.mk
@@ -205,6 +205,7 @@ $(eval $(call gb_Library_add_exception_objects,cui,\
     cui/source/options/sdbcdriverenum \
     cui/source/options/securityoptions \
     cui/source/options/treeopt \
+    cui/source/options/treeopthelper \
     cui/source/options/tsaurls \
     cui/source/options/webconninfo \
     cui/source/tabpages/align \
diff --git a/cui/source/inc/cuioptgenrl.hxx b/cui/source/inc/cuioptgenrl.hxx
index 42cdbbec3aa9..ac903a389df4 100644
--- a/cui/source/inc/cuioptgenrl.hxx
+++ b/cui/source/inc/cuioptgenrl.hxx
@@ -64,6 +64,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/inc/cuitabarea.hxx b/cui/source/inc/cuitabarea.hxx
index 4e766c76e57d..2fbfcd1435ac 100644
--- a/cui/source/inc/cuitabarea.hxx
+++ b/cui/source/inc/cuitabarea.hxx
@@ -278,6 +278,8 @@ public:
                               const SfxItemSet*);
     static WhichRangesContainer GetRanges() { return pAreaRanges; }
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool FillItemSet( SfxItemSet* ) override;
     virtual void Reset( const SfxItemSet * ) override;
     virtual void ActivatePage( const SfxItemSet& rSet ) override;
diff --git a/cui/source/inc/dbregister.hxx b/cui/source/inc/dbregister.hxx
index ecbded949d20..3b26e5190cb0 100644
--- a/cui/source/inc/dbregister.hxx
+++ b/cui/source/inc/dbregister.hxx
@@ -73,6 +73,8 @@ namespace svx
 
         static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet );
 
+        virtual OUString GetAllStrings() override;
+
         virtual bool        FillItemSet( SfxItemSet* rSet ) override;
         virtual void        Reset( const SfxItemSet* rSet ) override;
         virtual void        FillUserData() override;
diff --git a/cui/source/inc/optasian.hxx b/cui/source/inc/optasian.hxx
index 9d9815ea49f0..31a622f7a50d 100644
--- a/cui/source/inc/optasian.hxx
+++ b/cui/source/inc/optasian.hxx
@@ -53,6 +53,9 @@ public:
     static std::unique_ptr<SfxTabPage>
     Create(weld::Container* pPage, weld::DialogController* pController, const 
SfxItemSet* rAttrSet);
     static WhichRangesContainer GetRanges();
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool FillItemSet(SfxItemSet* rSet) override;
     virtual void Reset(const SfxItemSet* rSet) override;
 };
diff --git a/cui/source/inc/optlingu.hxx b/cui/source/inc/optlingu.hxx
index d0933e4ac831..dce8f2ccd11f 100644
--- a/cui/source/inc/optlingu.hxx
+++ b/cui/source/inc/optlingu.hxx
@@ -142,6 +142,8 @@ public:
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet );
     virtual ~SvxLinguTabPage() override;
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 
diff --git a/cui/source/inc/optpath.hxx b/cui/source/inc/optpath.hxx
index acc7696527ed..ccfeb70e0072 100644
--- a/cui/source/inc/optpath.hxx
+++ b/cui/source/inc/optpath.hxx
@@ -63,6 +63,8 @@ public:
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet );
     virtual ~SvxPathTabPage() override;
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/inc/treeopt.hxx b/cui/source/inc/treeopt.hxx
index 74ca73944b66..b3f54dc0c533 100644
--- a/cui/source/inc/treeopt.hxx
+++ b/cui/source/inc/treeopt.hxx
@@ -26,6 +26,8 @@
 #include <sfx2/basedlgs.hxx>
 #include <svtools/restartdialog.hxx>
 #include <utility>
+#include <i18nutil/searchopt.hxx>
+#include <vcl/timer.hxx>
 
 class SfxModule;
 class SfxShell;
@@ -114,6 +116,7 @@ struct Module;
 class ExtensionsTabPage;
 class SvxColorTabPage;
 struct OptionsGroupInfo;
+struct OptionsPageIdInfo;
 
 class OfaTreeOptionsDialog final: public SfxOkDialogController
 {
@@ -124,11 +127,38 @@ private:
 
     std::unique_ptr<weld::TreeView> xTreeLB;
     std::unique_ptr<weld::Container> xTabBox;
+    std::unique_ptr<weld::Entry> m_xSearchEdit;
 
     weld::Window*    m_pParent;
 
     std::unique_ptr<weld::TreeIter> xCurrentPageEntry;
 
+    // For search
+    Timer m_aUpdateDataTimer;
+    i18nutil::SearchOptions2 m_options;
+
+    bool bIsFirtsInitialize;
+    std::vector<OptionsPageIdInfo*> m_aTreePageIds;
+    typedef std::vector<std::pair<sal_uInt16, std::vector<sal_uInt16>>> 
VectorOfMatchedIds;
+
+    void generalOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_GENERAL_OPTIONS
+    void loadAndSaveOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_FILTER_DLG
+    void languageOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_LANGUAGE_OPTIONS
+    void writerOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SW_EDITOPTIONS
+    void writerWebOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SW_ONLINEOPTIONS
+    void calcOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SC_EDITOPTIONS
+    void impressOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SD_EDITOPTIONS
+    void drawOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SD_GRAPHIC_OPTIONS
+    void mathOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SM_EDITOPTIONS
+    void databaseOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SB_STARBASEOPTIONS
+    void chartOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_SCH_EDITOPTIONS
+    void internetOptions(const std::vector<sal_uInt16>& vPageId = {}); // 
SID_INET_DLG
+
+    void clearOptionsDialog();
+    void selectFirstEntry();
+    void storeOptionsTree();
+    void showDialog(VectorOfMatchedIds& pSearchIds);
+
     OUString               sTitle;
 
     bool                   bForgetSelection;
@@ -163,8 +193,13 @@ private:
     DECL_LINK(BackHdl_Impl, weld::Button&, void);
     DECL_LINK(ApplyHdl_Impl, weld::Button&, void);
     DECL_LINK(HelpHdl_Impl, weld::Widget&, bool);
+    DECL_LINK(SearchUpdateHdl, weld::Entry&, void);
+    DECL_LINK(ImplUpdateDataHdl, Timer*, void);
+    DECL_LINK(FocusOut_Impl, weld::Widget&, void);
     void ResetCurrentPageFromConfig();
     void SelectHdl_Impl();
+    void initializeCurrentDialog(OptionsPageInfo*& pPageInfo,
+                                 std::unique_ptr<weld::TreeIter>& xEntry);
 
     void InitItemSets(OptionsGroupInfo& rGroupInfo);
 
@@ -173,6 +208,8 @@ private:
     virtual weld::Button& GetOKButton() const override { return *xOkPB; }
     virtual const SfxItemSet* GetExampleSet() const override { return nullptr; 
}
 
+    int applySearchFilter(const OUString& rSearchTerm);
+
     // Common initialization
     OfaTreeOptionsDialog(weld::Window* pParent, bool fromExtensionManager);
 
@@ -192,6 +229,9 @@ public:
     void                ActivatePage( const OUString& rPageURL );
     void                ApplyItemSets();
 
+    // default value initializes all dialogs
+    void initializeFirstNDialog(sal_Int16 nNumberOfNode = -1);
+
     // helper functions to call the language settings TabPage from the 
SpellDialog
     static void         ApplyLanguageOptions(const SfxItemSet& rSet);
     static OUString     getCurrentFactory_Impl( const css::uno::Reference< 
css::frame::XFrame >& _xFrame );
@@ -239,4 +279,13 @@ public:
     void            SavePage();
 };
 
+// class TreeOptHelper ---------------------------------------------------
+
+class TreeOptHelper
+{
+public:
+    static void storeStringsOfDialog(sal_uInt16 nPageId, const OUString& 
sPageStrings);
+    static OUString getStringsFromDialog(sal_uInt16 nPageId);
+};
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/options/connpooloptions.cxx 
b/cui/source/options/connpooloptions.cxx
index 80c202a78c0b..b13561898ab0 100644
--- a/cui/source/options/connpooloptions.cxx
+++ b/cui/source/options/connpooloptions.cxx
@@ -159,6 +159,22 @@ namespace offapp
         commitTimeoutField();
     }
 
+    OUString ConnectionPoolOptionsPage::GetAllStrings()
+    {
+        OUString sAllStrings;
+        OUString labels[] = { "label1", "driverslabel", "driverlabel", 
"timeoutlabel", "driver" };
+
+        for (const auto& label : labels)
+            sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+        OUString checkButton[] = { "connectionpooling", "enablepooling" };
+
+        for (const auto& check : checkButton)
+            sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + 
" ";
+
+        return sAllStrings.replaceAll("_", "");
+    }
+
     bool ConnectionPoolOptionsPage::FillItemSet(SfxItemSet* _rSet)
     {
         commitTimeoutField();
diff --git a/cui/source/options/connpooloptions.hxx 
b/cui/source/options/connpooloptions.hxx
index 549448e21ff6..e5ec2a63b1af 100644
--- a/cui/source/options/connpooloptions.hxx
+++ b/cui/source/options/connpooloptions.hxx
@@ -45,6 +45,7 @@ namespace offapp
         ConnectionPoolOptionsPage(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet& _rAttrSet);
         virtual ~ConnectionPoolOptionsPage() override;
         static std::unique_ptr<SfxTabPage> Create(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* _rAttrSet);
+        virtual OUString GetAllStrings() override;
 
     private:
         virtual bool        FillItemSet(SfxItemSet* _rSet) override;
diff --git a/cui/source/options/dbregister.cxx 
b/cui/source/options/dbregister.cxx
index 143112c58724..3aa47d69aea9 100644
--- a/cui/source/options/dbregister.cxx
+++ b/cui/source/options/dbregister.cxx
@@ -131,6 +131,13 @@ std::unique_ptr<SfxTabPage> 
DbRegistrationOptionsPage::Create( weld::Container*
     return std::make_unique<DbRegistrationOptionsPage>(pPage, pController, 
*rAttrSet);
 }
 
+OUString DbRegistrationOptionsPage::GetAllStrings()
+{
+    OUString sAllStrings = m_xBuilder->weld_label("label1")->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool DbRegistrationOptionsPage::FillItemSet( SfxItemSet* rCoreSet )
 {
     // the settings for the single drivers
diff --git a/cui/source/options/fontsubs.cxx b/cui/source/options/fontsubs.cxx
index 93c8b03d98b3..b2fb0604dcf8 100644
--- a/cui/source/options/fontsubs.cxx
+++ b/cui/source/options/fontsubs.cxx
@@ -140,6 +140,22 @@ std::unique_ptr<SfxTabPage> SvxFontSubstTabPage::Create( 
weld::Container* pPage,
     return std::make_unique<SvxFontSubstTabPage>(pPage, pController, 
*rAttrSet);
 }
 
+OUString SvxFontSubstTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label4", "label2", "label3", "label1", "label8", 
"label9" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "usetable", "nonpropfontonly" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool  SvxFontSubstTabPage::FillItemSet( SfxItemSet* )
 {
     std::vector<SubstitutionStruct> aNewFontSubs;
diff --git a/cui/source/options/fontsubs.hxx b/cui/source/options/fontsubs.hxx
index dc55d9434ba9..d86ed04f73cc 100644
--- a/cui/source/options/fontsubs.hxx
+++ b/cui/source/options/fontsubs.hxx
@@ -54,6 +54,9 @@ public:
     SvxFontSubstTabPage(weld::Container* pPage, weld::DialogController* 
pController, const SfxItemSet& rSet);
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet);
     virtual ~SvxFontSubstTabPage() override;
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/options/optaccessibility.cxx 
b/cui/source/options/optaccessibility.cxx
index d0a3694a3c73..e0667d51304d 100644
--- a/cui/source/options/optaccessibility.cxx
+++ b/cui/source/options/optaccessibility.cxx
@@ -48,6 +48,23 @@ std::unique_ptr<SfxTabPage> 
SvxAccessibilityOptionsTabPage::Create(weld::Contain
     return std::make_unique<SvxAccessibilityOptionsTabPage>(pPage, 
pController, *rAttrSet);
 }
 
+OUString SvxAccessibilityOptionsTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "label13" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "acctool",      "textselinreadonly", 
"animatedgraphics",
+                               "animatedtext", "autofontcolor",     
"systempagepreviewcolor" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxAccessibilityOptionsTabPage::FillItemSet( SfxItemSet* )
 {
     std::shared_ptr<comphelper::ConfigurationChanges> batch( 
comphelper::ConfigurationChanges::create() );
diff --git a/cui/source/options/optaccessibility.hxx 
b/cui/source/options/optaccessibility.hxx
index 504e18327c7f..4481dd8993af 100644
--- a/cui/source/options/optaccessibility.hxx
+++ b/cui/source/options/optaccessibility.hxx
@@ -35,6 +35,9 @@ public:
     virtual ~SvxAccessibilityOptionsTabPage() override;
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/options/optasian.cxx b/cui/source/options/optasian.cxx
index 9ef6b753b4d4..533768d5d54b 100644
--- a/cui/source/options/optasian.cxx
+++ b/cui/source/options/optasian.cxx
@@ -141,6 +141,26 @@ std::unique_ptr<SfxTabPage> 
SvxAsianLayoutPage::Create(weld::Container* pPage, w
     return std::make_unique<SvxAsianLayoutPage>(pPage, pController, *rAttrSet);
 }
 
+OUString SvxAsianLayoutPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[]
+        = { "label1", "label2", "label3", "languageft", "startft", "endft", 
"hintft" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString radioButton[] = { "charkerning", "charpunctkerning", 
"nocompression",
+                               "punctcompression", "punctkanacompression" };
+
+    for (const auto& radio : radioButton)
+        sAllStrings += m_xBuilder->weld_radio_button(radio)->get_label() + " ";
+
+    sAllStrings += m_xStandardCB->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxAsianLayoutPage::FillItemSet( SfxItemSet* )
 {
     if(m_xCharKerningRB->get_state_changed_from_saved())
diff --git a/cui/source/options/optbasic.cxx b/cui/source/options/optbasic.cxx
index c550d9440edd..dc46c8ef0f86 100644
--- a/cui/source/options/optbasic.cxx
+++ b/cui/source/options/optbasic.cxx
@@ -53,6 +53,23 @@ void SvxBasicIDEOptionsPage::LoadConfig()
     m_xUseExtendedTypesChk->set_sensitive( 
!officecfg::Office::BasicIDE::Autocomplete::UseExtended::isReadOnly() );
 }
 
+OUString SvxBasicIDEOptionsPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "label3" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "codecomplete_enable", "autocorrect",    
"autoclose_quotes",
+                               "autoclose_paren",     "autoclose_proc", 
"extendedtypes_enable" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxBasicIDEOptionsPage::FillItemSet( SfxItemSet* /*rCoreSet*/ )
 {
     bool bModified = false;
diff --git a/cui/source/options/optbasic.hxx b/cui/source/options/optbasic.hxx
index 990b54d4e3bb..bc4274eaca1e 100644
--- a/cui/source/options/optbasic.hxx
+++ b/cui/source/options/optbasic.hxx
@@ -38,6 +38,9 @@ public:
     virtual ~SvxBasicIDEOptionsPage() override;
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet );
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool FillItemSet( SfxItemSet* rSet ) override;
     virtual void Reset( const SfxItemSet* rSet ) override;
     virtual void FillUserData() override;
diff --git a/cui/source/options/optchart.cxx b/cui/source/options/optchart.cxx
index 5d6b15e9991f..77ca75176c31 100644
--- a/cui/source/options/optchart.cxx
+++ b/cui/source/options/optchart.cxx
@@ -143,6 +143,22 @@ std::unique_ptr<SfxTabPage> 
SvxDefaultColorOptPage::Create( weld::Container* pPa
     return std::make_unique<SvxDefaultColorOptPage>( pPage, pController, 
*rAttrs );
 }
 
+OUString SvxDefaultColorOptPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label20", "label1" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString buttons[] = { "add", "delete", "default" };
+
+    for (const auto& btn : buttons)
+        sAllStrings += m_xBuilder->weld_button(btn)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxDefaultColorOptPage::FillItemSet( SfxItemSet* rOutAttrs )
 {
     if( m_SvxChartColorTableUniquePtr )
diff --git a/cui/source/options/optchart.hxx b/cui/source/options/optchart.hxx
index 08bd26a8cacb..22a01495b276 100644
--- a/cui/source/options/optchart.hxx
+++ b/cui/source/options/optchart.hxx
@@ -69,6 +69,9 @@ public:
     void    Construct();
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rInAttrs );
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rOutAttrs ) override;
     virtual void        Reset( const SfxItemSet* rInAttrs ) override;
 
diff --git a/cui/source/options/optcolor.cxx b/cui/source/options/optcolor.cxx
index 6daa39b37f1f..0c8502a5d6e0 100644
--- a/cui/source/options/optcolor.cxx
+++ b/cui/source/options/optcolor.cxx
@@ -800,6 +800,18 @@ std::unique_ptr<SfxTabPage> 
SvxColorOptionsTabPage::Create(weld::Container* pPag
     return std::make_unique<SvxColorOptionsTabPage>(pPage, pController, 
*rAttrSet);
 }
 
+OUString SvxColorOptionsTabPage::GetAllStrings()
+{
+    // buttons are excluded
+    OUString sAllStrings;
+    OUString labels[] = { "label2", "label3", "autocolor", "uielements", 
"colorsetting" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxColorOptionsTabPage::FillItemSet( SfxItemSet*  )
 {
     bFillItemSetCalled = true;
diff --git a/cui/source/options/optcolor.hxx b/cui/source/options/optcolor.hxx
index 096ed93b256d..396746dea07d 100644
--- a/cui/source/options/optcolor.hxx
+++ b/cui/source/options/optcolor.hxx
@@ -60,6 +60,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 
diff --git a/cui/source/options/optctl.cxx b/cui/source/options/optctl.cxx
index 869879c28525..dae4909c9973 100644
--- a/cui/source/options/optctl.cxx
+++ b/cui/source/options/optctl.cxx
@@ -58,6 +58,27 @@ std::unique_ptr<SfxTabPage> SvxCTLOptionsPage::Create( 
weld::Container* pPage, w
     return std::make_unique<SvxCTLOptionsPage>( pPage, pController, *rAttrSet 
);
 }
 
+OUString SvxCTLOptionsPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "label3", "label4", "label5" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "sequencechecking", "restricted", 
"typeandreplace" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    OUString radioButton[] = { "movementlogical", "movementvisual" };
+
+    for (const auto& radio : radioButton)
+        sAllStrings += m_xBuilder->weld_radio_button(radio)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxCTLOptionsPage::FillItemSet( SfxItemSet* )
 {
     bool bModified = false;
diff --git a/cui/source/options/optctl.hxx b/cui/source/options/optctl.hxx
index 0cc24951b54b..35c07d3a81df 100644
--- a/cui/source/options/optctl.hxx
+++ b/cui/source/options/optctl.hxx
@@ -38,6 +38,9 @@ public:
     SvxCTLOptionsPage(weld::Container* pPage, weld::DialogController* 
pController, const SfxItemSet& rSet);
     virtual ~SvxCTLOptionsPage() override;
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/options/optdeepl.cxx b/cui/source/options/optdeepl.cxx
index 75db4af70f77..b02edf84473a 100644
--- a/cui/source/options/optdeepl.cxx
+++ b/cui/source/options/optdeepl.cxx
@@ -43,6 +43,19 @@ void OptDeeplTabPage::Reset(const SfxItemSet*)
         
m_xAuthKey->set_text(*officecfg::Office::Linguistic::Translation::Deepl::AuthKey::get());
 }
 
+OUString OptDeeplTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "label3" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    sAllStrings += m_xBuilder->weld_link_button("privacy")->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OptDeeplTabPage::FillItemSet(SfxItemSet*)
 {
     std::shared_ptr<comphelper::ConfigurationChanges> batch(
diff --git a/cui/source/options/optdeepl.hxx b/cui/source/options/optdeepl.hxx
index 3258f67fe8af..51714c685084 100644
--- a/cui/source/options/optdeepl.hxx
+++ b/cui/source/options/optdeepl.hxx
@@ -28,6 +28,8 @@ public:
     static std::unique_ptr<SfxTabPage>
     Create(weld::Container* pPage, weld::DialogController* pController, const 
SfxItemSet* rAttrSet);
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool FillItemSet(SfxItemSet* rSet) override;
     virtual void Reset(const SfxItemSet* rSet) override;
 
diff --git a/cui/source/options/optfltr.cxx b/cui/source/options/optfltr.cxx
index 48840b17ea33..9e636ac8c6d7 100644
--- a/cui/source/options/optfltr.cxx
+++ b/cui/source/options/optfltr.cxx
@@ -71,6 +71,23 @@ std::unique_ptr<SfxTabPage> OfaMSFilterTabPage::Create( 
weld::Container* pPage,
     return std::make_unique<OfaMSFilterTabPage>(pPage, pController, *rAttrSet);
 }
 
+OUString OfaMSFilterTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "label3" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "wo_basic", "wo_exec",     "wo_saveorig", 
"ex_basic",
+                               "ex_exec",  "ex_saveorig", "pp_basic",    
"pp_saveorig" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OfaMSFilterTabPage::FillItemSet( SfxItemSet* )
 {
     SvtFilterOptions& rOpt = SvtFilterOptions::Get();
@@ -155,6 +172,24 @@ std::unique_ptr<SfxTabPage> OfaMSFilterTabPage2::Create( 
weld::Container* pPage,
     return std::make_unique<OfaMSFilterTabPage2>( pPage, pController, 
*rAttrSet );
 }
 
+OUString OfaMSFilterTabPage2::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "label3", "label4", "label5", 
"label6" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString radioButton[] = { "highlighting", "shading" };
+
+    for (const auto& radio : radioButton)
+        sAllStrings += m_xBuilder->weld_radio_button(radio)->get_label() + " ";
+
+    sAllStrings += m_xMSOLockFileCB->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OfaMSFilterTabPage2::FillItemSet( SfxItemSet* )
 {
     SvtFilterOptions& rOpt = SvtFilterOptions::Get();
diff --git a/cui/source/options/optfltr.hxx b/cui/source/options/optfltr.hxx
index f38a89366286..fcde68941e62 100644
--- a/cui/source/options/optfltr.hxx
+++ b/cui/source/options/optfltr.hxx
@@ -40,6 +40,8 @@ public:
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController,
                                 const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
@@ -71,6 +73,8 @@ public:
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
     virtual ~OfaMSFilterTabPage2() override;
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/options/optgdlg.cxx b/cui/source/options/optgdlg.cxx
index 3223637b8d47..22d3d75f6fcf 100644
--- a/cui/source/options/optgdlg.cxx
+++ b/cui/source/options/optgdlg.cxx
@@ -218,6 +218,27 @@ std::unique_ptr<SfxTabPage> OfaMiscTabPage::Create( 
weld::Container* pPage, weld
     return std::make_unique<OfaMiscTabPage>( pPage, pController, *rAttrSet );
 }
 
+OUString OfaMiscTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "label4", "label5", "label6",
+                          "toyear", "label7", "label8", "label9" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[]
+        = { "exthelp",   "popupnohelp", "cbShowTipOfTheDay", "filedlg",
+            "docstatus", "crashreport", "quicklaunch",       
"cbPerformFileExtCheck" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    sAllStrings += m_xBuilder->weld_button("assocfiles")->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OfaMiscTabPage::FillItemSet( SfxItemSet* rSet )
 {
     bool bModified = false;
@@ -683,6 +704,27 @@ std::unique_ptr<SfxTabPage> OfaViewTabPage::Create( 
weld::Container* pPage, weld
     return std::make_unique<OfaViewTabPage>(pPage, pController, *rAttrSet);
 }
 
+OUString OfaViewTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label16", "label7",      "label1",       "label6", 
"label15",
+                          "label14", "label8",      "label9",       "label4", 
"label12",
+                          "label2",  "skiaenabled", "skiadisabled", "label5", 
"aafrom" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[]
+        = { "useaccel", "useaa", "useskia", "forceskiaraster", 
"showfontpreview", "aafont" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    sAllStrings += m_xSkiaLog->get_label() + " " + m_xRunGPTests->get_label() 
+ " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OfaViewTabPage::FillItemSet( SfxItemSet* )
 {
     bool bModified = false;
@@ -1207,6 +1249,25 @@ static void lcl_Update(std::unique_ptr<SfxVoidItem> 
pInvalidItems[], std::unique
     }
 }
 
+OUString OfaLanguagesTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[]
+        = { "label1", "label4",          "label7", "localesettingFT", 
"defaultcurrency",
+            "label6", "dataaccpatterns", "label2", "western",         "label3" 
};
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "decimalseparator", "asiansupport", 
"ctlsupport", "currentdoc",
+                               "ignorelanguagechange" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OfaLanguagesTabPage::FillItemSet( SfxItemSet* rSet )
 {
     // lock configuration broadcasters so that we can coordinate the 
notifications
diff --git a/cui/source/options/optgdlg.hxx b/cui/source/options/optgdlg.hxx
index c0d2439593ce..7dc7e073634e 100644
--- a/cui/source/options/optgdlg.hxx
+++ b/cui/source/options/optgdlg.hxx
@@ -68,6 +68,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
@@ -128,6 +130,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
@@ -176,6 +180,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/options/optgenrl.cxx b/cui/source/options/optgenrl.cxx
index 474eaa5b0feb..4245ac946e5a 100644
--- a/cui/source/options/optgenrl.cxx
+++ b/cui/source/options/optgenrl.cxx
@@ -341,6 +341,23 @@ std::unique_ptr<SfxTabPage> SvxGeneralTabPage::Create( 
weld::Container* pPage, w
     return std::make_unique<SvxGeneralTabPage>( pPage, pController, *rAttrSet 
);
 }
 
+OUString SvxGeneralTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[]
+        = { "label1",     "companyft",         "nameft",          "rusnameft",
+            "eastnameft", "streetft",          "russtreetft",     "icityft",
+            "cityft",     "countryft",         "titleft",         "phoneft",
+            "faxft",      "cryptographylabel", "signingkeylabel", 
"encryptionkeylabel" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    sAllStrings += m_xUseDataCB->get_label() + " " + 
m_xEncryptToSelfCB->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxGeneralTabPage::FillItemSet( SfxItemSet* )
 {
     // remove leading and trailing whitespaces
diff --git a/cui/source/options/opthtml.cxx b/cui/source/options/opthtml.cxx
index 18e3beceb8ef..15e4b39fb444 100644
--- a/cui/source/options/opthtml.cxx
+++ b/cui/source/options/opthtml.cxx
@@ -68,6 +68,24 @@ std::unique_ptr<SfxTabPage> OfaHtmlTabPage::Create( 
weld::Container* pPage, weld
     return std::make_unique<OfaHtmlTabPage>(pPage, pController, *rAttrSet);
 }
 
+OUString OfaHtmlTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1",  "label2",  "label3",  "size1FT", 
"size2FT",
+                          "size3FT", "size4FT", "size5FT", "size6FT", 
"size7FT" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "numbersenglishus", "unknowntag",     
"ignorefontnames", "starbasic",
+                               "starbasicwarning", "printextension", 
"savegrflocal" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OfaHtmlTabPage::FillItemSet( SfxItemSet* )
 {
     std::shared_ptr<comphelper::ConfigurationChanges> xChanges = 
comphelper::ConfigurationChanges::create();
diff --git a/cui/source/options/opthtml.hxx b/cui/source/options/opthtml.hxx
index 33bff167b87a..7cd3a5eaa674 100644
--- a/cui/source/options/opthtml.hxx
+++ b/cui/source/options/opthtml.hxx
@@ -49,6 +49,8 @@ public:
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController,
                                        const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 
diff --git a/cui/source/options/optinet2.cxx b/cui/source/options/optinet2.cxx
index cf879d056824..1d0ef95796bd 100644
--- a/cui/source/options/optinet2.cxx
+++ b/cui/source/options/optinet2.cxx
@@ -336,6 +336,18 @@ void SvxProxyTabPage::Reset(const SfxItemSet*)
     EnableControls_Impl();
 }
 
+OUString SvxProxyTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1",    "label2",     "httpft",      "httpsft", 
  "ftpft",
+                          "noproxyft", "httpportft", "httpsportft", 
"ftpportft", "noproxydesc" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxProxyTabPage::FillItemSet(SfxItemSet* )
 {
     bool bModified = false;
@@ -836,6 +848,33 @@ namespace
     }
 }
 
+OUString SvxSecurityTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1",         "label4",  "label2", 
"masterpasswordtext",
+                          "nopasswordsave", "label3",  "label5", "label8",
+                          "label7",         "label10", "label9", "label12",
+                          "label11" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "savepassword", "usemasterpassword" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    // TODO: Should we exclude button strings from the search?
+    // button id: "browse" is excluded
+    OUString buttons[]
+        = { "options", "connections", "masterpassword", "macro", "cert", 
"tsas" };
+
+    for (const auto& btn : buttons)
+        sAllStrings += m_xBuilder->weld_button(btn)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxSecurityTabPage::FillItemSet( SfxItemSet* )
 {
     bool bModified = false;
@@ -919,6 +958,19 @@ std::unique_ptr<SfxTabPage> SvxEMailTabPage::Create( 
weld::Container* pPage, wel
 
 /* -------------------------------------------------------------------------*/
 
+OUString SvxEMailTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "browsetitle", "suppress" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
+/* -------------------------------------------------------------------------*/
+
 bool SvxEMailTabPage::FillItemSet( SfxItemSet* )
 {
     std::shared_ptr<comphelper::ConfigurationChanges> batch(
diff --git a/cui/source/options/optinet2.hxx b/cui/source/options/optinet2.hxx
index 9fea6494aa4a..f99c30b0b12b 100644
--- a/cui/source/options/optinet2.hxx
+++ b/cui/source/options/optinet2.hxx
@@ -68,6 +68,9 @@ public:
     SvxProxyTabPage(weld::Container* pPage, weld::DialogController* 
pController, const SfxItemSet& rSet);
     virtual ~SvxProxyTabPage() override;
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
@@ -127,6 +130,9 @@ public:
     SvxSecurityTabPage(weld::Container* pPage, weld::DialogController* 
pController, const SfxItemSet& rSet);
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
     virtual ~SvxSecurityTabPage() override;
+
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
@@ -155,6 +161,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index 64ba41c3fe0b..60eba677c427 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -467,6 +467,27 @@ std::unique_ptr<SfxTabPage> 
SvxJavaOptionsPage::Create(weld::Container* pPage, w
     return std::make_unique<SvxJavaOptionsPage>(pPage, pController, *rAttrSet);
 }
 
+OUString SvxJavaOptionsPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "javapath", "selectruntime", 
"label12" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "javaenabled", "experimental", "macrorecording" 
};
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    OUString buttons[] = { "add", "parameters", "classpath", "expertconfig" };
+
+    for (const auto& btn : buttons)
+        sAllStrings += m_xBuilder->weld_button(btn)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxJavaOptionsPage::FillItemSet( SfxItemSet* /*rCoreSet*/ )
 {
     bool bModified = false;
diff --git a/cui/source/options/optjava.hxx b/cui/source/options/optjava.hxx
index 929dfe71738a..080c5bcb748b 100644
--- a/cui/source/options/optjava.hxx
+++ b/cui/source/options/optjava.hxx
@@ -108,6 +108,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool            FillItemSet( SfxItemSet* rSet ) override;
     virtual void            Reset( const SfxItemSet* rSet ) override;
     virtual void            FillUserData() override;
diff --git a/cui/source/options/optjsearch.cxx 
b/cui/source/options/optjsearch.cxx
index 4a2c31c49f76..d9f285b69c8c 100644
--- a/cui/source/options/optjsearch.cxx
+++ b/cui/source/options/optjsearch.cxx
@@ -201,6 +201,39 @@ void SvxJSearchOptionsPage::Reset( const SfxItemSet* )
     m_xIgnoreMiddleDot         ->save_state();
 }
 
+OUString SvxJSearchOptionsPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "matchcase",
+                               "matchfullhalfwidth",
+                               "matchhiraganakatakana",
+                               "matchcontractions",
+                               "matchminusdashchoon",
+                               "matchrepeatcharmarks",
+                               "matchvariantformkanji",
+                               "matcholdkanaforms",
+                               "ignorepunctuation",
+                               "ignorewhitespace",
+                               "matchdiziduzu",
+                               "matchbavahafa",
+                               "matchtsithichidhizi",
+                               "matchhyuiyubyuvyu",
+                               "matchseshezeje",
+                               "matchiaiya",
+                               "matchkiku",
+                               "matchprolongedsoundmark",
+                               "ignoremiddledot" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
 
 bool SvxJSearchOptionsPage::FillItemSet( SfxItemSet* )
 {
diff --git a/cui/source/options/optjsearch.hxx 
b/cui/source/options/optjsearch.hxx
index f0da350ae651..96b7d73f1f11 100644
--- a/cui/source/options/optjsearch.hxx
+++ b/cui/source/options/optjsearch.hxx
@@ -59,6 +59,8 @@ public:
     virtual ~SvxJSearchOptionsPage() override;
     static std::unique_ptr<SfxTabPage> Create(weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet);
 
+    virtual OUString GetAllStrings() override;
+
     virtual void        Reset( const SfxItemSet* rSet ) override;
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
 
diff --git a/cui/source/options/optlanguagetool.cxx 
b/cui/source/options/optlanguagetool.cxx
index e1f4806f47f3..9c8cccba9054 100644
--- a/cui/source/options/optlanguagetool.cxx
+++ b/cui/source/options/optlanguagetool.cxx
@@ -83,6 +83,26 @@ void OptLanguageToolTabPage::Reset(const SfxItemSet*)
     
m_xSSLDisableVerificationBox->set_active(!LanguageToolCfg::SSLCertVerify::get());
 }
 
+OUString OptLanguageToolTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "langtoolsettings", "disclaimer",  
"apisettingsheader", "base",
+                          "urldesc",          "usernamelbl", "usernamedesc",   
   "apikeylbl",
+                          "apikeydesc",       "restlbl",     "restdesc" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "activate", "verifyssl" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    sAllStrings += m_xBuilder->weld_link_button("policy")->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool OptLanguageToolTabPage::FillItemSet(SfxItemSet*)
 {
     auto batch(comphelper::ConfigurationChanges::create());
diff --git a/cui/source/options/optlanguagetool.hxx 
b/cui/source/options/optlanguagetool.hxx
index 2dbe889f57da..25781c612913 100644
--- a/cui/source/options/optlanguagetool.hxx
+++ b/cui/source/options/optlanguagetool.hxx
@@ -29,6 +29,8 @@ public:
     static std::unique_ptr<SfxTabPage>
     Create(weld::Container* pPage, weld::DialogController* pController, const 
SfxItemSet* rAttrSet);
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool FillItemSet(SfxItemSet* rSet) override;
     virtual void Reset(const SfxItemSet* rSet) override;
 
diff --git a/cui/source/options/optlingu.cxx b/cui/source/options/optlingu.cxx
index d13ca464bbe0..6bc7d5a7e0ed 100644
--- a/cui/source/options/optlingu.cxx
+++ b/cui/source/options/optlingu.cxx
@@ -921,6 +921,19 @@ std::unique_ptr<SfxTabPage> SvxLinguTabPage::Create( 
weld::Container* pPage, wel
     return std::make_unique<SvxLinguTabPage>( pPage, pController, *rAttrSet );
 }
 
+OUString SvxLinguTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "lingumodulesft", "lingudictsft", "label4" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    sAllStrings += m_xMoreDictsLink->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxLinguTabPage::FillItemSet( SfxItemSet* rCoreSet )
 {
     bool bModified = true; // !!!!
diff --git a/cui/source/options/optopencl.cxx b/cui/source/options/optopencl.cxx
index e85ef1d7e23a..866e84302e6c 100644
--- a/cui/source/options/optopencl.cxx
+++ b/cui/source/options/optopencl.cxx
@@ -50,6 +50,19 @@ std::unique_ptr<SfxTabPage> 
SvxOpenCLTabPage::Create(weld::Container* pPage, wel
     return std::make_unique<SvxOpenCLTabPage>(pPage, pController, *rAttrSet);
 }
 
+OUString SvxOpenCLTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "openclnotused", "openclused" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    sAllStrings += mxUseOpenCL->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxOpenCLTabPage::FillItemSet( SfxItemSet* )
 {
     bool bModified = false;
diff --git a/cui/source/options/optopencl.hxx b/cui/source/options/optopencl.hxx
index f7097d3fdba6..1fce5e3ea9aa 100644
--- a/cui/source/options/optopencl.hxx
+++ b/cui/source/options/optopencl.hxx
@@ -34,6 +34,7 @@ public:
     SvxOpenCLTabPage(weld::Container* pPage, weld::DialogController* 
pController, const SfxItemSet& rSet);
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet );
     virtual ~SvxOpenCLTabPage() override;
+    virtual OUString GetAllStrings() override;
 
     virtual bool            FillItemSet( SfxItemSet* rSet ) override;
     virtual void            Reset( const SfxItemSet* rSet ) override;
diff --git a/cui/source/options/optpath.cxx b/cui/source/options/optpath.cxx
index dfca56dfae59..bb77a5f4abdc 100644
--- a/cui/source/options/optpath.cxx
+++ b/cui/source/options/optpath.cxx
@@ -221,6 +221,12 @@ std::unique_ptr<SfxTabPage> SvxPathTabPage::Create( 
weld::Container* pPage, weld
     return std::make_unique<SvxPathTabPage>( pPage, pController, *rAttrSet );
 }
 
+OUString SvxPathTabPage::GetAllStrings()
+{
+    OUString sAllStrings = m_xBuilder->weld_label("label1")->get_label();
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxPathTabPage::FillItemSet( SfxItemSet* )
 {
     for (int i = 0, nEntryCount = m_xPathBox->n_children(); i < nEntryCount; 
++i)
diff --git a/cui/source/options/optsave.cxx b/cui/source/options/optsave.cxx
index 565d765a4f8a..2042c9ca9205 100644
--- a/cui/source/options/optsave.cxx
+++ b/cui/source/options/optsave.cxx
@@ -238,6 +238,26 @@ void SvxSaveTabPage::DetectHiddenControls()
 
 }
 
+OUString SvxSaveTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1", "label2", "autosave_mins", "label3",
+                          "label5", "label6", "saveas_label",  
"odfwarning_label" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[]
+        = { "load_settings", "load_docprinter", "load_anyuser",   "autosave",
+            "userautosave",  "docinfo",         "backup",         
"backupintodocumentfolder",
+            "relative_fsys", "relative_inet",   "warnalienformat" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxSaveTabPage::FillItemSet( SfxItemSet* rSet )
 {
     auto xChanges = comphelper::ConfigurationChanges::create();
diff --git a/cui/source/options/optsave.hxx b/cui/source/options/optsave.hxx
index a4cb7630892a..8d95b7c85981 100644
--- a/cui/source/options/optsave.hxx
+++ b/cui/source/options/optsave.hxx
@@ -74,6 +74,8 @@ public:
 
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rAttrSet );
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool        FillItemSet( SfxItemSet* rSet ) override;
     virtual void        Reset( const SfxItemSet* rSet ) override;
 };
diff --git a/cui/source/options/optupdt.cxx b/cui/source/options/optupdt.cxx
index faeac7f421c7..779856fa29b5 100644
--- a/cui/source/options/optupdt.cxx
+++ b/cui/source/options/optupdt.cxx
@@ -190,6 +190,31 @@ std::unique_ptr<SfxTabPage> 
SvxOnlineUpdateTabPage::Create( weld::Container* pPa
     return std::make_unique<SvxOnlineUpdateTabPage>( pPage, pController, 
*rAttrSet );
 }
 
+OUString SvxOnlineUpdateTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString labels[] = { "label1",        "lastchecked", "neverchecked",    
"labeldest",
+                          "destpathlabel", "labelagent",  "useragent_label", 
"useragent_changed" };
+
+    for (const auto& label : labels)
+        sAllStrings += m_xBuilder->weld_label(label)->get_label() + " ";
+
+    OUString checkButton[] = { "autocheck", "autodownload", "extrabits" };
+
+    for (const auto& check : checkButton)
+        sAllStrings += m_xBuilder->weld_check_button(check)->get_label() + " ";
+
+    OUString radioButton[] = { "everyday", "everyweek", "everymonth" };
+
+    for (const auto& radio : radioButton)
+        sAllStrings += m_xBuilder->weld_radio_button(radio)->get_label() + " ";
+
+    // some buttons are not included
+    sAllStrings += m_xPrivacyPolicyButton->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxOnlineUpdateTabPage::FillItemSet( SfxItemSet* )
 {
     bool bModified = false;
diff --git a/cui/source/options/optupdt.hxx b/cui/source/options/optupdt.hxx
index 7143bf333f65..bf2abfe38495 100644
--- a/cui/source/options/optupdt.hxx
+++ b/cui/source/options/optupdt.hxx
@@ -62,6 +62,8 @@ public:
     static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, 
weld::DialogController* pController, const SfxItemSet* rSet );
     virtual ~SvxOnlineUpdateTabPage() override;
 
+    virtual OUString GetAllStrings() override;
+
     virtual bool            FillItemSet( SfxItemSet* rSet ) override;
     virtual void            Reset( const SfxItemSet* rSet ) override;
     virtual void            FillUserData() override;
diff --git a/cui/source/options/personalization.cxx 
b/cui/source/options/personalization.cxx
index c1ee526574e6..5fe9a7db4c53 100644
--- a/cui/source/options/personalization.cxx
+++ b/cui/source/options/personalization.cxx
@@ -55,6 +55,19 @@ std::unique_ptr<SfxTabPage> 
SvxPersonalizationTabPage::Create(weld::Container* p
     return std::make_unique<SvxPersonalizationTabPage>(pPage, pController, 
*rSet);
 }
 
+OUString SvxPersonalizationTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString radioButton[] = { "no_persona", "default_persona" };
+
+    for (const auto& radio : radioButton)
+        sAllStrings += m_xBuilder->weld_radio_button(radio)->get_label() + " ";
+
+    sAllStrings += m_xBuilder->weld_label("personas_label")->get_label() + " ";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxPersonalizationTabPage::FillItemSet(SfxItemSet*)
 {
     // persona
diff --git a/cui/source/options/personalization.hxx 
b/cui/source/options/personalization.hxx
index 671f194c244b..b86653fc5d75 100644
--- a/cui/source/options/personalization.hxx
+++ b/cui/source/options/personalization.hxx
@@ -33,6 +33,8 @@ public:
     static std::unique_ptr<SfxTabPage>
     Create(weld::Container* pPage, weld::DialogController* pController, const 
SfxItemSet* rSet);
 
+    virtual OUString GetAllStrings() override;
+
     /// Apply the settings ([OK] button).
     virtual bool FillItemSet(SfxItemSet* rSet) override;
 
diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx
index 1b419f22ea21..4af68df0171a 100644
--- a/cui/source/options/treeopt.cxx
+++ b/cui/source/options/treeopt.cxx
@@ -66,6 +66,11 @@
 #include "optlanguagetool.hxx"
 #include "optdeepl.hxx"
 
+// include search util
+#include <com/sun/star/util/SearchFlags.hpp>
+#include <com/sun/star/util/SearchAlgorithms2.hpp>
+#include <unotools/textsearch.hxx>
+
 #include <com/sun/star/awt/XContainerWindowEventHandler.hpp>
 #include <com/sun/star/awt/ContainerWindowProvider.hpp>
 #include <com/sun/star/awt/XControl.hpp>
@@ -438,6 +443,23 @@ struct OptionsGroupInfo
         m_pModule( pMod ), m_nDialogId( nId ) {}
 };
 
+struct OptionsPageIdInfo
+{
+    OUString m_sParentName;
+    OUString m_sPageName;
+    sal_uInt16 m_nParentId;
+    sal_uInt16 m_nPageId;
+
+    OptionsPageIdInfo(OUString sParentName, OUString sPageName, sal_uInt16 
nParentId,
+                      sal_uInt16 nPageId)
+        : m_sParentName(std::move(sParentName))
+        , m_sPageName(std::move(sPageName))
+        , m_nParentId(nParentId)
+        , m_nPageId(nPageId)
+    {
+    }
+};
+
 // Basic ctor with common initialization
 OfaTreeOptionsDialog::OfaTreeOptionsDialog(weld::Window* pParent, bool 
fromExtensionManager)
     : SfxOkDialogController(pParent, "cui/ui/optionsdialog.ui", 
"OptionsDialog")
@@ -446,7 +468,10 @@ OfaTreeOptionsDialog::OfaTreeOptionsDialog(weld::Window* 
pParent, bool fromExten
     , xBackPB(m_xBuilder->weld_button("revert"))
     , xTreeLB(m_xBuilder->weld_tree_view("pages"))
     , xTabBox(m_xBuilder->weld_container("box"))
+    , m_xSearchEdit(m_xBuilder->weld_entry("searchEntry"))
     , m_pParent(pParent)
+    , m_aUpdateDataTimer("OfaTreeOptionsDialog UpdateDataTimer")
+    , bIsFirtsInitialize(true)
     , sTitle(m_xDialog->get_title())
     , bForgetSelection(false)
     , bIsFromExtensionManager(fromExtensionManager)
@@ -468,8 +493,19 @@ OfaTreeOptionsDialog::OfaTreeOptionsDialog(weld::Window* 
pParent, bool fromExten
     xBackPB->connect_clicked(LINK(this, OfaTreeOptionsDialog, BackHdl_Impl));
     xApplyPB->connect_clicked(LINK(this, OfaTreeOptionsDialog, ApplyHdl_Impl));
     xOkPB->connect_clicked(LINK(this, OfaTreeOptionsDialog, ApplyHdl_Impl));
+    m_xSearchEdit->connect_changed(LINK(this, OfaTreeOptionsDialog, 
SearchUpdateHdl));
+    m_xSearchEdit->connect_focus_out(LINK(this, OfaTreeOptionsDialog, 
FocusOut_Impl));
     m_xDialog->connect_help(LINK(this, OfaTreeOptionsDialog, HelpHdl_Impl));
 
+    m_aUpdateDataTimer.SetInvokeHandler(LINK(this, OfaTreeOptionsDialog, 
ImplUpdateDataHdl));
+    m_aUpdateDataTimer.SetTimeout(EDIT_UPDATEDATA_TIMEOUT);
+
+    // Initialize search util
+    m_options.AlgorithmType2 = util::SearchAlgorithms2::ABSOLUTE;
+    m_options.transliterateFlags |= TransliterationFlags::IGNORE_CASE;
+    m_options.searchFlag
+        |= (util::SearchFlags::REG_NOT_BEGINOFLINE | 
util::SearchFlags::REG_NOT_ENDOFLINE);
+
     xTreeLB->set_accessible_name(sTitle);
 }
 
@@ -739,6 +775,314 @@ IMPL_LINK(OfaTreeOptionsDialog, ApplyHdl_Impl, 
weld::Button&, rButton, void)
         m_xDialog->response(RET_OK);
 }
 
+IMPL_LINK_NOARG(OfaTreeOptionsDialog, FocusOut_Impl, weld::Widget&, void)
+{
+    if (m_aUpdateDataTimer.IsActive())
+    {
+        m_aUpdateDataTimer.Stop();
+        m_aUpdateDataTimer.Invoke();
+    }
+}
+
+IMPL_LINK_NOARG(OfaTreeOptionsDialog, SearchUpdateHdl, weld::Entry&, void)
+{
+    m_aUpdateDataTimer.Start();
+}
+
+IMPL_LINK_NOARG(OfaTreeOptionsDialog, ImplUpdateDataHdl, Timer*, void)
+{
+    if (bIsFirtsInitialize)
+    {
+        m_xSearchEdit->freeze();
+        xTreeLB->hide();
+
+        initializeFirstNDialog();
+
+        m_xSearchEdit->thaw();
+        xTreeLB->show();
+        bIsFirtsInitialize = false;
+    }
+
+    // Pause redraw
+    xTreeLB->freeze();
+
+    // Apply the search filter
+    OUString aSearchTerm(m_xSearchEdit->get_text());
+    int nMatchFound = applySearchFilter(aSearchTerm);
+
+    // Resume redraw
+    xTreeLB->thaw();
+
+    // select first child of first node after the search done
+    if (nMatchFound != -1)
+        selectFirstEntry();
+}
+
+void OfaTreeOptionsDialog::selectFirstEntry()
+{
+    std::unique_ptr<weld::TreeIter> xEntry;
+    std::unique_ptr<weld::TreeIter> xTemp = xTreeLB->make_iterator();
+    bool bTemp = xTreeLB->get_iter_first(*xTemp);
+
+    while (bTemp)
+    {
+        // select only the first child
+        if (xTreeLB->get_iter_depth(*xTemp) && 
xTreeLB->get_id(*xTemp).toInt64())
+        {
+            xEntry = xTreeLB->make_iterator(xTemp.get());
+
+            if (!xEntry)
+            {
+                xEntry = xTreeLB->make_iterator();
+                if (!xTreeLB->get_iter_first(*xEntry) || 
!xTreeLB->iter_next(*xEntry))
+                    xEntry.reset();
+            }
+
+            if (!xEntry)
+                return;
+
+            std::unique_ptr<weld::TreeIter> 
xParent(xTreeLB->make_iterator(xEntry.get()));
+            xTreeLB->iter_parent(*xParent);
+            xTreeLB->expand_row(*xParent);
+            xTreeLB->scroll_to_row(*xParent);
+            xTreeLB->scroll_to_row(*xEntry);
+            xTreeLB->set_cursor(*xEntry);
+            xTreeLB->select(*xEntry);
+            SelectHdl_Impl();
+
+            break;
+        }
+        bTemp = xTreeLB->iter_next(*xTemp);
+    }
+}
+
+void OfaTreeOptionsDialog::initializeFirstNDialog(sal_Int16 nNumberOfNode)
+{
+    std::unique_ptr<weld::TreeIter> xEntry;
+    sal_Int16 nCount = 0;
+
+    std::unique_ptr<weld::TreeIter> xTemp = xTreeLB->make_iterator();
+    bool bTemp = xTreeLB->get_iter_first(*xTemp);
+
+    while (bTemp)
+    {
+        if (xTreeLB->get_iter_depth(*xTemp) && 
xTreeLB->get_id(*xTemp).toInt64())
+        {
+            if (!(xEntry = xTreeLB->make_iterator(xTemp.get())))
+            {
+                xEntry = xTreeLB->make_iterator();
+                if (!xTreeLB->get_iter_first(*xEntry) || 
!xTreeLB->iter_next(*xEntry))
+                    xEntry.reset();
+            }
+
+            if (!xEntry)
+                return;
+
+            OptionsPageInfo* pPageInfo = 
weld::fromId<OptionsPageInfo*>(xTreeLB->get_id(*xEntry));
+            if 
(TreeOptHelper::getStringsFromDialog(pPageInfo->m_nPageId).isEmpty())
+            {
+                SolarMutexGuard aGuard;
+                initializeCurrentDialog(pPageInfo, xEntry);
+            }
+        }
+
+        /* if nNumberOfNode is -1 (which is the default value if no parameter 
provided),
+           this function will initialize all dialogs since nCount always 
greater than -1 */
+        if (nCount == nNumberOfNode)
+            break;
+
+        ++nCount;
+        bTemp = xTreeLB->iter_next(*xTemp);
+    }
+}
+
+void OfaTreeOptionsDialog::clearOptionsDialog()
+{
+    // clear and reset
+    std::unique_ptr<weld::TreeIter> xEntry = xTreeLB->make_iterator();
+    bool bEntry = xTreeLB->get_iter_first(*xEntry);
+
+    while (bEntry)
+    {
+        if (xTreeLB->get_iter_depth(*xEntry))
+        {
+            OptionsPageInfo* pPageInfo = 
weld::fromId<OptionsPageInfo*>(xTreeLB->get_id(*xEntry));
+            if (pPageInfo->m_xPage)
+                pPageInfo->m_xPage.reset();
+        }
+        bEntry = xTreeLB->iter_next(*xEntry);
+    }
+    xCurrentPageEntry.reset();
+}
+
+// store Options tree with their page names
+void OfaTreeOptionsDialog::storeOptionsTree()
+{
+    m_aTreePageIds.clear();
+
+    sal_uInt16 aParentId = 0;
+    OUString sParentName;
+
+    std::unique_ptr<weld::TreeIter> xEntry = xTreeLB->make_iterator();
+    bool bEntry = xTreeLB->get_iter_first(*xEntry);
+
+    while (bEntry)
+    {
+        OptionsGroupInfo* pGroupInfo = 
weld::fromId<OptionsGroupInfo*>(xTreeLB->get_id(*xEntry));
+        bool bIsParentNode = !xTreeLB->get_iter_depth(*xEntry);
+
+        if (bIsParentNode)
+        {
+            // Parent node
+            sParentName = xTreeLB->get_text(*xEntry);
+            aParentId = pGroupInfo->m_nDialogId;
+            m_aTreePageIds.push_back(new OptionsPageIdInfo(sParentName, 
sParentName, aParentId, 0));
+        }
+        else
+        {
+            // Child node
+            OUString sChildName = xTreeLB->get_text(*xEntry);
+            OptionsPageInfo* pPageInfo = 
weld::fromId<OptionsPageInfo*>(xTreeLB->get_id(*xEntry));
+            m_aTreePageIds.push_back(
+                new OptionsPageIdInfo(sParentName, sChildName, aParentId, 
pPageInfo->m_nPageId));
+        }
+        bEntry = xTreeLB->iter_next(*xEntry);
+    }
+}
+
+int OfaTreeOptionsDialog::applySearchFilter(const OUString& rSearchTerm)
+{
+    if (rSearchTerm.isEmpty())
+    {
+        clearOptionsDialog();
+        xTreeLB->clear();
+        Initialize(m_xFrame);
+
+        return 0;
+    }
+
+    m_options.searchString = rSearchTerm;
+    utl::TextSearch textSearch(m_options);
+
+    clearOptionsDialog();
+
+    if (xTreeLB->n_children() > 0)
+        xTreeLB->clear();
+
+    std::vector<std::pair<sal_uInt16, std::vector<sal_uInt16>>> 
aFoundIdsVector;
+
+    for (std::size_t i = 0; i < m_aTreePageIds.size(); ++i)
+    {
+        const OUString sParentName = m_aTreePageIds[i]->m_sParentName;
+        const OUString sPageName = m_aTreePageIds[i]->m_sPageName;
+        const sal_uInt16 nParentId = m_aTreePageIds[i]->m_nParentId;
+        const sal_uInt16 nPageId = m_aTreePageIds[i]->m_nPageId;
+
+        const OUString sPageStrings = 
TreeOptHelper::getStringsFromDialog(nPageId);
+        const OUString sPageNameAndStrings = sParentName + " " + sPageName + " 
" + sPageStrings;
+
+        sal_Int32 aStartPos = 0;
+        sal_Int32 aEndPos = sPageNameAndStrings.getLength();
+
+        // check if rSearchTerm matches with sPageNameAndStrings
+        if (textSearch.SearchForward(sPageNameAndStrings, &aStartPos, 
&aEndPos))
+        {
+            bool isFound = false;
+            for (auto& aEntryId : aFoundIdsVector)
+            {
+                if (aEntryId.first == nParentId)
+                {
+                    isFound = true;
+                    aEntryId.second.push_back(nPageId);
+                }
+            }
+
+            if (!isFound)
+                aFoundIdsVector.push_back({ nParentId, { nPageId } });
+        }
+    }
+
+    showDialog(aFoundIdsVector);
+
+    // if treeview is empty, return -1
+    return xTreeLB->n_children() ? 0 : -1;
+}
+
+void OfaTreeOptionsDialog::showDialog(VectorOfMatchedIds& pSearchIds)
+{
+    //
+    //     void generalOptions();      // SID_GENERAL_OPTIONS
+    //     void loadAndSaveOptions();  // SID_FILTER_DLG
+    //     void languageOptions();     // SID_LANGUAGE_OPTIONS
+    //     void writerOptions();       // SID_SW_EDITOPTIONS
+    //     void writerWebOptions();    // SID_SW_ONLINEOPTIONS
+    //     void calcOptions();         // SID_SC_EDITOPTIONS
+    //     void impressOptions();      // SID_SD_EDITOPTIONS
+    //     void drawOptions();         // SID_SD_GRAPHIC_OPTIONS
+    //     void mathOptions();         // SID_SM_EDITOPTIONS
+    //     void databaseOptions();     // SID_SB_STARBASEOPTIONS
+    //     void chartOptions();        // SID_SCH_EDITOPTIONS
+    //     void internetOptions();     // SID_INET_DLG
+    //
+
+    for (auto& aEntryId : pSearchIds)
+    {
+        switch (aEntryId.first)
+        {
+            case SID_GENERAL_OPTIONS:
+                generalOptions(aEntryId.second);
+                break;
+
+            case SID_FILTER_DLG:
+                loadAndSaveOptions(aEntryId.second);
+                break;
+
+            case SID_LANGUAGE_OPTIONS:
+                languageOptions(aEntryId.second);
+                break;
+
+            case SID_SW_EDITOPTIONS:
+                writerOptions(aEntryId.second);
+                break;
+
+            case SID_SW_ONLINEOPTIONS:
+                writerWebOptions(aEntryId.second);
+                break;
+
+            case SID_SC_EDITOPTIONS:
+                calcOptions(aEntryId.second);
+                break;
+
+            case SID_SD_EDITOPTIONS:
+                impressOptions(aEntryId.second);
+                break;
+
+            case SID_SD_GRAPHIC_OPTIONS:
+                drawOptions(aEntryId.second);
+                break;
+
+            case SID_SM_EDITOPTIONS:
+                mathOptions(aEntryId.second);
+                break;
+
+            case SID_SB_STARBASEOPTIONS:
+                databaseOptions(aEntryId.second);
+                break;
+
+            case SID_SCH_EDITOPTIONS:
+                chartOptions(aEntryId.second);
+                break;
+
+            case SID_INET_DLG:
+                internetOptions(aEntryId.second);
+                break;
+
+            default:
+                break;
+        }
+    }
+}
+
 void OfaTreeOptionsDialog::ApplyItemSets()
 {
     std::unique_ptr<weld::TreeIter> xEntry = xTreeLB->make_iterator();
@@ -850,7 +1194,13 @@ void OfaTreeOptionsDialog::ActivateLastSelection()
     xTreeLB->scroll_to_row(*xEntry);
     xTreeLB->set_cursor(*xEntry);
     xTreeLB->select(*xEntry);
-    xTreeLB->grab_focus();
+    m_xSearchEdit->grab_focus();
+    SelectHdl_Impl();
+
+    /* initialize first 25 dialogs which are almost half of the dialogs
+    in a row while Options dialog opens. then clear&reselect to avoid UI test 
failures. */
+    initializeFirstNDialog(25);
+    clearOptionsDialog();
     SelectHdl_Impl();
 }
 
@@ -866,6 +1216,70 @@ void OfaTreeOptionsDialog::InitItemSets(OptionsGroupInfo& 
rGroupInfo)
             rGroupInfo.m_pInItemSet->GetRanges());
 }
 
+void OfaTreeOptionsDialog::initializeCurrentDialog(OptionsPageInfo*& pPageInfo,
+                                                   
std::unique_ptr<weld::TreeIter>& xEntry)
+{
+    std::unique_ptr<weld::TreeIter> 
xParent(xTreeLB->make_iterator(xEntry.get()));
+    bool bParent = xTreeLB->iter_parent(*xParent);
+
+    if (!bParent)
+        return;
+
+    if (pPageInfo->m_xPage)
+    {
+        TreeOptHelper::storeStringsOfDialog(pPageInfo->m_nPageId,
+                                            
pPageInfo->m_xPage->GetAllStrings());
+        return;
+    }
+
+    OptionsGroupInfo* pGroupInfo = 
weld::fromId<OptionsGroupInfo*>(xTreeLB->get_id(*xParent));
+
+    if (!pPageInfo->m_xPage && pPageInfo->m_nPageId > 0)
+    {
+        InitItemSets(*pGroupInfo);
+
+        pPageInfo->m_xPage = ::CreateGeneralTabPage(pPageInfo->m_nPageId, 
xTabBox.get(), this,
+                                                    *pGroupInfo->m_pInItemSet);
+
+        if (!pPageInfo->m_xPage && pGroupInfo->m_pModule)
+            pPageInfo->m_xPage = pGroupInfo->m_pModule->CreateTabPage(
+                pPageInfo->m_nPageId, xTabBox.get(), this, 
*pGroupInfo->m_pInItemSet);
+
+        DBG_ASSERT(pPageInfo->m_xPage, "tabpage could not created");
+        if (pPageInfo->m_xPage)
+        {
+            SvtViewOptions aTabPageOpt(EViewType::TabPage, 
OUString::number(pPageInfo->m_nPageId));
+            pPageInfo->m_xPage->SetUserData(GetViewOptUserItem(aTabPageOpt));
+            pPageInfo->m_xPage->SetFrame(m_xFrame);
+            pPageInfo->m_xPage->Reset(&*pGroupInfo->m_pInItemSet);
+        }
+
+        TreeOptHelper::storeStringsOfDialog(pPageInfo->m_nPageId,
+                                            
pPageInfo->m_xPage->GetAllStrings());
+
+        pPageInfo->m_xPage->set_visible(false);
+    }
+    else if (0 == pPageInfo->m_nPageId && !pPageInfo->m_xExtPage)
+    {
+        if (!m_xContainerWinProvider.is())
+            m_xContainerWinProvider
+                = 
awt::ContainerWindowProvider::create(::comphelper::getProcessComponentContext());
+
+        pPageInfo->m_xExtPage = std::make_unique<ExtensionsTabPage>(
+            xTabBox.get(), pPageInfo->m_sPageURL, pPageInfo->m_sEventHdl, 
m_xContainerWinProvider);
+
+        pPageInfo->m_xExtPage->Hide();
+    }
+
+    BuilderPage* pNewPage = pPageInfo->m_xPage.get();
+
+    // fdo#58170 use current page's layout child HelpId, unless there isn't a 
current page
+    OUString sHelpId(pNewPage ? pNewPage->GetHelpId() : OUString());
+    if (sHelpId.isEmpty())
+        sHelpId = HID_OFADLG_TREELISTBOX;
+    xTreeLB->set_help_id(sHelpId);
+}
+
 void OfaTreeOptionsDialog::SelectHdl_Impl()
 {
     std::unique_ptr<weld::TreeIter> xEntry(xTreeLB->make_iterator());
@@ -1307,15 +1721,12 @@ OUString OfaTreeOptionsDialog::getCurrentFactory_Impl( 
const Reference< XFrame >
     return sIdentifier;
 }
 
-void OfaTreeOptionsDialog::Initialize( const Reference< XFrame >& _xFrame )
+void OfaTreeOptionsDialog::generalOptions(const std::vector<sal_uInt16>& 
vPageId)
 {
-    m_xFrame = _xFrame;
     sal_uInt16 nGroup = 0;
-
     SvtOptionsDialogOptions aOptionsDlgOpt;
-    sal_uInt16 nPageId;
+    sal_uInt16 nPageId = 0;
 
-    // %PRODUCTNAME options
     if ( !lcl_isOptionHidden( SID_GENERAL_OPTIONS, aOptionsDlgOpt ) )
     {
         setGroupName(u"ProductName", 
CuiResId(SID_GENERAL_OPTIONS_RES[0].first));
@@ -1351,11 +1762,23 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                     continue;
             }
 
-            AddTabPage( nPageId, sNewTitle, nGroup );
+            if (vPageId.size() != 0)
+            {
+                if (std::find(vPageId.begin(), vPageId.end(), nPageId) != 
vPageId.end())
+                    AddTabPage(nPageId, sNewTitle, nGroup);
+            }
+            else
+                AddTabPage(nPageId, sNewTitle, nGroup);
         }
     }
+}
+
+void OfaTreeOptionsDialog::loadAndSaveOptions(const std::vector<sal_uInt16>& 
vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
 
-    // Load and Save options
     if ( !lcl_isOptionHidden( SID_FILTER_DLG, aOptionsDlgOpt ) )
     {
         setGroupName( u"LoadSave", CuiResId(SID_FILTER_DLG_RES[0].first) );
@@ -1364,11 +1787,26 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
         {
             nPageId = static_cast<sal_uInt16>(SID_FILTER_DLG_RES[i].second);
             if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
-                AddTabPage( nPageId, CuiResId(SID_FILTER_DLG_RES[i].first), 
nGroup );
+            {
+                if (vPageId.size() != 0)
+                {
+                    if (std::find(vPageId.begin(), vPageId.end(), nPageId) != 
vPageId.end())
+                        AddTabPage(nPageId, 
CuiResId(SID_FILTER_DLG_RES[i].first), nGroup);
+                }
+                else
+                    AddTabPage(nPageId, CuiResId(SID_FILTER_DLG_RES[i].first), 
nGroup);
+            }
         }
     }
+}
 
-    // Language options
+void OfaTreeOptionsDialog::languageOptions(const std::vector<sal_uInt16>& 
vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
+
+    SvtCTLOptions aCTLLanguageOptions;
     if ( !lcl_isOptionHidden( SID_LANGUAGE_OPTIONS, aOptionsDlgOpt ) )
     {
         setGroupName(u"LanguageSettings", 
CuiResId(SID_LANGUAGE_OPTIONS_RES[0].first));
@@ -1389,14 +1827,28 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
             if ( ( RID_SVXPAGE_JSEARCH_OPTIONS != nPageId || 
SvtCJKOptions::IsJapaneseFindEnabled() ) &&
                  ( RID_SVXPAGE_ASIAN_LAYOUT != nPageId    || 
SvtCJKOptions::IsAsianTypographyEnabled() ) &&
                  ( RID_SVXPAGE_OPTIONS_CTL != nPageId     || 
SvtCTLOptions::IsCTLFontEnabled() ) )
-                AddTabPage(nPageId, 
CuiResId(SID_LANGUAGE_OPTIONS_RES[i].first), nGroup);
+            {
+                if (vPageId.size() != 0)
+                {
+                    if (std::find(vPageId.begin(), vPageId.end(), nPageId) != 
vPageId.end())
+                        AddTabPage(nPageId, 
CuiResId(SID_LANGUAGE_OPTIONS_RES[i].first), nGroup);
+                }
+                else
+                    AddTabPage(nPageId, 
CuiResId(SID_LANGUAGE_OPTIONS_RES[i].first), nGroup);
+            }
         }
     }
+}
 
-    OUString aFactory = getCurrentFactory_Impl( _xFrame );
-    DBG_ASSERT( GetModuleIdentifier( _xFrame ) == aFactory, "S H I T!!!" );
+void OfaTreeOptionsDialog::writerOptions(const std::vector<sal_uInt16>& 
vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
+
+    OUString aFactory = getCurrentFactory_Impl( m_xFrame );
+    DBG_ASSERT( GetModuleIdentifier( m_xFrame ) == aFactory, "S H I T!!!" );
 
-    // Writer and Writer/Web options
     SvtModuleOptions aModuleOpt;
     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::EModule::WRITER ) )
     {
@@ -1413,6 +1865,7 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                 else
                     setGroupName( u"Writer", 
CuiResId(SID_SW_EDITOPTIONS_RES[0].first) );
                 nGroup = AddGroup(CuiResId(SID_SW_EDITOPTIONS_RES[0].first), 
pSwMod, pSwMod, SID_SW_EDITOPTIONS );
+                SvtCTLOptions aCTLLanguageOptions;
                 for ( size_t i = 1; i < std::size(SID_SW_EDITOPTIONS_RES); ++i 
)
                 {
                     nPageId = 
static_cast<sal_uInt16>(SID_SW_EDITOPTIONS_RES[i].second);
@@ -1421,12 +1874,50 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                     if ( ( RID_SW_TP_STD_FONT_CJK != nPageId || 
SvtCJKOptions::IsCJKFontEnabled() ) &&
                          ( RID_SW_TP_STD_FONT_CTL != nPageId || 
SvtCTLOptions::IsCTLFontEnabled() ) &&
                          ( RID_SW_TP_MAILCONFIG != nPageId || 
MailMergeCfgIsEmailSupported() ) )
-                        AddTabPage( nPageId, 
CuiResId(SID_SW_EDITOPTIONS_RES[i].first), nGroup );
+                    {
+                        if (vPageId.size() != 0)
+                        {
+                            if (std::find(vPageId.begin(), vPageId.end(), 
nPageId) != vPageId.end())
+                                AddTabPage(nPageId, 
CuiResId(SID_SW_EDITOPTIONS_RES[i].first),
+                                           nGroup);
+                        }
+                        else
+                            AddTabPage(nPageId, 
CuiResId(SID_SW_EDITOPTIONS_RES[i].first), nGroup);
+                    }
                 }
 #ifdef DBG_UTIL
-                AddTabPage( RID_SW_TP_OPTTEST_PAGE, "Internal Test", nGroup );
+                if (vPageId.size() != 0)
+                {
+                    if (std::find(vPageId.begin(), vPageId.end(), 
RID_SW_TP_OPTTEST_PAGE)
+                        != vPageId.end())
+                        AddTabPage(RID_SW_TP_OPTTEST_PAGE, "Internal Test", 
nGroup);
+                }
+                else
+                    AddTabPage(RID_SW_TP_OPTTEST_PAGE, "Internal Test", 
nGroup);
 #endif
             }
+        }
+    }
+}
+
+void OfaTreeOptionsDialog::writerWebOptions(const std::vector<sal_uInt16>& 
vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
+
+    OUString aFactory = getCurrentFactory_Impl( m_xFrame );
+    DBG_ASSERT( GetModuleIdentifier( m_xFrame ) == aFactory, "S H I T!!!" );
+
+    SvtModuleOptions aModuleOpt;
+    if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::EModule::WRITER ) )
+    {
+        // text document
+        if (   aFactory == "com.sun.star.text.TextDocument"
+            || aFactory == "com.sun.star.text.WebDocument"
+            || aFactory == "com.sun.star.text.GlobalDocument" )
+        {
+            SfxModule* pSwMod = 
SfxApplication::GetModule(SfxToolsModule::Writer);
 
             // HTML documents
             if ( !lcl_isOptionHidden( SID_SW_ONLINEOPTIONS, aOptionsDlgOpt ) )
@@ -1436,15 +1927,43 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                 {
                     nPageId = 
static_cast<sal_uInt16>(SID_SW_ONLINEOPTIONS_RES[i].second);
                     if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
-                        AddTabPage(nPageId, 
CuiResId(SID_SW_ONLINEOPTIONS_RES[i].first), nGroup);
+                    {
+                        if (vPageId.size() != 0)
+                        {
+                            if (std::find(vPageId.begin(), vPageId.end(), 
nPageId) != vPageId.end())
+                                AddTabPage(nPageId, 
CuiResId(SID_SW_ONLINEOPTIONS_RES[i].first),
+                                           nGroup);
+                        }
+                        else
+                            AddTabPage(nPageId, 
CuiResId(SID_SW_ONLINEOPTIONS_RES[i].first),
+                                       nGroup);
+                    }
                 }
 #ifdef DBG_UTIL
-                AddTabPage( RID_SW_TP_OPTTEST_PAGE, "Internal Test", nGroup );
+                if (vPageId.size() != 0)
+                {
+                    if (std::find(vPageId.begin(), vPageId.end(), 
RID_SW_TP_OPTTEST_PAGE)
+                        != vPageId.end())
+                        AddTabPage(RID_SW_TP_OPTTEST_PAGE, "Internal Test", 
nGroup);
+                }
+                else
+                    AddTabPage(RID_SW_TP_OPTTEST_PAGE, "Internal Test", 
nGroup);
 #endif
             }
         }
     }
+}
+
+void OfaTreeOptionsDialog::calcOptions(const std::vector<sal_uInt16>& vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
 
+    OUString aFactory = getCurrentFactory_Impl( m_xFrame );
+    DBG_ASSERT( GetModuleIdentifier( m_xFrame ) == aFactory, "S H I T!!!" );
+
+    SvtModuleOptions aModuleOpt;
     // Calc options
     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::EModule::CALC ) )
     {
@@ -1462,11 +1981,28 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                     if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
                         continue;
 
-                    AddTabPage( nPageId, 
CuiResId(SID_SC_EDITOPTIONS_RES[i].first), nGroup );
+                    if (vPageId.size() != 0)
+                    {
+                        if (std::find(vPageId.begin(), vPageId.end(), nPageId) 
!= vPageId.end())
+                            AddTabPage(nPageId, 
CuiResId(SID_SC_EDITOPTIONS_RES[i].first), nGroup);
+                    }
+                    else
+                        AddTabPage(nPageId, 
CuiResId(SID_SC_EDITOPTIONS_RES[i].first), nGroup);
                 }
             }
         }
     }
+}
+
+void OfaTreeOptionsDialog::impressOptions(const std::vector<sal_uInt16>& 
vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
+
+    OUString aFactory = getCurrentFactory_Impl( m_xFrame );
+    DBG_ASSERT( GetModuleIdentifier( m_xFrame ) == aFactory, "S H I T!!!" );
+    SvtModuleOptions aModuleOpt;
 
     // Impress options
     SfxModule* pSdMod = SfxApplication::GetModule( SfxToolsModule::Draw );
@@ -1485,13 +2021,31 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                     if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
                         continue;
 
-                    AddTabPage( nPageId, 
CuiResId(SID_SD_EDITOPTIONS_RES[i].first), nGroup );
+                    if (vPageId.size() != 0)
+                    {
+                        if (std::find(vPageId.begin(), vPageId.end(), nPageId) 
!= vPageId.end())
+                            AddTabPage(nPageId, 
CuiResId(SID_SD_EDITOPTIONS_RES[i].first), nGroup);
+                    }
+                    else
+                        AddTabPage(nPageId, 
CuiResId(SID_SD_EDITOPTIONS_RES[i].first), nGroup);
                 }
             }
         }
     }
+}
+
+void OfaTreeOptionsDialog::drawOptions(const std::vector<sal_uInt16>& vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
+
+    OUString aFactory = getCurrentFactory_Impl( m_xFrame );
+    DBG_ASSERT( GetModuleIdentifier( m_xFrame ) == aFactory, "S H I T!!!" );
+    SvtModuleOptions aModuleOpt;
 
     // Draw options
+    SfxModule* pSdMod = SfxApplication::GetModule(SfxToolsModule::Draw);
     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::EModule::DRAW ) )
     {
         if ( aFactory == "com.sun.star.drawing.DrawingDocument" )
@@ -1507,11 +2061,29 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                     if ( lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
                         continue;
 
-                    AddTabPage( nPageId, 
CuiResId(SID_SD_GRAPHIC_OPTIONS_RES[i].first), nGroup );
+                    if (vPageId.size() != 0)
+                    {
+                        if (std::find(vPageId.begin(), vPageId.end(), nPageId) 
!= vPageId.end())
+                            AddTabPage(nPageId, 
CuiResId(SID_SD_GRAPHIC_OPTIONS_RES[i].first),
+                                       nGroup);
+                    }
+                    else
+                        AddTabPage(nPageId, 
CuiResId(SID_SD_GRAPHIC_OPTIONS_RES[i].first), nGroup);
                 }
             }
         }
     }
+}
+
+void OfaTreeOptionsDialog::mathOptions(const std::vector<sal_uInt16>& vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
+
+    OUString aFactory = getCurrentFactory_Impl( m_xFrame );
+    DBG_ASSERT( GetModuleIdentifier( m_xFrame ) == aFactory, "S H I T!!!" );
+    SvtModuleOptions aModuleOpt;
 
     // Math options
     if ( aModuleOpt.IsModuleInstalled( SvtModuleOptions::EModule::MATH ) )
@@ -1527,11 +2099,29 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
                 {
                     nPageId = 
static_cast<sal_uInt16>(SID_SM_EDITOPTIONS_RES[i].second);
                     if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
-                        AddTabPage( nPageId, 
CuiResId(SID_SM_EDITOPTIONS_RES[i].first), nGroup );
+                    {
+                        if (vPageId.size() != 0)
+                        {
+                            if (std::find(vPageId.begin(), vPageId.end(), 
nPageId) != vPageId.end())
+                                AddTabPage(nPageId, 
CuiResId(SID_SM_EDITOPTIONS_RES[i].first),
+                                           nGroup);
+                        }
+                        else
+                            AddTabPage(nPageId, 
CuiResId(SID_SM_EDITOPTIONS_RES[i].first), nGroup);
+                    }
                 }
             }
         }
     }
+}
+
+void OfaTreeOptionsDialog::databaseOptions(const std::vector<sal_uInt16>& 
vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
+
+    SvtModuleOptions aModuleOpt;
 
     // Database - needed only if there is an application which integrates with 
databases
     if ( !lcl_isOptionHidden( SID_SB_STARBASEOPTIONS, aOptionsDlgOpt ) &&
@@ -1546,11 +2136,25 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
         {
             nPageId = 
static_cast<sal_uInt16>(SID_SB_STARBASEOPTIONS_RES[i].second);
             if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
-                AddTabPage( nPageId, 
CuiResId(SID_SB_STARBASEOPTIONS_RES[i].first), nGroup );
+            {
+                if (vPageId.size() != 0)
+                {
+                    if (std::find(vPageId.begin(), vPageId.end(), nPageId) != 
vPageId.end())
+                        AddTabPage(nPageId, 
CuiResId(SID_SB_STARBASEOPTIONS_RES[i].first), nGroup);
+                }
+                else
+                    AddTabPage(nPageId, 
CuiResId(SID_SB_STARBASEOPTIONS_RES[i].first), nGroup);
+            }
         }
     }
+}
+
+void OfaTreeOptionsDialog::chartOptions(const std::vector<sal_uInt16>& vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
 
-    // Chart options (always installed and active)
     if ( !lcl_isOptionHidden( SID_SCH_EDITOPTIONS, aOptionsDlgOpt ) )
     {
         setGroupName( u"Charts", CuiResId(SID_SCH_EDITOPTIONS_RES[0].first) );
@@ -1559,11 +2163,25 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
         {
             nPageId = 
static_cast<sal_uInt16>(SID_SCH_EDITOPTIONS_RES[i].second);
             if ( !lcl_isOptionHidden( nPageId, aOptionsDlgOpt ) )
-               AddTabPage( nPageId, 
CuiResId(SID_SCH_EDITOPTIONS_RES[i].first), nGroup );
+            {
+                if (vPageId.size() != 0)
+                {
+                    if (std::find(vPageId.begin(), vPageId.end(), nPageId) != 
vPageId.end())
+                        AddTabPage(nPageId, 
CuiResId(SID_SCH_EDITOPTIONS_RES[i].first), nGroup);
+                }
+                else
+                    AddTabPage(nPageId, 
CuiResId(SID_SCH_EDITOPTIONS_RES[i].first), nGroup);
+            }
         }
     }
+}
+
+void OfaTreeOptionsDialog::internetOptions(const std::vector<sal_uInt16>& 
vPageId)
+{
+    sal_uInt16 nGroup = 0;
+    SvtOptionsDialogOptions aOptionsDlgOpt;
+    sal_uInt16 nPageId = 0;
 
-    // Internet options
     if ( lcl_isOptionHidden( SID_INET_DLG, aOptionsDlgOpt ) )
         return;
 
@@ -1580,10 +2198,59 @@ void OfaTreeOptionsDialog::Initialize( const Reference< 
XFrame >& _xFrame )
         if ( nPageId == RID_SVXPAGE_INET_MAIL )
             continue;
 #endif
-        AddTabPage( nPageId, CuiResId(SID_INET_DLG_RES[i].first), nGroup );
+        if (vPageId.size() != 0)
+        {
+            if (std::find(vPageId.begin(), vPageId.end(), nPageId) != 
vPageId.end())
+                AddTabPage(nPageId, CuiResId(SID_INET_DLG_RES[i].first), 
nGroup);
+        }
+        else
+            AddTabPage(nPageId, CuiResId(SID_INET_DLG_RES[i].first), nGroup);
     }
 }
 
+void OfaTreeOptionsDialog::Initialize(const Reference<XFrame>& _xFrame)
+{
+    m_xFrame = _xFrame;
+
+    // %PRODUCTNAME options
+    generalOptions();
+
+    // Load and Save options
+    loadAndSaveOptions();
+
+    // Language options
+    languageOptions();
+
+    // Writer and Writer/Web options
+    writerOptions();
+    writerWebOptions();
+
+    // Calc options
+    calcOptions();
+
+    // Impress options
+    impressOptions();
+
+    // Draw options
+    drawOptions();
+
+    // Math options
+    mathOptions();
+
+    // Database - needed only if there is an application which integrates with 
databases
+    databaseOptions();
+
+    // Chart options (always installed and active)
+    chartOptions();
+
+    // Internet options
+    internetOptions();
+
+    // store Options Dialogs with their page names and strings
+    // in order to use them when searching
+    storeOptionsTree();
+}
+
 static bool isNodeActive( OptionsNode const * pNode, Module* pModule )
 {
     if ( !pNode )
diff --git a/cui/source/options/treeopthelper.cxx 
b/cui/source/options/treeopthelper.cxx
new file mode 100644
index 000000000000..e486dbb5ea30
--- /dev/null
+++ b/cui/source/options/treeopthelper.cxx
@@ -0,0 +1,184 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ *   Licensed to the Apache Software Foundation (ASF) under one or more
+ *   contributor license agreements. See the NOTICE file distributed
+ *   with this work for additional information regarding copyright
+ *   ownership. The ASF licenses this file to you under the Apache
+ *   License, Version 2.0 (the "License"); you may not use this file
+ *   except in compliance with the License. You may obtain a copy of
+ *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <fstream>
+#include <treeopt.hxx>
+
+#include <treeopt.hrc>
+#include <helpids.h>
+#include <svx/dialogs.hrc>
+#include <svx/svxids.hrc>
+
+namespace
+{
+struct PageIdToFileNameMap_Impl
+{
+    sal_uInt16 m_nPageId;
+    OUString m_sContent;
+};
+}
+
+static PageIdToFileNameMap_Impl FileMap_Impl[] = {
+
+    // { PAGE-ID, CONTENT },
+
+    // ProductName, SID_GENERAL_OPTIONS
+    { RID_SFXPAGE_GENERAL, "" }, // UserData
+
+    { OFA_TP_MISC, "" }, // General
+
+    { OFA_TP_VIEW, "" }, // View
+
+    { RID_SFXPAGE_PRINTOPTIONS, "" }, // Print
+
+    { RID_SFXPAGE_PATH, "" }, // Paths
+
+    { RID_SVX_FONT_SUBSTITUTION, "" }, // Fonts
+
+    { RID_SVXPAGE_INET_SECURITY, "" }, // Security
+
+    { RID_SVXPAGE_PERSONALIZATION, "" }, // Personalization
+    { RID_SVXPAGE_COLORCONFIG, "" }, // ApplicationColors
+    { RID_SVXPAGE_ACCESSIBILITYCONFIG, "" }, // Accessibility
+    { RID_SVXPAGE_OPTIONS_JAVA, "" }, // Java
+    { RID_SVXPAGE_BASICIDE_OPTIONS, "" }, // BasicIDEOptions
+    { RID_SVXPAGE_ONLINEUPDATE, "" }, // OnlineUpdate
+    { RID_SVXPAGE_OPENCL, "" }, // OpenCL
+
+    // LanguageSettings, SID_LANGUAGE_OPTIONS
+    { OFA_TP_LANGUAGES, "" }, // Languages
+    { RID_SFXPAGE_LINGU, "" }, // WritingAids
+    { RID_SVXPAGE_JSEARCH_OPTIONS, "" }, // SearchingInJapanese
+    { RID_SVXPAGE_ASIAN_LAYOUT, "" }, // AsianLayout
+    { RID_SVXPAGE_OPTIONS_CTL, "" }, // ComplexTextLayout
+    { RID_SVXPAGE_LANGTOOL_OPTIONS, "" }, // LanguageTool Server
+    { RID_SVXPAGE_DEEPL_OPTIONS, "" }, // DeepL Server
+
+    // Internet, SID_INET_DLG
+    { RID_SVXPAGE_INET_PROXY, "" }, // Proxy
+    { RID_SVXPAGE_INET_MAIL, "" }, // Email
+
+    // Load/Save, SID_FILTER_DLG
+    { RID_SFXPAGE_SAVE, "" }, // General
+    { SID_OPTFILTER_MSOFFICE, "" }, // VBA Properties
+    { RID_OFAPAGE_MSFILTEROPT2, "" }, // Microsoft Office
+    { RID_OFAPAGE_HTMLOPT, "" }, // HTML Compatibility
+
+    // Writer, SID_SW_EDITOPTIONS
+    { RID_SW_TP_OPTLOAD_PAGE, "" }, // General
+    { RID_SW_TP_CONTENT_OPT, "" }, // View
+    { RID_SW_TP_OPTSHDWCRSR, "" }, // FormattingAids
+    { RID_SVXPAGE_GRID, "" }, // Grid
+    { RID_SW_TP_STD_FONT, "" }, // BasicFontsWestern
+    { RID_SW_TP_STD_FONT_CJK, "" }, // BasicFontsAsian
+    { RID_SW_TP_STD_FONT_CTL, "" }, // BasicFontsCTL
+    { RID_SW_TP_OPTPRINT_PAGE, "" }, // Print
+    { RID_SW_TP_OPTTABLE_PAGE, "" }, // Table
+    { RID_SW_TP_REDLINE_OPT, "" }, // Changes
+    { RID_SW_TP_COMPARISON_OPT, "" }, // Comparison
+    { RID_SW_TP_OPTCOMPATIBILITY_PAGE, "" }, // Compatibility
+    { RID_SW_TP_OPTCAPTION_PAGE, "" }, // AutoCaption
+    { RID_SW_TP_MAILCONFIG, "" }, // MailMerge
+    { RID_SW_TP_OPTTEST_PAGE, "" }, // Internal Test (only in dev build)
+
+    // WriterWeb, SID_SW_ONLINEOPTIONS
+    { RID_SW_TP_HTML_CONTENT_OPT, "" }, // View
+    { RID_SW_TP_HTML_OPTSHDWCRSR, "" }, // FormattingAids
+    { RID_SW_TP_HTML_OPTGRID_PAGE, "" }, // Grid
+    { RID_SW_TP_HTML_OPTPRINT_PAGE, "" }, // Print
+    { RID_SW_TP_HTML_OPTTABLE_PAGE, "" }, // Table
+    { RID_SW_TP_BACKGROUND, "" }, // Background
+    { RID_SW_TP_OPTTEST_PAGE, "" }, // Internal Test (only in dev build)
+
+    // Math, SID_SM_EDITOPTIONS
+    { SID_SM_TP_PRINTOPTIONS, "" }, // Settings
+
+    // Calc, SID_SC_EDITOPTIONS
+    { SID_SC_TP_LAYOUT, "" }, // General
+    { RID_SC_TP_DEFAULTS, "" }, // Defaults
+    { SID_SC_TP_CONTENT, "" }, // View
+    { SID_SC_TP_CALC, "" }, // Calculate
+    { SID_SC_TP_FORMULA, "" }, // Formula
+    { SID_SC_TP_USERLISTS, "" }, // SortLists
+    { SID_SC_TP_CHANGES, "" }, // Changes
+    { SID_SC_TP_COMPATIBILITY, "" }, // Compatibility
+    { SID_SC_TP_GRID, "" }, // Grid
+    { RID_SC_TP_PRINT, "" }, // Print
+
+    // Impress, SID_SD_EDITOPTIONS
+    { SID_SI_TP_MISC, "" }, // General
+    { SID_SI_TP_CONTENTS, "" }, // View
+    { SID_SI_TP_SNAP, "" }, // Grid
+    { SID_SI_TP_PRINT, "" }, // Print
+
+    // Draw, SID_SD_GRAPHIC_OPTIONS
+    { SID_SD_TP_MISC, "" }, // General
+    { SID_SD_TP_CONTENTS, "" }, // View
+    { SID_SD_TP_SNAP, "" }, // Grid
+    { SID_SD_TP_PRINT, "" }, // Print
+
+    // Charts, SID_SCH_EDITOPTIONS
+    { RID_OPTPAGE_CHART_DEFCOLORS, "" }, // DefaultColor
+
+    // Base, SID_SB_STARBASEOPTIONS
+    { SID_SB_CONNECTIONPOOLING, "" }, // Connections
+    { SID_SB_DBREGISTEROPTIONS, "" } // Databases
+};
+
+void TreeOptHelper::storeStringsOfDialog(sal_uInt16 nPageId, const OUString& 
sPageStrings)
+{
+    for (PageIdToFileNameMap_Impl& rEntry : FileMap_Impl)
+    {
+        if (rEntry.m_nPageId == nPageId)
+        {
+            rEntry.m_sContent = sPageStrings.replaceAll("~", "");
+            break;
+        }
+    }
+}
+
+/*
+return the strings of:
+- labels,
+- check buttons,
+- radio buttons,
+- toggle buttons,
+- link buttons,
+- buttons
+
+TODO:
+- accessible-names
+- accessible-descriptions
+- tooltip-texts
+*/
+OUString TreeOptHelper::getStringsFromDialog(sal_uInt16 nPageId)
+{
+    if (nPageId == 0)
+        return OUString();
+
+    for (PageIdToFileNameMap_Impl& rEntry : FileMap_Impl)
+    {
+        if (rEntry.m_nPageId == nPageId)
+            return rEntry.m_sContent;
+    }
+
+    return OUString();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/cui/source/tabpages/tparea.cxx b/cui/source/tabpages/tparea.cxx
index d1ece1c0e4d4..23946aa7c4b7 100644
--- a/cui/source/tabpages/tparea.cxx
+++ b/cui/source/tabpages/tparea.cxx
@@ -281,6 +281,18 @@ bool SvxAreaTabPage::FillItemSet_Impl( SfxItemSet* rAttrs)
     return static_cast<TTabPage&>( *m_xFillTabPage ).FillItemSet( rAttrs );
 }
 
+OUString SvxAreaTabPage::GetAllStrings()
+{
+    OUString sAllStrings;
+    OUString toggleButton[] = { "btnnone",    "btncolor", "btngradient",     
"btnbitmap",
+                                "btnpattern", "btnhatch", "btnusebackground" };
+
+    for (const auto& toggle : toggleButton)
+        sAllStrings += m_xBuilder->weld_toggle_button(toggle)->get_label() + " 
";
+
+    return sAllStrings.replaceAll("_", "");
+}
+
 bool SvxAreaTabPage::FillItemSet( SfxItemSet* rAttrs )
 {
     FillType eFillType = static_cast<FillType>(maBox.GetCurrentButtonPos());
diff --git a/cui/uiconfig/ui/optionsdialog.ui b/cui/uiconfig/ui/optionsdialog.ui
index 33b1b99ed501..06fe41605dfa 100644
--- a/cui/uiconfig/ui/optionsdialog.ui
+++ b/cui/uiconfig/ui/optionsdialog.ui
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2 -->
+<!-- Generated with glade 3.40.0 -->
 <interface domain="cui">
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkTreeStore" id="liststore1">
@@ -137,37 +137,72 @@
             <property name="vexpand">True</property>
             <property name="spacing">6</property>
             <child>
-              <object class="GtkScrolledWindow">
+              <object class="GtkBox" id="box3">
                 <property name="visible">True</property>
-                <property name="can-focus">True</property>
+                <property name="can-focus">False</property>
                 <property name="vexpand">True</property>
-                <property name="shadow-type">in</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">4</property>
                 <child>
-                  <object class="GtkTreeView" id="pages">
-                    <property name="width-request">-1</property>
+                  <object class="GtkEntry" id="searchEntry">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="receives-default">True</property>
-                    <property name="vexpand">True</property>
-                    <property name="model">liststore1</property>
-                    <property name="headers-visible">False</property>
-                    <property name="search-column">0</property>
-                    <property name="enable-tree-lines">True</property>
-                    <child internal-child="selection">
-                      <object class="GtkTreeSelection" id="Macro Library 
List-selection1"/>
+                    <property name="valign">start</property>
+                    <property name="truncate-multiline">True</property>
+                    <property name="placeholder-text">Type to search</property>
+                    <child internal-child="accessible">
+                      <object class="AtkObject" id="searchEntry-atkobject">
+                        <property 
name="AtkObject::accessible-description">Type here to search in the list of 
options.</property>
+                      </object>
                     </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkScrolledWindow">
+                    <property name="visible">True</property>
+                    <property name="can-focus">True</property>
+                    <property name="halign">baseline</property>
+                    <property name="valign">baseline</property>
+                    <property name="vexpand">True</property>
+                    <property name="shadow-type">in</property>
                     <child>
-                      <object class="GtkTreeViewColumn" id="treeviewcolumn2">
-                        <property name="spacing">6</property>
+                      <object class="GtkTreeView" id="pages">
+                        <property name="width-request">-1</property>
+                        <property name="visible">True</property>
+                        <property name="can-focus">True</property>
+                        <property name="receives-default">True</property>
+                        <property name="vexpand">True</property>
+                        <property name="model">liststore1</property>
+                        <property name="headers-visible">False</property>
+                        <property name="search-column">0</property>
+                        <property name="enable-tree-lines">True</property>
+                        <child internal-child="selection">
+                          <object class="GtkTreeSelection"/>
+                        </child>
                         <child>
-                          <object class="GtkCellRendererText" 
id="cellrenderertext2"/>
-                          <attributes>
-                            <attribute name="text">0</attribute>

... etc. - the rest is truncated

Reply via email to