Changeset 7612 for trunk/src/user32/oslibmsgtranslate.cpp
- Timestamp:
- Dec 11, 2001, 6:34:53 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/user32/oslibmsgtranslate.cpp
r7370 r7612 1 /* $Id: oslibmsgtranslate.cpp,v 1.7 7 2001-11-16 17:47:04 phallerExp $ */1 /* $Id: oslibmsgtranslate.cpp,v 1.78 2001-12-11 17:34:53 sandervl Exp $ */ 2 2 /* 3 3 * Window message translation functions for OS/2 … … 614 614 // winMsg->wParam = pmscan2winkey[scanCode][0]; 615 615 // wWinScan = pmscan2winkey[scanCode][1]; 616 616 617 617 { 618 618 BOOL fWinExtended; … … 632 632 // Set the extended bit when appropriate 633 633 if (fWinExtended) 634 winMsg->lParam = winMsg->lParam | (1<<24);634 winMsg->lParam = winMsg->lParam | WIN_KEY_EXTENDED; 635 635 } 636 636 … … 640 640 winMsg->wParam = virtualKey + 0x30; 641 641 642 643 #define WIN_KEY_EXTENDED 0x01000000 644 #define WIN_KEY_DONTCARE 0x02000000 645 #define WIN_KEY_ALTHELD 0x20000000 646 #define WIN_KEY_PREVSTATE 0x40000000 647 642 643 #ifdef ALTGR_HACK 644 648 645 if (usPMScanCode == PMSCAN_ALTRIGHT) 649 646 { … … 661 658 { 662 659 winMsg->message = WINWM_SYSKEYUP; 663 winMsg->lParam |= 1 << 29;// bit 29, alt was pressed664 winMsg->lParam |= 1 << 30;// bit 30, previous state, always 1 for a WM_KEYUP message660 winMsg->lParam |= WIN_KEY_ALTHELD; // bit 29, alt was pressed 661 winMsg->lParam |= WIN_KEY_PREVSTATE; // bit 30, previous state, always 1 for a WM_KEYUP message 665 662 winMsg->lParam |= 1 << 31; // bit 31, transition state, always 1 for WM_KEYUP 666 663 … … 675 672 winMsg->lParam |= WIN_KEY_ALTHELD; 676 673 if (keyWasPressed) 677 winMsg->lParam |= 1 << 30;// bit 30, previous state, 1 means key was pressed674 winMsg->lParam |= WIN_KEY_PREVSTATE; // bit 30, previous state, 1 means key was pressed 678 675 winMsg->message = WINWM_KEYDOWN; 679 676 … … 689 686 // KeySetOverlayKeyState(VK_RMENU_W, KEYOVERLAYSTATE_DOWN); 690 687 } 691 692 break; 693 } 694 688 } 689 #endif 695 690 696 691 if (!(flags & KC_ALT)) … … 719 714 } 720 715 721 winMsg->lParam |= 1 << 30;// bit 30, previous state, always 1 for a WM_KEYUP message716 winMsg->lParam |= WIN_KEY_PREVSTATE; // bit 30, previous state, always 1 for a WM_KEYUP message 722 717 winMsg->lParam |= 1 << 31; // bit 31, transition state, always 1 for WM_KEYUP 723 718 } … … 727 722 winMsg->message = WINWM_KEYDOWN; 728 723 if (keyWasPressed) 729 winMsg->lParam |= 1 << 30;// bit 30, previous state, 1 means key was pressed724 winMsg->lParam |= WIN_KEY_PREVSTATE; // bit 30, previous state, 1 means key was pressed 730 725 } 731 726 } … … 739 734 // send WM_SYSKEYUP message 740 735 winMsg->message = WINWM_SYSKEYUP; 741 winMsg->lParam |= 1 << 30;// bit 30, previous state, always 1 for a WM_KEYUP message736 winMsg->lParam |= WIN_KEY_PREVSTATE; // bit 30, previous state, always 1 for a WM_KEYUP message 742 737 winMsg->lParam |= 1 << 31; // bit 31, transition state, always 1 for WM_KEYUP 743 738 } … … 747 742 winMsg->message = WINWM_SYSKEYDOWN; 748 743 if (keyWasPressed) 749 winMsg->lParam |= 1 << 30;// bit 30, previous state, 1 means key was pressed744 winMsg->lParam |= WIN_KEY_PREVSTATE; // bit 30, previous state, 1 means key was pressed 750 745 751 746 // pressed ALT-key generates additional flag 0x2000000 752 747 // if the current window has keyboard focus 753 winMsg->lParam |= 1 << 29;748 winMsg->lParam |= WIN_KEY_ALTHELD; 754 749 } 755 750 } … … 761 756 } 762 757 } 758 759 #ifdef ALTGR_HACK 760 // it's a PMSCAN_ALTRIGHT WM_CHAR message? 761 // and not previously translated? 762 if(fMsgRemoved && usPMScanCode == PMSCAN_ALTRIGHT && !(teb->o.odin.fTranslated)) 763 { 764 dprintf(("Queue ALTRIGHT message")); 765 // special ALTRIGHT treatment: 766 // we try to insert another WM_KEYDOWN or WM_KEYUP instead of 767 // the usual WM_CHAR which is expected here. 768 // -> experimental 769 // it's really an OS/2-style WM_CHAR message? 770 MSG extramsg; 771 memcpy(&extramsg, winMsg, sizeof(MSG)); 772 773 // AltGr is not released with WINWM_SYSKEYUP, but WINWM_KEYUP 774 if(flags & KC_KEYUP) 775 { 776 extramsg.message = WINWM_KEYUP; 777 } 778 extramsg.wParam = VK_RMENU_W; 779 780 // mask out message bits and scan code 781 extramsg.lParam &= (0xDC00FFFF); 782 extramsg.lParam |= (WINSCAN_ALTRIGHT & 0x1FF) << 16; 783 //// extramsg.lParam |= WIN_KEY_EXTENDED; 784 if (!(flags & KC_KEYUP)) 785 extramsg.lParam |= WIN_KEY_ALTHELD; 786 787 // insert message into the queue 788 setThreadQueueExtraCharMessage(teb, &extramsg); 789 } 790 #endif 763 791 break; 764 792 } … … 915 943 UCHAR ucPMScanCode = CHAR4FROMMP(teb->o.odin.os2msg.mp1); 916 944 ULONG fl = SHORT1FROMMP(teb->o.odin.os2msg.mp1); 917 918 919 // special ALTRIGHT treatment: 920 // we try to insert another WM_KEYDOWN or WM_KEYUP instead of 921 // the usual WM_CHAR which is expected here. 922 // -> experimental 923 if (ucPMScanCode == PMSCAN_ALTRIGHT) 924 { 925 // it's really an OS/2-style WM_CHAR message? 926 // and not previously translated? 927 if ( ( (teb->o.odin.os2msg.msg != WM_CHAR) && 928 (teb->o.odin.os2msg.msg != WM_CHAR_SPECIAL) ) || 929 (teb->o.odin.fTranslated) ) 930 return FALSE; 931 932 memcpy(&extramsg, msg, sizeof(MSG)); 933 934 // AltGr is not released with WINWM_SYSKEYUP, but WINWM_KEYUP 935 if (fl & KC_KEYUP) 936 { 937 extramsg.message = WINWM_KEYUP; 938 } 939 940 941 extramsg.wParam = VK_RMENU_W; 942 943 // mask out message bits and scan code 944 extramsg.lParam &= (0xDC00FFFF); 945 extramsg.lParam |= (WINSCAN_ALTRIGHT & 0x1FF) << 16; 946 extramsg.lParam |= WIN_KEY_EXTENDED; 947 if (!(fl & KC_KEYUP)) 948 extramsg.lParam |= WIN_KEY_ALTHELD; 949 950 // insert message into the queue 951 setThreadQueueExtraCharMessage(teb, &extramsg); 952 953 return TRUE; 954 } 945 955 946 956 947 //NOTE: These actually need to be posted so that the next message retrieved by GetMessage contains … … 1006 997 extramsg.lParam = msg->lParam & 0x00FFFFFF; 1007 998 if(fl & KC_ALT) 1008 extramsg.lParam |= (1<<29);999 extramsg.lParam |= WIN_KEY_ALTHELD; 1009 1000 if(fl & KC_PREVDOWN) 1010 extramsg.lParam |= (1<<30);1001 extramsg.lParam |= WIN_KEY_PREVSTATE; 1011 1002 if(fl & KC_KEYUP) 1012 1003 extramsg.lParam |= (1<<31);
Note:
See TracChangeset
for help on using the changeset viewer.