Ignore:
Timestamp:
Aug 8, 2003, 3:30:22 PM (22 years ago)
Author:
sandervl
Message:

KOM: WM_IME_CHAR generation + processing added for DBCS input

File:
1 edited

Legend:

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

    r10212 r10216  
    1 /* $Id: oslibmsgtranslate.cpp,v 1.114 2003-08-06 11:00:45 sandervl Exp $ */
     1/* $Id: oslibmsgtranslate.cpp,v 1.115 2003-08-08 13:30:19 sandervl Exp $ */
    22/*
    33 * Window message translation functions for OS/2
     
    720720        WORD  wWinScan;
    721721
    722         if ( (!IsDBCSEnv() && scanCode == 0) || 
    723              (scanCode==0 ) && !( flags & KC_CHAR ) ) 
     722        if ( (!IsDBCSEnv() && scanCode == 0) ||
     723             (scanCode==0 ) && !( flags & KC_CHAR ) )
    724724        {
    725725            goto dummymessage;
     
    746746            if( CHAR2FROMMP( os2Msg->mp2 ))     // DBCS character
    747747            {
     748                CHAR dbcsCh[ 2 ] = { CHAR1FROMMP( os2Msg->mp2 ), CHAR2FROMMP( os2Msg->mp2 )};
     749
    748750                if( isUnicode )
    749751                {
    750                     char  dbcsCh[] = { CHAR1FROMMP( os2Msg->mp2 ), CHAR2FROMMP( os2Msg->mp2 ), 0 };
    751                     WCHAR uniChar[ 2 ];
    752 
    753                     lstrcpynAtoW(( LPWSTR )&uniChar, ( LPCSTR )&dbcsCh, 2 );
    754                     winMsg->wParam = ( WPARAM )uniChar[ 0 ];
     752                    WCHAR  uniChar;
     753
     754                    MultiByteToWideChar( CP_ACP, 0, dbcsCh, 2, &uniChar, 1 );
     755                    winMsg->wParam = ( WPARAM )uniChar;
    755756                }
    756                 // insert DBCS trail byte for Non-Unicode window
    757                 else if(fMsgRemoved && !(teb->o.odin.fTranslated))
    758                 {
    759                     MSG extramsg;
    760                     memcpy(&extramsg, winMsg, sizeof(MSG));
    761 
    762                     //After SetFocus(0), all keystrokes are converted in WM_SYS*
    763                     extramsg.message = (fIgnoreKeystrokes) ? WINWM_SYSCHAR : WINWM_CHAR;
    764 
    765                     extramsg.wParam = CHAR2FROMMP( os2Msg->mp2 );
    766                     extramsg.lParam = 0;
    767 
    768                     setThreadQueueExtraCharMessage(teb, &extramsg);
    769                 }
     757                else
     758                    winMsg->wParam = ( dbcsCh[ 0 ] << 8 ) | dbcsCh[ 1 ];
    770759            }
    771760        }
     
    830819          else if( scanCode == 0 )
    831820          {
    832             //After SetFocus(0), all keystrokes are converted in WM_SYS*
    833             winMsg->message = (fIgnoreKeystrokes) ? WINWM_SYSCHAR :  WINWM_CHAR;
     821            if( CHAR2FROMMP( os2Msg->mp2 ))
     822                winMsg->message = WINWM_IME_CHAR;
     823            else
     824            {
     825                //After SetFocus(0), all keystrokes are converted in WM_SYS*
     826                winMsg->message = (fIgnoreKeystrokes) ? WINWM_SYSCHAR :  WINWM_CHAR;
     827            }
    834828          }
    835829          else
Note: See TracChangeset for help on using the changeset viewer.