package Audio::XMMSClient::Glib;
use strict;
use warnings;
use Glib qw( TRUE FALSE );
use base qw(Audio::XMMSClient);
sub new {
my $class = shift;
my $self = $class->SUPER::new(@_);
bless $self, $class;
return $self;
}
sub connect {
my $self = shift;
my $res = $self->SUPER::connect(@_);
$self->io_need_out_callback_set(\&need_out);
Glib::IO->add_watch( $self->io_fd_get, 'in', sub { $self->handle_in(@_) } );
$self->{has_out_watch} = 0;
return $res;
}
sub need_out {
my ($self, $flag) = @_;
if ($self->io_want_out && !$self->{has_out_watch}) {
Glib::IO->add_watch( $self->io_fd_get, 'out', sub { $self->handle_out(@_) } );
$self->{has_out_watch} = 1;
}
}
sub handle_in {
my ($self, $source, $cond) = @_;
if ($cond eq 'in') {
return $self->io_in_handle;
}
return TRUE;
}
sub handle_out {
my ($self, $source, $cond) = @_;
if ($cond eq 'out') {
$self->io_out_handle;
}
return $self->{has_out_watch} = $self->io_want_out;
}
{
my $loop = Glib::MainLoop->new(undef, FALSE);
sub loop {
$loop->run;
}
sub quit_loop {
$loop->quit;
}
}
1;