cui/source/customize/acccfg.cxx                                |    8 ++++++++
 framework/source/accelerators/keymapping.cxx                   |    1 +
 include/vcl/keycodes.hxx                                       |    1 +
 offapi/com/sun/star/awt/Key.idl                                |    3 +++
 officecfg/registry/data/org/openoffice/Office/Accelerators.xcu |    6 ++++++
 vcl/osx/salframe.cxx                                           |    1 +
 vcl/osx/salmenu.cxx                                            |    3 +++
 vcl/qt5/QtFrame.cxx                                            |    3 +++
 vcl/qt5/QtWidget.cxx                                           |    3 +++
 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 +++
 13 files changed, 42 insertions(+)

New commits:
commit 1db8f6d484b884301a7d3673f4d05478e28cd853
Author:     Gökay Şatır <gokaysa...@collabora.com>
AuthorDate: Wed Oct 4 15:01:38 2023 +0300
Commit:     Gökay ŞATIR <gokaysa...@collabora.com>
CommitDate: Thu Oct 5 10:07:29 2023 +0200

    Add NUMBERSIGN key handler.
    
    German keyboard layout has number sign key.
    Users can print number sign without using modification keys.
    So this key can be assigned a shortcut.
    Subscript is assigned to CTRL + NUMBERSIGN.
    
    Below PR is used as reference when adding the new key handler:
    https://gerrit.libreoffice.org/c/core/+/86713
    
    Signed-off-by: Gökay Şatır <gokaysa...@collabora.com>
    Change-Id: I340dc47764e9200d2477f8db740a629f62f48004
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157554
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>

diff --git a/cui/source/customize/acccfg.cxx b/cui/source/customize/acccfg.cxx
index 760dc7a11d66..77eb3279301d 100644
--- a/cui/source/customize/acccfg.cxx
+++ b/cui/source/customize/acccfg.cxx
@@ -184,6 +184,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_MOD1 | KEY_X,
                                      KEY_MOD1 | KEY_Y,
                                      KEY_MOD1 | KEY_Z,
+                                     KEY_MOD1 | KEY_NUMBERSIGN,
                                      KEY_MOD1 | KEY_COLON,
                                      KEY_MOD1 | KEY_SEMICOLON,
                                      KEY_MOD1 | KEY_QUOTELEFT,
@@ -269,6 +270,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_SHIFT | KEY_MOD1 | KEY_X,
                                      KEY_SHIFT | KEY_MOD1 | KEY_Y,
                                      KEY_SHIFT | KEY_MOD1 | KEY_Z,
+                                     KEY_SHIFT | KEY_MOD1 | KEY_NUMBERSIGN,
                                      KEY_SHIFT | KEY_MOD1 | KEY_COLON,
                                      KEY_SHIFT | KEY_MOD1 | KEY_SEMICOLON,
                                      KEY_SHIFT | KEY_MOD1 | KEY_QUOTELEFT,
@@ -350,6 +352,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_MOD2 | KEY_X,
                                      KEY_MOD2 | KEY_Y,
                                      KEY_MOD2 | KEY_Z,
+                                     KEY_MOD2 | KEY_NUMBERSIGN,
                                      KEY_MOD2 | KEY_COLON,
                                      KEY_MOD2 | KEY_SEMICOLON,
                                      KEY_MOD2 | KEY_QUOTELEFT,
@@ -429,6 +432,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_SHIFT | KEY_MOD2 | KEY_X,
                                      KEY_SHIFT | KEY_MOD2 | KEY_Y,
                                      KEY_SHIFT | KEY_MOD2 | KEY_Z,
+                                     KEY_SHIFT | KEY_MOD2 | KEY_NUMBERSIGN,
                                      KEY_SHIFT | KEY_MOD2 | KEY_COLON,
                                      KEY_SHIFT | KEY_MOD2 | KEY_SEMICOLON,
                                      KEY_SHIFT | KEY_MOD2 | KEY_QUOTELEFT,
@@ -509,6 +513,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_MOD1 | KEY_MOD2 | KEY_X,
                                      KEY_MOD1 | KEY_MOD2 | KEY_Y,
                                      KEY_MOD1 | KEY_MOD2 | KEY_Z,
+                                     KEY_MOD1 | KEY_MOD2 | KEY_NUMBERSIGN,
                                      KEY_MOD1 | KEY_MOD2 | KEY_COLON,
                                      KEY_MOD1 | KEY_MOD2 | KEY_SEMICOLON,
                                      KEY_MOD1 | KEY_MOD2 | KEY_QUOTELEFT,
@@ -588,6 +593,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_X,
                                      KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_Y,
                                      KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | KEY_Z,
+                                     KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | 
KEY_NUMBERSIGN,
                                      KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | 
KEY_COLON,
                                      KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | 
KEY_SEMICOLON,
                                      KEY_SHIFT | KEY_MOD1 | KEY_MOD2 | 
KEY_QUOTELEFT,
@@ -669,6 +675,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_MOD3 | KEY_X,
                                      KEY_MOD3 | KEY_Y,
                                      KEY_MOD3 | KEY_Z,
+                                     KEY_MOD2 | KEY_NUMBERSIGN,
                                      KEY_MOD3 | KEY_COLON,
                                      KEY_MOD3 | KEY_SEMICOLON,
                                      KEY_MOD3 | KEY_QUOTELEFT,
@@ -754,6 +761,7 @@ const sal_uInt16 KEYCODE_ARRAY[] = { KEY_F1,
                                      KEY_SHIFT | KEY_MOD3 | KEY_X,
                                      KEY_SHIFT | KEY_MOD3 | KEY_Y,
                                      KEY_SHIFT | KEY_MOD3 | KEY_Z,
+                                     KEY_SHIFT | KEY_MOD3 | KEY_NUMBERSIGN,
                                      KEY_SHIFT | KEY_MOD3 | KEY_COLON,
                                      KEY_SHIFT | KEY_MOD3 | KEY_SEMICOLON,
                                      KEY_SHIFT | KEY_MOD3 | KEY_QUOTELEFT,
diff --git a/framework/source/accelerators/keymapping.cxx 
b/framework/source/accelerators/keymapping.cxx
index 4b9588d8ed92..be0c4c27f291 100644
--- a/framework/source/accelerators/keymapping.cxx
+++ b/framework/source/accelerators/keymapping.cxx
@@ -137,6 +137,7 @@ KeyMapping::KeyIdentifierInfo const 
KeyMapping::KeyIdentifierMap[] =
     {css::awt::Key::SEMICOLON     , "KEY_SEMICOLON" },
     {css::awt::Key::QUOTERIGHT    , "KEY_QUOTERIGHT" },
     {css::awt::Key::RIGHTCURLYBRACKET, "KEY_RIGHTCURLYBRACKET" },
+    {css::awt::Key::NUMBERSIGN, "KEY_NUMBERSIGN" },
     {css::awt::Key::COLON         , "KEY_COLON" },
     {0                            , ""               } // mark the end of this 
array!
 };
diff --git a/include/vcl/keycodes.hxx b/include/vcl/keycodes.hxx
index a935b0ee0460..2efe29a55fbb 100644
--- a/include/vcl/keycodes.hxx
+++ b/include/vcl/keycodes.hxx
@@ -155,6 +155,7 @@ 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_NUMBERSIGN = css::awt::Key::NUMBERSIGN;
 constexpr sal_uInt16 KEY_COLON = css::awt::Key::COLON;
 
 constexpr sal_uInt16 KEY_CAPSLOCK = css::awt::Key::CAPSLOCK;
diff --git a/offapi/com/sun/star/awt/Key.idl b/offapi/com/sun/star/awt/Key.idl
index 6b19dada574d..d9f45257ce8c 100644
--- a/offapi/com/sun/star/awt/Key.idl
+++ b/offapi/com/sun/star/awt/Key.idl
@@ -372,6 +372,9 @@ published constants Key
     /** @since LibreOffice 7.6 **/
     const short COLON = 1320;
 
+    /* # sign. @since LibreOffice 24.2 */
+    const short NUMBERSIGN = 191;
+
     /** The following values don't correspond to physical keys on any
         keyboard but are used in the macOS implementation of VCL. They
         correspond to some of the action messages of the NSResponder
diff --git a/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu 
b/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
index e4c21e196946..1fda7c139061 100644
--- a/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/Accelerators.xcu
@@ -6276,6 +6276,12 @@ Ctrl+Shift+e aka E_SHIFT_MOD1 under GTK/IBUS is for some 
emoji thing
             <value xml:lang="es">.uno:SearchDialog</value>
           </prop>
         </node>
+        <node oor:name="NUMBERSIGN_MOD1" oor:op="replace">
+          <prop oor:name="Command">
+            <value xml:lang="x-no-translate">I10N SHORTCUTS - NO 
TRANSLATE</value>
+            <value xml:lang="en-US">.uno:SubScript</value>
+          </prop>
+        </node>
         <node oor:name="B_SHIFT_MOD1" oor:op="replace">
           <prop oor:name="Command">
             <value xml:lang="x-no-translate">I10N SHORTCUTS - NO 
TRANSLATE</value>
diff --git a/vcl/osx/salframe.cxx b/vcl/osx/salframe.cxx
index 82283d25d892..02996127ffe5 100644
--- a/vcl/osx/salframe.cxx
+++ b/vcl/osx/salframe.cxx
@@ -1093,6 +1093,7 @@ OUString AquaSalFrame::GetKeyName( sal_uInt16 nKeyCode )
         aKeyMap[ KEY_SEMICOLON ] = ";";
         aKeyMap[ KEY_QUOTERIGHT ] = "'";
         aKeyMap[ KEY_RIGHTCURLYBRACKET ] = "}";
+        aKeyMap[ KEY_NUMBERSIGN ] = "#";
         aKeyMap[ KEY_COLON ] = ":";
 
         /* yet unmapped KEYCODES:
diff --git a/vcl/osx/salmenu.cxx b/vcl/osx/salmenu.cxx
index bc2c5bed7cce..b3d02587f46b 100644
--- a/vcl/osx/salmenu.cxx
+++ b/vcl/osx/salmenu.cxx
@@ -655,6 +655,9 @@ void AquaSalMenu::SetAccelerator( unsigned /*nPos*/, 
SalMenuItem* pSalMenuItem,
             case KEY_COLON:
                 nCommandKey=':';
                 break;
+            case KEY_NUMBERSIGN:
+                nCommandKey='#';
+                break;
             case KEY_SEMICOLON:
                 nCommandKey=';';
                 break;
diff --git a/vcl/qt5/QtFrame.cxx b/vcl/qt5/QtFrame.cxx
index 74dfc98445af..7de22e2ddae9 100644
--- a/vcl/qt5/QtFrame.cxx
+++ b/vcl/qt5/QtFrame.cxx
@@ -968,6 +968,9 @@ OUString QtFrame::GetKeyName(sal_uInt16 nKeyCode)
             case KEY_BRACKETRIGHT:
                 nRetCode = Qt::Key_BracketRight;
                 break;
+            case KEY_NUMBERSIGN:
+                nRetCode = Qt::Key_NumberSign;
+                break;
             case KEY_COLON:
                 nRetCode = Qt::Key_Colon;
                 break;
diff --git a/vcl/qt5/QtWidget.cxx b/vcl/qt5/QtWidget.cxx
index 83ada7866f2b..1c70a2490a15 100644
--- a/vcl/qt5/QtWidget.cxx
+++ b/vcl/qt5/QtWidget.cxx
@@ -450,6 +450,9 @@ static sal_uInt16 GetKeyCode(int keyval, 
Qt::KeyboardModifiers modifiers)
             case Qt::Key_BracketRight:
                 nCode = KEY_BRACKETRIGHT;
                 break;
+            case Qt::Key_NumberSign:
+                nCode = KEY_NUMBERSIGN;
+                break;
             case Qt::Key_Colon:
                 nCode = KEY_COLON;
                 break;
diff --git a/vcl/unx/generic/app/saldisp.cxx b/vcl/unx/generic/app/saldisp.cxx
index 5f0114b1f448..3d7f976d1743 100644
--- a/vcl/unx/generic/app/saldisp.cxx
+++ b/vcl/unx/generic/app/saldisp.cxx
@@ -967,6 +967,9 @@ OUString SalDisplay::GetKeyName( sal_uInt16 nKeyCode ) const
         case KEY_RIGHTCURLYBRACKET:
             aCustomKeyName = "}";
             break;
+        case KEY_NUMBERSIGN:
+            aCustomKeyName = "#";
+            break;
         case KEY_COLON:
             aCustomKeyName = ":";
             break;
@@ -1320,6 +1323,10 @@ sal_uInt16 SalDisplay::GetKeyCode( KeySym keysym, 
char*pcPrintable ) const
             nKey = KEY_RIGHTCURLYBRACKET;
             *pcPrintable = '\'';
             break;
+        case XK_numbersign:
+            nKey = KEY_NUMBERSIGN;
+            *pcPrintable = '#';
+            break;
         case XK_colon:
             nKey = KEY_COLON;
             *pcPrintable = ':';
diff --git a/vcl/unx/gtk3/gtkframe.cxx b/vcl/unx/gtk3/gtkframe.cxx
index 344fc3254144..7171c3101376 100644
--- a/vcl/unx/gtk3/gtkframe.cxx
+++ b/vcl/unx/gtk3/gtkframe.cxx
@@ -216,6 +216,7 @@ sal_uInt16 GtkSalFrame::GetKeyCode(guint keyval)
             case GDK_KEY_semicolon:    nCode = KEY_SEMICOLON;    break;
             case GDK_KEY_quoteright:   nCode = KEY_QUOTERIGHT;   break;
             case GDK_KEY_braceright:   nCode = KEY_RIGHTCURLYBRACKET;   break;
+            case GDK_KEY_numbersign:   nCode = KEY_NUMBERSIGN; break;
             case GDK_KEY_colon:    nCode = KEY_COLON;    break;
             // some special cases, also see saldisp.cxx
             // - - - - - - - - - - - - -  Apollo - - - - - - - - - - - - - 
0x1000
@@ -2692,6 +2693,7 @@ void GtkSalFrame::KeyCodeToGdkKey(const vcl::KeyCode& 
rKeyCode,
             case KEY_SEMICOLON:     nKeyCode = GDK_KEY_semicolon;       break;
             case KEY_QUOTERIGHT:    nKeyCode = GDK_KEY_quoteright;      break;
             case KEY_RIGHTCURLYBRACKET: nKeyCode = GDK_KEY_braceright;      
break;
+            case KEY_NUMBERSIGN: nKeyCode = GDK_KEY_numbersign;         break;
             case KEY_COLON:         nKeyCode = GDK_KEY_colon;           break;
 
             // Special cases
diff --git a/vcl/win/app/salinst.cxx b/vcl/win/app/salinst.cxx
index cbceaff7ca39..789186fee8b5 100644
--- a/vcl/win/app/salinst.cxx
+++ b/vcl/win/app/salinst.cxx
@@ -235,6 +235,7 @@ void SalData::initKeyCodeMap()
     initKey( L';', KEY_SEMICOLON );
     initKey( L'\'', KEY_QUOTERIGHT );
     initKey( L'}', KEY_RIGHTCURLYBRACKET );
+    initKey( L'#', KEY_NUMBERSIGN);
     initKey( L':', KEY_COLON );
 }
 
diff --git a/vcl/win/window/salframe.cxx b/vcl/win/window/salframe.cxx
index 6ab7bc61d673..92f31857f083 100644
--- a/vcl/win/window/salframe.cxx
+++ b/vcl/win/window/salframe.cxx
@@ -2526,6 +2526,9 @@ OUString WinSalFrame::GetKeyName( sal_uInt16 nKeyCode )
             case KEY_EQUAL:
                 cSVCode  = '=';
                 break;
+            case KEY_NUMBERSIGN:
+                cSVCode = '#';
+                break;
             case KEY_COLON:
                 cSVCode = ':';
                 break;

Reply via email to