#!/usr/local/bin/perl -w use Tk; use strict; use Tk::DragDrop; use Tk::DropSite; my $top = MainWindow->new(); my $lb = $top->Scrolled('Listbox',-width => 40); my $thing = $top->Message('-text' => "Drag This with B1")->pack; my $source = $thing->DragDrop(-event => '', -sitetypes => [qw(Local)], -handlers => [[\&send_string], [-type => 'FILE_NAME', \&send_file]]); my $loc = $top->Message('-text' => "Local Drops here", '-relief' => 'ridge' )->pack(-side => 'right'); $loc->DropSite(-droptypes => [qw(Local)], -dropcommand => [\&ShowTargets,$lb]); $lb->pack(-side => 'bottom'); $top->Button('-text' => "Sites", '-command' => [\&ShowSites,$top])->pack('-side'=>'left'); $top->Button('-text' => "Quit", '-command' => ['destroy',$top])->pack('-side'=>'right'); MainLoop; sub send_string { my ($offset,$max) = @_; return "These are dropped Data"; } sub send_file { my ($offset,$max) = @_; return __FILE__; } sub ShowIt { my $w = shift; my ($id,$x,$y,$width,$height) = @_; my $t = $w->Toplevel; $t->Button('-text'=>$id,'-command'=>['destroy',$t])->pack('-anchor'=>'c','-fill'=>'both'); $t->overrideredirect(1); $t->update('idletasks'); $t->MoveResizeWindow($x,$y,$width,$height); } sub ShowTargets { my $lb = shift; my $seln = shift; my @targ = $lb->SelectionGet('-selection'=>$seln,'TARGETS'); $lb->delete(0,'end'); $lb->insert('end',@targ); } sub ShowSites { my $w = shift; my @dnd = $w->SelectionGet('-selection'=>"_SUN_DRAGDROP_DSDM", "_SUN_DRAGDROP_SITE_RECTS"); while (@dnd) { my $version = shift(@dnd); my $site = shift(@dnd); my $win = shift(@dnd); my $x = shift(@dnd); my $y = shift(@dnd); my $width = shift(@dnd); my $height = shift(@dnd); my $flags = shift(@dnd); ShowIt($w,sprintf("%x:%d",$win,$site),$x,$y,$width,$height); } }