Fwd: Quantum tunneling in LiveCode
Michael Doub
mikedoub at gmail.com
Tue Mar 3 12:34:29 EST 2015
Richard, Very nice explanation of this. I always wondered about the
relationship between this properties.
Thanks,
Mike
On 3/3/15 10:13 AM, Richard Gaskin wrote:
> Stephen Goldberg wrote:
>
> > I think the bottom line is to be cautious about putting mouseUp
> > scripts in background groups, or to put a disclaimer in the group
> > at the beginning of the group handler the line (as mentioned in
> > the User Manual (pg 131, 5.3.9):
> >
> > if the owner of the target is not me then pass mouseUp
>
> The backgroundBehavior property is a tricky thing, implemented for
> compatibility with imported HyperCard stacks but given the differences
> between the HC and LC object models it's always going to be at least a
> little mind-bending.
>
> In HC, there was always and only one background, which was placed
> below the card.
>
> In LC, there is no "background" object pe se, but instead employs
> groups which can be shared across cards. In LC we can have any number
> of groups, and they may even be nested.
>
> In LC, in the absence of an always-present background object, all
> objects always reside on the card.
>
> To maintain compatibility with HC, the backgroundBehavior was
> introduced in an attempt to account for those cases where the message
> handling order needed the background after the card, as it was in HC,
> rather than before the card as is natural in LC.
>
> In older versions of LC setting the backgroundBehavior was the only
> way to share groups among multiple cards, which sometimes caused
> problems for developers expecting the natural order of messages to be
> in play, reflecting the visual order in which all controls, even
> groups, are on top of the card.
>
> So a few versions back a new property was added: the sharedBehavior.
> When true this allows us to share a group across multiple cards, and
> when creating a new card any groups with their sharedBehavior set are
> automatically placed on new cards. It's related to the
> backgroundBehavior, but is not the same thing:
>
> When the backgroundBehavior is set, the sharedBehavior is also set.
> This should trigger the change you're describing, in which messages
> are handled by as group with the backgroundBehavior set occur after
> the card receives them.
>
> But the sharedBehavior can be set by itself, allowing sharing without
> altering LC's natural message order as reflected by what we see
> visually on screen: objects on top of the card get messages before
> the card does.
>
> So all that said, we might consider what you're seeing to be a bug.
>
> But personally, with more than a decade separating me from the last
> time I had a machine even capable of running HC, it's been so long
> since I've thought about the HC-style message order that I never rely
> on it. I was very glad when they introduced the sharedBehavior as a
> way of sharing groups while maintaining the natural, visible order of
> messages, and when I need messages to occur after the card I generally
> just put them in the stack or a library.
>
> But there are those who may need the older HC-style message order, and
> if so that's what the backgroundBehavior is supposed to provide.
>
> If you see a difference between LC and HC with message flow when the
> backgroundBehavior is set, it may be time to file a bug report.
>
More information about the use-livecode
mailing list