summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perl-install/ugtk2.pm31
1 files changed, 16 insertions, 15 deletions
diff --git a/perl-install/ugtk2.pm b/perl-install/ugtk2.pm
index 25c17b64f..56fc5b333 100644
--- a/perl-install/ugtk2.pm
+++ b/perl-install/ugtk2.pm
@@ -498,7 +498,7 @@ sub create_packtable {
sub create_okcancel {
my ($w, $o_ok, $o_cancel, $o_spread, @other) = @_;
# @other is a list of extra buttons (usually help (eg: XFdrake/drakx caller) or advanced (eg: interactive caller) button)
- # extra buttons have the following structure [ label, handler, is_first ]
+ # extra buttons have the following structure [ label, handler, is_first, pack_right ]
local $::isWizard = $::isWizard && !$w->{pop_it};
my $cancel;
if (defined $o_cancel || defined $o_ok) {
@@ -514,22 +514,23 @@ sub create_okcancel {
sub { log::l("default cancel_clicked"); undef $w->{retval}; Gtk2->main_quit });
}
$w->{wizcancel} = gtksignal_connect(Gtk2::Button->new(N("Cancel")), clicked => sub { die 'wizcancel' }) if $::isWizard && !$::isInstall;
- my @l2 = map { $w->{buttons}{$_->[0]} = gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => $_->[1]) } grep { $_->[2] } @other;
- my @r2 = map { $w->{buttons}{$_->[0]} = gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => $_->[1]) } grep { !$_->[2] } @other;
+ my $f = sub { $w->{buttons}{$_->[0]} = gtksignal_connect(Gtk2::Button->new($_->[0]), clicked => $_->[3]) };
+ my @left = ((map { $f->($_) } grep { $_->[2] && !$_->[3] } @other),
+ map { $f->($_) } grep { !$_->[2] && !$_->[3] } @other);
+ my @right = ((map { $f->($_) } grep { $_->[2] && $_->[3] } @other),
+ map { $f->($_) } grep { !$_->[2] && $_->[3] } @other);
# we put space to group buttons in two packs (but if there's only one when not in wizard mode)
# but in the installer where all windows run in wizard mode because of design even when not in a wizard step
- my @extras = (@l2, @r2);
- $bprev = Gtk2::Label->new if !$cancel && $::Wizard_no_previous && !@extras;
- my (@first, @last); # buttons lists
+ $bprev = Gtk2::Label->new if !$cancel && $::Wizard_no_previous && !@left && !@right;
if ($::isWizard) {
- # wizard mode: order is cancel/extras/white/prev/next
- @first = (if_(!$::isInstall, $w->{wizcancel}), @extras);
- @last = ($bprev, $bok);
+ # wizard mode: order is cancel/left_extras/white/right_extras/prev/next
+ unshift @left, $w->{wizcancel} if !$::isInstall;
+ push @right, $bprev, $bok;
} else {
- # normal mode: cancel/ok button follow current desktop's HIG
- my @extras = (@l2, @r2, if_($ok && $cancel, Gtk2::Label->new)); # space buttons but if there's only one
- @first = ($bprev, @extras);
- @last = ($bok);
+ # normal mode: cancel/ok button follow GNOME's HIG
+ unshift @left, $bprev;
+ push @left, Gtk2::Label->new if $ok && $cancel; # space buttons but if there's only one button
+ push @right, $bok;
}
gtkpack(Gtk2::VBox->new,
@@ -543,8 +544,8 @@ sub create_okcancel {
$_;
} grep { $_ } @{$_->[0]})
)
- } ([ \@first, 'start' ],
- [ \@last, 'end' ],
+ } ([ \@left, 'start' ],
+ [ \@right, 'end' ],
)
)
),