Marcel Taeumel uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-mt.1405.mcz
==================== Summary ====================
Name: Kernel-mt.1405 Author: mt Time: 29 June 2021, 9:12:17.425032 am UUID: 0c90c979-78a0-8a4a-85b8-35b90f0cbc2d Ancestors: Kernel-dtl.1404
Fixes regression in mapping modifier keys for keyDown/keyUp events on macOS.
The bug was in the VirtualKeyTable, which had an entry for 0 on macOS, but not on Windows and X11 platforms.
=============== Diff against Kernel-dtl.1404 ===============
Item was changed: ----- Method: EventSensor>>processEvent: (in category 'private-I/O') ----- processEvent: evt "Process a single event. This method is run at high priority." | type buttons window | type := evt at: 1. lastEventTime := evt at: 2.
"Only process main window events, forward others to host window proxies" window := evt at: 8. (window isNil or: [window isZero]) ifTrue: [window := 1. evt at: 8 put: window]. window = 1 ifFalse: [ ^Smalltalk at: #HostWindowProxy ifPresent: [:w | w processEvent: evt]].
"Tackle mouse events and mouse wheel events first" (type = EventTypeMouse or: [type = EventTypeMouseWheel]) ifTrue: [buttons := (ButtonDecodeTable at: (evt at: 5) + 1). evt at: 5 put: (Smalltalk platformName = 'Mac OS' ifTrue: [ buttons ] ifFalse: [ self mapButtons: buttons modifiers: (evt at: 6) ]). self queueEvent: evt. type = EventTypeMouseWheel ifTrue: [^ self processMouseWheelEvent: evt]. type = EventTypeMouse ifTrue: [^ self processMouseEvent: evt]]. "Store the event in the queue if there's any" type = EventTypeKeyboard ifTrue: [ "Check if the event is a user interrupt" ((evt at: 4) = EventKeyChar and: [((evt at: 3) bitOr: (((evt at: 5) bitAnd: 8) bitShift: 8)) = interruptKey]) ifTrue: ["interrupt key is meta - not reported as event" ^ interruptSemaphore signal]. "Decode keys for characters (e.g., map ctrl -> cmd)." (evt at: 4) = EventKeyChar ifTrue: [ | unicode ascii | "Copy lookup key first in case of key swap." unicode := {evt at: 6. evt at: 5}. ascii := {evt at: 3. evt at: 5}. KeyDecodeTable "Unicode character first" at: unicode ifPresent: [:a | evt at: 6 put: a first; at: 5 put: a second]. KeyDecodeTable "ASCII character second" at: ascii ifPresent: [:a | evt at: 3 put: a first; at: 5 put: a second]] ifFalse: ["Replace modifiers for virtual keys. (keyUp/keyDown)" + (evt at: 5) > 0 "Any modifier pressed?" ifTrue: [ + VirtualKeyTable + at: ((evt at: 5) bitShift: 8) + ifPresent: [:a | evt at: 5 put: a]]]. - VirtualKeyTable - at: ((evt at: 5) bitShift: 8) - ifPresent: [:a | evt at: 5 put: a]]. self queueEvent: evt. self processKeyboardEvent: evt . ^self ]. "Handle all events other than Keyboard or Mouse." self queueEvent: evt. !
packages@lists.squeakfoundation.org