package Tk::DragDrop::SunSite;
require Tk::DropSite;
use vars qw($VERSION);
$VERSION = '3.011'; # $Id: //depot/Tk8/DragDrop/DragDrop/SunSite.pm#11 $
use Tk::DragDrop::SunConst;
use base  qw(Tk::DropSite);
use strict;
Tk::DropSite->Type('Sun');
sub SunDrop{my($w,$site)=@_;
my$e=$w->XEvent;
my($atom,$t,$x,$y,$id,$flags)=unpack('LLSSLL',$e->A);
$x-=$site->X;
$y-=$site->Y;
my$seln=$w->GetAtomName($atom);
if($flags& &ACK_FLAG){eval{local$SIG{__DIE__};$w->SelectionGet('-selection'=>$seln,'_SUN_DRAGDROP_ACK');};}$site->Callback(-dropcommand=>$seln,$x,$y);
if($flags& &TRANSIENT_FLAG){eval{local$SIG{__DIE__};$w->SelectionGet('-selection'=>$seln,'_SUN_DRAGDROP_DONE');};}$w->configure('-relief'=>$w->{'_DND_RELIEF_'})if(defined$w->{'_DND_RELIEF_'});
$site->Callback(-entercommand=>0,$x,$y);}sub SunPreview{my($w,$site)=@_;
my$event=$w->XEvent;
my($kind,$t,$x,$y,$id,$flags)=unpack('LLSSLL',$event->A);
$x-=$site->X;
$y-=$site->Y;
if($kind==_enter){$site->Callback(-entercommand=>1,$x,$y);}elsif($kind==_leave){$site->Callback(-entercommand=>0,$x,$y);}elsif($kind==_motion){$site->Callback(-motioncommand=>$x,$y);}}sub InitSite{my($class,$site)=@_;
my$w=$site->widget;
$w->BindClientMessage('_SUN_DRAGDROP_TRIGGER',[\&SunDrop,$site]);
$w->BindClientMessage('_SUN_DRAGDROP_PREVIEW',[\&SunPreview,$site]);}sub NoteSites{my($class,$t,$sites)=@_;
my$count=@$sites;
my@data=(0,0);
my($wrapper,$offset)=$t->wrapper;
if($t->viewable){my$s;
my$i=0;
my@win;
my$bx=$t->rootx;
my$by=$t->rooty-$offset;
$t->MakeWindowExist;
foreach$s(@$sites){my$w=$s->widget;
if($w->viewable){$w->MakeWindowExist;
$data[1]++;
push(@data,${$w->WindowId});
push(@data,$i++);
push(@data,ENTERLEAVE|MOTION);
push(@data,0);
push(@data,1);
push(@data,$s->X-$bx,$s->Y-$by,$s->width,$s->height);}}}if($data[1]){$t->property('set','_SUN_DRAGDROP_INTEREST','_SUN_DRAGDROP_INTEREST',32,\@data,$wrapper);}else{$t->property('delete','_SUN_DRAGDROP_INTEREST',$wrapper);}}1;
