Hi,

Just thought I'd add a little something to the HEM (Hacker/Horrible/Hotchpotch 
Event Model). $win->Hook() now returns the previous coderef if you reassign a 
hook. For instance:

my $hookone = $win->Hook(0x0020, \&setcursor);
my $hooktwo = $win->Hook(0x0020, \&somethingelse);

$hookone now equals 0 (no previous reference).
$hooktwo is now a reference to &setcursor (the hook handler that was replaced 
by \&somethingelse).

You can't assign more than one handler to a message, since the message 
identifies the handler to call on a key/value basis (just a perl list).

The function still returns undef if you passed it invalid arguments, so error 
handling is a breeze:

if( defined($hookone) ) {
        if( ref($hookone) ) {
                print "Previous reference re-defined\n";
        }
        else {
                print "This is the first hook we've made for this message\n";
        }
}
else {
        print "We passed dumb arguments.\n";
}

It's in the CVS now. Hopefully this will make things more useful, and allows 
you to create modules that "grab" hooks but still honour any hooks that the 
user of your module has previously defined.

Steve

Reply via email to