The Trunk: Tools-mt.668.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Tools-mt.668.mcz

commits-2
Marcel Taeumel uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-mt.668.mcz

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

Name: Tools-mt.668
Author: mt
Time: 1 February 2016, 10:44:38.861285 am
UUID: 88b24b27-f952-4e86-9bd5-be64c8e309e2
Ancestors: Tools-mt.667

Adds support for selective refreshing to object explorer. Just re-select the current selection to refresh it. Item will get highlighted just like automatic monitor refresh to indicate inconsistency of displayed information.

Make the still existing deficiency with volatile object state more descriptive with a pop-up instead of a generic assert error. Now that we support selective refreshing, the user is actually able to refresh and THEN invoke the context menu again.

=============== Diff against Tools-mt.667 ===============

Item was changed:
  ----- Method: ObjectExplorer>>currentSelection: (in category 'accessing') -----
  currentSelection: anObject
 
+ self currentSelection == anObject ifTrue: [
+ self changed: #objectChanged with: anObject.
+ ^ self].
+
- self currentSelection == anObject ifTrue: [^ self].
  currentSelection := anObject.
 
  self changed: #currentSelection.
  self changed: #style.!

Item was changed:
  ----- Method: ObjectExplorer>>explorerKey:from:event: (in category 'menus') -----
  explorerKey: aChar from: view event: event
 
  event anyModifierKeyPressed ifFalse: [^ false].
 
  currentSelection ifNotNil: [
+ self updateInspectorForSelection ifFalse: [^ true].
- self updateInspectorForSelection.
 
  aChar == $i ifTrue: [self inspector inspectSelection. ^ true].
  aChar == $I ifTrue: [self inspector exploreSelection. ^ true].
 
  aChar == $b ifTrue: [self inspector browseMethodFull. ^ true].
  aChar == $h ifTrue: [self inspector classHierarchy. ^ true].
  aChar == $c ifTrue: [Clipboard clipboardText: self currentSelection key. ^ true].
  aChar == $p ifTrue: [self inspector browseFullProtocol. ^ true].
  aChar == $N ifTrue: [self inspector browseClassRefs. ^ true].
  aChar == $t ifTrue: [self inspector tearOffTile. ^ true].
  aChar == $v ifTrue: [self inspector viewerForValue. ^ true]].
 
  ^ false!

Item was changed:
  ----- Method: ObjectExplorer>>genericMenu: (in category 'menus') -----
  genericMenu: aMenu
  "Borrow a menu from my inspector"
 
  currentSelection
  ifNil: [
  aMenu
  add: '*nothing selected*'
  target: self
  selector: #yourself]
  ifNotNil: [
+ self updateInspectorForSelection ifFalse: [^ aMenu].
- self updateInspectorForSelection.
  aMenu defaultTarget: self inspector.
  self inspector fieldListMenu: aMenu.
 
  aMenu addLine;
  add: 'monitor changes'
  target: self
  selector: #monitor:
  argument: currentSelection].
  monitorList isEmptyOrNil
  ifFalse: [aMenu addLine;
  add: 'stop monitoring all'
  target: self
  selector: #stopMonitoring].
  ^ aMenu!

Item was changed:
  ----- Method: ObjectExplorer>>updateInspectorForSelection (in category 'accessing - other') -----
  updateInspectorForSelection
  "Reuse the inspector for some callbacks."
 
  self inspector inspect: (self parentObject ifNil: [self object]).
 
  self parentObject
  ifNil: [self inspector toggleIndex: 1. "self"]
  ifNotNil: [
  self inspector toggleIndex: (self inspector fieldList indexOf: self currentSelection key)].
+
+ self inspector selection == self object
+ ifTrue: [
+ ^ true]
+ ifFalse: [
+ self inform: 'Object has changed. Please refresh\before invoking the context menu.' withCRs.
+ ^ false].!
- self assert: self inspector selection == self object.!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-mt.668.mcz

marcel.taeumel


Best,
Marcel
Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-mt.668.mcz

Karl Ramberg
Really nice changes for ObjectExplorer.
Thank you



Best,
Karl

On Mon, Feb 1, 2016 at 10:23 AM, marcel.taeumel <[hidden email]> wrote:
<http://forum.world.st/file/n4875140/squeak-explorer-refresh.png>

Best,
Marcel



--
View this message in context: http://forum.world.st/The-Trunk-Tools-mt-668-mcz-tp4875137p4875140.html
Sent from the Squeak - Dev mailing list archive at Nabble.com.




Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-mt.668.mcz

Chris Muller-3
In reply to this post by commits-2
Wouldn't it be better to just silently refresh it FOR the user in that
case, rather than bother them with a pop up?

On Mon, Feb 1, 2016 at 3:45 AM,  <[hidden email]> wrote:

> Marcel Taeumel uploaded a new version of Tools to project The Trunk:
> http://source.squeak.org/trunk/Tools-mt.668.mcz
>
> ==================== Summary ====================
>
> Name: Tools-mt.668
> Author: mt
> Time: 1 February 2016, 10:44:38.861285 am
> UUID: 88b24b27-f952-4e86-9bd5-be64c8e309e2
> Ancestors: Tools-mt.667
>
> Adds support for selective refreshing to object explorer. Just re-select the current selection to refresh it. Item will get highlighted just like automatic monitor refresh to indicate inconsistency of displayed information.
>
> Make the still existing deficiency with volatile object state more descriptive with a pop-up instead of a generic assert error. Now that we support selective refreshing, the user is actually able to refresh and THEN invoke the context menu again.
>
> =============== Diff against Tools-mt.667 ===============
>
> Item was changed:
>   ----- Method: ObjectExplorer>>currentSelection: (in category 'accessing') -----
>   currentSelection: anObject
>
> +       self currentSelection == anObject ifTrue: [
> +               self changed: #objectChanged with: anObject.
> +               ^ self].
> +
> -       self currentSelection == anObject ifTrue: [^ self].
>         currentSelection := anObject.
>
>         self changed: #currentSelection.
>         self changed: #style.!
>
> Item was changed:
>   ----- Method: ObjectExplorer>>explorerKey:from:event: (in category 'menus') -----
>   explorerKey: aChar from: view event: event
>
>         event anyModifierKeyPressed ifFalse: [^ false].
>
>         currentSelection ifNotNil: [
> +               self updateInspectorForSelection ifFalse: [^ true].
> -               self updateInspectorForSelection.
>
>                 aChar == $i ifTrue: [self inspector inspectSelection. ^ true].
>                 aChar == $I ifTrue: [self inspector exploreSelection. ^ true].
>
>                 aChar == $b ifTrue:     [self inspector browseMethodFull. ^ true].
>                 aChar == $h ifTrue:     [self inspector classHierarchy. ^ true].
>                 aChar == $c ifTrue: [Clipboard clipboardText: self currentSelection key. ^ true].
>                 aChar == $p ifTrue: [self inspector browseFullProtocol. ^ true].
>                 aChar == $N ifTrue: [self inspector browseClassRefs. ^ true].
>                 aChar == $t ifTrue: [self inspector tearOffTile. ^ true].
>                 aChar == $v ifTrue: [self inspector viewerForValue. ^ true]].
>
>         ^ false!
>
> Item was changed:
>   ----- Method: ObjectExplorer>>genericMenu: (in category 'menus') -----
>   genericMenu: aMenu
>         "Borrow a menu from my inspector"
>
>         currentSelection
>                 ifNil: [
>                         aMenu
>                                 add: '*nothing selected*'
>                                 target: self
>                                 selector: #yourself]
>                 ifNotNil: [
> +                       self updateInspectorForSelection ifFalse: [^ aMenu].
> -                       self updateInspectorForSelection.
>                         aMenu defaultTarget: self inspector.
>                         self inspector fieldListMenu: aMenu.
>
>                         aMenu addLine;
>                                 add: 'monitor changes'
>                                 target: self
>                                 selector: #monitor:
>                                 argument: currentSelection].
>         monitorList isEmptyOrNil
>                 ifFalse: [aMenu addLine;
>                                 add: 'stop monitoring all'
>                                 target: self
>                                 selector: #stopMonitoring].
>         ^ aMenu!
>
> Item was changed:
>   ----- Method: ObjectExplorer>>updateInspectorForSelection (in category 'accessing - other') -----
>   updateInspectorForSelection
>         "Reuse the inspector for some callbacks."
>
>         self inspector inspect: (self parentObject ifNil: [self object]).
>
>         self parentObject
>                 ifNil: [self inspector toggleIndex: 1. "self"]
>                 ifNotNil: [
>                         self inspector toggleIndex: (self inspector fieldList indexOf: self currentSelection key)].
> +
> +       self inspector selection == self object
> +               ifTrue: [
> +                       ^ true]
> +               ifFalse: [
> +                       self inform: 'Object has changed. Please refresh\before invoking the context menu.' withCRs.
> +                       ^ false].!
> -       self assert: self inspector selection == self object.!
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-mt.668.mcz

marcel.taeumel
Hi Chris,

sure, but it is still an indication for a volatile object. HandMorphs, for example, will still change things even if the context menu appears after a refresh.

Best,
Marcel
Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-mt.668.mcz

Levente Uzonyi
In reply to this post by Chris Muller-3
I'd hate if Explorers were not able to keep their state when the explored
obejcts changed. This would make it impossible to explore an object,
change its structure, then open another explorer on it to compare the old
state with the new.
I haven't checked this new "reselect to refresh" feature, but I think it
breaks what I described above.

Levente

On Mon, 1 Feb 2016, Chris Muller wrote:

> Wouldn't it be better to just silently refresh it FOR the user in that
> case, rather than bother them with a pop up?
>
> On Mon, Feb 1, 2016 at 3:45 AM,  <[hidden email]> wrote:
>> Marcel Taeumel uploaded a new version of Tools to project The Trunk:
>> http://source.squeak.org/trunk/Tools-mt.668.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Tools-mt.668
>> Author: mt
>> Time: 1 February 2016, 10:44:38.861285 am
>> UUID: 88b24b27-f952-4e86-9bd5-be64c8e309e2
>> Ancestors: Tools-mt.667
>>
>> Adds support for selective refreshing to object explorer. Just re-select the current selection to refresh it. Item will get highlighted just like automatic monitor refresh to indicate inconsistency of displayed information.
>>
>> Make the still existing deficiency with volatile object state more descriptive with a pop-up instead of a generic assert error. Now that we support selective refreshing, the user is actually able to refresh and THEN invoke the context menu again.
>>
>> =============== Diff against Tools-mt.667 ===============
>>
>> Item was changed:
>>   ----- Method: ObjectExplorer>>currentSelection: (in category 'accessing') -----
>>   currentSelection: anObject
>>
>> +       self currentSelection == anObject ifTrue: [
>> +               self changed: #objectChanged with: anObject.
>> +               ^ self].
>> +
>> -       self currentSelection == anObject ifTrue: [^ self].
>>         currentSelection := anObject.
>>
>>         self changed: #currentSelection.
>>         self changed: #style.!
>>
>> Item was changed:
>>   ----- Method: ObjectExplorer>>explorerKey:from:event: (in category 'menus') -----
>>   explorerKey: aChar from: view event: event
>>
>>         event anyModifierKeyPressed ifFalse: [^ false].
>>
>>         currentSelection ifNotNil: [
>> +               self updateInspectorForSelection ifFalse: [^ true].
>> -               self updateInspectorForSelection.
>>
>>                 aChar == $i ifTrue: [self inspector inspectSelection. ^ true].
>>                 aChar == $I ifTrue: [self inspector exploreSelection. ^ true].
>>
>>                 aChar == $b ifTrue:     [self inspector browseMethodFull. ^ true].
>>                 aChar == $h ifTrue:     [self inspector classHierarchy. ^ true].
>>                 aChar == $c ifTrue: [Clipboard clipboardText: self currentSelection key. ^ true].
>>                 aChar == $p ifTrue: [self inspector browseFullProtocol. ^ true].
>>                 aChar == $N ifTrue: [self inspector browseClassRefs. ^ true].
>>                 aChar == $t ifTrue: [self inspector tearOffTile. ^ true].
>>                 aChar == $v ifTrue: [self inspector viewerForValue. ^ true]].
>>
>>         ^ false!
>>
>> Item was changed:
>>   ----- Method: ObjectExplorer>>genericMenu: (in category 'menus') -----
>>   genericMenu: aMenu
>>         "Borrow a menu from my inspector"
>>
>>         currentSelection
>>                 ifNil: [
>>                         aMenu
>>                                 add: '*nothing selected*'
>>                                 target: self
>>                                 selector: #yourself]
>>                 ifNotNil: [
>> +                       self updateInspectorForSelection ifFalse: [^ aMenu].
>> -                       self updateInspectorForSelection.
>>                         aMenu defaultTarget: self inspector.
>>                         self inspector fieldListMenu: aMenu.
>>
>>                         aMenu addLine;
>>                                 add: 'monitor changes'
>>                                 target: self
>>                                 selector: #monitor:
>>                                 argument: currentSelection].
>>         monitorList isEmptyOrNil
>>                 ifFalse: [aMenu addLine;
>>                                 add: 'stop monitoring all'
>>                                 target: self
>>                                 selector: #stopMonitoring].
>>         ^ aMenu!
>>
>> Item was changed:
>>   ----- Method: ObjectExplorer>>updateInspectorForSelection (in category 'accessing - other') -----
>>   updateInspectorForSelection
>>         "Reuse the inspector for some callbacks."
>>
>>         self inspector inspect: (self parentObject ifNil: [self object]).
>>
>>         self parentObject
>>                 ifNil: [self inspector toggleIndex: 1. "self"]
>>                 ifNotNil: [
>>                         self inspector toggleIndex: (self inspector fieldList indexOf: self currentSelection key)].
>> +
>> +       self inspector selection == self object
>> +               ifTrue: [
>> +                       ^ true]
>> +               ifFalse: [
>> +                       self inform: 'Object has changed. Please refresh\before invoking the context menu.' withCRs.
>> +                       ^ false].!
>> -       self assert: self inspector selection == self object.!
>>
>>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-mt.668.mcz

Karl Ramberg



On Mon, Feb 1, 2016 at 8:02 PM, Levente Uzonyi <[hidden email]> wrote:
I'd hate if Explorers were not able to keep their state when the explored obejcts changed. This would make it impossible to explore an object, change its structure, then open another explorer on it to compare the old state with the new.
I haven't checked this new "reselect to refresh" feature, but I think it breaks what I described above.

It does still work as before, except if you click a second time on a line item you already selected.
Then it updates it's content.

I think you get the best of both worlds with this change.

Best,
Karl

Levente


On Mon, 1 Feb 2016, Chris Muller wrote:

Wouldn't it be better to just silently refresh it FOR the user in that
case, rather than bother them with a pop up?

On Mon, Feb 1, 2016 at 3:45 AM,  <[hidden email]> wrote:
Marcel Taeumel uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-mt.668.mcz

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

Name: Tools-mt.668
Author: mt
Time: 1 February 2016, 10:44:38.861285 am
UUID: 88b24b27-f952-4e86-9bd5-be64c8e309e2
Ancestors: Tools-mt.667

Adds support for selective refreshing to object explorer. Just re-select the current selection to refresh it. Item will get highlighted just like automatic monitor refresh to indicate inconsistency of displayed information.

Make the still existing deficiency with volatile object state more descriptive with a pop-up instead of a generic assert error. Now that we support selective refreshing, the user is actually able to refresh and THEN invoke the context menu again.

=============== Diff against Tools-mt.667 ===============

Item was changed:
  ----- Method: ObjectExplorer>>currentSelection: (in category 'accessing') -----
  currentSelection: anObject

+       self currentSelection == anObject ifTrue: [
+               self changed: #objectChanged with: anObject.
+               ^ self].
+
-       self currentSelection == anObject ifTrue: [^ self].
        currentSelection := anObject.

        self changed: #currentSelection.
        self changed: #style.!

Item was changed:
  ----- Method: ObjectExplorer>>explorerKey:from:event: (in category 'menus') -----
  explorerKey: aChar from: view event: event

        event anyModifierKeyPressed ifFalse: [^ false].

        currentSelection ifNotNil: [
+               self updateInspectorForSelection ifFalse: [^ true].
-               self updateInspectorForSelection.

                aChar == $i ifTrue: [self inspector inspectSelection. ^ true].
                aChar == $I ifTrue: [self inspector exploreSelection. ^ true].

                aChar == $b ifTrue:     [self inspector browseMethodFull. ^ true].
                aChar == $h ifTrue:     [self inspector classHierarchy. ^ true].
                aChar == $c ifTrue: [Clipboard clipboardText: self currentSelection key. ^ true].
                aChar == $p ifTrue: [self inspector browseFullProtocol. ^ true].
                aChar == $N ifTrue: [self inspector browseClassRefs. ^ true].
                aChar == $t ifTrue: [self inspector tearOffTile. ^ true].
                aChar == $v ifTrue: [self inspector viewerForValue. ^ true]].

        ^ false!

Item was changed:
  ----- Method: ObjectExplorer>>genericMenu: (in category 'menus') -----
  genericMenu: aMenu
        "Borrow a menu from my inspector"

        currentSelection
                ifNil: [
                        aMenu
                                add: '*nothing selected*'
                                target: self
                                selector: #yourself]
                ifNotNil: [
+                       self updateInspectorForSelection ifFalse: [^ aMenu].
-                       self updateInspectorForSelection.
                        aMenu defaultTarget: self inspector.
                        self inspector fieldListMenu: aMenu.

                        aMenu addLine;
                                add: 'monitor changes'
                                target: self
                                selector: #monitor:
                                argument: currentSelection].
        monitorList isEmptyOrNil
                ifFalse: [aMenu addLine;
                                add: 'stop monitoring all'
                                target: self
                                selector: #stopMonitoring].
        ^ aMenu!

Item was changed:
  ----- Method: ObjectExplorer>>updateInspectorForSelection (in category 'accessing - other') -----
  updateInspectorForSelection
        "Reuse the inspector for some callbacks."

        self inspector inspect: (self parentObject ifNil: [self object]).

        self parentObject
                ifNil: [self inspector toggleIndex: 1. "self"]
                ifNotNil: [
                        self inspector toggleIndex: (self inspector fieldList indexOf: self currentSelection key)].
+
+       self inspector selection == self object
+               ifTrue: [
+                       ^ true]
+               ifFalse: [
+                       self inform: 'Object has changed. Please refresh\before invoking the context menu.' withCRs.
+                       ^ false].!
-       self assert: self inspector selection == self object.!








Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-mt.668.mcz

Chris Muller-4
In reply to this post by Levente Uzonyi
+1.  Marcel, we should really try to remove pop-ups from the system,
not add new ones.  How about rendering the out-of-date stuff in a
different color?

On Mon, Feb 1, 2016 at 1:02 PM, Levente Uzonyi <[hidden email]> wrote:

> I'd hate if Explorers were not able to keep their state when the explored
> obejcts changed. This would make it impossible to explore an object, change
> its structure, then open another explorer on it to compare the old state
> with the new.
> I haven't checked this new "reselect to refresh" feature, but I think it
> breaks what I described above.
>
> Levente
>
> On Mon, 1 Feb 2016, Chris Muller wrote:
>
>> Wouldn't it be better to just silently refresh it FOR the user in that
>> case, rather than bother them with a pop up?
>>
>> On Mon, Feb 1, 2016 at 3:45 AM,  <[hidden email]> wrote:
>>>
>>> Marcel Taeumel uploaded a new version of Tools to project The Trunk:
>>> http://source.squeak.org/trunk/Tools-mt.668.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Tools-mt.668
>>> Author: mt
>>> Time: 1 February 2016, 10:44:38.861285 am
>>> UUID: 88b24b27-f952-4e86-9bd5-be64c8e309e2
>>> Ancestors: Tools-mt.667
>>>
>>> Adds support for selective refreshing to object explorer. Just re-select
>>> the current selection to refresh it. Item will get highlighted just like
>>> automatic monitor refresh to indicate inconsistency of displayed
>>> information.
>>>
>>> Make the still existing deficiency with volatile object state more
>>> descriptive with a pop-up instead of a generic assert error. Now that we
>>> support selective refreshing, the user is actually able to refresh and THEN
>>> invoke the context menu again.
>>>
>>> =============== Diff against Tools-mt.667 ===============
>>>
>>> Item was changed:
>>>   ----- Method: ObjectExplorer>>currentSelection: (in category
>>> 'accessing') -----
>>>   currentSelection: anObject
>>>
>>> +       self currentSelection == anObject ifTrue: [
>>> +               self changed: #objectChanged with: anObject.
>>> +               ^ self].
>>> +
>>> -       self currentSelection == anObject ifTrue: [^ self].
>>>         currentSelection := anObject.
>>>
>>>         self changed: #currentSelection.
>>>         self changed: #style.!
>>>
>>> Item was changed:
>>>   ----- Method: ObjectExplorer>>explorerKey:from:event: (in category
>>> 'menus') -----
>>>   explorerKey: aChar from: view event: event
>>>
>>>         event anyModifierKeyPressed ifFalse: [^ false].
>>>
>>>         currentSelection ifNotNil: [
>>> +               self updateInspectorForSelection ifFalse: [^ true].
>>> -               self updateInspectorForSelection.
>>>
>>>                 aChar == $i ifTrue: [self inspector inspectSelection. ^
>>> true].
>>>                 aChar == $I ifTrue: [self inspector exploreSelection. ^
>>> true].
>>>
>>>                 aChar == $b ifTrue:     [self inspector browseMethodFull.
>>> ^ true].
>>>                 aChar == $h ifTrue:     [self inspector classHierarchy. ^
>>> true].
>>>                 aChar == $c ifTrue: [Clipboard clipboardText: self
>>> currentSelection key. ^ true].
>>>                 aChar == $p ifTrue: [self inspector browseFullProtocol. ^
>>> true].
>>>                 aChar == $N ifTrue: [self inspector browseClassRefs. ^
>>> true].
>>>                 aChar == $t ifTrue: [self inspector tearOffTile. ^ true].
>>>                 aChar == $v ifTrue: [self inspector viewerForValue. ^
>>> true]].
>>>
>>>         ^ false!
>>>
>>> Item was changed:
>>>   ----- Method: ObjectExplorer>>genericMenu: (in category 'menus') -----
>>>   genericMenu: aMenu
>>>         "Borrow a menu from my inspector"
>>>
>>>         currentSelection
>>>                 ifNil: [
>>>                         aMenu
>>>                                 add: '*nothing selected*'
>>>                                 target: self
>>>                                 selector: #yourself]
>>>                 ifNotNil: [
>>> +                       self updateInspectorForSelection ifFalse: [^
>>> aMenu].
>>> -                       self updateInspectorForSelection.
>>>                         aMenu defaultTarget: self inspector.
>>>                         self inspector fieldListMenu: aMenu.
>>>
>>>                         aMenu addLine;
>>>                                 add: 'monitor changes'
>>>                                 target: self
>>>                                 selector: #monitor:
>>>                                 argument: currentSelection].
>>>         monitorList isEmptyOrNil
>>>                 ifFalse: [aMenu addLine;
>>>                                 add: 'stop monitoring all'
>>>                                 target: self
>>>                                 selector: #stopMonitoring].
>>>         ^ aMenu!
>>>
>>> Item was changed:
>>>   ----- Method: ObjectExplorer>>updateInspectorForSelection (in category
>>> 'accessing - other') -----
>>>   updateInspectorForSelection
>>>         "Reuse the inspector for some callbacks."
>>>
>>>         self inspector inspect: (self parentObject ifNil: [self object]).
>>>
>>>         self parentObject
>>>                 ifNil: [self inspector toggleIndex: 1. "self"]
>>>                 ifNotNil: [
>>>                         self inspector toggleIndex: (self inspector
>>> fieldList indexOf: self currentSelection key)].
>>> +
>>> +       self inspector selection == self object
>>> +               ifTrue: [
>>> +                       ^ true]
>>> +               ifFalse: [
>>> +                       self inform: 'Object has changed. Please
>>> refresh\before invoking the context menu.' withCRs.
>>> +                       ^ false].!
>>> -       self assert: self inspector selection == self object.!
>>>
>>>
>>
>>
>