about_license => _('License:'),
about_version => _('Version:'),
+ error_title => _('Clawsker error'),
+
exit_title => _('Clawsker warning'),
exit_fact => _('There are unapplied modifications.'),
exit_question => _('Do you really want to quit?'),
if defined $$dataref->[IVALUE];
}
-sub gdk_color_from_str {
+sub gdk_rgba_from_str {
my ($str) = @_;
my ($rr, $gg, $bb) = (0, 0 ,0);
$_ = uc ($str);
if (/\#([A-F0-9][A-F0-9])([A-F0-9][A-F0-9])([A-F0-9][A-F0-9])/) {
- $rr = hex($1) * 256;
- $gg = hex($2) * 256;
- $bb = hex($3) * 256;
+ $rr = hex($1) / 256;
+ $gg = hex($2) / 256;
+ $bb = hex($3) / 256;
}
- my $color = Gtk3::Gdk::Color->new ($rr, $gg, $bb);
+ my $color = Gtk3::Gdk::RGBA->new ($rr, $gg, $bb, 1.0);
return $color;
}
-sub str_from_gdk_color {
+sub str_from_gdk_rgba {
my ($color) = @_;
- my $rr = $color->red / 256;
- my $gg = $color->green / 256;
- my $bb = $color->blue / 256;
+ my $rr = $color->red * 256;
+ my $gg = $color->green * 256;
+ my $bb = $color->blue * 256;
my $str = sprintf ("#%.2x%.2x%.2x", $rr, $gg, $bb);
return $str;
}
sub handle_color_value {
my ($widget, $event, $dataref) = @_;
- my $newcol = $widget->get_color;
- $$dataref->[VALUE] = str_from_gdk_color ($newcol);
+ my $newcol = $widget->get_rgba;
+ $$dataref->[VALUE] = str_from_gdk_rgba ($newcol);
$MODIFIED += $$dataref->[VALUE] ne $$dataref->[IVALUE]? 1: -1
if defined $$dataref->[IVALUE];
}
}
}
+sub message_dialog {
+ my ($parent, $title, $markup, $type, $buttons) = @_;
+ my $flags = [qw/modal destroy-with-parent/];
+ my $dialog = Gtk3::Dialog->new_with_buttons (
+ $title, $parent, $flags, @$buttons
+ );
+ my $label = Gtk3::Label->new;
+ $label->set_markup ($markup);
+ my $icon = undef;
+ if ($type eq 'error') {
+ $icon = Gtk3::Image->new_from_icon_name('dialog-error', 'GTK_ICON_SIZE_DIALOG');
+ } elsif ($type eq 'warning') {
+ $icon = Gtk3::Image->new_from_icon_name('dialog-warning', 'GTK_ICON_SIZE_DIALOG');
+ } elsif ($type eq 'question') {
+ $icon = Gtk3::Image->new_from_icon_name('dialog-question', 'GTK_ICON_SIZE_DIALOG');
+ }
+ my $hbox = Gtk3::Box->new ('horizontal', 5);
+ $hbox->pack_start ($icon, FALSE, FALSE, 5) if defined $icon;
+ $hbox->pack_start ($label, FALSE, FALSE, 5);
+ my $dialogbox = $dialog->get_content_area;
+ $dialogbox->add ($hbox);
+ $dialogbox->show_all;
+ return $dialog;
+}
+
sub error_dialog {
my ($emsg) = @_;
my $markup = "<span weight=\"bold\" size=\"large\">" . $emsg . "</span>";
- my $errordlg = Gtk3::MessageDialog->new ($main_window, 'modal', 'error', 'cancel');
- $errordlg->set_markup ($markup);
- $errordlg->set_title (_('Clawsker error'));
+ my $errordlg = message_dialog (
+ $main_window, $xl::s{error_title}, $markup, 'error', [ 'gtk-cancel', 0 ]
+ );
$errordlg->run;
$errordlg->destroy;
}
});
set_widget_hint ($gentry, $$hash{$key}[DESC]);
set_widget_sens ($gentry, $$hash{$key}[CMVER]);
- $glabel->set_sensitive ($gentry->sensitive);
- $gunits->set_sensitive ($gentry->sensitive) if ($gunits);
+ $glabel->set_sensitive ($gentry->get_sensitive);
+ $gunits->set_sensitive ($gentry->get_sensitive) if ($gunits);
#
return new_hbox_spaced_pack ($glabel, $gentry, $gunits) if ($gunits);
return new_hbox_spaced_pack ($glabel, $gentry);
});
set_widget_hint ($gentry, $$hash{$key}[DESC]);
set_widget_sens ($gentry, $$hash{$key}[CMVER]);
- $glabel->set_sensitive ($gentry->sensitive);
+ $glabel->set_sensitive ($gentry->get_sensitive);
#
return new_hbox_spaced_pack ($glabel, $gentry);
}
#
my $value = $$vhash{$name}[VALUE];
$value //= $$hash{$key}[CMDEF];
- my $col = gdk_color_from_str ($value);
+ my $col = gdk_rgba_from_str ($value);
my $glabel = Gtk3::Label->new ($label);
- my $button = Gtk3::ColorButton->new_with_color ($col);
+ my $button = Gtk3::ColorButton->new_with_rgba ($col);
$button->set_title ($label);
$button->set_relief ('none');
$button->signal_connect ('color-set' => sub {
});
set_widget_hint ($button, $$hash{$key}[DESC]);
set_widget_sens ($button, $$hash{$key}[CMVER]);
- $glabel->set_sensitive ($button->sensitive);
+ $glabel->set_sensitive ($button->get_sensitive);
#
return new_hbox_spaced_pack ($button, $glabel);
}
my $label = $$hash{$key}[LABEL];
#
my $glabel = Gtk3::Label->new ($label);
- my $combo = Gtk3::ComboBox->new_text;
+ my $combo = Gtk3::ComboBoxText->new;
my @options = split (';', $$hash{$key}[TYPE]);
foreach my $opt (@options) {
my ($index, $textkey) = split ('=', $opt);
- $combo->insert_text ($index, $xl::s{$textkey});
+ $combo->insert (-1, $index, $xl::s{$textkey});
}
$combo->signal_connect ('changed' => sub {
my ($w, $e) = @_;
$combo->set_active ($value);
set_widget_hint ($combo, $$hash{$key}[DESC]);
set_widget_sens ($combo, $$hash{$key}[CMVER]);
- $glabel->set_sensitive ($combo->sensitive);
+ $glabel->set_sensitive ($combo->get_sensitive);
#
return new_hbox_spaced_pack ($glabel, $combo);
}
sub new_winpos_page() {
my $winbook = Gtk3::Notebook->new;
$winbook->set_tab_pos ('right');
- $winbook->append_page (new_winpos_subpage_main, _('Main'));
- $winbook->append_page (new_winpos_subpage_msgs, _('Message'));
- $winbook->append_page (new_winpos_subpage_sendrecv, _('Send/Receive'));
- $winbook->append_page (new_winpos_subpage_fold, _('Folder'));
- $winbook->append_page (new_winpos_subpage_addrbook, _('Addressbook'));
- $winbook->append_page (new_winpos_subpage_accounts, _('Accounts'));
- $winbook->append_page (new_winpos_subpage_filtering, _('Filtering'));
- $winbook->append_page (new_winpos_subpage_useractions, _('User Actions'));
- $winbook->append_page (new_winpos_subpage_prefs, _('Preferences'));
- $winbook->append_page (new_winpos_subpage_misc, _('Other'));
+ $winbook->append_page (new_winpos_subpage_main,
+ Gtk3::Label->new (_('Main')));
+ $winbook->append_page (new_winpos_subpage_msgs,
+ Gtk3::Label->new (_('Message')));
+ $winbook->append_page (new_winpos_subpage_sendrecv,
+ Gtk3::Label->new (_('Send/Receive')));
+ $winbook->append_page (new_winpos_subpage_fold,
+ Gtk3::Label->new (_('Folder')));
+ $winbook->append_page (new_winpos_subpage_addrbook,
+ Gtk3::Label->new (_('Addressbook')));
+ $winbook->append_page (new_winpos_subpage_accounts,
+ Gtk3::Label->new (_('Accounts')));
+ $winbook->append_page (new_winpos_subpage_filtering,
+ Gtk3::Label->new (_('Filtering')));
+ $winbook->append_page (new_winpos_subpage_useractions,
+ Gtk3::Label->new (_('User Actions')));
+ $winbook->append_page (new_winpos_subpage_prefs,
+ Gtk3::Label->new (_('Preferences')));
+ $winbook->append_page (new_winpos_subpage_misc,
+ Gtk3::Label->new (_('Other')));
return $winbook;
}
my $name = $ACPREFS{$_}{'account_name'};
my $isdef = ($ACPREFS{$_}{'is_default'} eq '1');
my $page = new_account_subpage ($_);
- $accbook->append_page ($page, $isdef? '<b>' . $name . '</b>': $name);
+ $accbook->append_page ($page,
+ Gtk3::Label->new ($isdef? '<b>' . $name . '</b>': $name));
if ($isdef) {
my $label = $accbook->get_tab_label ($page);
$label->set_use_markup (TRUE);
my ($col, $renderer, $model, $iter, $data) = @_;
my $hkey = $model->get_value ($iter, C_HOTKEY);
$hkey =~ s/\"//g;
- my ($acckey, $accmod) = Gtk3::Accelerator->parse ($hkey);
+ my ($acckey, $accmod) = Gtk3::accelerator_parse ($hkey);
$renderer->set_property ('accel-key' => $acckey);
$renderer->set_property ('accel-mods' => $accmod);
$renderer->set_property (
sub new_notebook {
my $nb = Gtk3::Notebook->new;
#
- $nb->append_page (new_behaviour_page (), $xl::s{tab_behaviour});
- $nb->append_page (new_colours_page (), $xl::s{tab_colours});
- $nb->append_page (new_gui_page (), $xl::s{tab_gui});
- $nb->append_page (new_other_page (), $xl::s{tab_other});
- $nb->append_page (new_winpos_page (), $xl::s{tab_winpos});
- $nb->append_page (new_accounts_page (), $xl::s{tab_accounts});
- $nb->append_page (new_plugins_page (), $xl::s{tab_plugins});
- $nb->append_page (new_hotkeys_page (), $xl::s{tab_hotkeys});
- $nb->append_page (new_info_page (), $xl::s{tab_info});
+ $nb->append_page (new_behaviour_page (),
+ Gtk3::Label->new ($xl::s{tab_behaviour}));
+ $nb->append_page (new_colours_page (),
+ Gtk3::Label->new ($xl::s{tab_colours}));
+ $nb->append_page (new_gui_page (),
+ Gtk3::Label->new ($xl::s{tab_gui}));
+ $nb->append_page (new_other_page (),
+ Gtk3::Label->new ($xl::s{tab_other}));
+ $nb->append_page (new_winpos_page (),
+ Gtk3::Label->new ($xl::s{tab_winpos}));
+ $nb->append_page (new_accounts_page (),
+ Gtk3::Label->new ($xl::s{tab_accounts}));
+ $nb->append_page (new_plugins_page (),
+ Gtk3::Label->new ($xl::s{tab_plugins}));
+ $nb->append_page (new_hotkeys_page (),
+ Gtk3::Label->new ($xl::s{tab_hotkeys}));
+ $nb->append_page (new_info_page (),
+ Gtk3::Label->new ($xl::s{tab_info}));
return $nb;
}
sub exit_handler {
my ($parent) = @_;
if ($MODIFIED != 0 and not $READONLY) {
- my $fact = $xl::s{exit_fact};
- my $question = $xl::s{exit_question};
- my $dialog = Gtk3::MessageDialog->new ($parent,
- [qw/modal destroy-with-parent/], 'warning', 'yes-no');
- $dialog->set_markup ("<span>$fact</span>\n\n"
- . "<span weight=\"bold\">$question</span>");
- $dialog->set_title ($xl::s{exit_title});
+ my $markup = "<span>" . $xl::s{exit_fact} . "</span>\n\n"
+ . "<span weight=\"bold\">" . $xl::s{exit_question} . "</span>\n";
+ my $dialog = message_dialog (
+ $parent, $xl::s{exit_title}, $markup, 'question',
+ [ 'gtk-no', 1, 'gtk-yes', 0 ]
+ );
my $resp = $dialog->run;
$dialog->hide;
- return TRUE if ($resp eq 'no');
+ return TRUE if ($resp == 1);
}
Gtk3->main_quit;
}
}
sub get_app_icons {
- return @APPICONS if (@APPICONS);
+ return \@APPICONS if (@APPICONS);
my @names;
if (-d $DATADIR) { # installed
my $dir = $DATADIR . '/icons/hicolor';
$icon = Gtk3::Gdk::Pixbuf->new_from_file($_) if (-f $_);
push @APPICONS, $icon if ($icon);
}
- return @APPICONS;
+ return \@APPICONS;
}
sub escape_key_handler {
my ($widget, $event) = @_;
- if ($event->keyval == Gtk3::Gdk->keyval_from_name('Escape')) {
+ if ($event->keyval == Gtk3::Gdk::keyval_from_name('Escape')) {
exit_handler($widget);
}
}
# create main GUI
my $box = Gtk3::VBox->new (FALSE, 5);
$box->set_border_width(3);
-my $about = new_about_dialog ();
+my $about = new_about_dialog ($main_window);
$box->pack_start (new_notebook (), TRUE, TRUE, 0);
$box->pack_end (new_button_box ($main_window, $about), FALSE, FALSE, 0);
$main_window->signal_connect (delete_event => sub { exit_handler($main_window) });