use strict; use warnings; use Tk; use Tk::NoteBook; package Tk::NoteBook; { no warnings 'redefine'; sub Resize { my ($w) = @_; return unless Tk::Exists($w) && $w->{'nWindows'} && $w->{'resize'}; $w->InitTabSize; $w->{'resize'} = 0; my $reqW = $w->{-width} || 0; my $reqH = $w->{-height} || 0; if ($reqW * $reqH == 0) { # if ((not defined $w->{-dynamicgeometry}) || # NoteBook.pm line 393 # ($w->{-dynamicgeometry} == 0)) { unless ($w->cget('-dynamicgeometry')){ $reqW = 1; $reqH = 1; my $childw; foreach $childw ($w->page_widget) { my $cW = $childw->ReqWidth; my $cH = $childw->ReqHeight; $reqW = $cW if ($reqW < $cW); $reqH = $cH if ($reqH < $cH); } } else { if (defined $w->{'topchild'}) { my $topw = $w->page_widget($w->{'topchild'}); $reqW = $topw->ReqWidth; $reqH = $topw->ReqHeight; } else { $reqW = 1; $reqH = 1; } } $reqW += $w->{'pad-x1'} + $w->{'pad-x2'} + 2 * (defined $w->{-ipadx} ? $w->{-ipadx} : 0); $reqH += $w->{'pad-y1'} + $w->{'pad-y2'} + 2 * (defined $w->{-ipady} ? $w->{-ipady} : 0); $reqW = ($reqW > $w->{'minW'}) ? $reqW : $w->{'minW'}; $reqH = ($reqH > $w->{'minH'}) ? $reqH : $w->{'minH'}; } if (($w->ReqWidth != $reqW) || ($w->ReqHeight != $reqH)) { $w->{'counter'} = 0 if (not defined $w->{'counter'}); if ($w->{'counter'} < 50) { $w->{'counter'}++; $w->GeometryRequest($reqW, $reqH); $w->afterIdle([$w,'Resize']); $w->{'resize'} = 1; return; } } $w->{'counter'} = 0; $w->raise($w->{'topchild'} || ${$w->{'windows'}}[0]); $w->{'resize'} = 0; } } package main; my $mw = tkinit; my $note = $mw->NoteBook(-dynamicgeometry => 1)->pack(); my @pages = map {$note->add("page$_")} (0..3); for (0..3){$pages[0]->Label(-text => 'label')->pack;} for (0..20){$pages[1]->Label(-text =>'label')->pack;} MainLoop;