PluggableTextMorph maintains its own selectionInterval.

When the PluggableTextMorph >>selectionInterval: it is called it sets the
selection in the model.
This will trigger MorphicTextAdapter>>setSelectionFromModel: that should
adapt the selection in the morph:
MorphicTextAdapter >>setSelectionFromModel: aSelection
self widget ifNotNil: [:w |
w selectionInterval ~= aSelection ifTrue: [
 w setSelection: aSelection ]].

However, the second test (w selectionInterval ~= aSelection) will always
return false. This is because
PluggableTextMorph>>selectionInterval has the following implementation
 '^ textMorph editor selectionInterval'

And in the editor the selection is already correct (even
before  PluggableTextMorph >>selectionInterval: is called).

Actually most of the methods from PluggableTextMorph that change the
selection also explicitly update the
selectionInterval instance variable.

So the previous solution should work.

@Doru this is related with Spec, so we should not have it in Glamour.



On Fri, Dec 27, 2013 at 5:07 PM, Benjamin <
[email protected]> wrote:

> I think that when the model is notified, it will set it in the morph
> So it will happen twice
>
> Ben
>
> On 27 Dec 2013, at 15:52, Andrei Chis <[email protected]> wrote:
>
> Wouldn't then explicitly setting the selection of the morph before setting
> it in the model be ok?
>
> PluggableTextMorph>>selectionInterval: sel
>         selectionInterval := sel.
> setSelectionSelector
>  ifNotNil: [ self model perform:setSelectionSelector with: sel ]
>
>
> On Fri, Dec 27, 2013 at 4:28 PM, Benjamin <
> [email protected]> wrote:
>
>> ok :(
>> Then I run out of brilliant idea :P
>>
>>
>> Ben
>>
>> On 27 Dec 2013, at 15:25, Andrei Chis <[email protected]> wrote:
>>
>> Adding 'self changed' at the end of the current 
>> PluggableTextMorph>>selectionInterval:
>> doesn't solve the problem.
>>
>>
>> On Fri, Dec 27, 2013 at 4:15 PM, Benjamin <
>> [email protected]> wrote:
>>
>>> Because when the focus changes, the morph is proposed to redraw itself
>>> Try with a
>>>
>>>     self changed
>>>
>>> at the end
>>>
>>> Ben
>>>
>>> On 27 Dec 2013, at 14:44, Andrei Chis <[email protected]>
>>> wrote:
>>>
>>>
>>> The change that seems to have caused this problem is in
>>> PluggableTextMorph>>selectionInterval: The selectionInterval instance
>>> variable of the morph is not set any more; only the model is updated, which
>>> doesn't seem to update the morph.
>>>
>>> PluggableTextMorph>>selectionInterval: sel
>>> setSelectionSelector
>>> ifNil: [ selectionInterval := sel ]
>>>  ifNotNil: [ self model perform:setSelectionSelector with: sel ]
>>>
>>> This could be solved like bellow, though I'm not sure it is the best
>>> solution.
>>> If I put a halt in PluggableTextMorph >>inspectIt and hit proceed the
>>> the selection is inspected correctly, without this modification.
>>>
>>> PluggableTextMorph>>selectionInterval: sel
>>>         selectionInterval := sel.
>>> setSelectionSelector
>>> ifNotNil: [ self model perform:setSelectionSelector with: sel ]
>>>
>>>
>>>
>>>
>>>
>>> On Fri, Dec 27, 2013 at 3:11 PM, Marcus Denker 
>>> <[email protected]>wrote:
>>>
>>>>
>>>> On 27 Dec 2013, at 13:01, Stéphane Ducasse <[email protected]>
>>>> wrote:
>>>>
>>>> > Hi guys
>>>> >
>>>> > we should not let the system in such state. We cannot inspect print
>>>> expression in the debugger.
>>>> > Does anybody have an idea of the change that broke it?
>>>> >
>>>> Yes:
>>>>
>>>>         https://pharo.fogbugz.com/f/cases/12144/TextModel-getSelection
>>>>
>>>> it was added in 655, so for reverting the easiest is to dl 654, do a
>>>> merge and look at all the changes
>>>> (there are just 4-5 that are not re-catorizations).
>>>>
>>>> This is on my TODO next…
>>>>
>>>>         Marcus
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>

Reply via email to