use 5.010_000;
use strict;
use utf8;
+use version 0.77;
use Glib qw(TRUE FALSE);
use Gtk2;
use POSIX qw(setlocale);
netm_frame => _('NetworkManager'),
diff_frame => _('Viewing patches'),
mpass_frame => _('Master passphrase'),
+ compose_frame => _('Compose window'),
+ qs_frame => _('Quick search'),
l_oth_use_dlg => _('Use detached address book edit dialogue'),
h_oth_use_dlg => _('If true use a separate dialogue to edit a person\'s details. Otherwise will use a form embedded in the address book\'s main window.'),
l_col_log_warn => _('Warnings'),
h_col_log_warn => _('Colour for warning messages in log window.'),
+ l_col_tags_bg => _('Tags background'),
+ h_col_tags_bg => _('Background colour for tags in message view.'),
+ l_col_tags_text => _('Tags text'),
+ h_col_tags_text => _('Text colour for tags in message view.'),
+
+ l_col_default_header_bg => _('Default headers background'),
+ h_col_default_header_bg => _('Background colour for default headers in compose window.'),
+ l_col_default_header_text => _('Default headers text'),
+ h_col_default_header_text => _('Text colour for default headers in compose window.'),
+
+ l_col_qs_active_bg => _('Active quick search background'),
+ h_col_qs_active_bg => _('Background colour for active quick search.'),
+ l_col_qs_active_text => _('Active quick search text'),
+ h_col_qs_active_text => _('Text colour for active quick search.'),
+ l_col_qs_error_bg => _('Quick search error background'),
+ h_col_qs_error_bg => _('Background colour for quick search error.'),
+ l_col_qs_error_text => _('Quick search error text'),
+ h_col_qs_error_text => _('Text colour for quick search error.'),
+
l_col_diff_add => _('Added lines'),
h_col_diff_add => _('Colour for added lines in patches.'),
l_col_diff_del => _('Deleted lines'),
l_plu_lav_burl => _('Base URL'),
h_plu_lav_burl => _('This is the URL where avatar requests are sent. You can use the one of your own libravatar server, if available.'),
l_plu_prl_flvb => _('Log level'),
- h_plu_prl_flvb => _('Verbosity level of log, acumulative.'),
+ h_plu_prl_flvb => _('Verbosity level of log, accumulative.'),
l_plu_prl_none => _('None'),
l_plu_prl_manual => _('Manual'),
l_plu_prl_action => _('Actions'),
use constant PLUGIN => 6; # plugin section (only in plugin preferences)
# constants for GUI spacing
-use constant HBOX_SPC => 5;
+use constant HBOX_PAD => 5;
use constant FRAME_SPC => 2;
use constant PAGE_SPC => 5;
sub version_greater_or_equal {
my ($version, $refvers) = @_;
- my @version = split (/\./, $version);
- my @refvers = split (/\./, $refvers);
- while ($#version < $#refvers) {
- push (@version, '0');
- }
- my $idx = 0;
- while (($idx <= $#refvers)
- and (int ($version[$idx]) == int ($refvers[$idx]))) {
- ++$idx;
- }
- return TRUE if (($idx > $#refvers)
- or (int ($version[$idx]) >= int ($refvers[$idx])));
+ return TRUE if (version->parse($version) >= version->parse($refvers));
return FALSE;
}
# graphic element creation
+sub new_hbox_spaced_pack {
+ my $hbox = Gtk2::HBox->new (FALSE);
+ foreach (@_) {
+ $hbox->pack_start ($_, FALSE, FALSE, HBOX_PAD);
+ }
+ return $hbox;
+}
+
sub new_check_button_for($$$) {
my ($hash, $key, $vhash) = @_;
my $name = $$hash{$key}[NAME];
my $label = $$hash{$key}[LABEL];
#
- my $hbox = Gtk2::HBox->new (FALSE, 5);
my $cb = Gtk2::CheckButton->new ($label);
my $value = $$vhash{$name};
$value //= $$hash{$key}[CMDEF];
});
set_widget_hint ($cb, $$hash{$key}[DESC]);
set_widget_sens ($cb, $$hash{$key}[CMVER]);
- $hbox->pack_start ($cb, FALSE, FALSE, HBOX_SPC);
#
- return $hbox;
+ return new_hbox_spaced_pack ($cb);
}
sub new_text_box_for_int($$$) {
my @type = split (/,/, $$hash{$key}[TYPE]);
push (@type, 0), push (@type, 10000) unless ($#type > 0);
#
- my $hbox = Gtk2::HBox->new (FALSE, 5);
my $glabel = Gtk2::Label->new ($label);
my $pagei = int (($type[2] - $type[1]) / 10);
my $gentry = Gtk2::SpinButton->new_with_range ($type[1], $type[2], $pagei);
set_widget_hint ($gentry, $$hash{$key}[DESC]);
set_widget_sens ($gentry, $$hash{$key}[CMVER]);
$glabel->set_sensitive ($gentry->sensitive);
- $hbox->pack_start ($glabel, FALSE, FALSE, HBOX_SPC);
- $hbox->pack_start ($gentry, FALSE, FALSE, HBOX_SPC);
#
- return $hbox;
+ return new_hbox_spaced_pack ($glabel, $gentry);
}
sub new_text_box_for_nchar($$$) {
my $name = $$hash{$key}[NAME];
my $label = $$hash{$key}[LABEL];
my @type = split (/,/, $$hash{$key}[TYPE]); # char,minlen,maxlen,width
- my $hbox = Gtk2::HBox->new (FALSE, 5);
my $glabel = Gtk2::Label->new ($label);
my $gentry = Gtk2::Entry->new ();
$gentry->set_max_length($type[2]) if defined ($type[2]);
set_widget_hint ($gentry, $$hash{$key}[DESC]);
set_widget_sens ($gentry, $$hash{$key}[CMVER]);
$glabel->set_sensitive ($gentry->sensitive);
- $hbox->pack_start ($glabel, FALSE, FALSE, HBOX_SPC);
- $hbox->pack_start ($gentry, FALSE, FALSE, HBOX_SPC);
#
- return $hbox;
+ return new_hbox_spaced_pack ($glabel, $gentry);
}
sub new_color_button_for($$$) {
my $value = $$vhash{$name};
$value //= $$hash{$key}[CMDEF];
my $col = gdk_color_from_str ($value);
- my $hbox = Gtk2::HBox->new (FALSE, 5);
my $glabel = Gtk2::Label->new ($label);
my $button = Gtk2::ColorButton->new_with_color ($col);
$button->set_title ($label);
set_widget_hint ($button, $$hash{$key}[DESC]);
set_widget_sens ($button, $$hash{$key}[CMVER]);
$glabel->set_sensitive ($button->sensitive);
- $hbox->pack_start ($button, FALSE, FALSE, HBOX_SPC);
- $hbox->pack_start ($glabel, FALSE, FALSE, HBOX_SPC);
#
- return $hbox;
+ return new_hbox_spaced_pack ($button, $glabel);
}
sub new_selection_box_for($$$) {
my $name = $$hash{$key}[NAME];
my $label = $$hash{$key}[LABEL];
#
- my $hbox = Gtk2::HBox->new (FALSE, 5);
my $glabel = Gtk2::Label->new ($label);
my $combo = Gtk2::ComboBox->new_text;
my @options = split (';', $$hash{$key}[TYPE]);
set_widget_hint ($combo, $$hash{$key}[DESC]);
set_widget_sens ($combo, $$hash{$key}[CMVER]);
$glabel->set_sensitive ($combo->sensitive);
- $hbox->pack_start ($glabel, FALSE, FALSE, HBOX_SPC);
- $hbox->pack_start ($combo, FALSE, FALSE, HBOX_SPC);
#
- return $hbox;
+ return new_hbox_spaced_pack ($glabel, $combo);
}
# more graphic helpers
sub new_hbox_pack {
- my $hbox = Gtk2::HBox->new (FALSE, 5);
+ my $hbox = Gtk2::HBox->new (FALSE);
$hbox->set_border_width (PAGE_SPC);
foreach (@_) {
$hbox->pack_start ($_, FALSE, FALSE, 0);
$xl::s{l_oth_max_use},
$xl::s{h_oth_max_use},
'int,0,262144', # 0 Kb - 256 Mb
- '0.0.0',
+ '0.7.8.36',
'4096',
],
min_time => [
$xl::s{l_oth_min_time},
$xl::s{h_oth_min_time},
'int,0,120', # 0 minutes - 2 hours
- '0.0.0',
+ '0.7.8.36',
'15',
],
use_netm => [
$xl::s{l_gui_b_unread},
$xl::s{h_gui_b_unread},
'bool',
- '0.0.0',
+ '0.5.3',
'1',
],
no_markup => [
$xl::s{l_gui_no_markup},
$xl::s{h_gui_no_markup},
'bool',
- '0.0.0',
+ '2.1.0.16',
'0',
],
dot_lines => [
$xl::s{l_gui_dot_lines},
$xl::s{h_gui_dot_lines},
'bool',
- '0.0.0,3.7.10.44',
+ '2.4.0.115,3.7.10.44',
'0',
],
h_scroll => [
$xl::s{l_gui_h_scroll},
$xl::s{h_gui_h_scroll},
'bool',
- '0.0.0',
+ '0.8.6.18',
'1',
],
swp_from => [
$xl::s{l_gui_swp_from},
$xl::s{h_gui_swp_from},
'bool',
- '0.0.0',
+ '1.9.13.40',
'0',
],
v_scroll => [
$xl::s{l_gui_v_scroll},
$xl::s{h_gui_v_scroll},
'0=l_gui_v_scroll_show;1=l_gui_v_scroll_auto;2=l_gui_v_scroll_hide',
- '0.0.0',
+ '0.7.8.14',
'0',
],
from_show => [
$xl::s{l_gui_strip_off},
$xl::s{h_gui_strip_off},
'int,0,40000', # no idea what this number means
- '0.0.0',
+ '2.4.0.186',
'4000',
],
cursor_v => [
$xl::s{l_beh_use_utf8},
$xl::s{h_beh_use_utf8},
'bool',
- '0.0.0',
+ '1.9.14.49',
'0',
],
warn_dnd => [
'3.8.0.54',
'#a52a2a',
],
+ tags_bg => [
+ 'tags_bgcolor',
+ $xl::s{l_col_tags_bg},
+ $xl::s{h_col_tags_bg},
+ 'color',
+ '3.14.1.31',
+ '#f5f6be',
+ ],
+ tags_text => [
+ 'tags_color',
+ $xl::s{l_col_tags_text},
+ $xl::s{h_col_tags_text},
+ 'color',
+ '3.14.1.31',
+ '#000000',
+ ],
+ default_header_bg => [
+ 'default_header_bgcolor',
+ $xl::s{l_col_default_header_bg},
+ $xl::s{h_col_default_header_bg},
+ 'color',
+ '3.14.1.31',
+ '#f5f6be',
+ ],
+ default_header_text => [
+ 'default_header_color',
+ $xl::s{l_col_default_header_text},
+ $xl::s{h_col_default_header_text},
+ 'color',
+ '3.14.1.31',
+ '#000000',
+ ],
+ qs_active_bg => [
+ 'qs_active_bgcolor',
+ $xl::s{l_col_qs_active_bg},
+ $xl::s{h_col_qs_active_bg},
+ 'color',
+ '3.14.1.31',
+ '#f5f6be',
+ ],
+ qs_active_text => [
+ 'qs_active_color',
+ $xl::s{l_col_qs_active_text},
+ $xl::s{h_col_qs_active_text},
+ 'color',
+ '3.14.1.31',
+ '#000000',
+ ],
+ qs_error_bg => [
+ '',
+ $xl::s{l_col_qs_error_bg},
+ $xl::s{h_col_qs_error_bg},
+ 'qs_error_bgcolor',
+ '3.14.1.31',
+ '#ff7070',
+ ],
+ qs_error_text => [
+ '',
+ $xl::s{l_col_qs_error_text},
+ $xl::s{h_col_qs_error_text},
+ 'qs_error_color',
+ '3.14.1.31',
+ '#000000',
+ ],
);
sub new_colours_page() {
return new_vbox_pack (
new_subpage_frame (
new_vbox_pack (
- new_color_button_for (\%pr::col, 'emphasis', \%HPVALUE)),
+ new_color_button_for (\%pr::col, 'emphasis', \%HPVALUE),
+ new_color_button_for (\%pr::col, 'tags_bg', \%HPVALUE),
+ new_color_button_for (\%pr::col, 'tags_text', \%HPVALUE)),
$xl::s{msgview_frame}, 'not-packed'),
new_subpage_frame (
new_vbox_pack (
new_color_button_for (\%pr::col, 'diff_add', \%HPVALUE),
new_color_button_for (\%pr::col, 'diff_del', \%HPVALUE),
new_color_button_for (\%pr::col, 'diff_hunk', \%HPVALUE)),
- $xl::s{diff_frame}, 'not-packed')
+ $xl::s{diff_frame}, 'not-packed'),
+ new_subpage_frame (
+ new_vbox_pack (
+ new_color_button_for (\%pr::col, 'default_header_bg', \%HPVALUE),
+ new_color_button_for (\%pr::col, 'default_header_text', \%HPVALUE)),
+ $xl::s{compose_frame}, 'not-packed'),
+ new_subpage_frame (
+ new_vbox_pack (
+ new_color_button_for (\%pr::col, 'qs_active_bg', \%HPVALUE),
+ new_color_button_for (\%pr::col, 'qs_active_text', \%HPVALUE),
+ new_color_button_for (\%pr::col, 'qs_error_bg', \%HPVALUE),
+ new_color_button_for (\%pr::col, 'qs_error_text', \%HPVALUE)),
+ $xl::s{qs_frame}, 'not-packed')
);
}
$label->set_use_markup (TRUE);
}
}
+ $accbook->set_scrollable (TRUE);
return $accbook;
}
$dialog->set_title ($xl::s{about});
if (Gtk2->CHECK_VERSION (2, 10, 0)) {
my @icons = get_app_icons ();
- my $image = Gtk2::Image->new_from_pixbuf ($icons[1]);
+ my $image = Gtk2::Image->new_from_pixbuf ($icons[-1]);
$image->show ();
$image->set_alignment (0, 0);
$dialog->set_image ($image);
my $dir = $DATADIR . '/icons/hicolor';
@names = map {
join ('/', ($dir, $_ . 'x' . $_, 'apps', $NAME . '.png'))
- } (64, 128);
+ } (48, 64, 128);
} else { # unpacked tarball or git clone
@names = map {
join ('/', ('./icons', $NAME . '-' . $_ . '.png'));
- } (64, 128);
+ } (48, 64, 128);
}
foreach (@names) {
my $icon = undef;