Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/1553
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/53/1553/1
fdo#54165: Allow localized shortcut names on Windows
Change-Id: I2de53cd8d888ecf819271e96f8eb2cc4a90e554d
---
M vcl/Library_vcl.mk
M vcl/inc/win/salframe.h
A vcl/win/source/window/keynames.cxx
M vcl/win/source/window/salframe.cxx
4 files changed, 145 insertions(+), 13 deletions(-)
diff --git a/vcl/Library_vcl.mk b/vcl/Library_vcl.mk
index c3898bc..ed843bf 100644
--- a/vcl/Library_vcl.mk
+++ b/vcl/Library_vcl.mk
@@ -641,6 +641,7 @@
vcl/win/source/gdi/winlayout \
vcl/win/source/gdi/wntgdi \
vcl/win/source/window/salframe \
+ vcl/win/source/window/keynames \
vcl/win/source/window/salmenu \
vcl/win/source/window/salobj \
))
diff --git a/vcl/inc/win/salframe.h b/vcl/inc/win/salframe.h
index 4c0f63c..54e10bd 100644
--- a/vcl/inc/win/salframe.h
+++ b/vcl/inc/win/salframe.h
@@ -137,6 +137,13 @@
void ImplSalGetWorkArea( HWND hWnd, RECT *pRect, const RECT *pParentRect );
+// get foreign key names
+namespace vcl_sal {
+ rtl::OUString getKeysReplacementName(
+ rtl::OUString pLang,
+ LONG nSymbol );
+}
+
#endif // _SV_SALFRAME_H
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/win/source/window/keynames.cxx b/vcl/win/source/window/keynames.cxx
new file mode 100755
index 0000000..153fc07
--- /dev/null
+++ b/vcl/win/source/window/keynames.cxx
@@ -0,0 +1,112 @@
+/* -*- 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 <string.h>
+#include <rtl/ustring.hxx>
+#include <sal/macros.h>
+
+#include <windows.h>
+
+#define KEY_ESC 0x10000
+#define KEY_BACK 0xE0000
+#define KEY_ENTER 0x1C0000
+#define KEY_SPACEBAR 0x390000
+#define KEY_HOME 0x1470000
+#define KEY_UP 0x1480000
+#define KEY_PAGEUP 0x1490000
+#define KEY_LEFT 0x14B0000
+#define KEY_RIGHT 0x14D0000
+#define KEY_END 0x14F0000
+#define KEY_DOWN 0x1500000
+#define KEY_PAGEDOWN 0x1510000
+#define KEY_INSERT 0x1520000
+#define KEY_DELETE 0x1530000
+#define KEY_CONTROL 0x21D0000
+#define KEY_SHIFT 0x22A0000
+#define KEY_ALT 0x2380000
+
+
+namespace vcl_sal {
+
+ struct KeysNameReplacement
+ {
+ LONG aSymbol;
+ const char* pName;
+ };
+
+ struct KeyboardReplacements
+ {
+ const char* pLangName;
+ const KeysNameReplacement* pReplacements;
+ int nReplacements;
+ };
+
+ // ====================================================================
+ //
+ // CAUTION CAUTION CAUTION
+ // every string value in the replacements tables must be in UTF8
+ // be careful with your editor !
+ //
+ // ====================================================================
+
+ static const struct KeysNameReplacement aImplReplacements_Catalan[] =
+ {
+ { KEY_BACK, "Retrocés" },
+ { KEY_ENTER, "Retorn" },
+ { KEY_SPACEBAR, "Espai" },
+ { KEY_HOME, "Inici" },
+ { KEY_UP, "Amunt" },
+ { KEY_PAGEUP, "Re Pàg" },
+ { KEY_LEFT, "Esquerra" },
+ { KEY_RIGHT, "Dreta" },
+ { KEY_END, "Fi" },
+ { KEY_DOWN, "Avall" },
+ { KEY_PAGEDOWN, "Av Pàg" },
+ { KEY_INSERT, "Ins" },
+ { KEY_DELETE, "Supr" },
+ { KEY_SHIFT, "Maj" },
+ };
+
+ static const struct KeyboardReplacements aKeyboards[] =
+ {
+ { "ca", aImplReplacements_Catalan, SAL_N_ELEMENTS(aImplReplacements_Catalan) },
+ };
+
+ // translate keycodes, used within the displayed menu shortcuts
+ rtl::OUString getKeysReplacementName( rtl::OUString pLang, LONG nSymbol )
+ {
+ for( unsigned int n = 0; n < SAL_N_ELEMENTS(aKeyboards); n++ )
+ {
+ if( pLang.equalsAscii( aKeyboards[n].pLangName ) )
+ {
+ const struct KeysNameReplacement* pRepl = aKeyboards[n].pReplacements;
+ for( int m = aKeyboards[n].nReplacements ; m ; )
+ {
+ if( nSymbol == pRepl[--m].aSymbol )
+ return rtl::OUString( pRepl[m].pName, strlen(pRepl[m].pName),
RTL_TEXTENCODING_UTF8 );
+ }
+ }
+ }
+
+ return rtl::OUString();
+ }
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/vcl/win/source/window/salframe.cxx b/vcl/win/source/window/salframe.cxx
index bdee3e1..17646f2 100644
--- a/vcl/win/source/window/salframe.cxx
+++ b/vcl/win/source/window/salframe.cxx
@@ -2387,23 +2387,35 @@
int nKeyLen = 0;
if ( lParam )
{
- nKeyLen = GetKeyNameTextW( lParam, aKeyBuf, nMaxKeyLen );
- DBG_ASSERT( nKeyLen <= nMaxKeyLen, "Invalid key name length!" );
- if( nKeyLen > nMaxKeyLen )
- nKeyLen = 0;
- else if( nKeyLen > 0 )
- {
- // Capitalize just the first letter of key names
- CharLowerBuffW( aKeyBuf, nKeyLen );
+ rtl::OUString aLang = Application::GetSettings().GetUILanguageTag().getLanguage();
+ rtl::OUString aRet;
- bool bUpper = true;
- for( WCHAR *pW=aKeyBuf, *pE=pW+nKeyLen; pW < pE; ++pW )
+ aRet = ::vcl_sal::getKeysReplacementName( aLang, lParam );
+ if( aRet.isEmpty() )
+ {
+ nKeyLen = GetKeyNameTextW( lParam, aKeyBuf, nMaxKeyLen );
+ DBG_ASSERT( nKeyLen <= nMaxKeyLen, "Invalid key name length!" );
+ if( nKeyLen > nMaxKeyLen )
+ nKeyLen = 0;
+ else if( nKeyLen > 0 )
{
- if( bUpper )
- CharUpperBuffW( pW, 1 );
- bUpper = (*pW=='+') || (*pW=='-') || (*pW==' ') || (*pW=='.');
+ // Capitalize just the first letter of key names
+ CharLowerBuffW( aKeyBuf, nKeyLen );
+
+ bool bUpper = true;
+ for( WCHAR *pW=aKeyBuf, *pE=pW+nKeyLen; pW < pE; ++pW )
+ {
+ if( bUpper )
+ CharUpperBuffW( pW, 1 );
+ bUpper = (*pW=='+') || (*pW=='-') || (*pW==' ') || (*pW=='.');
+ }
}
}
+ else
+ {
+ nKeyLen = aRet.getLength();
+ wcscpy_s( aKeyBuf, nMaxKeyLen, aRet.getStr() );
+ }
}
if ( (nKeyLen > 0) || pReplace )
--
To view, visit https://gerrit.libreoffice.org/1553
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I2de53cd8d888ecf819271e96f8eb2cc4a90e554d
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Jesús Corrius <jcorrius@gmail.com>
Context
- [PATCH] fdo#54165: Allow localized shortcut names on Windows · via Code Review
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.