diff options
Diffstat (limited to 'perl-install/Xconfig/main.pm')
-rw-r--r-- | perl-install/Xconfig/main.pm | 122 |
1 files changed, 100 insertions, 22 deletions
diff --git a/perl-install/Xconfig/main.pm b/perl-install/Xconfig/main.pm index 909c23108..d926df0c3 100644 --- a/perl-install/Xconfig/main.pm +++ b/perl-install/Xconfig/main.pm @@ -49,40 +49,118 @@ sub configure_everything_auto_install { sub configure_everything { my ($in, $raw_X, $do_pkgs, $auto, $options) = @_; - + my $X = {}; my $ok = 1; - $ok &&= my $card = Xconfig::card::configure($in, $raw_X, $do_pkgs, $auto, $options); - $ok &&= my $monitor = Xconfig::monitor::configure($in, $raw_X, $auto); - $ok &&= Xconfig::screen::configure($raw_X, $card); - $ok &&= my $resolution = Xconfig::resolution_and_depth::configure($in, $raw_X, $card, $monitor, $auto); - $ok &&= Xconfig::test::test($in, $raw_X, $card, $auto); + $ok &&= $X->{card} = Xconfig::card::configure($in, $raw_X, $do_pkgs, $auto, $options); + $ok &&= $X->{monitor} = Xconfig::monitor::configure($in, $raw_X, $auto); + $ok &&= Xconfig::screen::configure($raw_X, $X->{card}); + $ok &&= $X->{resolution} = Xconfig::resolution_and_depth::configure($in, $raw_X, $X->{card}, $X->{monitor}, $auto); + $ok &&= Xconfig::test::test($in, $raw_X, $X->{card}, $auto); + + if (!$ok) { + ($ok) = configure_chooser_raw($in, $raw_X, $do_pkgs, $options, $X, 1); + } else { + Xconfig::various::various($in, $X->{card}, $options, $auto); + } + $ok = &write($in, $raw_X, $X, $ok); + + $ok && 'config_changed'; +} + +sub configure_chooser_raw { + my ($in, $raw_X, $do_pkgs, $options, $X, $modified) = @_; + + my %texts; + + my $update_texts = sub { + $texts{card} = $X->{card} && $X->{card}{BoardName} || _("Custom"); + $texts{monitor} = $X->{monitor} && $X->{monitor}{ModelName} || _("Custom"); + $texts{resolution} = Xconfig::resolution_and_depth::to_string($X->{resolution}); + + $texts{$_} =~ s/(.{20}).*/$1.../ foreach keys %texts; #- ensure not too long + }; + $update_texts->(); + + my $may_set = sub { + my ($field, $val) = @_; + if ($val) { + $X->{$field} = $val; + $X->{"modified_$field"} = 1; + $modified = 1; + $update_texts->(); + } + }; + + my $ok; + $in->ask_from_({ ok => '' }, + [ + { label => _("Graphic Card"), val => \$texts{card}, icon => "eth_card_mini", clicked => sub { + $may_set->('card', Xconfig::card::configure($in, $raw_X, $do_pkgs, 0, $options)); + } }, + { label => _("Monitor"), val => \$texts{monitor}, icon => "ic82-systemeplus-40", clicked => sub { + $may_set->('monitor', Xconfig::monitor::configure($in, $raw_X)); + } }, + { label => _("Resolution"), val => \$texts{resolution}, icon => "X", disabled => sub { !$X->{card} || !$X->{monitor} }, + clicked => sub { + if (grep { delete $X->{"modified_$_"} } 'card', 'monitor') { + Xconfig::screen::configure($raw_X, $X->{card}); + } + $may_set->('resolution', Xconfig::resolution_and_depth::configure($in, $raw_X, $X->{card}, $X->{monitor})); + } }, + { val => _("Test"), icon => "warning", disabled => sub { !$X->{card} || !$X->{monitor} || !$modified || !Xconfig::card::check_bad_card($X->{card}) }, + clicked => sub { + $ok = Xconfig::test::test($in, $raw_X, $X->{card}, 1); + } }, + { val => _("Options"), icon => "ic82-tape-40", clicked => sub { + Xconfig::various::various($in, $X->{card}, $options); + } }, + { val => _("Quit"), icon => "exit", clicked_may_quit => sub { 1 } }, + ]); + $ok, $modified; +} + +sub configure_chooser { + my ($in, $raw_X, $do_pkgs, $options) = @_; + + my $X = { + card => eval { Xconfig::card::from_raw_X($raw_X) }, + monitor => $raw_X->get_monitors && Xconfig::monitor::from_raw_X($raw_X), + resolution => eval { $raw_X->get_resolution }, + }; + my ($ok, $modified) = configure_chooser_raw($in, $raw_X, $do_pkgs, $options, $X); + + $modified and &write($in, $raw_X, $X, $ok) or return; + + 'config_changed'; +} + +sub write { + my ($in, $raw_X, $X, $ok) = @_; $ok ||= $in->ask_yesorno('', _("Keep the changes? The current configuration is: -%s", Xconfig::various::info($raw_X, $card))); +%s", Xconfig::various::info($raw_X, $X->{card})), 1); - if ($ok) { - export_to_install_X($card, $monitor, $resolution); - $raw_X->write; - symlinkf "../..$card->{prog}", "$::prefix/etc/X11/X" if $card->{server} !~ /Xpmac/; - } - Xconfig::various::choose_xdm($in, $auto); - - $ok && 'config_changed'; -} + $ok or return; + export_to_install_X($X); + $raw_X->write; + Xconfig::various::check_XF86Config_symlink(); + symlinkf "../..$X->{card}{prog}", "$::prefix/etc/X11/X" if $X->{card}{server} !~ /Xpmac/; + 1; +} sub export_to_install_X { - my ($card, $monitor, $resolution) = @_; + my ($X) = @_; $::isInstall or return; - $::o->{X}{resolution_wanted} = $resolution->{X}; - $::o->{X}{default_depth} = $resolution->{Depth}; - $::o->{X}{bios_vga_mode} = $resolution->{bios}; - $::o->{X}{monitor} = $monitor if $monitor->{manually_chosen}; - $::o->{X}{card} = $monitor if $card->{manually_chosen}; + $::o->{X}{resolution_wanted} = $X->{resolution}{X}; + $::o->{X}{default_depth} = $X->{resolution}{Depth}; + $::o->{X}{bios_vga_mode} = $X->{resolution}{bios}; + $::o->{X}{monitor} = $X->{monitor} if $X->{monitor}{manually_chosen}; + $::o->{X}{card} = $X->{monitor} if $X->{card}{manually_chosen}; } |