use strict; use Tk; my $mw = MainWindow->new; $mw->overrideredirect(1); my $frame = $mw->Frame-> pack(-padx => 20, -pady => 20); $frame->Button( -text => 'Exit', -command => sub { Tk::exit } )->pack; my ($lastX, $lastY); $mw->bind('', [\&MoveWindow, Ev('X'), Ev('Y'), \$lastX, \$lastY]); $mw->bind('', [\&ClearCoords, \$lastX, \$lastY]); MainLoop; sub ClearCoords { my ($cw, $xSR, $ySR) = @_; undef($$xSR); undef($$ySR); } sub MoveWindow { my ($mw, $rootX, $rootY, $xSR, $ySR) = @_; if (!defined($$xSR) && !defined($$ySR)) { $$xSR = $rootX; $$ySR = $rootY; } else { my $xDiff = $rootX - $$xSR; my $yDiff = $rootY - $$ySR; my $x = $mw->x + $xDiff; my $y = $mw->y + $yDiff; $x = "+".$x if $x >= 0; $y = "+".$y if $y >= 0; $mw->geometry(sprintf("%dx%d%s%s", $mw->width, $mw->height, $x, $y )); $$xSR = $rootX; $$ySR = $rootY; } }