include/vcl/weld.hxx             |    7 +++++++
 vcl/inc/qt5/QtInstanceWidget.hxx |    2 ++
 vcl/inc/salvtables.hxx           |    1 +
 vcl/qt5/QtInstanceWidget.cxx     |    2 ++
 vcl/source/app/salvtables.cxx    |    5 +++++
 vcl/unx/gtk3/gtkinst.cxx         |    5 +++++
 6 files changed, 22 insertions(+)

New commits:
commit ee749f4b43fea3b666c9c3613b232bc8fecf73fa
Author:     Moritz Duge <moritz.d...@allotropia.de>
AuthorDate: Tue Aug 6 16:47:30 2024 +0200
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Wed Aug 7 09:28:33 2024 +0200

    add polymorph function for VCL/ui specific string escaping
    
    Change-Id: Ie896a1050158acc85f66b8705812e5f6b9717070
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/171509
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>
    Tested-by: Jenkins

diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 434f4f3e2d5e..ed4aedb3d59a 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -333,6 +333,13 @@ public:
 
     virtual OUString strip_mnemonic(const OUString& rLabel) const = 0;
 
+    /* Escapes string contents which are interpreted by the UI.
+
+       Should be overwritten by each VCL implementation to account for the
+       string contents which are interpreted by it's ui.
+    */
+    virtual OUString escape_ui_str(const OUString& rLabel) const = 0;
+
     virtual VclPtr<VirtualDevice> create_virtual_device() const = 0;
 
     //do something transient to attract the attention of the user to the widget
diff --git a/vcl/inc/qt5/QtInstanceWidget.hxx b/vcl/inc/qt5/QtInstanceWidget.hxx
index ebe816fa8c42..e7f51c97a969 100644
--- a/vcl/inc/qt5/QtInstanceWidget.hxx
+++ b/vcl/inc/qt5/QtInstanceWidget.hxx
@@ -150,6 +150,8 @@ public:
 
     virtual OUString strip_mnemonic(const OUString&) const override;
 
+    virtual OUString escape_ui_str(const OUString&) const override;
+
     virtual VclPtr<VirtualDevice> create_virtual_device() const override;
 
     virtual css::uno::Reference<css::datatransfer::dnd::XDropTarget> 
get_drop_target() override;
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 3c6112c4299e..200e0ef36bf5 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -380,6 +380,7 @@ public:
     virtual void help_hierarchy_foreach(const std::function<bool(const 
OUString&)>& func) override;
 
     virtual OUString strip_mnemonic(const OUString& rLabel) const override;
+    virtual OUString escape_ui_str(const OUString& rLabel) const override;
 
     virtual VclPtr<VirtualDevice> create_virtual_device() const override;
 
diff --git a/vcl/qt5/QtInstanceWidget.cxx b/vcl/qt5/QtInstanceWidget.cxx
index c3a5009659b3..35bfb4c2cca1 100644
--- a/vcl/qt5/QtInstanceWidget.cxx
+++ b/vcl/qt5/QtInstanceWidget.cxx
@@ -229,6 +229,8 @@ void QtInstanceWidget::help_hierarchy_foreach(const 
std::function<bool(const OUS
 
 OUString QtInstanceWidget::strip_mnemonic(const OUString&) const { return 
OUString(); }
 
+OUString QtInstanceWidget::escape_ui_str(const OUString&) const { return 
OUString(); }
+
 VclPtr<VirtualDevice> QtInstanceWidget::create_virtual_device() const { return 
nullptr; }
 
 css::uno::Reference<css::datatransfer::dnd::XDropTarget> 
QtInstanceWidget::get_drop_target()
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index c609a8ae582e..7e2a81f2cef4 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -674,6 +674,11 @@ OUString SalInstanceWidget::strip_mnemonic(const OUString& 
rLabel) const
     return rLabel.replaceFirst("~", "");
 }
 
+OUString SalInstanceWidget::escape_ui_str(const OUString& rLabel) const
+{
+    return rLabel.replaceAll("~", "~~");
+}
+
 VclPtr<VirtualDevice> SalInstanceWidget::create_virtual_device() const
 {
     // create with (annoying) separate alpha layer that LibreOffice itself uses
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 804703b505b2..3b126c094035 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -4461,6 +4461,11 @@ public:
         return rLabel.replaceFirst("_", "");
     }
 
+    virtual OUString escape_ui_str(const OUString &rLabel) const override
+    {
+        return rLabel.replaceAll("_", "__");
+    }
+
     virtual VclPtr<VirtualDevice> create_virtual_device() const override
     {
         // create with no separate alpha layer like everything sane does

Reply via email to