[squeak-dev] wait2ms

Bob Arning arning315 at comcast.net
Fri Feb 8 03:04:11 UTC 2013


There's been something troubling me about this issue - why would 2ms 
mess up keyboard entry? Turns out the 2ms may not be the real problem, 
rather it helps get to the problem in this method from ParagraphEditor:

zapSelectionWithCompositionWith: aString
     "Deselect, and replace the selection text by aString.
      Remember the resulting selectionInterval in UndoInterval and 
otherInterval.
      Do not set up for undo."
     | stream newString aText beforeChar |
     wasComposition := false.
     ((aString isEmpty or: [(beforeChar := self charBefore) isNil]) or: [
         aString size = 1 and: [(Unicode isComposition: aString first) 
not]]) ifTrue: [
             ^ self zapSelectionWith: (Text string: aString emphasis: 
emphasisHere)].
     stream := UnicodeCompositionStream on: (String new: 16).
     stream nextPut: beforeChar.
     stream nextPutAll: aString.
     newString := stream contents.
     aText := Text string: newString emphasis: emphasisHere.
     self markBlock < self pointBlock
         ifTrue: [self setMark: self markBlock stringIndex - 1]
         ifFalse: [self setPoint: self pointBlock stringIndex - 1].
     wasComposition := true.
     self zapSelectionWith: aText.

if aString is more than 1 character long ( several 2ms delays might slow 
processing of characters to allow your fingers to get more into the 
typeAhead buffer), then this bit about
UnicodeCompositionStream takes over and that's when I see screwed up 
keyboard entry.

The test I used was simply repeatedly drumming my fingers over the 123 
keys in a workspace until the cursor jumps back a few chars and inserts 
somwhere other than the end of the workspace. Commenting out the wait2ms 
seems to correct this, but so, apparently, does reducing the method to

zapSelectionWithCompositionWith: aString
     "Deselect, and replace the selection text by aString.
      Remember the resulting selectionInterval in UndoInterval and 
otherInterval.
      Do not set up for undo."

     ^ self zapSelectionWith: (Text string: aString emphasis: emphasisHere)

So, regardless of whether the 2ms is good or not, it looks like there's 
a bug in this unicode addendum.

Cheers,
Bob


On 2/3/13 2:00 PM, David T. Lewis wrote:
> On Sun, Feb 03, 2013 at 10:33:14AM +0100, St??phane Rollandin wrote:
>> Also I found this on the web:
>> http://forum.world.st/Real-Slowdown-of-InputSensor-between-3-8-and-3-9-td62714.html
>>
>> from where it seems that the reason for the wait is related to system
>> window panes resizing logic...
> Stef,
>
> Wow, you just found the cause of our badly broken keyboard entry in MVC :)
>
> Since about Squeak 3.9, keyboard entry (especially on Linux) has had an
> odd latency delay that makes it all but unusable. I just tried commenting
> out the wait2ms, and suddenly keyboard entry is working again. I see no
> immediately obvious ill effects (cpu use does not go too high, and things
> generally still work fine).
>
> It seems that the delay was added back in about 2005, and very likely
> the changes to input events in the Squeak 3.9 time frame caused it to
> become a problem. I'm not sure the right way to fix this, but at least
> now we know the source of the problem.
>
> Thanks!
>
> Dave
>
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20130207/ecb8a79f/attachment.htm


More information about the Squeak-dev mailing list