[squeak-dev] The Trunk: System-mt.1405.mcz

commits at source.squeak.org commits at source.squeak.org
Wed Mar 29 11:56:32 UTC 2023


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

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

Name: System-mt.1405
Author: mt
Time: 29 March 2023, 1:56:30.174927 pm
UUID: 0ff6d772-c400-ec4b-98db-219158b3a7dd
Ancestors: System-mt.1404

Try to use the extended clipboard for both set/get contents. Gracefully fallback to the old primitive. Retain in-image buffer (and text attributes) when string contents are unchanged.

Note that there is no #getClipboardData: but only #readClipboardData:.

=============== Diff against System-mt.1404 ===============

Item was changed:
  ----- Method: Clipboard>>clipboardText (in category 'accessing') -----
  clipboardText
+ 	"Answer the text currently in the (system) clipboard. To preserve image-specifc formatting, simply answer the text from an in-image buffer UNLESS that buffer differs from what is in the system clipboard. Also use that buffer if the sytem clipboard got cleared by some other application."
- 	"Return the text currently in the clipboard. If the system clipboard is empty, or if it differs from the Smalltalk clipboard text, use the Smalltalk clipboard. This is done since (a) the Mac clipboard gives up on very large chunks of text and (b) since not all platforms support the notion of a clipboard."
  
+ 	| systemContents needsDecoding stringOrText  |
+ 	needsDecoding := false.
+ 	systemContents := ExtendedClipboardInterface current readTextClipboardData
+ 		ifNil: [needsDecoding := true.
+ 			self primitiveClipboardText "old primitive"].
+ 	stringOrText := systemContents withSqueakLineEndings.
+ 	(stringOrText isEmpty or: [stringOrText asString = contents asString])
- 	| string decodedString |
- 	string := self primitiveClipboardText withSqueakLineEndings.
- 	(string isEmpty
- 			or: [string = contents asString])
  		ifTrue: [^ contents].
+ 	^ needsDecoding
+ 		ifFalse: [stringOrText asText]
+ 		ifTrue: [ | decodedString | "from old primitive"
+ 			decodedString := self interpreter fromSystemClipboard: stringOrText asString.
+ 			decodedString = contents asString 
+ 				ifTrue: [contents]
+ 				ifFalse: [decodedString asText]].!
- 	decodedString := self interpreter fromSystemClipboard: string.
- 	^ decodedString = contents asString 
- 		ifTrue: [contents]
- 		ifFalse: [decodedString asText].
- !

Item was changed:
  ----- Method: Clipboard>>clipboardText: (in category 'accessing') -----
  clipboardText: text 
+ 
+ 	self clipboardText: text notifyWith: nil!
- 	(ExtendedClipboardInterface current clipboardText: text) ifFalse:
- 		[self clipboardText: text notifyWith: nil]!

Item was changed:
  ----- Method: Clipboard>>clipboardText:notifyWith: (in category 'accessing') -----
+ clipboardText: stringOrText notifyWith: anObject
+ 	"Set the contents of the (system) clipboard. anObject can be used as a marker for the source of the clipboard change, the default value is nil. Try to use the extended interface so that, e.g., rich text can be encoded and transported to other applications."
- clipboardText: text notifyWith: anObject
- 	"Set the contents of the clipboard to text. anObject can be used as a marker for the source of the clipboard change, the default value is nil."
  
+ 	| newContents |
+ 	newContents := stringOrText asText.
+ 	self noteRecentClipping: newContents.
+ 	contents := newContents. "Preserve in-image attributes. See #clipboardText."
+ 	
+ 	(ExtendedClipboardInterface current clipboardText: newContents)
+ 		ifFalse: [ | string |
+ 			"Extended interface failed. Use old primitive and plain text with system-specific encoding."
+ 			string := newContents asString.
+ 			string := self interpreter toSystemClipboard: string.
+ 			self primitiveClipboardText: string].
+ 	
+ 	self triggerEvent: #contentChanged withArguments: { newContents. anObject }.!
- 	| string |
- 	string := text asString.
- 	self noteRecentClipping: text asText.
- 	contents := text asText.
- 	string := self interpreter toSystemClipboard: string.
- 	self primitiveClipboardText: string.
- 	self triggerEvent: #contentChanged withArguments: { text. anObject }!

Item was added:
+ ----- Method: ExtendedClipboardInterface>>clipboardText (in category 'general-api-read') -----
+ clipboardText
+ 
+ 	^ self readTextClipboardData ifNil: ['' asText]!

Item was changed:
  ----- Method: ExtendedClipboardInterface>>readStringClipboardData (in category 'general-api-read') -----
  readStringClipboardData
+ 
+ 	^ self readWideStringClipboardData
+ 		ifNil: [self readByteStringClipboardData]!
- 	^ self subclassResponsibility!

Item was changed:
  ----- Method: ExtendedClipboardInterface>>readTextClipboardData (in category 'general-api-read') -----
  readTextClipboardData
+ 	^ self readStringClipboardData ifNotNil: [:string | string asText]!
- 	^ nil!

Item was changed:
  ----- Method: ExtendedClipboardWinInterface>>readByteStringClipboardData (in category 'general-api-read') -----
  readByteStringClipboardData
  
+ 	^ (self hasClipboardData: CF_TEXT)
+ 		ifTrue: [(self readClipboardData: CF_TEXT) asString]!
- 	(self hasClipboardData: 1) "CF_TEXT"
- 		ifFalse: [^ nil].
- 	
- 	^ (self readClipboardData: 1) "CF_TEXT" asString!

Item was changed:
  ----- Method: ExtendedClipboardWinInterface>>readWideStringClipboardData (in category 'general-api-read') -----
  readWideStringClipboardData
  
+ 	^ (self hasClipboardData: CF_UNICODETEXT)
+ 		ifTrue: [((self readClipboardData: CF_UTF8TEXT) changeClassTo: ByteString) utf8ToSqueak]!
- 	(self hasClipboardData: 13) "CF_UNICODETEXT"
- 		ifFalse: [^ nil].
- 	
- 	^((self getClipboardData: CF_UTF8TEXT) changeClassTo: ByteString) utf8ToSqueak!



More information about the Squeak-dev mailing list