[ANN] This Week in LiveCode 42

Monte Goulding monte at appisle.net
Mon Jul 18 16:50:28 EDT 2016


> On 19 Jul 2016, at 1:49 AM, Richard Gaskin <ambassador at fourthworld.com> wrote:
> 
> ...where Monte has this note:
> 
>   Previously global handlers took priority
>   over handlers scripted in LCS. This patch
>   enables a LCS handler the handle the global
>   handler instead. This is necessary for
>   for overriding the libURL commands on mobile.
> 
> Can you or Monte elaborate on that?  Is a "global handler" and engine handler?  Does this mean we can now override engine-defined functions?

Aha! Yes as Mark Wieder mentioned this pricked his interest also but it isn’t as exciting as it seems. The engine has some platform specific handlers (mainly used on mobile for mobile* handlers) that are resolved at runtime like script and external handlers but were previously getting dealt with first and the scripts in the message path weren’t getting a chance to implement handlers with those names. In the specific situation we were trying to resolve we wanted libURL to be able to handle the two libURL commands implemented in the engine on mobile. BTW I’m not sure why the term global handler was used because they are really platform handlers.

Anyway… previously:

object -> handle:
     is it a global handler?
          yes -> handle in engine
          no  -> front scripts, object, behaviors, [owner, behavior …] , libraries, back scripts, externals, error

Now:
     front scripts, object, behaviors, [owner, behavior …] , libraries, back scripts, externals
     is it a global handler?
          yes -> handle in engine
          no -> error

So this means I could write an external that implemented one of the mobile* commands and then write a library that handled that command and redirected the parameters to my external. It’s worthwhile noting, however, that we currently haven’t allowed pass to work so you can’t:

on mobileCommand
    if the platform is “ios” then
       -- do something different
    else
       pass “mobileCommand"
    end if
end mobileCommand

I think in hindsight we probably should have allowed that because I can think of some interesting use cases. For example, mergAVPick could override mobilePickPhoto on iOS and support a few extra things.

Cheers

Monte





More information about the use-livecode mailing list