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