summaryrefslogtreecommitdiffstats
path: root/perl-install/Xconfig/main.pm
diff options
context:
space:
mode:
Diffstat (limited to 'perl-install/Xconfig/main.pm')
-rw-r--r--perl-install/Xconfig/main.pm122
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};
}