[Libreoffice-commits] core.git: vcl/qt5

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Tue Oct 23 20:47:20 UTC 2018


 vcl/qt5/Qt5Frame.cxx |  148 +++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 145 insertions(+), 3 deletions(-)

New commits:
commit 9415f3e10274cc4087a72d425a223309d39ede27
Author:     Katarina Behrens <Katarina.Behrens at cib.de>
AuthorDate: Tue Oct 23 15:46:09 2018 +0200
Commit:     Katarina Behrens <Katarina.Behrens at cib.de>
CommitDate: Tue Oct 23 22:46:58 2018 +0200

    tdf#120449: Show keyboard shortcuts in native menus
    
    Who would have thought that this information has to be stored in
    SalFrame
    
    Change-Id: I8fbdf1794184e8dfd0b0025d29a19938dbb2af03
    Reviewed-on: https://gerrit.libreoffice.org/62236
    Tested-by: Jenkins
    Reviewed-by: Katarina Behrens <Katarina.Behrens at cib.de>

diff --git a/vcl/qt5/Qt5Frame.cxx b/vcl/qt5/Qt5Frame.cxx
index 4847546f200d..45c4c3ee98fd 100644
--- a/vcl/qt5/Qt5Frame.cxx
+++ b/vcl/qt5/Qt5Frame.cxx
@@ -644,10 +644,152 @@ void Qt5Frame::EndExtTextInput(EndExtTextInputFlags /*nFlags*/)
     // TODO fwd to IM handler
 }
 
-OUString Qt5Frame::GetKeyName(sal_uInt16 /*nKeyCode*/)
+OUString Qt5Frame::GetKeyName(sal_uInt16 nKeyCode)
 {
-    // TODO retrieve key cap / modifier names
-    return OUString();
+    vcl::KeyCode vclKeyCode(nKeyCode);
+    int nCode = vclKeyCode.GetCode();
+    int nRetCode = 0;
+
+    if (nCode >= KEY_0 && nCode <= KEY_9)
+        nRetCode = (nCode - KEY_0) + Qt::Key_0;
+    else if (nCode >= KEY_A && nCode <= KEY_Z)
+        nRetCode = (nCode - KEY_A) + Qt::Key_A;
+    else if (nCode >= KEY_F1 && nCode <= KEY_F26)
+        nRetCode = (nCode - KEY_F1) + Qt::Key_F1;
+    else
+    {
+        switch (nCode)
+        {
+            case KEY_DOWN:
+                nRetCode = Qt::Key_Down;
+                break;
+            case KEY_UP:
+                nRetCode = Qt::Key_Up;
+                break;
+            case KEY_LEFT:
+                nRetCode = Qt::Key_Left;
+                break;
+            case KEY_RIGHT:
+                nRetCode = Qt::Key_Right;
+                break;
+            case KEY_HOME:
+                nRetCode = Qt::Key_Home;
+                break;
+            case KEY_END:
+                nRetCode = Qt::Key_End;
+                break;
+            case KEY_PAGEUP:
+                nRetCode = Qt::Key_PageUp;
+                break;
+            case KEY_PAGEDOWN:
+                nRetCode = Qt::Key_PageDown;
+                break;
+            case KEY_RETURN:
+                nRetCode = Qt::Key_Return;
+                break;
+            case KEY_ESCAPE:
+                nRetCode = Qt::Key_Escape;
+                break;
+            case KEY_TAB:
+                nRetCode = Qt::Key_Tab;
+                break;
+            case KEY_BACKSPACE:
+                nRetCode = Qt::Key_Backspace;
+                break;
+            case KEY_SPACE:
+                nRetCode = Qt::Key_Space;
+                break;
+            case KEY_INSERT:
+                nRetCode = Qt::Key_Insert;
+                break;
+            case KEY_DELETE:
+                nRetCode = Qt::Key_Delete;
+                break;
+            case KEY_ADD:
+                nRetCode = Qt::Key_Plus;
+                break;
+            case KEY_SUBTRACT:
+                nRetCode = Qt::Key_Minus;
+                break;
+            case KEY_MULTIPLY:
+                nRetCode = Qt::Key_Asterisk;
+                break;
+            case KEY_DIVIDE:
+                nRetCode = Qt::Key_Slash;
+                break;
+            case KEY_POINT:
+                nRetCode = Qt::Key_Period;
+                break;
+            case KEY_COMMA:
+                nRetCode = Qt::Key_Comma;
+                break;
+            case KEY_LESS:
+                nRetCode = Qt::Key_Less;
+                break;
+            case KEY_GREATER:
+                nRetCode = Qt::Key_Greater;
+                break;
+            case KEY_EQUAL:
+                nRetCode = Qt::Key_Equal;
+                break;
+            case KEY_FIND:
+                nRetCode = Qt::Key_Find;
+                break;
+            case KEY_CONTEXTMENU:
+                nRetCode = Qt::Key_Menu;
+                break;
+            case KEY_HELP:
+                nRetCode = Qt::Key_Help;
+                break;
+            case KEY_UNDO:
+                nRetCode = Qt::Key_Undo;
+                break;
+            case KEY_REPEAT:
+                nRetCode = Qt::Key_Redo;
+                break;
+            case KEY_TILDE:
+                nRetCode = Qt::Key_AsciiTilde;
+                break;
+            case KEY_QUOTELEFT:
+                nRetCode = Qt::Key_QuoteLeft;
+                break;
+            case KEY_BRACKETLEFT:
+                nRetCode = Qt::Key_BracketLeft;
+                break;
+            case KEY_BRACKETRIGHT:
+                nRetCode = Qt::Key_BracketRight;
+                break;
+            case KEY_SEMICOLON:
+                nRetCode = Qt::Key_Semicolon;
+                break;
+
+            // Special cases
+            case KEY_COPY:
+                nRetCode = Qt::Key_Copy;
+                break;
+            case KEY_CUT:
+                nRetCode = Qt::Key_Cut;
+                break;
+            case KEY_PASTE:
+                nRetCode = Qt::Key_Paste;
+                break;
+            case KEY_OPEN:
+                nRetCode = Qt::Key_Open;
+                break;
+        }
+    }
+
+    if (vclKeyCode.IsShift())
+        nRetCode += Qt::SHIFT;
+    if (vclKeyCode.IsMod1())
+        nRetCode += Qt::CTRL;
+    if (vclKeyCode.IsMod2())
+        nRetCode += Qt::ALT;
+
+    QKeySequence keySeq(nRetCode);
+    OUString sKeyName = toOUString(keySeq.toString());
+
+    return sKeyName;
 }
 
 bool Qt5Frame::MapUnicodeToKeyCode(sal_Unicode /*aUnicode*/, LanguageType /*aLangType*/,


More information about the Libreoffice-commits mailing list