+ // stores the current values of the widget attribute
+ Events_Loop* aLoop = Events_Loop::loop();
+ // blocks the flush signals to avoid the temporary objects visualization in the viewer
+ // they should not be shown in order to do not lose highlight by erasing them
+ aLoop->activateFlushes(false);
+
+ aData->blockSendAttributeUpdated(true);
+ bool isAttributeBlocked = anAttribute->blockSetInitialized(true);
+ storeAttributeValue();
+
+ // saves the owner value to the widget attribute
+ bool aValid = setSelectionCustom(theValue);
+
+ if (aValid)
+ // checks the attribute validity
+ aValid = isValidAttribute();
+
+ // restores the current values of the widget attribute
+ restoreAttributeValue(aValid);
+ aData->blockSendAttributeUpdated(false);
+ anAttribute->blockSetInitialized(isAttributeBlocked);
+ aLoop->activateFlushes(true);
+
+ // In particular case the results are deleted and called as redisplayed inside of this
+ // highlight-selection, to they must be flushed as soon as possible.
+ // Example: selection of group-vertices subshapes with shift pressend on body. Without
+ // these 4 lines below the application crashes because of left presentations on
+ // removed results still in the viewer.
+ static Events_ID aDeletedEvent = Events_Loop::eventByName(EVENT_OBJECT_DELETED);
+ static Events_ID aRedispEvent = Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY);
+ aLoop->flush(aDeletedEvent);
+ aLoop->flush(aRedispEvent);