Changeset 59377 in vbox
- Timestamp:
- Jan 18, 2016 1:41:06 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 105068
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/runtime
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIKeyboardHandler.cpp
r59373 r59377 813 813 bool UIKeyboardHandler::x11EventFilter(XEvent *pEvent, ulong uScreenId) 814 814 { 815 /* Check if some system event should be filtered-out. 816 * Returning 'true' means filtering-out, 817 * Returning 'false' means passing event to Qt. */ 818 bool fResult = false; /* Pass to Qt by default: */ 815 /* Check if some system event should be filtered out. 816 * Returning @c true means filtering-out, 817 * Returning @c false means passing event to Qt. */ 818 bool fResult = false; /* Pass to Qt by default. */ 819 820 /* Depending on event type: */ 819 821 switch (pEvent->type) 820 822 { … … 850 852 break; 851 853 } 854 /* Watch for key-events: */ 852 855 case XKeyPress: 853 856 case XKeyRelease: 854 857 { 855 /* Translate the keycode to a PC scan code .*/856 unsigned scan = handleXKeyEvent(pEvent->xkey.display, pEvent->xkey.keycode);857 858 /* Scan codes 0x00 (no valid translation) and 0x80are ignored: */859 if (!( scan & 0x7F))858 /* Translate the keycode to a PC scan code: */ 859 unsigned uScan = handleXKeyEvent(pEvent->xkey.display, pEvent->xkey.keycode); 860 861 /* Scan codes 0x00 (no valid translation) and 0x80 (extended flag) are ignored: */ 862 if (!(uScan & 0x7F)) 860 863 { 861 864 fResult = true; … … 874 877 } 875 878 876 KeySym ks = ::wrapXkbKeycodeToKeysym(pEvent->xkey.display, pEvent->xkey.keycode, 0, 0); 877 878 int flags = 0; 879 if (scan >> 8) 880 flags |= KeyExtended; 879 /* Calculate flags: */ 880 int iFlags = 0; 881 if (uScan >> 8) 882 iFlags |= KeyExtended; 881 883 if (pEvent->type == XKeyPress) 882 flags |= KeyPressed;884 iFlags |= KeyPressed; 883 885 884 886 /* Remove the extended flag: */ 885 scan &= 0x7F; 886 887 /* Special Korean keys must send scancode 0xF1/0xF2 when pressed and nothing 888 * when released. 889 */ 890 if (scan == 0x71 || scan == 0x72) 891 { 892 if (pEvent->type == XKeyRelease) /* Ignore. */ 887 uScan &= 0x7F; 888 889 /* Special Korean keys must send scan code 0xF1/0xF2 890 * when pressed and nothing when released. */ 891 if (uScan == 0x71 || uScan == 0x72) 892 { 893 if (pEvent->type == XKeyRelease) 893 894 { 894 895 fResult = true; 895 896 break; 896 897 } 897 scan |= 0x80; /* Re-create the bizarre scancode. */ 898 } 899 898 /* Re-create the bizarre scan code: */ 899 uScan |= 0x80; 900 } 901 902 /* Translate the keycode to a keysym: */ 903 KeySym ks = ::wrapXkbKeycodeToKeysym(pEvent->xkey.display, pEvent->xkey.keycode, 0, 0); 904 905 /* Update special flags: */ 900 906 switch (ks) 901 907 { 902 908 case XK_Print: 903 flags |= KeyPrint;909 iFlags |= KeyPrint; 904 910 break; 905 911 case XK_Pause: … … 907 913 { 908 914 ks = XK_Break; 909 flags |= KeyExtended;910 scan = 0x46;915 iFlags |= KeyExtended; 916 uScan = 0x46; 911 917 } 912 918 else 913 flags |= KeyPause;919 iFlags |= KeyPause; 914 920 break; 915 921 } 916 922 917 fResult = keyEvent(ks, scan, flags, uScreenId); 923 /* Finally, handle parsed key-event: */ 924 fResult = keyEvent(ks, uScan, iFlags, uScreenId); 925 926 break; 918 927 } 919 928 default: 920 929 break; 921 930 } 931 922 932 /* Return result: */ 923 933 return fResult; … … 1513 1523 1514 1524 /* If some key was pressed or some previously pressed key was released => 1515 * we are updating the list of pressed keys and preparing scan codes: */1525 * we are updating the list of pressed keys and preparing scan codes: */ 1516 1526 if ((fFlags & KeyPressed) || (m_pressedKeys[uScan] & uWhatPressed)) 1517 1527 { … … 1522 1532 fixModifierState(pCodes, puCodesCount); 1523 1533 1524 /* Prepend 'extended' scan code if needed: */1534 /* Prepend 'extended' scan code if needed: */ 1525 1535 if (fFlags & KeyExtended) 1526 1536 pCodes[(*puCodesCount)++] = 0xE0; … … 1529 1539 if (fFlags & KeyPressed) 1530 1540 { 1531 /* Append scan code: */1541 /* Append scan code: */ 1532 1542 pCodes[(*puCodesCount)++] = uScan; 1533 1543 m_pressedKeys[uScan] |= uWhatPressed; … … 1536 1546 else if (m_pressedKeys[uScan] & uWhatPressed) 1537 1547 { 1538 /* Append scan code: */1548 /* Append scan code: */ 1539 1549 pCodes[(*puCodesCount)++] = uScan | 0x80; 1540 1550 m_pressedKeys[uScan] &= ~uWhatPressed; -
trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
r59372 r59377 1779 1779 bool UIMachineView::x11Event(XEvent *pEvent) 1780 1780 { 1781 /* Make sure arguments valid: */ 1781 1782 AssertPtrReturn(pEvent, false); 1782 1783 … … 1787 1788 switch (pEvent->type) 1788 1789 { 1790 /* Watch for focus-events: */ 1789 1791 case XFocusIn: 1790 1792 case XFocusOut: 1793 /* Watch for key-events: */ 1791 1794 case XKeyPress: 1792 1795 case XKeyRelease: … … 1806 1809 } 1807 1810 1811 /* Return result: */ 1808 1812 return fResult; 1809 1813 }
Note:
See TracChangeset
for help on using the changeset viewer.