summaryrefslogtreecommitdiffstats
path: root/perl-install/interactive/newt.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/interactive/newt.pm')
-rw-r--r--perl-install/interactive/newt.pm30
1 files changed, 19 insertions, 11 deletions
diff --git a/perl-install/interactive/newt.pm b/perl-install/interactive/newt.pm
index 79dd93eba..b08b9b0b2 100644
--- a/perl-install/interactive/newt.pm
+++ b/perl-install/interactive/newt.pm
@@ -97,7 +97,7 @@ sub ask_fromW {
}
sub ask_fromW_real {
- my ($_o, $common, $l, $l2) = @_;
+ my ($o, $common, $l, $l2) = @_;
my $ignore; #-to handle recursivity
my $old_focus = -2;
@@ -166,10 +166,12 @@ sub ask_fromW_real {
};
$size = $count->($data_tree);
- my ($h) = @l == 1 && $height > 30 ? 10 : 5;
- my $scroll = $size > $h;
- $has_scroll = 1;
- $size = min($size, $h);
+ my $prefered_size = @l == 1 && $height > 30 ? 10 : 5;
+ my $scroll;
+ if ($size > $prefered_size && !$o->{no_individual_scroll}) {
+ $has_scroll = $scroll = 1;
+ $size = $prefered_size;
+ }
$w = Newt::Component::Tree($size, $scroll);
@@ -215,12 +217,15 @@ sub ask_fromW_real {
1;
};
} elsif ($e->{type} =~ /list/) {
- my ($h) = @l == 1 && $height > 30 ? 10 : 5;
- my $scroll = @{$e->{list}} > $h ? 1 << 2 : 0;
- $has_scroll = 1;
- $size = min(int @{$e->{list}}, $h);
+ $size = @{$e->{list}};
+ my ($prefered_size) = @l == 1 && $height > 30 ? 10 : 5;
+ my $scroll;
+ if ($size > $prefered_size && !$o->{no_individual_scroll}) {
+ $has_scroll = $scroll = 1;
+ $size = $prefered_size;
+ }
- $w = Newt::Component::Listbox($size, $scroll); #- NEWT_FLAG_SCROLL
+ $w = Newt::Component::Listbox($size, $scroll ? 1 << 2 : 0); #- NEWT_FLAG_SCROLL
my @l = map {
my $t = simplify_string(may_apply($e->{format}, $_), $width - 10);
@@ -280,7 +285,10 @@ sub ask_fromW_real {
if (@l > 3 && $total_size > $height_avail) {
$grid->GridPlace(1, 1); #- Uh?? otherwise the size allocated is bad
if ($has_scroll) {
- #- :'-(
+ #- trying again with no_individual_scroll set
+ $o->{no_individual_scroll} and internal_error('no_individual_scroll already set, argh...');
+ $o->{no_individual_scroll} = 1;
+ goto &ask_fromW_real; #- same player shoot again!
}
$has_scroll = 1;
$total_size = $height_avail;