tab_winpos => _('Windows'),
tab_accounts => _('Accounts'),
tab_plugins => _('Plugins'),
+ tab_hotkeys => _('Hotkeys'),
tab_info => _('Info'),
ab_frame => _('Addressbook'),
# supported and available plugins lists
my @PLUGINS = qw(AttRemover GPG ManageSieve Libravatar PerlPlugin);
my @AVPLUGINS = ();
+# loaded hotkeys from load_menurc
+my $HOTKEYS;
+# current tree selection
+my $SELHOTKEY;
# loaded icons
my @APPICONS = ();
$frame{'PerlPlugin'});
}
+use constant {
+ C_LABEL => 0,
+ C_HOTKEY => 1,
+ C_GROUP => 2,
+ C_ACCEL => 3
+};
+
+sub new_hotkeys_list_label {
+ my $renderer = Gtk2::CellRendererText->new ();
+ $renderer->set_property('alignment' => 'left');
+ $renderer->set_property('editable' => FALSE);
+ $renderer->set_property('size-points' => 8);
+ $renderer->set_property('size-set' => TRUE);
+ return $renderer;
+}
+
+sub new_hotkeys_list_hotkey {
+ my $renderer = Gtk2::CellRendererAccel->new ();
+ $renderer->set_property ('accel-mode' => 'gtk');
+ $renderer->set_property ('editable' => TRUE);
+ $renderer->signal_connect ('accel-edited' => sub {
+ my ($w, $path, $key, $mods, $keycode) = @_;
+ my $accel = Gtk2::Accelerator->name ($key, $mods);
+ my ($model, $iter) = $SELHOTKEY->get_selected ();
+ $model->set($iter, C_HOTKEY, "\"$accel\"");
+ my $gkey = $model->get_value ($iter, C_GROUP);
+ my $akey = $model->get_value ($iter, C_ACCEL);
+ $HOTKEYS->{$gkey}->{$akey}->{'key'} = "\"$accel\"";
+ });
+ $renderer->signal_connect ('accel-cleared' => sub {
+ my ($w, $path) = @_;
+ my ($model, $iter) = $SELHOTKEY->get_selected ();
+ $model->set($iter, C_HOTKEY, "\"\"");
+ my $gkey = $model->get_value ($iter, C_GROUP);
+ my $akey = $model->get_value ($iter, C_ACCEL);
+ $HOTKEYS->{$gkey}->{$akey}->{'key'} = "\"\"";
+ });
+ return $renderer;
+}
+
+sub new_hotkeys_list {
+ my ($gkey, $group) = @_;
+ my $store = Gtk2::ListStore->new(
+ qw/Glib::String Glib::String Glib::String Glib::String/);
+ foreach my $akey (sort keys %$group) {
+ my $iter = $store->append ();
+ my $hotkey = $group->{$akey}->{'key'};
+ my $label = $akey;
+ $label =~ s/[<>]//g; # <rrsyl> and <IMAPFolder> !?
+ $store->set ($iter, C_LABEL, $label, C_HOTKEY, $hotkey,
+ C_GROUP, $gkey, C_ACCEL, $akey);
+ }
+ my $treeview = Gtk2::TreeView->new_with_model ($store);
+ # labels column
+ $treeview->insert_column_with_data_func (
+ 0, _("Menu path"), new_hotkeys_list_label (),
+ sub {
+ my ($col, $renderer, $model, $iter, $data) = @_;
+ my $label = $model->get_value ($iter, C_LABEL);
+ $renderer->set_property ('text' => $label);
+ }
+ );
+ # hotkeys column
+ $treeview->insert_column_with_data_func (
+ 1, _('Hotkey'), new_hotkeys_list_hotkey (),
+ sub {
+ my ($col, $renderer, $model, $iter, $data) = @_;
+ my $hkey = $model->get_value ($iter, C_HOTKEY);
+ $hkey =~ s/\"//g;
+ my ($acckey, $accmod) = Gtk2::Accelerator->parse ($hkey);
+ $renderer->set_property ('accel-key' => $acckey);
+ $renderer->set_property ('accel-mods' => $accmod);
+ }
+ );
+ # callback for saving current selection
+ my $selection = $treeview->get_selection ();
+ $selection->signal_connect ('changed' => sub { $SELHOTKEY = shift });
+ return $treeview;
+}
+
+sub new_hotkeys_page() {
+ my $swin = Gtk2::ScrolledWindow->new ();
+ my $vbox = Gtk2::VBox->new (FALSE, 5);
+ foreach my $gkey (sort keys %$HOTKEYS) {
+ my $group = $HOTKEYS->{$gkey};
+ # group title
+ my $glabel = Gtk2::Label->new ('<b>' . $gkey . '</b>');
+ $glabel->set_use_markup (TRUE);
+ $glabel->set_alignment (0, 0.5);
+ $vbox->pack_start ($glabel, FALSE, FALSE, 1);
+ $vbox->pack_start (Gtk2::HSeparator->new (), FALSE, FALSE, 1);
+ # group key list
+ my $keylist = new_hotkeys_list ($gkey, $group);
+ $vbox->pack_start ($keylist, FALSE, FALSE, 1);
+ }
+ $swin->set_border_width (5);
+ $swin->set_shadow_type ('none');
+ $swin->set_policy ('automatic', 'always');
+ $swin->add_with_viewport ($vbox);
+ return $swin;
+}
+
sub new_info_page() {
my $t0 = Gtk2::Table->new (7, 2, FALSE);
my $v = get_toolkit_versions ();
return TRUE;
}
+sub load_hk_preferences {
+ my $rc = get_menurc_filename ();
+ return FALSE unless check_rc_file ($rc);
+ $HOTKEYS = load_menurc ($rc);
+ return TRUE;
+}
+
sub load_preferences {
return FALSE unless check_claws_not_running ();
- return (load_rc_preferences () and load_ac_preferences ());
+ return (load_rc_preferences ()
+ and load_ac_preferences ()
+ and load_hk_preferences ()
+ );
}
# save current preferences to disc
$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});
return $nb;