summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2002-11-05 23:42:40 +0000
committerPascal Rigaux <pixel@mandriva.com>2002-11-05 23:42:40 +0000
commitbebd541064aad79235a8bd1d25660295ee0582ca (patch)
tree1ba44913bfe3a023f81f21f13e1f74c0712e0af8
parentbc448596b2bbc05117484155c7b23aa74de237a6 (diff)
downloaddrakx-bebd541064aad79235a8bd1d25660295ee0582ca.tar
drakx-bebd541064aad79235a8bd1d25660295ee0582ca.tar.gz
drakx-bebd541064aad79235a8bd1d25660295ee0582ca.tar.bz2
drakx-bebd541064aad79235a8bd1d25660295ee0582ca.tar.xz
drakx-bebd541064aad79235a8bd1d25660295ee0582ca.zip
- do not handle "format"ing in interactive for combos
- do it in interactive::gtk instead (that way, "val" is back"format"ed in callbacks as wanted) - die when editable combos are used with non-strings (like arrays or hashes)
-rw-r--r--perl-install/interactive.pm21
-rw-r--r--perl-install/interactive/gtk.pm21
2 files changed, 23 insertions, 19 deletions
diff --git a/perl-install/interactive.pm b/perl-install/interactive.pm
index bc7f5cdb6..6fec361b6 100644
--- a/perl-install/interactive.pm
+++ b/perl-install/interactive.pm
@@ -274,14 +274,12 @@ sub ask_from_normalize {
$e->{type} = 'treelist' if $e->{separator};
add2hash_($e, { not_edit => 1 });
$e->{type} ||= 'combo';
- ${$e->{val}} = $li->[0] if ($e->{type} ne 'combo' || $e->{not_edit}) && !member(${$e->{val}}, @$li);
- if ($e->{type} eq 'combo' && $e->{format}) {
- my @l = map { $e->{format}->($_) } @{$e->{list}};
- delete $e->{format};
- each_index {
- ${$e->{val}} = $l[$::i] if $_ eq ${$e->{val}};
- } @{$e->{list}};
- ($e->{list}, $e->{saved_list}) = (\@l, $e->{list});
+
+ if (!$e->{not_edit}) {
+ die q(when using "not_edit" you must use strings, not a data structure) if ref ${$e->{val}} || grep { ref } @$li;
+ }
+ if ($e->{type} ne 'combo' || $e->{not_edit}) {
+ ${$e->{val}} = $li->[0] if !member(may_apply($e->{format}, ${$e->{val}}), map { may_apply($e->{format}, $_) } @$li);
}
} elsif ($e->{type} eq 'range') {
$e->{min} <= $e->{max} or die "bad range min $e->{min} > max $e->{max} (called from " . join(':', caller()) . ")";
@@ -338,13 +336,6 @@ sub ask_from_real {
my ($o, $common, $l) = @_;
my $v = $o->ask_fromW($common, [ grep { !$_->{advanced} } @$l ], [ grep { $_->{advanced} } @$l ]);
%$common = ();
- foreach my $e (@$l) {
- my $l = delete $e->{saved_list} or next;
- each_index {
- ${$e->{val}} = $l->[$::i] if $_ eq ${$e->{val}};
- } @{$e->{list}};
- $e->{list} = $l;
- }
$v;
}
diff --git a/perl-install/interactive/gtk.pm b/perl-install/interactive/gtk.pm
index 108677366..6e8eb1fd4 100644
--- a/perl-install/interactive/gtk.pm
+++ b/perl-install/interactive/gtk.pm
@@ -461,22 +461,35 @@ sub ask_fromW {
$w = new Gtk::Combo;
$w->set_use_arrows_always(1);
$w->entry->set_editable(!$e->{not_edit});
- $w->set_popdown_strings(@{$e->{list}});
$w->disable_activate;
+
+ my @formatted_list = map { may_apply($e->{format}, $_) } @{$e->{list}};
+
+ $w->set_popdown_strings(@formatted_list);
($real_w, $w) = ($w, $w->entry);
- my @l = sort { $b <=> $a } map { length } @{$e->{list}};
+ $set = sub {
+ my $s = may_apply($e->{format}, $_[0]);
+ $w->set_text($s) if $s ne $w->get_text && $_[0] ne $w->get_text;
+ };
+ $get = sub {
+ my $s = $w->get_text;
+ my $i = eval { find_index { $s eq $_ } @formatted_list };
+ defined $i ? $e->{list}[$i] : $s;
+ };
+
+ my @l = sort { $b <=> $a } map { length } @formatted_list;
$has_horiz_scroll = 1;
$width = $l[@l / 16]; # take the third octile (think quartile)
} else {
$w = new Gtk::Entry;
$w->signal_connect(focus_in_event => sub { $w->select_region });
$w->signal_connect(focus_out_event => sub { $w->select_region(0,0) });
+ $set = sub { $w->set_text($_[0]) if $_[0] ne $w->get_text };
+ $get = sub { $w->get_text };
}
$w->signal_connect(key_press_event => $may_go_to_next);
$w->signal_connect(changed => $changed);
$w->set_visibility(0) if $e->{hidden};
- $set = sub { $w->set_text($_[0]) if $_[0] ne $w->get_text };
- $get = sub { $w->get_text };
}
$w->signal_connect(focus_out_event => sub {
$update->(sub { $common->{callbacks}{focus_out}($ind) });