ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent/lib/AnyEvent/Impl/Glib.pm
Revision: 1.11
Committed: Sun Jul 8 08:52:10 2007 UTC (16 years, 11 months ago) by root
Branch: MAIN
CVS Tags: rel-2_8, rel-2_9, rel-2_6, rel-2_7, rel-3_0, rel-2_55
Changes since 1.10: +1 -0 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 package AnyEvent::Impl::Glib;
2    
3 root 1.8 no warnings;
4 root 1.10 use strict;
5 root 1.8
6 root 1.1 use Glib ();
7    
8     my $maincontext = Glib::MainContext->default;
9    
10 root 1.2 sub io {
11     my ($class, %arg) = @_;
12    
13 root 1.3 my $self = bless \%arg, $class;
14 root 1.2 my $rcb = \$self->{cb};
15    
16 root 1.11 my @cond;
17 root 1.4 # some glibs need hup, others error with it, YMMV
18 root 1.6 push @cond, "in", "hup" if $self->{poll} eq "r";
19     push @cond, "out", "hup" if $self->{poll} eq "w";
20 root 1.2
21     $self->{source} = add_watch Glib::IO fileno $self->{fh}, \@cond, sub {
22 root 1.6 $$rcb->();
23 root 1.2 ! ! $$rcb
24     };
25 root 1.1
26 root 1.2 $self
27 root 1.1 }
28    
29 root 1.2 sub timer {
30     my ($class, %arg) = @_;
31 root 1.1
32 root 1.3 my $self = bless \%arg, $class;
33 root 1.2 my $cb = $self->{cb};
34 root 1.1
35 root 1.2 $self->{source} = add Glib::Timeout $self->{after} * 1000, sub {
36     $cb->();
37     0
38 root 1.1 };
39    
40 root 1.2 $self
41 root 1.1 }
42    
43 root 1.6 sub DESTROY {
44 root 1.1 my ($self) = @_;
45    
46     remove Glib::Source delete $self->{source} if $self->{source};
47 root 1.6 # need to undef $cb because we hold references to it
48 root 1.2 $self->{cb} = undef;
49 root 1.6 %$self = ();
50 root 1.2 }
51    
52 root 1.7 sub one_event {
53     $maincontext->iteration (1);
54     }
55    
56 root 1.4 1
57 root 1.1