aboutsummaryrefslogtreecommitdiffstats
path: root/langs/pt-br/downloads/get.po
diff options
context:
space:
mode:
authorfilip <filip.komar@gmail.com>2021-03-05 17:19:43 +0100
committerfilip <filip.komar@gmail.com>2021-03-05 17:19:43 +0100
commit82f90c4a9f855323568844f6234282639bea80b8 (patch)
treef14b7d16e85185da8904e006c4182f234a51e5f9 /langs/pt-br/downloads/get.po
parent46382926884e8f52d545c276453b2a7a4857c8c6 (diff)
downloadwww-82f90c4a9f855323568844f6234282639bea80b8.tar
www-82f90c4a9f855323568844f6234282639bea80b8.tar.gz
www-82f90c4a9f855323568844f6234282639bea80b8.tar.bz2
www-82f90c4a9f855323568844f6234282639bea80b8.tar.xz
www-82f90c4a9f855323568844f6234282639bea80b8.zip
update DL/get l10n
Diffstat (limited to 'langs/pt-br/downloads/get.po')
-rw-r--r--langs/pt-br/downloads/get.po149
1 files changed, 69 insertions, 80 deletions
diff --git a/langs/pt-br/downloads/get.po b/langs/pt-br/downloads/get.po
index 1d296d0eb..452a7f576 100644
--- a/langs/pt-br/downloads/get.po
+++ b/langs/pt-br/downloads/get.po
@@ -2,14 +2,14 @@
# Copyright (C) 2014 - 2021 Mageia
# This file is distributed under the same license as
# the content of the corresponding web page(s).
-#
+#
# Generated by extract2gettext.php
# Domain: downloads/get
-#
+#
# include translation strings from:
# en/downloads/get/index.php
# en/downloads/get/lib.php
-#
+#
# Translators:
# Celio Alves <dreamcelio@gmail.com>, 2020
# lrampazzo <lrampazzo@gmail.com>, 2020-2021
@@ -21,14 +21,14 @@ msgid ""
msgstr ""
"Project-Id-Version: Mageia\n"
"Report-Msgid-Bugs-To: mageia-i18n@mageia.org\n"
-"POT-Creation-Date: 2021-02-16 22:38:55+0000\n"
+"POT-Creation-Date: 2021-03-05 16:08:45+0000\n"
"PO-Revision-Date: 2021-02-17 00:21+0000\n"
"Last-Translator: 3f37d448649cd548fa5a733e33387c2a_dee4ccf\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/MageiaLinux/mageia/language/pt_BR/)\n"
+"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: "/web/en/downloads/get/index.php +130"
@@ -40,9 +40,7 @@ msgid "This <a href=\"%s\">%s</a> download mirror is located in %s (%s)."
msgstr "Este <a href=\"%s\">%s</a> espelho de download está localizado em %s (%s)."
#: "/web/en/downloads/get/index.php +154"
-msgid ""
-"If it does not work well for you, <a href=\"#om\" "
-"id=\"other_mirrors_btn\">check out these other mirrors</a>."
+msgid "If it does not work well for you, <a href=\"#om\" id=\"other_mirrors_btn\">check out these other mirrors</a>."
msgstr "Se este não funcionou bem para você, <a href=\"#om\" id=\"other_mirrors_btn\">verifique outro desses espelhos</a>."
#: "/web/en/downloads/get/index.php +169"
@@ -74,171 +72,162 @@ msgid "(download size is about %s)."
msgstr "(o tamanho do download é de aproximadamente %s)."
#: "/web/en/downloads/get/index.php +249"
-msgid ""
-"If the download does not start, <a href=\"%s\" rel=\"nofollow\" "
-"title=\"%s\">click here</a>."
+msgid "If the download does not start, <a href=\"%s\" rel=\"nofollow\" title=\"%s\">click here</a>."
msgstr "Se o download não iniciar, <a href=\"%s\" rel=\"nofollow\" title=\"%s\">clique aqui</a>."
-#: "/web/en/downloads/get/index.php +262"
+#: "/web/en/downloads/get/index.php +257"
+msgid "md5 hash of the contents of the iso image"
+msgstr ""
+
+#: "/web/en/downloads/get/index.php +258"
+msgid "sha1 512 bit hash"
+msgstr ""
+
+#: "/web/en/downloads/get/index.php +259"
+msgid "sha2 512 bit hash"
+msgstr ""
+
+#: "/web/en/downloads/get/index.php +260"
+msgid "sha3 512 bit hash"
+msgstr ""
+
+#: "/web/en/downloads/get/index.php +268"
msgid "Copy"
msgstr "Copiar"
-#: "/web/en/downloads/get/index.php +263"
+#: "/web/en/downloads/get/index.php +270"
msgid "You need both iso and checksum file in the same folder"
msgstr "Você precisa dos arquivos iso e checksum na mesma pasta"
-#: "/web/en/downloads/get/index.php +264"
+#: "/web/en/downloads/get/index.php +271"
msgid "OK"
msgstr "OK"
-#: "/web/en/downloads/get/index.php +275"
-msgid ""
-"As soon as your download is complete, you should check that the checksums "
-"match:"
+#: "/web/en/downloads/get/index.php +282"
+msgid "As soon as your download is complete, you should check that the checksums match:"
msgstr "Assim que o download for concluído, você deve verificar se as validações estão corretas:"
-#: "/web/en/downloads/get/index.php +276"
+#: "/web/en/downloads/get/index.php +283"
msgid "and"
msgstr "e"
-#: "/web/en/downloads/get/index.php +276"
+#: "/web/en/downloads/get/index.php +283"
msgid ","
msgstr ","
-#: "/web/en/downloads/get/index.php +277"
+#: "/web/en/downloads/get/index.php +284"
msgid "Checksums are available for download as files:"
msgstr "Somas de verificação estão disponíveis para download como arquivos:"
-#: "/web/en/downloads/get/index.php +283"
-msgid ""
-"If checksums do not match, <strong>DO NOT use this ISO</strong>. Double-"
-"check and try to download again."
+#: "/web/en/downloads/get/index.php +290"
+msgid "If checksums do not match, <strong>DO NOT use this ISO</strong>. Double-check and try to download again."
msgstr "Se as somas de verificação não corresponderem, <strong>NÃO utilize esta ISO</strong>. Verifique novamente ou tente baixar novamente."
-#: "/web/en/downloads/get/index.php +287"
+#: "/web/en/downloads/get/index.php +294"
msgid "You can also verify the signature of an ISO."
msgstr "Você também pode verificar a assinatura de uma ISO."
-#: "/web/en/downloads/get/index.php +288"
+#: "/web/en/downloads/get/index.php +295"
msgid "They are also available for download as files:"
msgstr "Também estão disponíveis para download os arquivos:"
-#: "/web/en/downloads/get/index.php +290"
-msgid ""
-"First you need to import the \"Mageia Release\" key from a <a "
-"href=\"%s\">MIT PGP Public Key Server</a>:"
+#: "/web/en/downloads/get/index.php +297"
+msgid "First you need to import the \"Mageia Release\" key from a <a href=\"%s\">MIT PGP Public Key Server</a>:"
msgstr "Primeiro você precisa importar o \"Lançamento Mageia\" de uma chave <a href=\"%s\">MIT PGP Public Key Server</a>:"
-#: "/web/en/downloads/get/index.php +294"
+#: "/web/en/downloads/get/index.php +301"
msgid "In response there should be one of the following lines:"
msgstr "Em resposta deve ser uma das seguintes linhas:"
-#: "/web/en/downloads/get/index.php +298"
+#: "/web/en/downloads/get/index.php +305"
msgid "or if you already imported the key before:"
msgstr "ou se você já importou a chave antes:"
-#: "/web/en/downloads/get/index.php +302"
+#: "/web/en/downloads/get/index.php +309"
msgid "Then you need to verify the signature for the ISO."
msgstr "Então você precisa verificar a assinatura para a ISO."
-#: "/web/en/downloads/get/index.php +306"
+#: "/web/en/downloads/get/index.php +313"
msgid "In response there should be lines like:"
msgstr "Em resposta deve haver linhas favoritas:"
-#: "/web/en/downloads/get/index.php +313"
+#: "/web/en/downloads/get/index.php +320"
msgid "The warning about uncertified signature is expected."
msgstr "Aviso sobre assinatura não está certificada como esperado."
-#: "/web/en/downloads/get/index.php +321"
+#: "/web/en/downloads/get/index.php +328"
msgid "Country"
msgstr "País"
-#: "/web/en/downloads/get/index.php +322"
+#: "/web/en/downloads/get/index.php +329"
msgid "City"
msgstr "Cidade"
-#: "/web/en/downloads/get/index.php +323"
+#: "/web/en/downloads/get/index.php +330"
msgid "Download mirrors"
msgstr "Espelhos de Download"
-#: "/web/en/downloads/get/index.php +334"
-msgid ""
-"The making and the distribution of Mageia worldwide is made possible by all "
-"the <a href=\"%s\">people and organizations that mirror our software</a> and"
-" that <a href=\"%s\">donate money, hardware, hosting and more</a>."
+#: "/web/en/downloads/get/index.php +341"
+msgid "The making and the distribution of Mageia worldwide is made possible by all the <a href=\"%s\">people and organizations that mirror our software</a> and that <a href=\"%s\">donate money, hardware, hosting and more</a>."
msgstr "A realização e a distribuição da Mageia em todo o mundo só é possível devido à todas as <a href=\"%s\">pessoas e organizações que contribui para o nosso software</a> fazendo <a href=\"%s\">doações de dinheiro, hardware, hospedagem e muito mais</a>."
-#: "/web/en/downloads/get/index.php +335"
+#: "/web/en/downloads/get/index.php +342"
msgid "Want to help? %sJoin Us!%s"
msgstr "Precisa de ajuda? %sJunte-se a nós!%s"
-#: "/web/en/downloads/get/index.php +340"
+#: "/web/en/downloads/get/index.php +347"
msgid "Sorry!"
msgstr "Desculpe!"
-#: "/web/en/downloads/get/index.php +341"
-msgid ""
-"Your download could not complete, as we could not find this file. Please try"
-" again from the <a href=\"%s\">main downloads page</a>."
+#: "/web/en/downloads/get/index.php +348"
+msgid "Your download could not complete, as we could not find this file. Please try again from the <a href=\"%s\">main downloads page</a>."
msgstr "O download não pôde completar, não foi possível encontrar esse arquivo. Por favor, tente novamente a partir da <a href=\"%s\">página de downloads principal</a>."
-#: "/web/en/downloads/get/index.php +343"
-msgid ""
-"If you still encounter this error and think IT SHOULD NOT HAPPEN &ndash; "
-"please tell us:"
+#: "/web/en/downloads/get/index.php +350"
+msgid "If you still encounter this error and think IT SHOULD NOT HAPPEN &ndash; please tell us:"
msgstr "Se você ainda encontra esse erro e acha que não deve acontecer &ndash; por favor, diga-nos:"
-#: "/web/en/downloads/get/index.php +345"
-msgid ""
-"directly on <a href=\"irc://irc.freenode.net/#mageia-atelier\">#mageia-"
-"atelier on Freenode IRC</a>,"
+#: "/web/en/downloads/get/index.php +352"
+msgid "directly on <a href=\"irc://irc.freenode.net/#mageia-atelier\">#mageia-atelier on Freenode IRC</a>,"
msgstr "diretamente no <a href=\"irc://irc.freenode.net/#mageia-atelier\">#mageia-atelier no Freenode IRC</a>,"
-#: "/web/en/downloads/get/index.php +346"
+#: "/web/en/downloads/get/index.php +353"
msgid "or <a href=\"https://twitter.com/mageia_org\">via our Twitter account</a>,"
msgstr " ou <a href=\"https://twitter.com/mageia_org\">através de nossa conta de Twitter</a>,"
-#: "/web/en/downloads/get/index.php +347"
-msgid ""
-"or with a <a href=\"https://ml.mageia.org/l/info/atelier-discuss\">notice on"
-" the Atelier team mailing-list</a>,"
+#: "/web/en/downloads/get/index.php +354"
+msgid "or with a <a href=\"https://ml.mageia.org/l/info/atelier-discuss\">notice on the Atelier team mailing-list</a>,"
msgstr "ou com um <a href=\"https://ml.mageia.org/l/info/atelier-discuss\">aviso na lista de discussão da equipe Atelier</a>, "
-#: "/web/en/downloads/get/index.php +348"
-msgid ""
-"or a <a "
-"href=\"https://bugs.mageia.org/enter_bug.cgi?product=Websites&amp;format=guided&amp;component=www.mageia.org\">bug"
-" report</a>."
+#: "/web/en/downloads/get/index.php +355"
+msgid "or a <a href=\"https://bugs.mageia.org/enter_bug.cgi?product=Websites&amp;format=guided&amp;component=www.mageia.org\">bug report</a>."
msgstr " ou um <a href=\"https://bugs.mageia.org/enter_bug.cgi?product=Websites&amp;format=guided&amp;component=www.mageia.org\">relatório de bug.</a>"
-#: "/web/en/downloads/get/index.php +351"
-msgid ""
-"Please copy and report us the above address that returned you to this page."
+#: "/web/en/downloads/get/index.php +358"
+msgid "Please copy and report us the above address that returned you to this page."
msgstr "Por favor, copie e relate-nos o endereço acima que retornou a esta página."
-#: "/web/en/downloads/get/index.php +351"
+#: "/web/en/downloads/get/index.php +358"
msgid "Thanks!"
msgstr "Obrigado!"
-#: "/web/en/downloads/get/index.php +352"
+#: "/web/en/downloads/get/index.php +359"
msgid "back to that awesome Mageia home page"
msgstr "voltar a essa incrível Mageia, pagina inicial"
-#: "/web/en/downloads/get/index.php +357"
+#: "/web/en/downloads/get/index.php +364"
msgid "By clicking this button, you agree to the use of HTTP cookies."
msgstr "Ao clicar neste botão, você aceita o uso de cookies HTTP."
-#: "/web/en/downloads/get/index.php +357"
-msgid ""
-"They enable you to share content from this page via social network sharing "
-"buttons."
+#: "/web/en/downloads/get/index.php +364"
+msgid "They enable you to share content from this page via social network sharing buttons."
msgstr "Eles permitem que você compartilhe conteúdo desta página através de botões de compartilhamento de redes sociais."
-#: "/web/en/downloads/get/index.php +357"
+#: "/web/en/downloads/get/index.php +364"
msgid "Share"
msgstr "Compartilhar"
-#: "/web/en/downloads/get/index.php +416"
+#: "/web/en/downloads/get/index.php +423"
msgid "Copied"
msgstr "Copiado"
614' href='#n614'>614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794
package interactive_gtk; # $Id$

use diagnostics;
use strict;
use vars qw(@ISA);

@ISA = qw(interactive);

use interactive;
use common;
use my_gtk qw(:helpers :wrappers);

my $forgetTime = 1000; #- in milli-seconds

sub new {
    ($::windowheight, $::windowwidth) = my_gtk::gtkroot()->get_size if !$::isInstall;
    goto &interactive::new;
}
sub enter_console { my ($o) = @_; $o->{suspended} = common::setVirtual(1) }
sub leave_console { my ($o) = @_; common::setVirtual(delete $o->{suspended}) }

sub exit { 
    gtkset_mousecursor_normal(); #- for restoring a normal in any case on standalone
    my_gtk::flush();
    c::_exit($_[1]) #- workaround 
}

sub ask_warn {
    local $my_gtk::pop_it = 1;
    &interactive::ask_warn;
}

sub ask_fileW {
    my ($o, $title, $dir) = @_;
    my $w = my_gtk->new($title);
    $dir .= '/' if $dir !~ m|/$|;
    my_gtk::_ask_file($w, $title, $dir); 
    $w->main;
}

sub create_boxradio {
    my ($e, $may_go_to_next, $changed, $double_click) = @_;
    my @l = map { may_apply($e->{format}, $_) } @{$e->{list}};

    my $boxradio = gtkpack2__(new Gtk::VBox(0, 0),
			      my @radios = gtkradio('', @l));
    $boxradio->show;
    my $tips = new Gtk::Tooltips;
    mapn {
	my ($txt, $w) = @_;
	$w->signal_connect(button_press_event => $double_click) if $double_click;

	$w->signal_connect(key_press_event => sub {
            my ($w, $event) = @_;
	    $may_go_to_next->($w, $event, 'tab');
	    1;
	});
	$w->signal_connect(clicked => sub {
 	    ${$e->{val}} = $txt;
	    &$changed;
        });
	if ($e->{help}) {
	    gtkset_tip($tips, $w,
		       ref($e->{help}) eq 'HASH' ? $e->{help}{$txt} :
		       ref($e->{help}) eq 'CODE' ? $e->{help}($txt) : $e->{help});
	}
    } $e->{list}, \@radios;

    $boxradio, sub {
	my ($v) = @_;
	mapn { $_[0]->set_active($_[1] eq $v) } \@radios, $e->{list};
    }, $radios[0];
}

sub create_clist {
    my ($e, $may_go_to_next, $changed, $double_click) = @_;
    my $curr;
    my @l = map { may_apply($e->{format}, $_) } @{$e->{list}};

    my $list = new Gtk::CList(1);
    $list->set_selection_mode('browse');
    $list->set_column_auto_resize(0, 1);

    my $select = sub {
	$list->set_focus_row($_[0]);
	$list->select_row($_[0], 0);
	$list->moveto($_[0], 0, 0.5, 0) if $list->row_is_visible($_[0]) ne 'full';
    };

#    ref $title && !@okcancel ?
#      $list->signal_connect(button_release_event => $leave) :
#      $list->signal_connect(button_press_event => sub { &$leave if $_[1]{type} =~ /^2/ });

    my ($first_time, $starting_word, $start_reg) = (1, '', "^");
    my $timeout;
    $list->signal_connect(key_press_event => sub {
        my ($w, $event) = @_;
	my $c = chr($event->{keyval} & 0xff);

	Gtk->timeout_remove($timeout) if $timeout; $timeout = '';
	
	if ($event->{keyval} >= 0x100) {
	    &$may_go_to_next if $c eq "\r" || $c eq "\x8d";
	    $starting_word = '' if $event->{keyval} != 0xffe4; # control
	} else {
	    if ($event->{state} & 4) {
		#- control pressed
		$c eq "s" or return 1;
		$start_reg and $start_reg = '', return 1;
		$curr++;
	    } else {
		&$may_go_to_next if $c eq ' ';

		$curr++ if $starting_word eq '' || $starting_word eq $c;
		$starting_word .= $c unless $starting_word eq $c;
	    }
	    my $word = quotemeta $starting_word;
	    my $j; for ($j = 0; $j < @l; $j++) {
		 $l[($j + $curr) % @l] =~ /$start_reg$word/i and last;
	    }
	    $j == @l ?
	      $starting_word = '' :
	      $select->(($j + $curr) % @l);

	    $timeout = Gtk->timeout_add($forgetTime, sub { $timeout = $starting_word = ''; 0 } );
	}
	1;
    });
    $list->show;

    $list->append($_) foreach @l;

    $list->signal_connect(select_row => sub {
	my ($w, $row) = @_;
	${$e->{val}} = $e->{list}[$curr = $row];
	&$changed;
    });
    $list->signal_connect(button_press_event => $double_click) if $double_click;

    $list, sub {
	my ($v) = @_;
	eval {
	    my $nb = find_index { $_ eq $v } @{$e->{list}};
	    $select->($nb) if $nb != $list->focus_row;
	};
    };
}

sub create_ctree {
    my ($e, $may_go_to_next, $changed, $double_click) = @_;
    my @l = map { may_apply($e->{format}, $_) } @{$e->{list}};

    my $sep = quotemeta $e->{separator};
    my $tree = Gtk::CTree->new(1, 0);

    my (%wtree, %wleaves, $size, $selected_via_click);
    my $parent; $parent = sub {
	if (my $w = $wtree{"$_[0]$e->{separator}"}) { return $w }
	my $s;
	foreach (split $sep, $_[0]) {
	    $wtree{"$s$_$e->{separator}"} ||= 
	      $tree->insert_node($s ? $parent->($s) : undef, undef, [$_], 5, (undef) x 4, 0, 0);
	    $size++ if !$s;
	    $s .= "$_$e->{separator}";
	}
	$wtree{$s};
    };
    foreach (@l) {
	my ($root, $leaf) = /(.*)$sep(.+)/ ? ($1, $2) : ('', $_);
	$wleaves{$_} = $tree->insert_node($parent->($root), undef, [$leaf], 5, (undef) x 4, 1, 0);
    }
    undef %wtree;

    my $select = sub {
	my ($node) = @_;
	for (my $c = $node; $c; $c = $c->row->parent) { 
	    $tree->expand($c);
	}
	for (my $i = 0; $tree->node_nth($i); $i++) {
	    if ($tree->node_nth($i) == $node) {
		$tree->set_focus_row($i);
		last;
	    }
	}
	$tree->select($node);
	$tree->node_moveto($node, 0, 0.5, 0) if $tree->node_is_visible($node) ne 'full';
    };

    my $curr = $tree->node_nth(0); #- default value
    $tree->set_column_auto_resize(0, 1);
    $tree->set_selection_mode('browse');
    $tree->signal_connect(tree_select_row => sub { 
	$curr = $_[1]; 
	if ($curr->row->is_leaf) {
	    my @ll; for (my $c = $curr; $c; $c = $c->row->parent) { 
		unshift @ll, first $tree->node_get_pixtext($c, 0);
	    }
	    my $val = join $e->{separator}, @ll;
	    mapn {
		${$e->{val}} = $_[1] if $val eq $_[0]
	    } \@l, $e->{list};
	    &$changed;
	} else {
	    $tree->expand($curr) if $selected_via_click;
	}
    });
    my ($first_time, $starting_word, $start_reg) = (1, '', "^");
    my $timeout;

    my $toggle = sub { 
	$curr->row->is_leaf ? 
	  &$may_go_to_next :
	  $tree->toggle_expansion($curr);
    };
    $tree->signal_connect(key_press_event => sub {
        my ($w, $event) = @_;
	$selected_via_click = 0;
	my $c = chr($event->{keyval} & 0xff);
	$curr or return;
	Gtk->timeout_remove($timeout) if $timeout; $timeout = '';

	if ($event->{keyval} >= 0x100) {
	    &$toggle if $c eq "\r" || $c eq "\x8d";
	    $starting_word = '' if $event->{keyval} != 0xffe4; # control
	} else {
	    my $next;
	    if ($event->{state} & 4) {
		#- control pressed
		$c eq "s" or return 1;
		$start_reg and $start_reg = '', return 1;
		$next = 1;
	    } else {
		&$toggle if $c eq ' ';

		$next = 1 if $starting_word eq '' || $starting_word eq $c;
		$starting_word .= $c unless $starting_word eq $c;
	    }
	    my $word = quotemeta $starting_word;
	    my ($after, $best);

	    $tree->pre_recursive(undef, sub { 
		my ($tree, $node) = @_;
		$next &&= !$after;
		$after ||= $node == $curr;
		my ($t) = $tree->node_get_pixtext($node, 0);

		if ($t =~ /$start_reg$word/i) {
		    if ($after && !$next) {
			($best, $after) = ($node, 0);
		    } else {
			$best ||= $node;
		    }
		}
	    });
	    if (defined $best) {
		$select->($best);
	    } else {
		$starting_word = '';
	    }
	    $timeout = Gtk->timeout_add($forgetTime, sub { $timeout = $starting_word = ''; 0 });
	}
	1;
    });
    $tree->signal_connect(button_press_event => sub {
	$selected_via_click = 1;
	&$double_click if $curr->row->is_leaf && $double_click;
    });

    $tree->set_row_height($tree->style->font->ascent + $tree->style->font->descent + 1);

    $tree, sub {
	my $v = may_apply($e->{format}, $_[0]);
	$select->($wleaves{$v} || return) if $wleaves{$v} != $tree->selection;
    }, $size;
}

sub create_list {
    my ($e, $may_go_to_next, $changed, $double_click) = @_;
    my $l = $e->{list};
    my $list = new Gtk::List();
    $list->set_selection_mode('browse');

    my $select = sub {
	$list->select_item($_[0]);
    };

    my $tips = new Gtk::Tooltips;
    my $toselect;
    map_index {
	my $item = new Gtk::ListItem(may_apply($e->{format}, $_));
	$item->signal_connect(key_press_event => sub {
    	    my ($w, $event) = @_;
    	    my $c = chr($event->{keyval} & 0xff);
	    $may_go_to_next->($event) if $event->{keyval} < 0x100 ? $c eq ' ' : $c eq "\r" || $c eq "\x8d";
    	    1;
    	});
	$list->append_items($item);
	$item->show;
	if ($e->{help}) {
	    gtkset_tip($tips, $item,
		       ref($e->{help}) eq 'HASH' ? $e->{help}{$_} :
		       ref($e->{help}) eq 'CODE' ? $e->{help}($_) : $e->{help});
	}
	$item->grab_focus if ${$e->{val}} && $_ eq ${$e->{val}};
    } @$l;

    #- signal_connect'ed after append_items otherwise it is called and destroys the default value
    $list->signal_connect(select_child => sub {
	my ($w, $row) = @_;
	${$e->{val}} = $l->[$list->child_position($row)];
	&$changed;
    });
    $list->signal_connect(button_press_event => $double_click) if $double_click;

    $list, sub { 
	my ($v) = @_;
	eval { 
	    $select->(find_index { $_ eq $v } @$l);
	};
    };
}

sub ask_fromW {
    my ($o, $common, $l, $l2) = @_;
    my $ignore = 0; #-to handle recursivity

    my $mainw = my_gtk->new($common->{title}, %$o);
    $mainw->sync; # for XPM's creation

    #-the widgets
    my (@widgets, @widgets_always, @widgets_advanced, $advanced, $advanced_pack, $has_horiz_scroll, $has_scroll, $total_size, $max_width);
    my $tooltips = new Gtk::Tooltips;

    my $set_all = sub {
	$ignore = 1;
	$_->{set}->(${$_->{e}{val}}) foreach @widgets_always, @widgets_advanced;
	$_->{real_w}->set_sensitive(!$_->{e}{disabled}()) foreach @widgets_always, @widgets_advanced;
	$ignore = 0;
    };
    my $get_all = sub {
	${$_->{e}{val}} = $_->{get}->() foreach @widgets_always, @widgets_advanced;
    };
    my $update = sub {
	my ($f) = @_;
	return if $ignore;
	$get_all->();
	$f->();
	$set_all->();
	};
    my $create_widget = sub {
	my ($e, $ind) = @_;

	my $may_go_to_next = sub {
	    my ($w, $event, $kind) = @_;
	    if ($kind eq 'tab') {
		if (($event->{keyval} & 0x7f) == 0x9) {
		    $w->signal_emit_stop("key_press_event");
		    if ($ind == $#widgets) {
			$mainw->{ok}->grab_focus;
		    } else {
			$widgets[$ind+1]{focus_w}->grab_focus;
		    }
		}
	    } else {
		if (!$event || ($event->{keyval} & 0x7f) == 0xd) {
		    $w->signal_emit_stop("key_press_event") if $event;
		    if ($ind == $#widgets) {
			@widgets == 1 ? $mainw->{ok}->clicked : $mainw->{ok}->grab_focus;
		    } else {
			$widgets[$ind+1]{focus_w}->grab_focus;
		    }
		}
	    }
	};
	my $changed = sub { $update->(sub { $common->{callbacks}{changed}($ind) }) };

	my ($w, $real_w, $focus_w, $set, $get, $expand, $size, $width);
	if ($e->{type} eq 'iconlist') {
	    $w = new Gtk::Button;
	    $set = sub {
		gtkdestroy($e->{icon});
		my $f = $e->{icon2f}->($_[0]);
		$e->{icon} = -e $f ?
		    gtkpng($f) :
		    new Gtk::Label(may_apply($e->{format}, $_[0]));
		$w->add($e->{icon});
		$e->{icon}->show;
	    };
	    $w->signal_connect(clicked => sub {
		$set->(${$e->{val}} = next_val_in_array(${$e->{val}}, $e->{list}));
		$changed->();
	    });
	    $real_w = gtkpack_(new Gtk::HBox(0,10), 1, new Gtk::HBox(0,0), 0, $w, 1, new Gtk::HBox(0,0), );
	} elsif ($e->{type} eq 'bool') {
	    $w = Gtk::CheckButton->new($e->{text});
	    $w->signal_connect(clicked => $changed);
	    $set = sub { $w->set_active($_[0]) };
	    $get = sub { $w->get_active };
	    $width = length $e->{text};
	} elsif ($e->{type} eq 'label') {
	    $w = Gtk::Label->new(${$e->{val}});
	    $set = sub { $w->set($_[0]) };
	    $width = length ${$e->{val}};
	} elsif ($e->{type} eq 'button') {
	    $w = Gtk::Button->new('');
	    $w->signal_connect(clicked => sub {
		$get_all->();
		$mainw->{rwindow}->hide;
		if (my $v = $e->{clicked_may_quit}()) {
		    $o->{retval} = $v;
		    Gtk->main_quit;
		}
		$mainw->{rwindow}->show;
		$set_all->();
	    });
	    $set = sub { $w->child->set(may_apply($e->{format}, $_[0])) };
	    $width = length may_apply($e->{format}, ${$e->{val}});
	} elsif ($e->{type} eq 'range') {
	    my $adj = create_adjustment(${$e->{val}}, $e->{min}, $e->{max});
	    $adj->signal_connect(value_changed => $changed);
	    $w = new Gtk::HScale($adj);
	    $w->set_digits(0);
	    $w->signal_connect(key_press_event => $may_go_to_next);
	    $set = sub { $adj->set_value($_[0]) };
	    $get = sub { $adj->get_value };
	    $size = 2;
	} elsif ($e->{type} =~ /list/) {

	    my $quit_if_double_click = 
	      #- i'm the only one, double click means accepting
	      @$l == 1 ? 
		sub { if ($_[1]{type} =~ /^2/) { $mainw->{retval} = 1; Gtk->main_quit } } : ''; 

	    my @para = ($e, $may_go_to_next, $changed, $quit_if_double_click);
	    my $use_boxradio = exists $e->{gtk}{use_boxradio} ? $e->{gtk}{use_boxradio} : @{$e->{list}} <= 8;

	    if ($e->{help}) {
		#- used only when needed, as key bindings are dropped by List (CList does not seems to accepts Tooltips).
		($w, $set, $focus_w) = $use_boxradio ? create_boxradio(@para) : create_list(@para);
	    } elsif ($e->{type} eq 'treelist') {
		($w, $set, $size) = create_ctree(@para);
	    } else {
		($w, $set, $focus_w) = $use_boxradio ? create_boxradio(@para) : create_clist(@para);
	    }
	    if (@{$e->{list}} > (@$l == 1 ? 10 : 4)) {
		$has_scroll = 1;
		$expand = 1;
		$real_w = createScrolledWindow($w);
		$size ||= @{$e->{list}};
	    }
	    $width = max(map { length } @{$e->{list}});
	} else {
	    if ($e->{type} eq "combo") {
		$w = new Gtk::Combo;
		$w->set_use_arrows_always(1);
		$w->entry->set_editable(!$e->{not_edit});
		$w->set_popdown_strings(@{$e->{list}});
		$w->disable_activate;
		($real_w, $w) = ($w, $w->entry);
		my @l = sort { $b <=> $a } map { length } @{$e->{list}};
		$has_horiz_scroll = 1;
		$width = $l[@l / 16]; # take the third octile (think quartile)
	    } else {
                $w = new Gtk::Entry;
		$w->signal_connect(focus_in_event => sub { $w->select_region });
		$w->signal_connect(focus_out_event => sub { $w->select_region(0,0) });
	    }
	    $w->signal_connect(key_press_event => $may_go_to_next);
	    $w->signal_connect(changed => $changed);
	    $w->set_visibility(0) if $e->{hidden};
	    $set = sub { $w->set_text($_[0]) if $_[0] ne $w->get_text };
	    $get = sub { $w->get_text };
	}
	$w->signal_connect(focus_out_event => sub { 
            $update->(sub { $common->{callbacks}{focus_out}($ind) });
	});
	$tooltips->set_tip($w, $e->{help}) if $e->{help} && !ref($e->{help});

	$max_width = max($max_width, $width);
	$total_size += $size || 1;
    
	{ e => $e, w => $w, real_w => $real_w || $w, focus_w => $focus_w || $w, expand => $expand,
	  get => $get || sub { ${$e->{val}} }, set => $set || sub {},
	  icon_w => -e $e->{icon} ? gtkpng($e->{icon}) : '' };
    };
    @widgets_always   = map_index { $create_widget->($_, $::i      ) } @$l;
    my $always_total_size = $total_size;
    @widgets_advanced = map_index { $create_widget->($_, $::i + @$l) } @$l2;

    my $set_advanced = sub {
	($advanced) = @_;
	$advanced ? $advanced_pack->show : $advanced_pack->hide;
	@widgets = (@widgets_always, $advanced ? @widgets_advanced : ());
	$mainw->sync; #- for $set_all below (mainly for the set of clist)
	$set_all->(); #- must be done when showing advanced lists (to center selected value)
    };
    my $advanced_button = [ $common->{advanced_label}, sub { $set_advanced->(!$advanced) } ];

    my $create_widgets = sub {
	my $w = create_packtable({}, map { [($_->{icon_w}, $_->{e}{label}, $_->{real_w})]} @_);

	my ($wantedheight, $wantedwidth) = $::isEmbedded && !$my_gtk::pop_it ? (450, 380) : ($::windowheight * 0.8, $::windowwidth * 0.8);

	my $width = max(250, $max_width * 5);
	$mainw->{box_width} = min($wantedwidth, $width);

	my $height = max(200, my_gtk::n_line_size($always_total_size, 'various', $mainw->{rwindow}));
	$mainw->{box_height} = min($wantedheight, $height);

	my $has = $width > $mainw->{box_width} || $height > $mainw->{box_height};
	$has_scroll ||= $has;
	$has ? createScrolledWindow($w) : $w;
    };

    my $pack = gtkpack_(create_box_with_title($mainw, @{$common->{messages}}),
		   1, $create_widgets->(@widgets_always),
		   if_($common->{ok} || $::isWizard, 
		       0, $mainw->create_okcancel($common->{ok}, $common->{cancel}, '', @$l2 ? $advanced_button : ())));
    my @adv = map { warp_text($_) } @{$common->{advanced_messages}};
    $always_total_size += $mainw->{box_size};
    $advanced_pack = 
      gtkpack_(new Gtk::VBox(0,0),
	       0, '',
	       (map {; 0, new Gtk::Label($_) } @adv),
	       0, new Gtk::HSeparator,
	       1, $create_widgets->(@widgets_advanced));

    $pack->pack_start($advanced_pack, 1, 1, 0);
    gtkadd($mainw->{window}, $pack);
    if (!$::isEmbedded && !$::isWizard || $my_gtk::pop_it) {