tdf#150682 - bad shortcut in french langage
the = key is } on a french keyboard,
so remap the
ctrl-alt-=
shortcuts to
ctrl-alt-}
which means the user gets to keep pressing keys in roughly the same
physical location for this action, regardless of keyboard
Change-Id: I03e251dacc1c19e543182a44ae23fde2a57cfa45
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139474
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/cui/source/customize/acccfg.cxx b/cui/source/customize/acccfg.cxx
index 2bfabb5..491fc76 100644
--- a/cui/source/customize/acccfg.cxx
+++ b/cui/source/customize/acccfg.cxx
@@ -189,6 +189,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_MOD1 | KEY_QUOTERIGHT,
KEY_MOD1 | KEY_BRACKETLEFT,
KEY_MOD1 | KEY_BRACKETRIGHT,
KEY_MOD1 | KEY_RIGHTCURLYBRACKET,
KEY_MOD1 | KEY_POINT,
KEY_MOD1 | KEY_COMMA,
KEY_MOD1 | KEY_TILDE,
@@ -272,6 +273,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_SHIFT | KEY_MOD1 | KEY_QUOTERIGHT,
KEY_SHIFT | KEY_MOD1 | KEY_BRACKETLEFT,
KEY_SHIFT | KEY_MOD1 | KEY_BRACKETRIGHT,
KEY_SHIFT | KEY_MOD1 | KEY_RIGHTCURLYBRACKET,
KEY_SHIFT | KEY_MOD1 | KEY_POINT,
KEY_SHIFT | KEY_MOD1 | KEY_COMMA,
KEY_SHIFT | KEY_MOD1 | KEY_TILDE,
@@ -351,6 +353,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_MOD2 | KEY_QUOTERIGHT,
KEY_MOD2 | KEY_BRACKETLEFT,
KEY_MOD2 | KEY_BRACKETRIGHT,
KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
KEY_MOD2 | KEY_POINT,
KEY_MOD2 | KEY_COMMA,
KEY_MOD2 | KEY_TILDE,
@@ -428,6 +431,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_SHIFT | KEY_MOD2 | KEY_QUOTERIGHT,
KEY_SHIFT | KEY_MOD2 | KEY_BRACKETLEFT,
KEY_SHIFT | KEY_MOD2 | KEY_BRACKETRIGHT,
KEY_SHIFT | KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
KEY_SHIFT | KEY_MOD2 | KEY_POINT,
KEY_SHIFT | KEY_MOD2 | KEY_COMMA,
KEY_SHIFT | KEY_MOD2 | KEY_TILDE,
@@ -506,6 +510,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_MOD1 | KEY_MOD2 | KEY_QUOTERIGHT,
KEY_MOD1 | KEY_MOD2 | KEY_BRACKETLEFT,
KEY_MOD1 | KEY_MOD2 | KEY_BRACKETRIGHT,
KEY_MOD1 | KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
KEY_MOD1 | KEY_MOD2 | KEY_POINT,
KEY_MOD1 | KEY_MOD2 | KEY_COMMA,
KEY_MOD1 | KEY_MOD2 | KEY_TILDE,
@@ -583,6 +588,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_QUOTERIGHT,
KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_BRACKETLEFT,
KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_BRACKETRIGHT,
KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_RIGHTCURLYBRACKET,
KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_POINT,
KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_COMMA,
KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_TILDE,
@@ -662,6 +668,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_MOD3 | KEY_QUOTERIGHT,
KEY_MOD3 | KEY_BRACKETLEFT,
KEY_MOD3 | KEY_BRACKETRIGHT,
KEY_MOD3 | KEY_RIGHTCURLYBRACKET,
KEY_MOD3 | KEY_POINT,
KEY_MOD3 | KEY_COMMA,
KEY_MOD3 | KEY_TILDE,
@@ -745,6 +752,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
KEY_SHIFT | KEY_MOD3 | KEY_QUOTERIGHT,
KEY_SHIFT | KEY_MOD3 | KEY_BRACKETLEFT,
KEY_SHIFT | KEY_MOD3 | KEY_BRACKETRIGHT,
KEY_SHIFT | KEY_MOD3 | KEY_RIGHTCURLYBRACKET,
KEY_SHIFT | KEY_MOD3 | KEY_POINT,
KEY_SHIFT | KEY_MOD3 | KEY_COMMA,
KEY_SHIFT | KEY_MOD3 | KEY_TILDE,
diff --git a/framework/source/accelerators/keymapping.cxx b/framework/source/accelerators/keymapping.cxx
index a0d33e7..b2bd938 100644
--- a/framework/source/accelerators/keymapping.cxx
+++ b/framework/source/accelerators/keymapping.cxx
@@ -136,6 +136,7 @@ KeyMapping::KeyIdentifierInfo const KeyMapping::KeyIdentifierMap[] =
{css::awt::Key::BRACKETRIGHT , "KEY_BRACKETRIGHT" },
{css::awt::Key::SEMICOLON , "KEY_SEMICOLON" },
{css::awt::Key::QUOTERIGHT , "KEY_QUOTERIGHT" },
{css::awt::Key::RIGHTCURLYBRACKET, "KEY_RIGHTCURLYBRACKET" },
{0 , "" } // mark the end of this array!
};
diff --git a/include/vcl/keycodes.hxx b/include/vcl/keycodes.hxx
index e68f176..fa54bee 100644
--- a/include/vcl/keycodes.hxx
+++ b/include/vcl/keycodes.hxx
@@ -154,6 +154,7 @@ constexpr sal_uInt16 KEY_BRACKETLEFT = css::awt::Key::BRACKETLEFT;
constexpr sal_uInt16 KEY_BRACKETRIGHT = css::awt::Key::BRACKETRIGHT;
constexpr sal_uInt16 KEY_SEMICOLON = css::awt::Key::SEMICOLON;
constexpr sal_uInt16 KEY_QUOTERIGHT = css::awt::Key::QUOTERIGHT;
constexpr sal_uInt16 KEY_RIGHTCURLYBRACKET = css::awt::Key::RIGHTCURLYBRACKET;
constexpr sal_uInt16 KEY_CAPSLOCK = css::awt::Key::CAPSLOCK;
constexpr sal_uInt16 KEY_NUMLOCK = css::awt::Key::NUMLOCK;
diff --git a/offapi/com/sun/star/awt/Key.idl b/offapi/com/sun/star/awt/Key.idl
index 3cd7cc9..bd236c3 100644
--- a/offapi/com/sun/star/awt/Key.idl
+++ b/offapi/com/sun/star/awt/Key.idl
@@ -24,6 +24,8 @@
/** These values are used to specify distinct physical keys, plus
some special values used by the macOS implementation.
Noting that these numbers are simply allocated here, and not taken from any specification.
*/
published constants Key
{
@@ -364,6 +366,9 @@ published constants Key
/** @since LibreOffice 4.3 **/
const short QUOTERIGHT = 1318;
/** @since LibreOffice 7.5 **/
const short RIGHTCURLYBRACKET = 1319;
/** The following values don't correspond to physical keys on any
keyboard but are used in the macOS implementation of VCL. They
diff --git a/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu b/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
index 0497cb3..1ea7384 100644
--- a/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
@@ -812,6 +812,15 @@ Ctrl+Shift+e aka E_SHIFT_MOD1 under GTK/IBUS is for some emoji thing
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="en-US">.uno:InsertObjectStarMath</value>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<value xml:lang="fr"></value>
</prop>
</node>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<node oor:name="RIGHTCURLYBRACKET_MOD1_MOD2" oor:op="replace">
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="fr">.uno:InsertObjectStarMath</value>
</prop>
</node>
<node oor:name="END" oor:op="replace">
@@ -1741,6 +1750,15 @@ Ctrl+Shift+e aka E_SHIFT_MOD1 under GTK/IBUS is for some emoji thing
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="en-US">.uno:InsertMath</value>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<value xml:lang="fr"></value>
</prop>
</node>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<node oor:name="RIGHTCURLYBRACKET_MOD1_MOD2" oor:op="replace">
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="fr">.uno:InsertMath</value>
</prop>
</node>
<node oor:name="F11" oor:op="replace">
@@ -2961,6 +2979,15 @@ Ctrl+Shift+e aka E_SHIFT_MOD1 under GTK/IBUS is for some emoji thing
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="en-US">.uno:InsertMath</value>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<value xml:lang="fr"></value>
</prop>
</node>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<node oor:name="RIGHTCURLYBRACKET_MOD1_MOD2" oor:op="replace">
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="fr">.uno:InsertMath</value>
</prop>
</node>
<node oor:name="1_MOD1" oor:op="replace">
@@ -6225,6 +6252,15 @@ Ctrl+Shift+e aka E_SHIFT_MOD1 under GTK/IBUS is for some emoji thing
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="en-US">.uno:InsertObjectStarMath</value>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<value xml:lang="fr"></value>
</prop>
</node>
<!-- tdf#150862 Replace Ctrl-Alt-EQUAL with Ctrl-Ctrl-} for French keyboard layout -->
<node oor:name="RIGHTCURLYBRACKET_MOD1_MOD2" oor:op="replace">
<prop oor:name="Command">
<value xml:lang="x-no-translate">I10N SHORTCUTS - NO TRANSLATE</value>
<value xml:lang="fr">.uno:InsertObjectStarMath</value>
</prop>
</node>
<node oor:name="F10_MOD1" oor:op="replace">
diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx
index 9003a8d..c372956 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -1059,6 +1059,7 @@ OUString AquaSalFrame::GetKeyName( sal_uInt16 nKeyCode )
aKeyMap[ KEY_BRACKETRIGHT ] = "]";
aKeyMap[ KEY_SEMICOLON ] = ";";
aKeyMap[ KEY_QUOTERIGHT ] = "'";
aKeyMap[ KEY_RIGHTCURLYBRACKET ] = "}";
/* yet unmapped KEYCODES:
aKeyMap[ KEY_INSERT ] = OUString( sal_Unicode( ) );
diff --git a/vcl/osx/salframeview.mm b/vcl/osx/salframeview.mm
index df2c55a..07d3c08 100644
--- a/vcl/osx/salframeview.mm
+++ b/vcl/osx/salframeview.mm
@@ -122,7 +122,7 @@ static sal_uInt16 ImplMapKeyCode(sal_uInt16 nKeyCode)
KEY_A, KEY_S, KEY_D, KEY_F, KEY_H, KEY_G, KEY_Z, KEY_X,
KEY_C, KEY_V, 0, KEY_B, KEY_Q, KEY_W, KEY_E, KEY_R,
KEY_Y, KEY_T, KEY_1, KEY_2, KEY_3, KEY_4, KEY_6, KEY_5,
KEY_EQUAL, KEY_9, KEY_7, KEY_SUBTRACT, KEY_8, KEY_0, KEY_BRACKETRIGHT, KEY_0,
KEY_EQUAL, KEY_9, KEY_7, KEY_SUBTRACT, KEY_8, KEY_0, KEY_BRACKETRIGHT, KEY_RIGHTCURLYBRACKET,
KEY_U, KEY_BRACKETLEFT, KEY_I, KEY_P, KEY_RETURN, KEY_L, KEY_J, KEY_QUOTERIGHT,
KEY_K, KEY_SEMICOLON, 0, KEY_COMMA, KEY_DIVIDE, KEY_N, KEY_M, KEY_POINT,
KEY_TAB, KEY_SPACE, KEY_QUOTELEFT, KEY_DELETE, 0, KEY_ESCAPE, 0, 0,
diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx
index 490b4b7..ca3e715 100644
--- a/vcl/unx/generic/app/saldisp.cxx
+++ b/vcl/unx/generic/app/saldisp.cxx
@@ -964,6 +964,9 @@ OUString SalDisplay::GetKeyName( sal_uInt16 nKeyCode ) const
case KEY_QUOTERIGHT:
aCustomKeyName = "'";
break;
case KEY_RIGHTCURLYBRACKET:
aCustomKeyName = "}";
break;
default:
nKeySym = 0;
break;
@@ -1310,6 +1313,10 @@ sal_uInt16 SalDisplay::GetKeyCode( KeySym keysym, char*pcPrintable ) const
nKey = KEY_QUOTERIGHT;
*pcPrintable = '\'';
break;
case XK_braceright:
nKey = KEY_RIGHTCURLYBRACKET;
*pcPrintable = '\'';
break;
// - - - - - - - - - - - - - Apollo - - - - - - - - - - - - - 0x1000
case 0x1000FF02: // apXK_Copy
nKey = KEY_COPY;
diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx
index ab66866..33a4278 100644
--- a/vcl/unx/gtk3/gtkframe.cxx
+++ b/vcl/unx/gtk3/gtkframe.cxx
@@ -214,6 +214,7 @@ sal_uInt16 GtkSalFrame::GetKeyCode(guint keyval)
case GDK_KEY_bracketright: nCode = KEY_BRACKETRIGHT; break;
case GDK_KEY_semicolon: nCode = KEY_SEMICOLON; break;
case GDK_KEY_quoteright: nCode = KEY_QUOTERIGHT; break;
case GDK_KEY_braceright: nCode = KEY_RIGHTCURLYBRACKET; break;
// some special cases, also see saldisp.cxx
// - - - - - - - - - - - - - Apollo - - - - - - - - - - - - - 0x1000
// These can be found in ap_keysym.h
@@ -2655,6 +2656,7 @@ void GtkSalFrame::KeyCodeToGdkKey(const vcl::KeyCode& rKeyCode,
case KEY_BRACKETRIGHT: nKeyCode = GDK_KEY_bracketright; break;
case KEY_SEMICOLON: nKeyCode = GDK_KEY_semicolon; break;
case KEY_QUOTERIGHT: nKeyCode = GDK_KEY_quoteright; break;
case KEY_RIGHTCURLYBRACKET: nKeyCode = GDK_KEY_braceright; break;
// Special cases
case KEY_COPY: nKeyCode = GDK_KEY_Copy; break;
diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx
index f62d8ef..24c4c50 100644
--- a/vcl/win/app/salinst.cxx
+++ b/vcl/win/app/salinst.cxx
@@ -243,6 +243,7 @@ void SalData::initKeyCodeMap()
initKey( L']', KEY_BRACKETRIGHT );
initKey( L';', KEY_SEMICOLON );
initKey( L'\'', KEY_QUOTERIGHT );
initKey( L'}', KEY_RIGHTCURLYBRACKET );
}
// SalData
diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx
index a394145..1335c61 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -2497,6 +2497,9 @@ OUString WinSalFrame::GetKeyName( sal_uInt16 nKeyCode )
case KEY_QUOTELEFT:
cSVCode = '`';
break;
case KEY_RIGHTCURLYBRACKET:
cSVCode = '}';
break;
}
}