This sounds like it was in the middle of a conversation offlist :)

lb wrote:
Hi??Michal
I used Pharo 3 or 4 and happened to the similar problem, l found: (Pls notice the Bold Part)

 HandMorph>>generateKeyboardEvent: evtBuf
 "Generate the appropriate mouse event for the given raw event buffer"
| buttons modifiers type pressType stamp charCode keyValue keyEvent |
 stamp := evtBuf second.
 stamp = 0 ifTrue: [stamp := Time millisecondClockValue].
 pressType := evtBuf fourth.
 pressType = EventKeyDown
  ifTrue: [
   type := #keyDown.
   lastKeyScanCode := evtBuf third].
 pressType = EventKeyUp ifTrue: [type := #keyUp].
 pressType = EventKeyChar ifTrue: [
  type := #keystroke].
 modifiers := evtBuf fifth.
 buttons := modifiers bitShift: 3.
 keyValue := evtBuf third.
 charCode := evtBuf sixth.

* "Adjustments to provide consistent key value data for different VM's :*
* - charCode always contains unicode code point.*
*  - keyValue contains 0 if input is outside legacy range "*
* "If there is no unicode data in the event, assume keyValue contains a correct (<256) Unicode codepoint, and use that"*
* (charCode isNil*
*  or: [charCode = 0])*
*  ifTrue: [charCode := keyValue].*
* "If charCode is not single-byte, we definately have Unicode input. Nil keyValue to avoid garbage values from some VMs." *
* charCode > 255 ifTrue: [keyValue := 0].*

 type = #keystroke
  ifTrue: [combinedChar
   ifNil: [
    | peekedEvent |
    peekedEvent := Sensor peekEvent.
    (peekedEvent notNil
     and: [peekedEvent fourth = EventKeyDown])
     ifTrue: [
      (CombinedChar isCompositionCharacter: charCode)
       ifTrue: [
        combinedChar := CombinedChar new.
        combinedChar simpleAdd: charCode asCharacter.
        (combinedChar combinesWith: peekedEvent third asCharacter)
         ifTrue: [^nil].
        ]]]
   ifNotNil: [
    (combinedChar simpleAdd: charCode asCharacter)
     ifTrue: [charCode := combinedChar combined charCode].
    combinedChar := nil]].
 self flag: #fixme.
"This piece of code handles the creation of scrolling events. When a scroll is done by the user, the VM forwards a keystroke event with the up/down key. So we reconvert it to a MouseWheelEvent in that case." (type = #keystroke and: [(buttons anyMask: 16)
   and: [charCode = 30 or: [charCode = 31]]])
  ifTrue: [^MouseWheelEvent new
     setType: #mouseWheel
     position: lastMouseEvent cursorPoint
     direction: (charCode = 30 ifTrue: [#up] ifFalse: [#down])
     buttons: buttons
     hand: self
     stamp: stamp].
 keyEvent := KeyboardEvent new
  setType: type
  buttons: buttons
  position: self position
  keyValue: keyValue
  charCode: charCode
  hand: self
  stamp: stamp.
 keyEvent scanCode: lastKeyScanCode.
 ^keyEvent



MayBe it works.

Have a fun!

BingLiang





Reply via email to