For what it’s worth, I remembered I also have a realtime display mode in a test plugin, so checked, and that one behaves the same. And secondly, I have now checked and confirm that the same also occurs on mac (version 7.4.21078.01002, 2021-03-19).
Added some logging to that test plugin, and here is what it yields:
Display mode set to "TestRealtimeDisplayMode".
TestRealtimeDisplayMode() (instance 0)
TestChangeQueue() (instance 0)
NotifyBeginUpdates
NotifyEndUpdates
ApplyViewChange: name: a
ApplyEnvironmentChanges: usage: Background
ApplyEnvironmentChanges: usage: Skylighting
ApplyEnvironmentChanges: usage: ReflectionAndRefraction
ApplySkylightChanges: enabled: True
ApplySunChanges: id: 62ee2cf6-b855-4549-a277-e2bbf609f328, name: sun
ApplyMeshChanges: delete 0, add 7
ApplyMeshInstanceChanges: delete 0, add/change 7
ApplyGroundPlaneChanges: mat id: 3858557068, alt: 1.06586011914637
1 open surface added to selection.
1 closed surface added to selection.
1 open surface added to selection.
1 closed surface added to selection.
TestChangeQueue.Dispose(true) (instance 0)
1 closed surface added to selection.
TestRealtimeDisplayMode() (instance 1)
TestChangeQueue() (instance 1)
NotifyBeginUpdates
NotifyEndUpdates
ApplyViewChange: name: a
ApplyEnvironmentChanges: usage: Background
ApplyEnvironmentChanges: usage: Skylighting
ApplyEnvironmentChanges: usage: ReflectionAndRefraction
ApplySkylightChanges: enabled: True
ApplySunChanges: id: 62ee2cf6-b855-4549-a277-e2bbf609f328, name: sun
ApplyMeshChanges: delete 0, add 7
ApplyMeshInstanceChanges: delete 0, add/change 7
ApplyGroundPlaneChanges: mat id: 3858557068, alt: 1.06586011914637
TestChangeQueue.Dispose(true) (instance 1)
1 closed surface added to selection.
~TestRealtimeDisplayMode() (instance 0)
~TestChangeQueue() (instance 0)
TestRealtimeDisplayMode() (instance 2)
TestChangeQueue() (instance 2)
NotifyBeginUpdates
NotifyEndUpdates
ApplyViewChange: name: a
ApplyEnvironmentChanges: usage: Background
ApplyEnvironmentChanges: usage: Skylighting
ApplyEnvironmentChanges: usage: ReflectionAndRefraction
ApplySkylightChanges: enabled: True
ApplySunChanges: id: 62ee2cf6-b855-4549-a277-e2bbf609f328, name: sun
ApplyMeshChanges: delete 0, add 7
ApplyMeshInstanceChanges: delete 0, add/change 7
ApplyGroundPlaneChanges: mat id: 3858557068, alt: 1.06586011914637
TestChangeQueue.Dispose(true) (instance 2)
1 closed surface added to selection.
~TestRealtimeDisplayMode() (instance 1)
~TestChangeQueue() (instance 1)
TestRealtimeDisplayMode() (instance 3)
TestChangeQueue() (instance 3)
NotifyBeginUpdates
NotifyEndUpdates
ApplyViewChange: name: a
ApplyEnvironmentChanges: usage: Background
ApplyEnvironmentChanges: usage: Skylighting
ApplyEnvironmentChanges: usage: ReflectionAndRefraction
ApplySkylightChanges: enabled: True
ApplySunChanges: id: 62ee2cf6-b855-4549-a277-e2bbf609f328, name: sun
ApplyMeshChanges: delete 0, add 7
ApplyMeshInstanceChanges: delete 0, add/change 7
ApplyGroundPlaneChanges: mat id: 3858557068, alt: 1.06586011914637
The interesting bits to note are these:
TestChangeQueue.Dispose(true) (instance 1)
1 closed surface added to selection.
What occurs there is that we see my change queue being destroyed before Rhino prints the message about the object being selected.
If I had to guess, some detail in how gumball stores data has changed subtly, causing the change queue mechanism to generate a different hash for something or other, and therefore believe that the scene needs updating, and that this is why I see this behavior in common between three different realtime display modes that all make use of the change queue.