/usr/local/CPAN/Applications-BackupAndRestore/Gtk2/Ex/FileLocator/DropPocket.pm
package Gtk2::Ex::FileLocator::DropPocket;
use strict;
no warnings;
use Gtk2;
use Glib qw(TRUE FALSE);
use Gtk2::Ex::FileLocator::Helper;
use Gtk2::Ex::FileLocator::FileChooser;
use Glib::Object::Subclass Gtk2::Ex::FileLocator::FileChooser::,;
our @targets = (
{ target => "text/uri-list", flags => [], info => 0 },
{ target => "STRING", flags => [], info => 0 },
{ target => "text/plain", flags => [], info => 0 },
);
sub INIT_INSTANCE {
my $this = shift;
$this->{iconsize} = "small";
$this->{image} = Gtk2::Image->new;
$this->{image}->show;
my $button = new Gtk2::Button;
$button->set_border_width(1);
$button->add( $this->{image} );
$button->drag_source_set( [ 'button1_mask', 'button3_mask' ],
[qw'copy link'], $targets[0] );
$button->signal_connect( 'drag_data_get', \&on_drag_data_get, $this );
$button->signal_connect_after( 'clicked' => \&on_click, $this );
$button->show;
$button->set_reallocate_redraws(FALSE);
$button->set_resize_mode('parent');
#$this->set_shadow_type('in');
$this->add($button);
$this->drag_dest_set( 'all', [qw(copy move link)], @targets );
$this->signal_connect_after( 'map' => \&on_map );
$this->signal_connect_after(
'drag_data_received' => \&on_drag_data_received );
$this->signal_connect( 'selection-changed', sub { $this->change_image } );
}
sub on_map {
my $this = shift;
$this->set_size_request( $this->allocation->height + 5, 0 );
0;
}
sub change_image {
my ($this) = @_;
#$this->Debug("###### ", $this->get_filename);
image_set_file_icon( $this->{image}, string_shell_unescape($this->get_filename),
$this->{iconsize} );
return;
}
sub on_click {
my ( $widget, $this ) = @_;
$this->get('chooser')->show;
return;
}
sub on_drag_data_received {
my ( $this, $context, $x, $y, $data, $flags, $time ) = @_;
#$this->Debug($data->data, $data->type->name);
if ( $data->type->name eq "text/uri-list" ) {
my @uri = split "\r\n", $data->data;
printf "uri %s\n", $uri[0];
$this->set_uri( $uri[0] );
}
0;
}
sub on_drag_data_get {
my ( $button, $context, $data, $info, $time, $this ) = @_;
my $uri = $this->get_uri;
$data->set( $data->target, 8, " $uri\r\n" );
0;
}
1;
__END__