Ignore:
Timestamp:
Dec 11, 2001, 6:34:53 PM (24 years ago)
Author:
sandervl
Message:

hook, scancode + altgr fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/user32/oslibmsgtranslate.cpp

    r7370 r7612  
    1 /* $Id: oslibmsgtranslate.cpp,v 1.77 2001-11-16 17:47:04 phaller Exp $ */
     1/* $Id: oslibmsgtranslate.cpp,v 1.78 2001-12-11 17:34:53 sandervl Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    614614        // winMsg->wParam  = pmscan2winkey[scanCode][0];
    615615        // wWinScan  = pmscan2winkey[scanCode][1];
    616       
     616     
    617617      {
    618618        BOOL  fWinExtended;
     
    632632        // Set the extended bit when appropriate
    633633        if (fWinExtended)
    634             winMsg->lParam = winMsg->lParam | (1<<24);
     634            winMsg->lParam = winMsg->lParam | WIN_KEY_EXTENDED;
    635635      }
    636636
     
    640640            winMsg->wParam = virtualKey + 0x30;
    641641     
    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     
    648645        if (usPMScanCode == PMSCAN_ALTRIGHT)
    649646        {
     
    661658          {
    662659            winMsg->message = WINWM_SYSKEYUP;
    663             winMsg->lParam |= 1 << 29;                              // bit 29, alt was pressed
    664             winMsg->lParam |= 1 << 30;                              // bit 30, previous state, always 1 for a WM_KEYUP message
     660            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
    665662            winMsg->lParam |= 1 << 31;                              // bit 31, transition state, always 1 for WM_KEYUP
    666663           
     
    675672            winMsg->lParam |= WIN_KEY_ALTHELD;
    676673            if (keyWasPressed)
    677               winMsg->lParam |= 1 << 30;                          // bit 30, previous state, 1 means key was pressed
     674              winMsg->lParam |= WIN_KEY_PREVSTATE;     // bit 30, previous state, 1 means key was pressed
    678675            winMsg->message = WINWM_KEYDOWN;
    679676           
     
    689686            // KeySetOverlayKeyState(VK_RMENU_W, KEYOVERLAYSTATE_DOWN);
    690687          }
    691          
    692           break;
    693         }
    694      
     688        }     
     689#endif
    695690     
    696691        if (!(flags & KC_ALT))
     
    719714            }
    720715           
    721             winMsg->lParam |= 1 << 30;                              // bit 30, previous state, always 1 for a WM_KEYUP message
     716            winMsg->lParam |= WIN_KEY_PREVSTATE;                    // bit 30, previous state, always 1 for a WM_KEYUP message
    722717            winMsg->lParam |= 1 << 31;                              // bit 31, transition state, always 1 for WM_KEYUP
    723718          }
     
    727722            winMsg->message = WINWM_KEYDOWN;
    728723            if (keyWasPressed)
    729               winMsg->lParam |= 1 << 30;                          // bit 30, previous state, 1 means key was pressed
     724              winMsg->lParam |= WIN_KEY_PREVSTATE;                  // bit 30, previous state, 1 means key was pressed
    730725          }
    731726        }
     
    739734            // send WM_SYSKEYUP message
    740735            winMsg->message = WINWM_SYSKEYUP;
    741             winMsg->lParam |= 1 << 30;                              // bit 30, previous state, always 1 for a WM_KEYUP message
     736            winMsg->lParam |= WIN_KEY_PREVSTATE;                    // bit 30, previous state, always 1 for a WM_KEYUP message
    742737            winMsg->lParam |= 1 << 31;                              // bit 31, transition state, always 1 for WM_KEYUP
    743738          }
     
    747742            winMsg->message = WINWM_SYSKEYDOWN;
    748743            if (keyWasPressed)
    749               winMsg->lParam |= 1 << 30;                          // bit 30, previous state, 1 means key was pressed
     744              winMsg->lParam |= WIN_KEY_PREVSTATE;                  // bit 30, previous state, 1 means key was pressed
    750745
    751746            // pressed ALT-key generates additional flag 0x2000000
    752747            // if the current window has keyboard focus
    753             winMsg->lParam |= 1 << 29;
     748            winMsg->lParam |= WIN_KEY_ALTHELD;
    754749          }
    755750        }
     
    761756            }
    762757        }
     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
    763791        break;
    764792    }
     
    915943  UCHAR ucPMScanCode = CHAR4FROMMP(teb->o.odin.os2msg.mp1);
    916944  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 
    955946 
    956947    //NOTE: These actually need to be posted so that the next message retrieved by GetMessage contains
     
    1006997      extramsg.lParam = msg->lParam & 0x00FFFFFF;
    1007998      if(fl & KC_ALT)
    1008         extramsg.lParam |= (1<<29);
     999        extramsg.lParam |= WIN_KEY_ALTHELD;
    10091000      if(fl & KC_PREVDOWN)
    1010         extramsg.lParam |= (1<<30);
     1001        extramsg.lParam |= WIN_KEY_PREVSTATE;
    10111002      if(fl & KC_KEYUP)
    10121003        extramsg.lParam |= (1<<31);
Note: See TracChangeset for help on using the changeset viewer.