… | |
… | |
23 | $VERSION = 0.01; |
23 | $VERSION = 0.01; |
24 | @EXPORT = qw(); |
24 | @EXPORT = qw(); |
25 | |
25 | |
26 | #XSLoader::load __PACKAGE__, $VERSION; |
26 | #XSLoader::load __PACKAGE__, $VERSION; |
27 | use Data::Dumper;#d# |
27 | use Data::Dumper;#d# |
|
|
28 | |
|
|
29 | my $interface; # Mozilla::Plugin::xxx (design weakness) |
28 | |
30 | |
29 | my $data; |
31 | my $data; |
30 | |
32 | |
31 | sub BIAS() { -2000000000 } # ugliest hack ever seen |
33 | sub BIAS() { -2000000000 } # ugliest hack ever seen |
32 | |
34 | |
… | |
… | |
116 | plug-in is also not very viable, so in the future one might be able to |
118 | plug-in is also not very viable, so in the future one might be able to |
117 | specify a group on the embed statement (i.e. EMBED GROUP="gtk+"). |
119 | specify a group on the embed statement (i.e. EMBED GROUP="gtk+"). |
118 | |
120 | |
119 | =cut |
121 | =cut |
120 | |
122 | |
121 | sub server_fh() { *FD } |
123 | sub server_fh() { \*FD } |
122 | |
124 | |
123 | sub server_event() { |
125 | sub server_event() { |
124 | my $cmd = rcv_cmd; |
126 | my $cmd = rcv_cmd; |
125 | |
127 | |
126 | warn "cmd<$cmd>\n";#d# |
128 | warn "cmd<$cmd>\n";#d# |
… | |
… | |
137 | my ($argn, $argv) = (rcv_blk, rcv_blk); |
139 | my ($argn, $argv) = (rcv_blk, rcv_blk); |
138 | $args{$argn} = $argv; |
140 | $args{$argn} = $argv; |
139 | } |
141 | } |
140 | |
142 | |
141 | warn "new obj $objid\n";#d# |
143 | warn "new obj $objid\n";#d# |
142 | $_OBJ{$objid} = new Mozilla::Plugin |
144 | $_OBJ{$objid} = $interface->new( |
143 | objid => $objid, |
145 | objid => $objid, |
144 | type => $type, |
146 | type => $type, |
145 | mode => $mode, |
147 | mode => $mode, |
146 | save => $save, |
148 | save => $save, |
147 | args => \%args; |
149 | args => \%args, |
|
|
150 | ); |
148 | |
151 | |
149 | } elsif ($cmd eq "-") { |
152 | } elsif ($cmd eq "-") { |
150 | my $objid = rcv_ptr; |
153 | my $objid = rcv_ptr; |
151 | my $save = (delete $_OBJ{$objid})->save; |
154 | my $save = (delete $_OBJ{$objid})->save; |
152 | snd_cmd "-"; |
155 | snd_cmd "-"; |
… | |
… | |
178 | sub mainloop { |
181 | sub mainloop { |
179 | server_event while 1; |
182 | server_event while 1; |
180 | } |
183 | } |
181 | |
184 | |
182 | sub init { |
185 | sub init { |
183 | my $self = shift; |
186 | $interface = shift; |
184 | |
187 | |
185 | $IN_MOZILLA = 1; |
|
|
186 | |
|
|
187 | open FD, "+<&=$_[0]"; binmode $FD; |
188 | open FD, "+<&=$_[0]"; binmode FD; |
188 | |
189 | |
189 | warn "init: ".Dumper(@_); |
|
|
190 | |
|
|
191 | $self->mainloop; |
190 | $interface->mainloop; |
192 | } |
191 | } |
193 | |
192 | |
194 | sub new { |
193 | sub new { |
195 | my $class = shift; |
194 | my $class = shift; |
196 | my $self = bless { @_ }, $class; |
195 | my $self = bless { @_ }, $class; |
… | |
… | |
202 | } |
201 | } |
203 | |
202 | |
204 | sub set_window { |
203 | sub set_window { |
205 | my $self = shift; |
204 | my $self = shift; |
206 | my $new = shift; |
205 | my $new = shift; |
|
|
206 | print "window set calling with $new->{window}, $new->{w}, $new->{h} ($self->{window}\n";#d# |
207 | if ($self->{window}) { |
207 | if ($self->{window}) { |
208 | if ($self->{window}{window} ne $new->{window}) { |
208 | if ($self->{window}{window} ne $new->{window}) { |
209 | $self->window_delete($self->{window}); |
209 | $self->window_delete($self->{window}); |
210 | } else { |
210 | } elsif ($self->{window}{w} != $new->{w} |
|
|
211 | or $self->{window}{h} != $new->{h}) { |
211 | $self->window_resize($new->{window}, $new->{w}, $new->{h}); |
212 | $self->window_resize($new->{window}, $new->{w}, $new->{h}); |
212 | } |
213 | } |
213 | $self->{window} = $new; |
214 | $self->{window} = $new; |
214 | } else { |
215 | } |
|
|
216 | |
|
|
217 | unless ($self->{window}) { |
215 | $self->{window} = $new; |
218 | $self->{window} = $new; |
|
|
219 | print "window new calling with $new->{window}, $new->{w}, $new->{h}\n";#d# |
216 | $self->window_new($new->{window}, $new->{w}, $new->{h}); |
220 | $self->window_new($new->{window}, $new->{w}, $new->{h}); |
217 | } |
221 | } |
218 | warn "set_window: ".Dumper($self); |
222 | warn "set_window: ".Dumper($self); |
219 | } |
223 | } |
220 | |
224 | |
221 | sub window_new {} |
225 | sub window_new {} |
222 | sub window_resize {} |
226 | sub window_resize {} |
|
|
227 | |
223 | sub window_delete {} |
228 | sub window_delete { |
|
|
229 | my $self = shift; |
|
|
230 | delete $self->{window}; |
|
|
231 | } |
224 | |
232 | |
225 | sub save { |
233 | sub save { |
226 | $_[0]->{save}{test} = ['t1',5,7]; |
234 | my $self = shift; |
|
|
235 | $self->set_window(undef); |
227 | Storable::nfreeze $_[0]->{save}; |
236 | Storable::nfreeze $self->{save}; |
228 | } |
237 | } |
229 | |
238 | |
230 | sub DESTROY { |
239 | sub DESTROY { |
231 | warn "DESTROY"; |
240 | warn "DESTROY"; |
232 | } |
241 | } |