/usr/local/CPAN/POE-Component-XUL/POE/XUL/EventManager.pm
package POE::XUL::EventManager;
use strict;
use warnings;
use Carp;
use Scalar::Util qw(weaken);
use XUL::Node::Event;
sub new {
my $class = shift;
bless { nodes => {} }, $class
}
sub make_event {
my ($self, $request) = @_;
my $id = $request->{source};
croak "cannot make event with no source" unless $id;
$request->{source} = $self->get_node($id);
croak "node with id [$id] not found" unless $request->{source};
return XUL::Node::Event->make_event($request);
}
sub fire_event {
my ($self, $event) = (shift,shift);
$event->source->fire_event($event,@_);
}
sub register_node {
my ($self, $id, $node) = @_;
my $nodes = $self->{nodes};
$nodes->{$id} = $node;
weaken $nodes->{$id};
}
# TODO: cleanup dangling weak ref now and then
sub get_node { shift->{nodes}->{pop()} }
1;