aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xrpmdrake25
1 files changed, 18 insertions, 7 deletions
diff --git a/rpmdrake b/rpmdrake
index 689d72e4..b11e9fe8 100755
--- a/rpmdrake
+++ b/rpmdrake
@@ -195,18 +195,18 @@ sub run_treeview_dialog {
my (undef, $size_free) = MDK::Common::System::df('/usr');
my $formatlistpkg = sub { myformatList(sort { uc($a) cmp uc($b) } @_) };
+ my $is_locale_available = sub {
+ grep { $urpm->{depslist}[$_[0]]->flag_selected } keys %{$urpm->{provides}{$_[0]} || {}} and return 1;
+ my $found;
+ db->traverse_tag('name', [ $_ ], sub { $found ||= 1 });
+ return $found;
+ };
my $callback_choices = sub {
my ($urpm, $db, $state, $choices) = @_;
foreach my $pkg (@$choices) {
foreach ($pkg->requires_nosense) {
/locales-/ or next;
- foreach (keys %{$urpm->{provides}{$_} || {}}) {
- $urpm->{depslist}[$_]->flag_selected or next;
- return $pkg;
- }
- my $autochoice;
- db->traverse_tag('name', [ $_ ], sub { $autochoice ||= $pkg });
- $autochoice and return $autochoice;
+ $is_locale_available->($_) and return $pkg;
}
}
$choices->[interactive_list(_("Please choose"), _("One of the following packages is needed:"), map { my_fullname($_) } @$choices)];
@@ -344,6 +344,17 @@ or you already installed all of them."));
} else {
if ($new_state) {
$urpm->{state}{selected} = {};
+ if (@nodes > 1) {
+ #- unselect i18n packages of which locales is not already present (happens when user clicks on KDE group)
+ my @bad_i18n_pkgs;
+ foreach my $sel (@nodes) {
+ foreach ($pkgs->{$sel}{pkg}->requires_nosense) {
+ /locales-([^-]+)/ or next;
+ $sel =~ /-$1[-_]/ && !$is_locale_available->($_) and push @bad_i18n_pkgs, $sel;
+ }
+ }
+ @nodes = difference2(\@nodes, \@bad_i18n_pkgs);
+ }
slow_func($tree->window,
sub { $urpm->resolve_requested(db, $urpm->{state}, { map { $pkgs->{$_}{pkg}->id => 1 } @nodes },
callback_choices => $callback_choices, no_flag_update => 1, keep_state => 1) });