cui/source/customize/acccfg.cxx                                |    8 ++
 framework/source/accelerators/keymapping.cxx                   |    1 
 include/vcl/keycodes.hxx                                       |    1 
 offapi/com/sun/star/awt/Key.idl                                |    5 +
 officecfg/registry/data/org/openoffice/Office/Accelerators.xcu |   36 
++++++++++
 vcl/osx/salframe.cxx                                           |    1 
 vcl/osx/salframeview.mm                                        |    2 
 vcl/unx/generic/app/saldisp.cxx                                |    7 +
 vcl/unx/gtk3/gtkframe.cxx                                      |    2 
 vcl/win/app/salinst.cxx                                        |    1 
 vcl/win/window/salframe.cxx                                    |    3 
 11 files changed, 66 insertions(+), 1 deletion(-)

New commits:
commit b9ea72a2554beaa5438536dc8f6d0e340a5fb719
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Tue Sep 6 10:30:42 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Sep 7 08:08:17 2022 +0200

    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/+/139475
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/cui/source/customize/acccfg.cxx b/cui/source/customize/acccfg.cxx
index 476b10d2e8e4..b3aaf77bb70b 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 1a5648c8d43a..d5238ab74a5a 100644
--- a/framework/source/accelerators/keymapping.cxx
+++ b/framework/source/accelerators/keymapping.cxx
@@ -135,6 +135,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 e68f176ffe32..fa54beefdb4f 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 7ad04ae2206f..5ad5c90ef6c4 100644
--- a/offapi/com/sun/star/awt/Key.idl
+++ b/offapi/com/sun/star/awt/Key.idl
@@ -26,6 +26,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
 {
@@ -366,6 +368,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 e93012222e17..706457532199 100644
--- a/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
@@ -805,6 +805,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">
@@ -1734,6 +1743,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">
@@ -2954,6 +2972,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">
@@ -6218,6 +6245,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 a5356fcf19be..3b38457a7508 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -1068,6 +1068,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 ee245af64820..cb76ab246760 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 33259eb2da49..6a70a38d35db 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 7108f9206380..fef8aba557fd 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
@@ -2620,6 +2621,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 c4d9e363ff19..9de6dc329cef 100644
--- a/vcl/win/app/salinst.cxx
+++ b/vcl/win/app/salinst.cxx
@@ -237,6 +237,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 4556c850edec..2d8bac506203 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -2512,6 +2512,9 @@ OUString WinSalFrame::GetKeyName( sal_uInt16 nKeyCode )
             case KEY_QUOTELEFT:
                 cSVCode = '`';
                 break;
+            case KEY_RIGHTCURLYBRACKET:
+                cSVCode = '}';
+                break;
         }
     }
 

Reply via email to