[Libreoffice-commits] core.git: sfx2/inc sfx2/source
Tomaž Vajngerl (via logerrit)
logerrit at kemper.freedesktop.org
Mon May 31 03:31:00 UTC 2021
sfx2/inc/commandpopup/CommandPopup.hxx | 11 +++++++++-
sfx2/source/commandpopup/CommandPopup.cxx | 32 +++++++++++++++++++-----------
2 files changed, 31 insertions(+), 12 deletions(-)
New commits:
commit a39947102bac8430b13b10b3f11c34b5ebf576b0
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.co.uk>
AuthorDate: Mon May 31 10:36:09 2021 +0900
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Mon May 31 05:30:19 2021 +0200
tdf#142243 HUD - Use XCharacterClassification to convert case
This should use international case conversion, not just ascii one
that was used before.
Change-Id: Id01d3d0d30a846f02f97d081491b0de2c0d6ffef
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116419
Tested-by: Jenkins
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/sfx2/inc/commandpopup/CommandPopup.hxx b/sfx2/inc/commandpopup/CommandPopup.hxx
index 85208e37608e..5d1d74aff860 100644
--- a/sfx2/inc/commandpopup/CommandPopup.hxx
+++ b/sfx2/inc/commandpopup/CommandPopup.hxx
@@ -17,8 +17,11 @@
#include <vcl/weld.hxx>
#include <vcl/window.hxx>
-#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
#include <com/sun/star/frame/XFrame.hpp>
+#include <com/sun/star/container/XIndexAccess.hpp>
+#include <com/sun/star/i18n/XCharacterClassification.hpp>
+#include <com/sun/star/util/XURLTransformer.hpp>
struct CurrentEntry final
{
@@ -36,6 +39,7 @@ struct MenuContent final
{
OUString m_aCommandURL;
OUString m_aMenuLabel;
+ OUString m_aSearchableMenuLabel;
OUString m_aFullLabelWithPath;
OUString m_aTooltip;
std::vector<MenuContent> m_aSubMenuContent;
@@ -44,9 +48,14 @@ struct MenuContent final
class MenuContentHandler final
{
private:
+ css::uno::Reference<css::uno::XComponentContext> m_xContext;
css::uno::Reference<css::frame::XFrame> m_xFrame;
+ css::uno::Reference<css::i18n::XCharacterClassification> m_xCharacterClassification;
+ css::uno::Reference<css::util::XURLTransformer> m_xURLTransformer;
+
MenuContent m_aMenuContent;
OUString m_sModuleLongName;
+ OUString toLower(OUString const& rString);
public:
MenuContentHandler(css::uno::Reference<css::frame::XFrame> const& xFrame);
diff --git a/sfx2/source/commandpopup/CommandPopup.cxx b/sfx2/source/commandpopup/CommandPopup.cxx
index aa2555252b26..a903a0b12628 100644
--- a/sfx2/source/commandpopup/CommandPopup.cxx
+++ b/sfx2/source/commandpopup/CommandPopup.cxx
@@ -25,19 +25,23 @@
#include <com/sun/star/lang/IndexOutOfBoundsException.hpp>
#include <com/sun/star/util/URL.hpp>
#include <com/sun/star/util/URLTransformer.hpp>
+#include <com/sun/star/i18n/CharacterClassification.hpp>
#include <vcl/commandinfoprovider.hxx>
+#include <vcl/svapp.hxx>
+#include <i18nlangtag/languagetag.hxx>
using namespace css;
MenuContentHandler::MenuContentHandler(uno::Reference<frame::XFrame> const& xFrame)
- : m_xFrame(xFrame)
+ : m_xContext(comphelper::getProcessComponentContext())
+ , m_xFrame(xFrame)
+ , m_xCharacterClassification(i18n::CharacterClassification::create(m_xContext))
+ , m_xURLTransformer(util::URLTransformer::create(m_xContext))
, m_sModuleLongName(vcl::CommandInfoProvider::GetModuleIdentifier(xFrame))
{
- auto xComponentContext = comphelper::getProcessComponentContext();
-
uno::Reference<ui::XModuleUIConfigurationManagerSupplier> xModuleConfigSupplier;
- xModuleConfigSupplier.set(ui::theModuleUIConfigurationManagerSupplier::get(xComponentContext));
+ xModuleConfigSupplier.set(ui::theModuleUIConfigurationManagerSupplier::get(m_xContext));
uno::Reference<ui::XUIConfigurationManager> xConfigurationManager;
xConfigurationManager = xModuleConfigSupplier->getUIConfigurationManager(m_sModuleLongName);
@@ -83,6 +87,7 @@ void MenuContentHandler::gatherMenuContent(
aNewContent.m_aCommandURL, m_sModuleLongName);
OUString aLabel = vcl::CommandInfoProvider::GetLabelForCommand(aCommandProperties);
aNewContent.m_aMenuLabel = aLabel;
+ aNewContent.m_aSearchableMenuLabel = toLower(aLabel);
if (!rMenuContent.m_aFullLabelWithPath.isEmpty())
aNewContent.m_aFullLabelWithPath = rMenuContent.m_aFullLabelWithPath + " / ";
@@ -102,7 +107,7 @@ void MenuContentHandler::findInMenu(OUString const& rText,
std::unique_ptr<weld::TreeView>& rpCommandTreeView,
std::vector<CurrentEntry>& rCommandList)
{
- findInMenuRecursive(m_aMenuContent, rText, rpCommandTreeView, rCommandList);
+ findInMenuRecursive(m_aMenuContent, toLower(rText), rpCommandTreeView, rCommandList);
}
void MenuContentHandler::findInMenuRecursive(MenuContent const& rMenuContent, OUString const& rText,
@@ -111,15 +116,13 @@ void MenuContentHandler::findInMenuRecursive(MenuContent const& rMenuContent, OU
{
for (MenuContent const& aSubContent : rMenuContent.m_aSubMenuContent)
{
- if (aSubContent.m_aMenuLabel.toAsciiLowerCase().startsWith(rText))
+ if (aSubContent.m_aSearchableMenuLabel.startsWith(rText))
{
OUString sCommandURL = aSubContent.m_aCommandURL;
util::URL aCommandURL;
aCommandURL.Complete = sCommandURL;
- uno::Reference<uno::XComponentContext> xContext
- = comphelper::getProcessComponentContext();
- uno::Reference<util::XURLTransformer> xParser = util::URLTransformer::create(xContext);
- xParser->parseStrict(aCommandURL);
+
+ m_xURLTransformer->parseStrict(aCommandURL);
auto* pViewFrame = SfxViewFrame::Current();
@@ -148,6 +151,13 @@ void MenuContentHandler::findInMenuRecursive(MenuContent const& rMenuContent, OU
}
}
+OUString MenuContentHandler::toLower(OUString const& rString)
+{
+ const css::lang::Locale& rLocale = Application::GetSettings().GetUILanguageTag().getLocale();
+
+ return m_xCharacterClassification->toUpper(rString, 0, rString.getLength(), rLocale);
+}
+
CommandListBox::CommandListBox(weld::Window* pParent, uno::Reference<frame::XFrame> const& xFrame)
: mxBuilder(Application::CreateBuilder(pParent, "sfx/ui/commandpopup.ui"))
, mxPopover(mxBuilder->weld_popover("CommandPopup"))
@@ -225,7 +235,7 @@ IMPL_LINK_NOARG(CommandListBox, ModifyHdl, weld::Entry&, void)
return;
mpCommandTreeView->freeze();
- mpMenuContentHandler->findInMenu(sText.toAsciiLowerCase(), mpCommandTreeView, maCommandList);
+ mpMenuContentHandler->findInMenu(sText, mpCommandTreeView, maCommandList);
mpCommandTreeView->thaw();
if (mpCommandTreeView->n_children() > 0)
More information about the Libreoffice-commits
mailing list