diff options
Diffstat (limited to 'perl-install/install/steps_gtk.pm')
-rw-r--r-- | perl-install/install/steps_gtk.pm | 405 |
1 files changed, 225 insertions, 180 deletions
diff --git a/perl-install/install/steps_gtk.pm b/perl-install/install/steps_gtk.pm index 8532ee616..fa34c947c 100644 --- a/perl-install/install/steps_gtk.pm +++ b/perl-install/install/steps_gtk.pm @@ -1,4 +1,4 @@ -package install::steps_gtk; # $Id$ +package install::steps_gtk; use diagnostics; use strict; @@ -15,8 +15,8 @@ use install::steps_interactive; use interactive::gtk; use xf86misc::main; use common; -use mygtk2; -use ugtk2 qw(:helpers :wrappers :create); +use mygtk3; +use ugtk3 qw(:helpers :wrappers :create); use devices; use modules; use install::gtk; @@ -36,113 +36,126 @@ sub new($$) { if (!$::local_install && ($::testing ? $ENV{DISPLAY} ne $wanted_DISPLAY : $ENV{DISPLAY} =~ /^:\d/)) { #- is the display local or distant? - my $f = "/tmp/Xconf"; - if (!$::testing) { - devices::make("/dev/kbd"); - } - - #- /tmp is mostly tmpfs, but not fully, since it doesn't allow: mount --bind /tmp/.X11-unix /mnt/tmp/.X11-unix - mkdir '/tmp/.X11-unix'; - run_program::run('mount', '-t', 'tmpfs', 'none', '/tmp/.X11-unix'); - - my $launchX = sub { - my ($server, $Driver) = @_; - - mkdir '/var/log' if !-d '/var/log'; - - my @options = $wanted_DISPLAY; - if ($server eq 'Xnest') { - push @options, '-ac', '-geometry', $o->{vga} || ($o->{vga16} ? '640x480' : '800x600'); - } else { - install::gtk::createXconf($f, @{$o->{mouse}}{'Protocol', 'device'}, $o->{mouse}{wacom}[0], $Driver); - - push @options, '-allowMouseOpenFail', '-xf86config', $f if arch() !~ /^sparc/; - push @options, 'vt7', '-dpi', '75'; - push @options, '-nolisten', 'tcp'; - - #- old weird servers: Xsun - push @options, '-fp', '/usr/share/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; - my $start_time = time(); - foreach (1..60) { - log::l("waiting for the server to start ($_ $nb)"); - 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 :-( - log::l("AFAIK X server is up"); - return 1; - } - time() - $start_time < 60 or last; - time() - $start_time > 8 and print N("Xorg server is slow to start. Please wait..."), "\n"; - sleep 1; - } - log::l("Timeout!!"); - 0; - }; - my @servers = qw(Driver:fbdev Driver:vesa); #-) - if ($::testing) { - @servers = 'Xnest'; - } elsif (arch() =~ /ia64/) { - require Xconfig::card; - my ($card) = Xconfig::card::probe(); - @servers = map { if_($_, "Driver:$_") } $card && $card->{Driver}, 'fbdev'; - } elsif (arch() =~ /i.86/) { - require Xconfig::card; - my ($card) = Xconfig::card::probe(); - # early i810 do not support VESA: - undef @servers if $card && $card->{card_name} eq 'i810'; - log::l("graphical installer not supported on early i810"); - } - - foreach (@servers) { - log::l("Trying with server $_"); - my ($prog, $Driver) = /Driver:(.*)/ ? ('Xorg', $1) : /Xsun|Xnest|^X_move$/ ? $_ : "XF86_$_"; - if (/FB/i) { - !$o->{vga16} && $o->{allowFB} or next; - - $o->{allowFB} = &$launchX($prog, $Driver) #- keep in mind FB is used. - and goto OK; - } else { - $o->{vga16} = 1 if /VGA16/; - &$launchX($prog, $Driver) and goto OK; - } - } - return undef; + _setup_and_start_X($o, $wanted_DISPLAY) or return; } - OK: + $ENV{DISPLAY} = $wanted_DISPLAY; require detect_devices; if (detect_devices::is_xbox()) { modules::load('xpad'); run_program::run('xset', 'm', '1/8', '1'); } - run_program::raw({ detach => 1 }, 'drakx-matchbox-window-manager'); + if (detect_devices::is_qemu()) { + mkdir_p('/run/spice-vdagentd'); + run_program::raw({ detach => 1 }, 'spice-vdagentd', '>', '/dev/null', '2>', '/dev/null', '-X'); + run_program::raw({ detach => 1 }, 'spice-vdagent', '>', '/dev/null', '2>', '/dev/null'); + } + any::disable_x_screensaver(); + run_program::raw({ detach => 1 }, 'mutter', '--x11'); install::gtk::init_gtk($o); install::gtk::init_sizes($o); install::gtk::install_theme($o); install::gtk::create_steps_window($o); _may_configure_framebuffer_640x480($o); - $ugtk2::grab = 1; + $ugtk3::grab = 1; $o = (bless {}, ref($type) || $type)->SUPER::new($o); $o->interactive::gtk::new; + gtkset_mousecursor_normal(); $o; } +sub _setup_and_start_X { + my ($o, $wanted_DISPLAY) = @_; + my $f = "/tmp/Xconf"; + + #- /tmp is mostly tmpfs, but not fully, since it doesn't allow: mount --bind /tmp/.X11-unix /mnt/tmp/.X11-unix + mkdir '/tmp/.X11-unix'; + run_program::run('mount', '-t', 'tmpfs', 'none', '/tmp/.X11-unix'); + + + my @servers = qw(Driver:fbdev Driver:vesa); #-) + if ($::testing) { + @servers = 'Xnest'; + } elsif (is_uefi()) { + @servers = 'Driver:fbdev'; + } elsif (arch() =~ /i.86/) { + require Xconfig::card; + my ($card) = Xconfig::card::probe(); + if ($card && $card->{card_name} eq 'i810') { + # early i810 do not support VESA: + log::l("graphical installer not supported on early i810"); + undef @servers; + } + } + + foreach (@servers) { + log::l("Trying with server $_"); + my ($prog, $Driver) = /Driver:(.*)/ ? ('Xorg', $1) : $_; + if (/FB/i) { + !$o->{vga16} && $o->{allowFB} or next; + + $o->{allowFB} = _launchX($o, $f, $prog, $Driver, $wanted_DISPLAY) #- keep in mind FB is used. + and return 1; + } else { + $o->{vga16} = 1 if /VGA16/; + _launchX($o, $f, $prog, $Driver, $wanted_DISPLAY) and return 1; + } + } + return undef; +} + +sub _launchX { + my ($o, $f, $server, $Driver, $wanted_DISPLAY) = @_; + + mkdir '/var/log' if !-d '/var/log'; + + my @options = $wanted_DISPLAY; + if ($server eq 'Xnest') { + push @options, '-ac', '-geometry', $o->{vga} || ($o->{vga16} ? '640x480' : '1024x768'); + } else { + install::gtk::createXconf($f, $Driver); + + push @options, '-allowMouseOpenFail', '-xf86config', $f; + push @options, 'vt7', '-dpi', '75'; + push @options, '-nolisten', 'tcp'; + } + + 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; + my $start_time = time(); + foreach (1..60) { + log::l("waiting for the server to start ($_ $nb)"); + if (!fuzzy_pidofs(qr/\b$server\b/)) { + log::l("Server died"); + log::l(any::header("Xorg.log"), cat_("/var/log/Xorg.0.log")); + 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 :-( + log::l("AFAIK X server is up"); + return 1; + } + time() - $start_time < 60 or last; + time() - $start_time > 8 and print N("Xorg server is slow to start. Please wait..."), "\n"; + sleep 1; + } + log::l("Timeout!!"); + log::l(any::header("Xorg.log"), cat_("/var/log/Xorg.0.log")); + 0; +} + #- if we success to start X in 640x480 using driver "vesa", #- we configure to use fb on installed system (to ensure splashy works) #- (useful on 800x480 netbooks) @@ -173,7 +186,7 @@ sub leavingStep { sub charsetChanged { my ($o) = @_; - Gtk2->set_locale; + c::init_setlocale(); install::gtk::load_font($o); install::gtk::create_steps_window($o); } @@ -201,8 +214,8 @@ sub selectLanguage { $o->ask_warn('', formatAlaTeX(N("Your system is low on resources. You may have some problem installing -Mandriva Linux. If that occurs, you can try a text install instead. For this, -press `F1' when booting on CDROM, then enter `text'."))) if availableRamMB() < 70; # 70MB +%s. If that occurs, you can try a text install instead. For this, +press `F1' when booting on CDROM, then enter `text'.", N("Mageia")))) if availableRamMB() < 70; # 70MB } @@ -227,14 +240,22 @@ sub selectMouse { } } +sub setPackages { + my ($o) = @_; + my (undef, $old_title) = get_default_step_items(); + set_default_step_items(N("Media Selection") || $old_title); + install::any::setPackages($o); + set_default_step_items($old_title); +} + sub reallyChooseDesktop { my ($o, $title, $message, $choices, $choice) = @_; - my $w = ugtk2->new($title); + my $w = ugtk3->new($title); my %tips = ( - KDE => N("Install Mandriva KDE Desktop"), - GNOME => N("Install Mandriva GNOME Desktop"), + KDE => N("Install %s Plasma Desktop", N("Mageia")), + GNOME => N("Install %s GNOME Desktop", N("Mageia")), Custom => N("Custom install"), ); my $prev; @@ -245,39 +266,38 @@ sub reallyChooseDesktop { tip => $tips{$val->[0]}, toggled => sub { $choice = $val if $_[0]->get_active }, active => $choice == $val, - $prev ? (group => $prev->get_group) : ()); + if_($prev, join => $prev)); $prev->signal_connect(key_press_event => sub { my (undef, $event) = @_; if (!$event || ($event->keyval & 0x7f) == 0xd) { - Gtk2->main_quit; + Gtk3->main_quit; } }); my $img = gtksignal_connect( - gtkadd(Gtk2::EventBox->new, gtknew('Image', file => "desktop-$val->[0]")), + gtkadd(Gtk3::EventBox->new, gtknew('Image', file => "desktop-$val->[0]")), 'button-press-event' => sub { my %title = ( - KDE => N("KDE Desktop"), + KDE => N("Plasma Desktop"), GNOME => N("GNOME Desktop"), Custom => N("Custom Desktop"), ); - my $wp = ugtk2->new($title{$val->[0]}, transient => $w->{real_window}, modal => 1); + my $wp = ugtk3->new($title{$val->[0]}, transient => $w->{real_window}, modal => 1); gtkadd($wp->{rwindow}, - gtkpack_(Gtk2::VBox->new, + gtknew('VBox', children => [ 0, gtknew('Title2', label => N("Here's a preview of the '%s' desktop.", $val->[1]), # workaround infamous 6 years old gnome bug #101968: - width => mygtk2::get_label_width(), + width => mygtk3::get_label_width(), ), 1, gtknew('Image', file => "desktop-$val->[0]-big"), - 0, Gtk2::HSeparator->new, - 0, gtkpack(create_hbox('end'), - gtknew('Button', text => N("Close"), clicked => sub { Gtk2->main_quit }) - ), - ), + 0, gtknew('HSeparator'), + 0, gtknew('HButtonBox', layout => 'end', children_loose => [ + gtknew('Button', text => N("Close"), clicked => sub { Gtk3->main_quit }) + ]), + ]), ); $wp->{real_window}->set_size_request(-1, -1); $wp->{real_window}->grab_focus; - $wp->{real_window}->grab_focus; $wp->{real_window}->show_all; $wp->main; }); @@ -287,19 +307,17 @@ sub reallyChooseDesktop { ]); } @$choices; - ugtk2::gtkadd($w->{window}, + ugtk3::gtkadd($w->{window}, gtknew('VBox', children => [ 0, gtknew('Title2', # workaround infamous 6 years old gnome bug #101968: - width => mygtk2::get_label_width(), label => $message . ' ' . + width => mygtk3::get_label_width(), label => $message . ' ' . N("Click on images in order to see a bigger preview")), 1, gtknew('HButtonBox', children_loose => \@l), 0, $w->create_okcancel(N("Next"), undef, '', [ gtknew('Install_Button', text => N("Help"), clicked => sub { - interactive::gtk::display_help( - $o, - { interactive_help_id => 'choosePackages#choose-graphical-env' }, $w); + interactive::gtk::display_help($o, { interactive_help_id => 'chooseDesktop' }); }), undef, 1 ]) ])); $w->main; @@ -310,37 +328,41 @@ sub reallyChooseDesktop { sub reallyChooseGroups { my ($o, $size_to_display, $individual, $_compssUsers) = @_; - my $w = ugtk2->new(N("Package Group Selection")); + my $w = ugtk3->new(N("Package Group Selection")); my $w_size = gtknew('Label_Left', text => &$size_to_display, padding => [ 0, 0 ]); + my @entries; my $entry = sub { my ($e) = @_; - gtknew('CheckButton', + my $w = gtknew('CheckButton', text => translate($e->{label}), tip => translate($e->{descr}), active_ref => \$e->{selected}, toggled => sub { gtkset($w_size, text => &$size_to_display); }); + push @entries, $w; + $w; }; #- 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) } - ugtk2::gtkadd($w->{window}, - gtknew('VBox', children => [ - 1, $o->{gtk_display_compssUsers}->($entry), - 1, '', - 0, if_($individual, - gtknew('CheckButton', text => N("Individual package selection"), active_ref => $individual), - ), - 0, $w_size, - 0, Gtk2::HSeparator->new, - 0, gtknew('HButtonBox', layout => 'edge', children_tight => [ - gtknew('Install_Button', text => N("Help"), clicked => sub { - interactive::gtk::display_help($o, { interactive_help_id => 'choosePackages#choosePackagesGroups' }, $w) }), - gtknew('Button', text => N("Next"), clicked => sub { Gtk2->main_quit }), - ]), - ]), + ugtk3::gtkadd($w->{window}, + gtknew('VBox', children => [ + 1, gtknew('ScrolledWindow', child => $o->{gtk_display_compssUsers}->($entry)), + if_($individual, + 0, gtknew('CheckButton', text => N("Individual package selection"), active_ref => $individual), + ), + 0, $w_size, + 0, gtknew('HSeparator'), + 0, gtknew('HButtonBox', layout => 'edge', children_tight => [ + gtknew('Install_Button', text => N("Help"), clicked => sub { + interactive::gtk::display_help($o, { interactive_help_id => 'choosePackageGroups' }) }), + gtknew('Button', text => N("Unselect All"), clicked => sub { $_->set_active(0) foreach @entries }), + gtknew('Button', text => N("Next"), clicked => sub { Gtk3->main_quit }), + ]), + ], + ) ); $w->main; 1; @@ -359,7 +381,7 @@ sub choosePackagesTree { }, node_state => sub { my $p = install::pkgs::packageByName($packages, $_[0]) or return; - install::pkgs::packageMedium($packages, $p)->{selected} or return; + !install::pkgs::packageMedium($packages, $p)->{ignore} or return; $p->arch eq 'src' and return; $p->flag_base and return 'base'; $p->flag_installed && !$p->flag_upgrade and return 'installed'; @@ -393,17 +415,17 @@ sub choosePackagesTree { }, get_info => sub { my $p = install::pkgs::packageByName($packages, $_[0]) or return ''; - install::pkgs::extractHeaders([$p], $packages->{media}); + my $description = install::pkgs::get_pkg_info($p); my $imp = translate($install::pkgs::compssListDesc{$p->flag_base ? 5 : $p->rate}); my $tag = { 'foreground' => 'royalblue3' }; - $@ ? N("Bad package") : + [ [ N("Name: "), $tag ], [ $p->name . "\n" ], [ N("Version: "), $tag ], [ $p->version . '-' . $p->release . "\n" ], [ N("Size: "), $tag ], [ N("%d KB\n", $p->size / 1024) ], if_($imp, [ N("Importance: "), $tag ], [ "$imp\n" ]), - [ "\n" ], [ formatLines($p->description) ] ]; + [ "\n" ], [ formatLines($description) ] ]; }, toggle_nodes => sub { my $set_state = shift @_; @@ -414,6 +436,7 @@ sub choosePackagesTree { my $state = $packages->{state} ||= {}; $packages->{rpmdb} ||= install::pkgs::rpmDbOpen(); #- WORKAROUND my @l = $isSelection ? $packages->resolve_requested($packages->{rpmdb}, $state, \%l, + no_recommends => $::o->{no_recommends}, callback_choices => \&install::pkgs::packageCallbackChoices) : $packages->disable_selected($packages->{rpmdb}, $state, map { $packages->{depslist}[$_] } keys %l); @@ -436,7 +459,7 @@ sub choosePackagesTree { } } } - $error = [ N("You can not select/unselect this package"), + $error = [ N("You cannot select/unselect this package"), formatList(20, map { my $rb = $state->{rejected}{$_}{backtrack}; my @froms = keys %{$rb->{closure} || {}}; my @unsatisfied = @{$rb->{unsatisfied} || []}; @@ -448,7 +471,7 @@ sub choosePackagesTree { $_ . ($s ? " ($s)" : ''); } sort @ask_unselect) ]; } elsif (install::pkgs::correctSize($size / sqr(1024)) > $available / sqr(1024)) { - $error = N("You can not select this package as there is not enough space left to install it"); + $error = N("You cannot select this package as there is not enough space left to install it"); } elsif (@l > @_ && $common->{state}{auto_deps}) { $o->ask_okcancel(N("Confirmation"), [ $isSelection ? N("The following packages are going to be installed") : @@ -460,7 +483,8 @@ sub choosePackagesTree { #- disable selection (or unselection). $packages->{rpmdb} ||= install::pkgs::rpmDbOpen(); #- WORKAROUND $isSelection ? $packages->disable_selected($packages->{rpmdb}, $state, @l) : - $packages->resolve_requested($packages->{rpmdb}, $state, { map { $_->id => 1 } @l }); + $packages->resolve_requested($packages->{rpmdb}, $state, { map { $_->id => 1 } @l }, + no_recommends => $::o->{no_recommends}); } else { #- keep the changes, update visible state. foreach (@l) { @@ -477,19 +501,17 @@ sub choosePackagesTree { check_interactive_to_toggle => sub { my $p = install::pkgs::packageByName($packages, $_[0]) or return; if ($p->flag_base) { - $o->ask_warn('', N("This is a mandatory package, it can not be unselected")); + $o->ask_warn('', N("This is a mandatory package, it cannot be unselected")); } elsif ($p->flag_installed && !$p->flag_upgrade) { - $o->ask_warn('', N("You can not unselect this package. It is already installed")); + $o->ask_warn('', N("You cannot unselect this package. It is already installed")); } elsif ($p->flag_selected && $p->flag_installed) { - $o->ask_warn('', N("You can not unselect this package. It must be upgraded")); + $o->ask_warn('', N("You cannot unselect this package. It must be upgraded")); } else { return 1 } return; }, auto_deps => N("Show automatically selected packages"), interactive_help => sub { - interactive::gtk::display_help($o, - { interactive_help_id => - 'choosePackages#choosePackagesTree' }, $w) }, + interactive::gtk::display_help($o, { interactive_help_id => 'choosePackagesTree' }) }, ok => N("Install"), cancel => N("Previous"), @@ -498,6 +520,11 @@ sub choosePackagesTree { wait_message => N("Updating package selection"), code => sub { $o->loadSavePackagesOnFloppy($packages); 1 }, }, + { icon => 'reload', + help => N("Toggle between hierarchical and flat package list"), + wait_message => N("Updating package selection"), + code => sub { $common->{state}{flat} = !$common->{state}{flat}; 1 }, + }, if_(0, { icon => 'feather', help => N("Minimal install"), @@ -525,13 +552,14 @@ sub beforeInstallPackages { #------------------------------------------------------------------------------ sub installPackages { - my ($o, $packages) = @_; + my ($o) = @_; my ($current_total_size, $last_size, $nb, $total_size, $last_dtime, $_trans_progress_total); local $::noborderWhenEmbedded = 1; - my $w = ugtk2->new(N("Installing")); + my $w = ugtk3->new(N("Installing")); state $show_advertising; + my $show_release_notes; my $pkg_log_widget = gtknew('TextView', editable => 0); my ($advertising_image, $change_time, $i); @@ -552,8 +580,8 @@ sub installPackages { my ($title); my $pl = $f; $pl =~ s/\.png$/.pl/; eval(cat_($pl)) if -e $pl; - $banner->{text} = $title; - Gtk2::Banner::update_text($banner) + # FIXME: This hasn't actually worked for years: + #Gtk3::Banner::update_text($banner, $title); } }; @@ -565,21 +593,30 @@ sub installPackages { $pkg_log_widget->{to_bottom}->('force'); }); - ugtk2::gtkadd($w->{window}, my $box = gtknew('VBox', children_tight => [ - gtknew('Image_using_pixmap', file_ref => \$advertising_image, show_ref => \$show_advertising), + state $release_notes ||= any::get_release_notes($o); + my $rel_notes = gtknew('Button', text => N("Release Notes"), + clicked => sub { $show_release_notes = 1 }); + + ugtk3::gtkadd($w->{window}, my $box = gtknew('VBox', children_centered => [ + gtknew('Image', file_ref => \$advertising_image, show_ref => \$show_advertising), ])); + my $progress_total = 0; $box->pack_end(gtkshow(gtknew('VBox', border_width => 7, spacing => 3, children_loose => [ gtknew('ScrolledWindow', child => $pkg_log_widget, - hide_ref => \$show_advertising, height => 250, to_bottom => 1), + hide_ref => \$show_advertising, height => $::real_windowheight - 215, to_bottom => 1), gtknew('ProgressBar', fraction_ref => \ (my $pkg_progress), hide_ref => \$show_advertising), gtknew('HButtonBox', layout => 'start', children_loose => [ N("Time remaining:"), gtknew('Label', text_ref => \ (my $msg_time_remaining = N("(estimating...)"))), ]), - gtknew('VBox', children_centered => [ gtknew('ProgressBar', fraction_ref => \ (my $progress_total), height => 25) ]), + gtknew('VBox', children_centered => [ gtknew('ProgressBar', fraction_ref => \$progress_total, height => 25) ]), gtknew('HSeparator'), - gtknew('HButtonBox', spacing => 5, layout => 'end', children_loose => [ $cancel, $details ]), + gtknew('HButtonBox', spacing => 0, layout => 'edge', children_loose => [ + if_($release_notes, $rel_notes), + gtknew('HButtonBox', spacing => 5, layout => 'end', + children_loose => [ $cancel, $details ]), + ]), ])), 0, 1, 0); #- for the hide_ref & show_ref to work, we must set $show_advertising after packing @@ -588,10 +625,6 @@ sub installPackages { $details->hide if !@install::any::advertising_images; $w->sync; - foreach ($cancel, $details) { - gtkset_mousecursor_normal($_->window); - } - $advertize->(0); local *install::steps::installCallback = sub { @@ -600,18 +633,29 @@ sub installPackages { #- $amount and $total are used to return number of package and total size. $nb = $amount; $total_size = $total; $current_total_size = 0; - $o->{install_start_time} = time(); - mygtk2::gtkadd($pkg_log_widget, text => P("%d package", "%d packages", $nb, $nb)); + $o->{install_start_time} = 0; + mygtk3::gtkadd($pkg_log_widget, text => P("%d package", "%d packages", $nb, $nb)); $w->flush; } elsif ($type eq 'open') { + $advertize->(1) if $show_advertising && $total_size > 20_000_000 && time() - $change_time > 20; + + # display release notes if requested, when not chrooted: + if ($show_release_notes) { + undef $show_release_notes; + any::run_display_release_notes($release_notes); + $w->flush; + } + } elsif ($type eq 'inst' && $subtype eq 'start') { gtkval_modify(\$pkg_progress, 0); my $p = $packages->{depslist}[$id]; - mygtk2::gtkadd($pkg_log_widget, text => sprintf("\n%s: %s", $p->name, translate($p->summary))); + mygtk3::gtkadd($pkg_log_widget, text => sprintf("\n%s: %s", $p->name, translate($p->summary))); + $pkg_log_widget->{to_bottom}->('force'); $current_total_size += $last_size; $last_size = $p->size; - $advertize->(1) if $show_advertising && $total_size > 20_000_000 && time() - $change_time > 20; + $w->flush; } elsif ($type eq 'inst' && $subtype eq 'progress') { + $o->{install_start_time} ||= time(); gtkval_modify(\$pkg_progress, $total ? $amount / $total : 0); my $dtime = time() - $o->{install_start_time}; @@ -630,7 +674,7 @@ sub installPackages { } }; my $install_result; - catch_cdie { $install_result = $o->install::steps::installPackages($packages) } + catch_cdie { $install_result = $o->install::steps::installPackages('interactive') } sub { my $rc = install::steps_interactive::installPackages__handle_error($o, $_[0]); $rc or $w->destroy; @@ -647,7 +691,7 @@ sub installPackages { sub summary_prompt { my ($o, $l, $check_complete) = @_; - my $w = ugtk2->new(N("Summary")); + my $w = ugtk3->new(N("Summary")); my $set_entry_labels; my (@table, @widget_list); @@ -661,14 +705,14 @@ sub summary_prompt { $group = $e->{group}; push @table, [ gtknew('HBox', children_tight => [ gtknew('Title1', - label => mygtk2::asteriskize(escape_text_for_TextView_markup_format($group))) ]), '' ]; + label => mygtk3::asteriskize(escape_text_for_TextView_markup_format($group))) ]), '' ]; } - $e->{widget} = gtknew('Label_Right', width => $::real_windowwidth * 0.72, alignment => [ 1, 1 ]); + $e->{widget} = gtknew('Label_Right', width => $::real_windowwidth * 0.72, alignment => [ 1, 1 ], line_wrap => 1, tip => $e->{tip}); push @table, [], [ gtknew('HBox', children_tight => [ $e->{widget}, gtknew('Alignment', width => 10) ]), gtknew('Button', text => N("Configure"), clicked => sub { $w->{rwindow}->hide; - my ($old_icon, $old_title) = get_default_step_items(); + my ($_old_icon, $old_title) = get_default_step_items(); set_default_step_items($e->{banner_title} || $old_title); $e->{clicked}(); set_default_step_items($old_title); @@ -691,9 +735,9 @@ sub summary_prompt { }; $set_entry_labels->(); - my $help_sub = sub { interactive::gtk::display_help($o, { interactive_help_id => 'misc-params' }, $w) }; + my $help_sub = sub { interactive::gtk::display_help($o, { interactive_help_id => 'misc-params' }) }; - ugtk2::gtkadd($w->{window}, + ugtk3::gtkadd($w->{window}, gtknew('VBox', spacing => 5, children => [ 1, gtknew('ScrolledWindow', h_policy => 'never', child => gtknew('TextView', @@ -714,18 +758,18 @@ sub ask_deselect_media__copy_on_disk { my ($o, $hdlists, $o_copy_rpms_on_disk) = @_; my @names = uniq(map { $_->{name} } @$hdlists); - my %selection = map { $_->{name} => $_->{selected} } @$hdlists; + my %selection = map { $_->{name} => !$_->{ignore} } @$hdlists; if (@names > 1 || $o_copy_rpms_on_disk) { - my $w = ugtk2->new(N("Media Selection")); + my $w = ugtk3->new(N("Media Selection")); $w->sync; - ugtk2::gtkadd( + ugtk3::gtkadd( $w->{window}, gtknew('VBox', children => [ @names > 1 ? ( 0, gtknew('Label_Left', padding => [ 0, 0 ], # workaround infamous 6 years old gnome bug #101968: - width => mygtk2::get_label_width(), + width => mygtk3::get_label_width(), text => formatAlaTeX(N("The following installation media have been found. If you want to skip some of them, you can unselect them now."))), 1, gtknew('ScrolledWindow', child => gtknew('VBox', children => [ @@ -741,24 +785,25 @@ If you want to skip some of them, you can unselect them now."))), if_($o_copy_rpms_on_disk, 0, gtknew('Label_Left', padding => [ 0, 0 ], # workaround infamous 6 years old gnome bug #101968: - width => mygtk2::get_label_width(), - text => N("You have the option to copy the contents of the CDs onto the hard drive before installation. -It will then continue from the hard drive and the packages will remain available once the system is fully installed.")), + width => mygtk3::get_label_width(), + text => N("You have the option to copy the contents of the CDs onto the hard disk drive before installation. +It will then continue from the hard disk drive and the packages will remain available once the system is fully installed.")), 0, gtknew('CheckButton', text => N("Copy whole CDs"), active_ref => $o_copy_rpms_on_disk), 1, gtknew('Alignment'), 0, gtknew('HSeparator'), ), 0, gtknew('HButtonBox', layout => 'edge', children_tight => [ gtknew('Install_Button', text => N("Help"), clicked => sub { - interactive::gtk::display_help($o, { interactive_help_id => 'choosePackages' }, $w) }), - gtknew('Button', text => N("Next"), clicked => sub { Gtk2->main_quit }), + interactive::gtk::display_help($o, { interactive_help_id => 'choosePackagesTree' }) }), + gtknew('Button', text => N("Next"), clicked => sub { Gtk3->main_quit }), ]), ]), ); $w->main; } - $_->{selected} = $selection{$_->{name}} foreach @$hdlists; - log::l("keeping media " . join ',', map { $_->{rpmsdir} } grep { $_->{selected} } @$hdlists); + $_->{ignore} = !$selection{$_->{name}} foreach @$hdlists; + log::l("keeping media " . join ',', map { $_->{rpmsdir} } grep { !$_->{ignore} } @$hdlists); } + 1; |