[squeak-dev] The Trunk: Kernel-mt.1288.mcz

commits at source.squeak.org commits at source.squeak.org
Mon Dec 16 08:06:53 UTC 2019


Marcel Taeumel uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-mt.1288.mcz

==================== Summary ====================

Name: Kernel-mt.1288
Author: mt
Time: 16 December 2019, 9:06:49.662845 am
UUID: 3e88e0c8-27ef-dc4a-9017-227b63e2ce72
Ancestors: Kernel-mt.1286

Clean up documentation and code of latest key-code fix. Thanks Nicolas (nice) for the tip!

=============== Diff against Kernel-mt.1286 ===============

Item was changed:
  ----- Method: EventSensor class>>installDuplicateKeyEntryFor: (in category 'key decode table') -----
+ installDuplicateKeyEntryFor: aPrintableCharacter
+ 	"Updates the key-decode table, which maps between pairs of {character code . modifier code}. See the class comment for more information.
+ 	Note that the bitmask 16r9F removes the high bits, which subtracts 64 from the key code for (upper) $A to $Z and 96 for (lower) $a to $z. The VM sends non-printable control characters for [ctrl]+[A-Za-Z] in ASCII < 32, but the given character is expected to be ASCII >= 32 and thus printable. So we have to convert printable characters to control characters in this mapping table."
- installDuplicateKeyEntryFor: c
- 	"Updates key-decode table. The table maps pairs of {character code . modifier code}. See the class comment for more information. Note that the bitmask 16r9F is used to convert control characters (ascii 0 to 31) to printable characters."
  
  	| upper lower |
+ 	upper := aPrintableCharacter asUppercase asInteger.
+ 	lower := aPrintableCharacter asLowercase asInteger.
- 	upper := c asUppercase asInteger.
- 	lower := c asLowercase asInteger.
  	
  	KeyDecodeTable at: { lower bitAnd: 16r9F . 2 "ctrl" } put: { lower . 8 "cmd/alt" }.
  	KeyDecodeTable at: { upper bitAnd: 16r9F . 2 bitOr: 1 "ctrl+shift" } put: { upper . 8 bitOr: 1 "cmd/alt+shift" }.
  !

Item was changed:
  ----- Method: EventSensor class>>installSwappedKeyEntryFor: (in category 'key decode table') -----
+ installSwappedKeyEntryFor: aPrintableCharacter
+ 	"Updates the key-decode table, which maps between pairs of {character code . modifier code}. See the class comment for more information.
+ 	Note that the bitmask 16r9F removes the high bits, which subtracts 64 from the key code for (upper) $A to $Z and 96 for (lower) $a to $z. The VM sends non-printable control characters for [ctrl]+[A-Za-Z] in ASCII < 32, but the given character is expected to be ASCII >= 32 and thus printable. So we have to convert printable characters to control characters in this mapping table."
- installSwappedKeyEntryFor: c
- 	"Updates key-decode table. The table maps pairs of {character code . modifier code}. See the class comment for more information. Note that the bitmask 16r9F is used to convert control characters (ascii 0 to 31) to printable characters."
  
  	| upper lower |
+ 	upper := aPrintableCharacter asUppercase asInteger.
+ 	lower := aPrintableCharacter asLowercase asInteger.
- 	upper := c asUppercase asInteger.
- 	lower := c asLowercase asInteger.
  	
  	KeyDecodeTable at: { lower bitAnd: 16r9F . 2 "ctrl" } put: { lower . 8 "cmd/alt" }.
  	KeyDecodeTable at: { lower . 8 "cmd/alt" } put: { lower bitAnd: 16r9F . 2 "ctrl" }.
  	KeyDecodeTable at: { upper bitAnd: 16r9F . 2 bitOr: 1 "ctrl+shift" } put: { upper . 8 bitOr: 1 "cmd/alt+shift" }.
  	KeyDecodeTable at: { upper . 8 bitOr: 1 "cmd/alt+shift" } put: { upper bitAnd: 16r9F . 2 bitOr: 1 "ctrl+shift" }.!

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.
  
  	"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 = EventTypeMouse ifTrue: [self processMouseEvent: evt].
  				type = EventTypeMouseWheel ifTrue: [self processMouseWheelEvent: evt].				
  				^self].
  	
  	"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
- 			((evt at: 4) = 0
  				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 (i.e., duplicate or swap, ctrl <-> alt/cmd)."
+ 			(evt at: 4) = EventKeyChar
+ 				ifTrue: [ 
+ 					KeyDecodeTable "Unicode character first"
+ 						at: {evt at: 6. evt at: 5}
+ 						ifPresent: [:a | evt at: 6 put: a first;
+ 								 at: 5 put: a second]. 
+ 					KeyDecodeTable "ASCII character second"
+ 						at: {evt at: 3. evt at: 5}
+ 						ifPresent: [:a | evt at: 3 put: a first;
+ 								 at: 5 put: a second]]. 
- 			"Else swap ctrl/alt keys if neeeded.
- 			Look at the Unicode char first, then ascii."
- 			(evt at: 4) = 0 "key stroke only" ifTrue: [
- 				KeyDecodeTable
- 					at: {evt at: 6. evt at: 5}
- 					ifPresent: [:a | evt at: 6 put: a first;
- 							 at: 5 put: a second]. 
- 				KeyDecodeTable
- 					at: {evt at: 3. evt at: 5}
- 					ifPresent: [:a | evt at: 3 put: a first;
- 							 at: 5 put: a second]]. 
  			self queueEvent: evt. 
  			self processKeyboardEvent: evt . 
  			^self ].
  				
+ 	"Handle all events other than Keyboard or Mouse."
- 	"Handle all events other than Keyborad or Mouse."
  	self queueEvent: evt.
  	!



More information about the Squeak-dev mailing list