diff options
Diffstat (limited to 'perl-install/install_steps_gtk.pm')
| -rw-r--r-- | perl-install/install_steps_gtk.pm | 120 |
1 files changed, 44 insertions, 76 deletions
diff --git a/perl-install/install_steps_gtk.pm b/perl-install/install_steps_gtk.pm index fad541525..7e826c514 100644 --- a/perl-install/install_steps_gtk.pm +++ b/perl-install/install_steps_gtk.pm @@ -46,23 +46,30 @@ sub new($$) { if ($server eq 'Xnest') { push @options, '-ac', '-geometry', $o->{vga} || ($o->{vga16} ? '640x480' : '800x600'); } elsif ($::globetrotter || !$::move) { - install_gtk::createXconf($f, @{$o->{mouse}}{"XMOUSETYPE", "device"}, $o->{mouse}{wacom}[0], $Driver); + #- use alternate mouse in install if mouse is unsafe or needs some specific module (e.g. synaptics) + my $mouse = is_empty_hash_ref($o->{mouse}{alternate_install}) ? $o->{mouse} : $o->{mouse}{alternate_install}; + install_gtk::createXconf($f, @$mouse{"XMOUSETYPE", "device"}, $o->{mouse}{wacom}[0], $Driver); - push @options, if_(!$::globetrotter, '-kb'), '-allowMouseOpenFail', '-xf86config', $f if arch() !~ /^sparc/ && arch() ne 'ppc'; + push @options, if_(!$::globetrotter, '-kb'), '-allowMouseOpenFail', '-xf86config', $f if arch() !~ /^sparc/; push @options, 'tty7', '-dpms', '-s', '240'; - #- old weird servers: Xpmac and Xsun - push @options, cat_('/proc/cmdline') !~ /ofonly/ ? ('-mode', '17', '-depth', '32') : '-mach64' if $server =~ /Xpmac/; - push @options, '-fp', '/usr/X11R6/lib/X11/fonts:unscaled' if $server =~ /Xsun|Xpmac/; + #- old weird servers: Xsun + push @options, '-fp', '/usr/X11R6/lib/X11/fonts:unscaled' if $server =~ /Xsun/; } if (!fork()) { c::setsid(); exec $server, @options or c::_exit(1); } + + #- wait for the server to start + foreach (1..5) { + sleep 1; + last if fuzzy_pidofs(qr/\b$server\b/); + log::l("$server still not running, trying again"); + } my $nb; foreach (1..60) { - sleep 1; log::l("Server died"), return 0 if !fuzzy_pidofs(qr/\b$server\b/); $nb++ if xf86misc::main::Xtest($wanted_DISPLAY); if ($nb > 2) { #- one succeeded test is not enough :-( @@ -70,6 +77,7 @@ sub new($$) { log::l("AFAIK X server is up"); return 1; } + sleep 1; } log::l("Timeout!!"); 0; @@ -96,8 +104,6 @@ sub new($$) { require Xconfig::card; my ($card) = Xconfig::card::probe(); @servers = map { if_($_, "Driver:$_") } $card && $card->{Driver}, 'fbdev'; - } elsif (arch() eq "ppc") { - @servers = qw(Xpmac); } if (($::move || $::globetrotter) && !$::testing) { @@ -111,10 +117,10 @@ sub new($$) { foreach (@servers) { log::l("Trying with server $_"); my $dir = "/usr/X11R6/bin"; - my ($prog, $Driver) = /Driver:(.*)/ ? ('Xorg', $1) : /Xsun|Xpmac|Xnest|^X_move$/ ? $_ : "XF86_$_"; + my ($prog, $Driver) = /Driver:(.*)/ ? ('Xorg', $1) : /Xsun|Xnest|^X_move$/ ? $_ : "XF86_$_"; unless (-x "$dir/$prog") { unlink $_ foreach glob_("$dir/X*"); - install_any::getAndSaveFile("Mandrake/mdkinst$dir/$prog", "$dir/$prog") or die "failed to get server $prog: $!"; + install_any::getAndSaveFile("install/stage2/live$dir/$prog", "$dir/$prog") or die "failed to get server $prog: $!"; chmod 0755, "$dir/$prog"; } if (/FB/i) { @@ -203,7 +209,7 @@ sub selectMouse { } sub reallyChooseGroups { - my ($o, $size_to_display, $individual, $val) = @_; + my ($o, $size_to_display, $individual, $_compssUsers) = @_; my $w = ugtk2->new(''); my $tips = Gtk2::Tooltips->new; @@ -211,60 +217,24 @@ sub reallyChooseGroups { my $entry = sub { my ($e) = @_; - my $text = translate($o->{compssUsers}{$e}{label}); - my $help = translate($o->{compssUsers}{$e}{descr}); + my $text = translate($e->{label}); + my $help = translate($e->{descr}); my $check = Gtk2::CheckButton->new($text); - $check->set_active($val->{$e}); + $check->set_active($e->{selected}); $check->signal_connect(clicked => sub { - $val->{$e} = $check->get_active; + $e->{selected} = $check->get_active; $w_size->set_label(&$size_to_display); }); gtkset_tip($tips, $check, $help); - #gtkpack_(Gtk2::HBox->new(0, 0), 0, gtkpng($file), 1, $check); $check; }; - my $entries_in_path = sub { - my ($path) = @_; - translate($path), map { $entry->($_) } grep { $o->{compssUsers}{$_}{path} eq $path } @{$o->{compssUsersSorted}}; - }; + #- when restarting this step, it might be necessary to reload the compssUsers.pl (bug 11558). kludgy. + if (!ref $o->{gtk_display_compssUsers}) { install_any::load_rate_files($o) } gtkadd($w->{window}, gtkpack_($w->create_box_with_title(N("Package Group Selection")), - 1, gtkpack_(Gtk2::VBox->new(0, 0), - 1, gtkpack_(Gtk2::HBox->new(0, 0), - $o->{meta_class} eq 'server' ? ( - 1, gtkpack(Gtk2::VBox->new(0, 0), - $entries_in_path->('Workstation'), - '', - $entries_in_path->('Server'), - ), - 1, gtkpack(Gtk2::VBox->new(0, 0), - $entries_in_path->('Graphical Environment'), - '', - $entries_in_path->('Development'), - '', - $entries_in_path->('Utilities'), - ), - ) : $o->{meta_class} eq 'desktop' ? ( - 1, gtkpack(Gtk2::VBox->new(0, 0), - $entries_in_path->('Workstation'), - ), - ) : ( - 1, gtkpack(Gtk2::VBox->new(0, 0), - $entries_in_path->('Workstation'), - '', - $entry->('Development|Development'), - $entry->('Development|Documentation'), - $entry->('Development|LSB'), - ), - 0, gtkpack(Gtk2::VBox->new(0, 0), - $entries_in_path->('Server'), - '', - $entries_in_path->('Graphical Environment'), - ), - ), - )), - 1, '', + 1, $o->{gtk_display_compssUsers}->($entry), + 1, '', 0, gtkadd(Gtk2::HBox->new(0, 0), gtksignal_connect(Gtk2::Button->new(N("Help")), clicked => $o->interactive_help_sub_display_id('choosePackages')), $w_size, @@ -312,10 +282,9 @@ sub choosePackagesTree { $add_node->($_, undef); } } else { - foreach my $root (@{$o->{compssUsersSorted}}) { - my (%fl, @firstchoice, @others); - #$fl{$_} = $o->{compssUsersChoice}{$_} foreach @{$o->{compssUsers}{$root}{flags}}; #- FEATURE:improve choce of packages... - $fl{$_} = 1 foreach @{$o->{compssUsers}{$root}{flags}}; + foreach my $root (@{$o->{compssUsers}}) { + my (@firstchoice, @others); + my %fl = map { $_ => 1 } @{$root->{flags}}; foreach my $p (@{$packages->{depslist}}) { !$o_limit_medium || pkgs::packageMedium($packages, $p) == $o_limit_medium or next; my @flags = $p->rflags; @@ -324,7 +293,7 @@ sub choosePackagesTree { push(@firstchoice, $p->name) : push(@others, $p->name); } - my $root2 = join('|', map { translate($_) } split('\|', $root)); + my $root2 = translate($root->{path}) . '|' . translate($root->{label}); $add_node->($_, $root2) foreach sort @firstchoice; $add_node->($_, $root2 . '|' . N("Other")) foreach sort @others; } @@ -474,33 +443,38 @@ sub installPackages { my ($advertising, $change_time, $i); my $show_advertising if 0; $show_advertising = to_bool(@install_any::advertising_images) if !defined $show_advertising; - my $detail_or_not = sub { $show_advertising ? N("Details") : N("No details") }; - my ($msg, $msg_time_remaining, $msg_time_total) = map { Gtk2::Label->new($_) } '', (N("Estimating")) x 2; + + my ($msg, $msg_time_remaining) = map { Gtk2::Label->new($_) } '', N("Estimating"); my ($progress, $progress_total) = map { Gtk2::ProgressBar->new } (1..2); gtkadd($w->{window}, my $box = Gtk2::VBox->new(0,10)); $box->pack_end(gtkshow(gtkpack(Gtk2::VBox->new(0,5), $msg, $progress, create_packtable({}, [N("Time remaining "), $msg_time_remaining], -# [N("Total time "), $msg_time_total], ), $text, $progress_total, gtkadd(create_hbox(), my $cancel = Gtk2::Button->new(N("Cancel")), - my $details = Gtk2::Button->new($detail_or_not->()), + my $details = Gtk2::Button->new(''), ), )), 0, 1, 0); $details->hide if !@install_any::advertising_images; $w->sync; $msg->set_label(N("Please wait, preparing installation...")); - gtkset_mousecursor_normal($cancel->window); - gtkset_mousecursor_normal($details->window); + foreach ($cancel, $details) { + gtkset_mousecursor_normal($_->window); + } my $advertize = sub { + my ($update) = @_; @install_any::advertising_images or return; - $show_advertising ? $_->hide : $_->show foreach $msg, $progress, $text; + foreach ($msg, $progress, $text) { + $show_advertising ? $_->hide : $_->show; + } + $details->set_label($show_advertising ? N("Details") : N("No details")); + gtkdestroy($advertising) if $advertising; - if ($show_advertising && $_[0]) { + if ($show_advertising && $update) { $change_time = time(); my $f = $install_any::advertising_images[$i++ % @install_any::advertising_images]; log::l("advertising $f"); @@ -510,13 +484,11 @@ sub installPackages { -e $pl and $draw_text = 1; eval(cat_($pl)) if $draw_text; my $pix = gtkcreate_pixbuf($f); - my $dbl_area; my $darea = Gtk2::DrawingArea->new; gtkpack($box, $advertising = !$draw_text ? gtkcreate_img($f) : gtksignal_connect(gtkset_size_request($darea, $width, $height), expose_event => sub { my (undef, undef, $dx, $dy) = $darea->allocation->values; - if (!defined($dbl_area)) { $darea->window->draw_rectangle($darea->style->bg_gc('active'), 1, 0, 0, $dx, $dy); $pix->render_to_drawable($darea->window, $darea->style->bg_gc('normal'), 0, 0, ($dx-$width)/2, 0, $width, $height, 'none', 0, 0); @@ -531,7 +503,6 @@ sub installPackages { $draw_lay->($darea->style->black_gc, 0); $line->{options}{bold} and $draw_lay->($darea->style->black_gc, 1); } - } })); } else { $advertising = undef; @@ -541,10 +512,9 @@ sub installPackages { $cancel->signal_connect(clicked => sub { $pkgs::cancel_install = 1 }); $details->signal_connect(clicked => sub { invbool \$show_advertising; - $details->set_label($detail_or_not->()); $advertize->(1); }); - $advertize->(); + $advertize->(0); my $oldInstallCallback = \&pkgs::installCallback; local *pkgs::installCallback = sub { @@ -577,8 +547,6 @@ sub installPackages { $progress_total->set_fraction($ratio); if ($dtime != $last_dtime && $current_total_size > 80_000_000) { - $msg_time_total->set_label(formatTime(10 * round($total_time / 10) + 10)); -#- $msg_time_total->set_label(formatTimeRaw($total_time) . " " . formatTimeRaw($dtime / $ratio2)); $msg_time_remaining->set_label(formatTime(10 * round(max($total_time - $dtime, 0) / 10) + 10)); $last_dtime = $dtime; } @@ -591,7 +559,7 @@ sub installPackages { my ($method, $medium) = @_; #- if not using a cdrom medium or an iso image, always abort. - return unless install_any::method_allows_medium_change($method) && !$::oem; + return if !install_any::method_allows_medium_change($method) || $::oem; my $name = pkgs::mediumDescr($o->{packages}, $medium); local $| = 1; print "\a"; |
