# -*- perl -*-
package Pronto::CListView;
use strict;
use SelfLoader;
1;
__DATA__
sub new
{
my $current_folder = &Pronto::FolderTree::get_folder_id();
return if (!$current_folder || $current_folder >= 1000);
my $window = new Gtk::Window("toplevel");
my ($clist,$sw) = make_clist($window,$current_folder);
$window->set_title("Pronto! CList View - $main::folderidtoname{$current_folder}");
my ($width,$height) = &main::get_win_size("CListView",580,200);
$window->set_default_size($width,$height);
make_clist_sigs($clist);
$window->add($sw);
$window->show_all();
$window->signal_connect("size-request" => \&main::save_win_size, "CListView", $window->window);
refresh_messages($clist);
return;
}
sub make_clist {
my ($window,$folder) = @_;
my ($clist,$sw,$resync);
my @headers = (" "," "," ","Score", ,"From","Subject","Date", "Server", "Hidden Field");
if ($main::prefs{'messageview'} eq "clist") {
$clist = new_with_titles Gtk::CList(@headers);
} elsif ($main::prefs{'messageview'} eq "ctree") {
$clist = new_with_titles Gtk::CTree(5,@headers);
$clist->set_expander_style($main::prefs{'expander'});
$clist->set_line_style ( $main::prefs{'threadstyle'} );
}
$clist->set_compare_func(\&Pronto::MessageList::my_sort_func);
if($main::prefs{'prioritycolumn'} eq "n") {
$clist->set_column_visibility(0,0);
}
if($main::prefs{'attachcolumn'} eq "n" ) {
$clist->set_column_visibility(1,0);
}
if($main::prefs{'msgnewcolumn'} eq "n" ) {
$clist->set_column_visibility(2,0);
}
if($main::prefs{'servercolumn'} eq "n") {
$clist->set_column_visibility(7,0);
}
@{$clist->{'labels'}} = @headers;
$clist->{'name'} = "view";
if (defined $main::prefs{'Scoring'} && $main::prefs{'Scoring'} ne "y") { $clist->set_column_visibility(3, 0); }
$clist->set_column_justification(3, "center");
$clist->set_column_visibility(8, 0);
$clist->column_titles_active;
$clist->set_selection_mode('extended');
if (not defined $main::prefs{'MessageListColWidth4'}) { $clist->set_column_width(4,127); }
if (not defined $main::prefs{'MessageListColWidth5'}) { $clist->set_column_width(5,175); }
for (my $i = 0; $i < 7; $i++) {
if (defined $main::prefs{'MessageListColWidth' . $i}) {
$clist->set_column_width($i, $main::prefs{'MessageListColWidth' . $i});
}
}
$clist->set_row_height(17);
if ($main::prefs{'messageview'} eq "clist") {
$clist->signal_connect('click_column', \&Pronto::MessageList::click_column);
} elsif ($main::prefs{'messageview'} eq "ctree") {
$clist->signal_connect('click_column', \&Pronto::MessageList::ctree_click_column);
$clist->signal_connect('tree_collapse', \&Pronto::MessageList::ctree_collapse);
$clist->signal_connect('tree_expand',\&Pronto::MessageList::ctree_expand);
}
$clist->signal_connect('button_press_event',\&click_clist, 1);
# $clist->signal_connect('key_press_event', \&key_pressed);
$clist->{'sortcol'} = $main::prefs{'SortCol'};
$clist->{'sortdir'} = $main::prefs{'SortDir'};
$clist->signal_connect("resize-column" => sub {my ($d, $c, $w)=@_; $main::prefs{'MessageListColWidth'. $c}=$w;});
$sw = new Gtk::ScrolledWindow(undef,undef);
$sw->set_policy('automatic','automatic');
$sw->add($clist);
$clist->{'popup'} = new Gtk::Menu;
my $mp_sep1 = new Gtk::MenuItem;
$clist->{'popup'}->append($mp_sep1);
$clist->{'window'} = $window;
if ($main::prefs{'messageview'} eq "ctree") {
my $collapse = new Gtk::MenuItem(_("Collapse Threads .."));
$collapse->signal_connect("activate", sub { $clist->collapse_recursive(undef) });
$clist->{'popup'}->append($collapse);
my $expand = new Gtk::MenuItem(_("Expand Threads .."));
$expand->signal_connect("activate", sub { $clist->expand_recursive(undef)});
$clist->{'popup'}->append($expand);
my $sep = new Gtk::MenuItem;
$clist->{'popup'}->append($sep);
}
$clist->{'folder'} = $folder;
$resync = new Gtk::MenuItem(_("Resync..."));
$resync->signal_connect("activate", sub {
&refresh_messages($clist); });
$clist->{'popup'}->append($resync);
$clist->{'popup'}->show_all();
return $clist,$sw;
}
sub key_pressed
{
my ($clist, $event) = @_;
&Pronto::MainWindow::handle_delete_msgs if ($event->{keyval} == 65535);
return 1;
}
sub make_clist_sigs {
my ($clist) = @_;
my ($clipmask,$clip,$exclame_pix,$exclame_mask,$exclame,$newm,$new_pix,$newmp,$clippix);
if ($main::prefs{'messageview'} eq "clist") {
$clist->signal_connect('select_row', \&main::selection_handler,
$main::root_window->{'html_view'}, $main::attach_menu, $main::view_attach_menu, $main::root_window->{'table1'});
} elsif ($main::prefs{'messageview'} eq "ctree") {
$clist->signal_connect('tree_select_row', \&main::selection_handler,
$main::root_window->{'html_view'}, $main::attach_menu, $main::view_attach_menu, $main::root_window->{'table1'});
}
# if ($main::prefs{'Drag'}) {
# &main::set_clist_drag_signals();
# }
if(-f "$main::prefs{'PixmapDir'}/paperclip.xpm") {
($clippix,$clipmask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'), "$main::prefs{'PixmapDir'}/paperclip.xpm");
}
else {
($clippix,$clipmask)=Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'), @main::dummy_pixmap);
}
$clip = new Gtk::Pixmap($clippix,$clipmask);
$clist->set_column_widget(1, $clip);
if(-f "$main::prefs{'PixmapDir'}/exclamation.xpm") {
($exclame_pix,$exclame_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/exclamation.xpm");
}
else {
($exclame_pix,$exclame_mask)=Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'),@main::dummy_pixmap);
}
$exclame = new Gtk::Pixmap($exclame_pix,$exclame_mask);
$clist->set_column_widget(0, $exclame);
if(-f "$main::prefs{'PixmapDir'}/newm.xpm") {
($new_pix,$newm) = Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/newm.xpm");
}
else {
($new_pix,$newm) = Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'),@main::dummy_pixmap); }
$newmp = new Gtk::Pixmap($new_pix,$newm);
$clist->set_column_widget(2, $newmp);
if ($main::prefs{'messageview'} eq "clist") {
&Pronto::MessageList::click_column($clist, $clist->{'sortcol'});
} elsif ($main::prefs{'messageview'} eq "ctree") {
$clist->set_sort_column ( $main::prefs{'SortCol'} );
&Pronto::MessageList::ctree_click_column($clist, $clist->{'sortcol'});
}
return 1;
}
sub click_clist {
my ($widget, $data, $event) = @_;
# if ($event->{type} eq "2button_press") {
# &dblclick_clist($widget, $event, $data);
# }
if (($event->{button} == 3) and ($widget->{'popup'})) {
$widget->{'popup'}->popup(undef,undef,$event->{button},1);
}
return 1;
}
sub refresh_messages {
my ($clist) = @_;
if ($main::prefs{'messageview'} eq "ctree") { &refresh_ctree($clist); return 1; }
my ($sql, $query, @row, @selection, $box, $row, @msg_sel, %selected, $background, $style, $paperclip, $paperclip_mask, $exclamation, $exclamation_mask, $replyf, $replyf_mask, $forwardf, $forwardf_mask, $newm, $newm_mask,$toselect);
$box = $clist->{'folder'};
if (defined $box and $box == 0) { $clist->clear(); &main::set_win_title }
if (!$box) {return 1;}
if ($main::mark_timer) { Gtk->timeout_remove($main::mark_timer); }
@msg_sel = $clist->selection();
my $vpos;
if (@msg_sel) {
if ($main::HTMLWIDGET ne "XmHTML") {
$vpos = $main::root_window->{'sw'}->get_vadjustment;
}
foreach (@msg_sel) {
$selected{${$clist->get_row_data($_)}} = 1;
}
}
foreach(keys(%main::folderidtoname)) {
if ($_ >= 1000) {
$main::folder_tree->node_set_text($main::ft_node[$_],1,"");
$main::folder_tree->node_set_text($main::ft_node[$_],2,"");
}
}
$clist->freeze;
$row=0;
$clist->clear;
if(-f "$main::prefs{'PixmapDir'}/paperclip.xpm") {
($paperclip,$paperclip_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/paperclip.xpm");
}
else {
($paperclip,$paperclip_mask)=Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'),@main::dummy_pixmap);
}
if(-f "$main::prefs{'PixmapDir'}/exclamation.xpm") {
($exclamation,$exclamation_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/exclamation.xpm");
}
else {
($exclamation,$exclamation_mask)=Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'),@main::dummy_pixmap);
}
if(-f "$main::prefs{'PixmapDir'}/reply_flag.xpm") {
($replyf,$replyf_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/reply_flag.xpm");
}
else {
($replyf,$replyf_mask)=Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'),@main::dummy_pixmap);
}
if(-f "$main::prefs{'PixmapDir'}/forward_flag.xpm") {
($forwardf,$forwardf_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/forward_flag.xpm");
}
else {
($forwardf,$forwardf_mask)=Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'),@main::dummy_pixmap);
}
if(-f "$main::prefs{'PixmapDir'}/newm.xpm") {
($newm,$newm_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/newm.xpm");
}
else {
($newm,$newm_mask)=Gtk::Gdk::Pixmap->create_from_xpm_d($main::message_clist->clist_window,$clist->style->bg('normal'),@main::dummy_pixmap);
}
if ($box == 1000) { $main::root_window->{'button'}->show }
if ($box != 1000) { if ($main::root_window->visible) {$main::root_window->{'button'}->hide} }
if (($box != 3) and ($box != 2) and ($box != 5)) {
${$clist->{'labels'}}[4] = "From";
$sql = "select id,friendly,subject,date,newmsg,localdate,contenttype,priority,replyf,score,serverstat from messages where boxid=?";
} else {
${$clist->{'labels'}}[4] = "To";
$sql = "select id,friendly,subject,date,newmsg,localdate,contenttype,priority,replyf,score,serverstat from messages where boxid=?";
}
$query = $main::conn->prepare($sql);
$query->execute($box);
while (@row=$query->fetchrow_array()) {
if (not defined $row[9]) { $row[9] = 0; }
if ($row[9] == 0) { $row[9] = " "; }
if (defined $row[10] && $row[10] == 1) {
$row[10] = _("Not Fetched"); # Message is still on server and has NOT been fetched.
#
} elsif (defined $row[10] && ($row[10] == 2 || $row[10] == 6)) {
$row[10] = _("On Server"); # Message is still on server and has been fetched.
#
} elsif (defined $row[10] && $row[10] == 3) {
$row[10] = _("To Be Deleted"); # Message is flagged for deletion.
#
} elsif (defined $row[10] && $row[10] == 4) {
$row[10] = _("To Be Fetched"); # Message is flagged for fetching.
#
} elsif (defined $row[10] && $row[10] == 5) {
$row[10] = _("To Be Fetched & Deleted"); # Message is flagged for fetch & delete.
#
} else {
$row[10] = " "; # Message is not on server.
#
}
$clist->insert($row,'','','',$row[9],$row[1],$row[2],&main::localdate_to_displaydate($row[5]),$row[10],$row[5]);
if ($row[6] && ($row[6] !~ /text/i && $row[6] !~ /alternative/i && $row[6] !~ /multipart\/report/i)) {
$clist->set_pixmap($row, 1, $paperclip, $paperclip_mask);
}
if (($row[7]) and ($row[7] =~ /high/i)) {
$clist->set_pixmap($row, 0, $exclamation, $exclamation_mask);
}
if ($row[8]) {
if ($row[8] == 1) {
$clist->set_pixtext($row, 4, $row[1],1,$replyf, $replyf_mask);
} elsif ($row[8] == 2) {
$clist->set_pixtext($row, 4, $row[1],1,$forwardf, $forwardf_mask);
}
}
if (($row[4]) and ($row[4] eq "y")) {
$clist->set_pixmap($row, 2, $newm, $newm_mask);
if ($main::prefs{'BoldMsg'}) {
$clist->set_row_style($row,$main::bold);
}
} else {
if ($main::prefs{'BoldMsg'}) {
$clist->set_row_style($row,$main::normal);
}
}
if ($selected{$row[0]}) {
$clist->select_row($row,1);
$toselect = $row[0] if !$toselect;
}
$clist->set_row_data($row, \$row[0]);
$row++;
}
if ($main::prefs{'SortCol'} != 5) {
$clist->sort;
} else {
&Pronto::MessageList::subject_sort($clist);
# my $select = get_row($toselect);
# $clist->select_row($select,1) if (defined $select);
}
@msg_sel = $clist->selection;
if (@msg_sel) {
$clist->moveto($msg_sel[0],0,'0.5','0.5');
$clist->set_focus_row($msg_sel[0]);
if ($vpos) {
$main::root_window->{'sw'}->set_vadjustment($vpos);
}
}
$clist->thaw;
&main::set_win_title;
return 1;
}
sub refresh_ctree {
my ($clist,$switch)=@_;
my ($newm,$newm_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/newm.xpm");
my ($replyf,$replyf_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/reply_flag.xpm");
my ($forwardf,$forwardf_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/forward_flag.xpm");
my ($paperclip,$paperclip_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/paperclip.xpm");
my ($exclamation,$exclamation_mask)=Gtk::Gdk::Pixmap->create_from_xpm($main::message_clist->clist_window,$clist->style->bg('normal'),"$main::prefs{'PixmapDir'}/exclamation.xpm");
my ($selected,$vpos);
if (not defined $switch or $switch ne "switch") {
my @sel = $clist->selection;
if (!@sel) {
$selected = 0
} else {
if ($main::HTMLWIDGET ne "XmHTML") {
$vpos = $main::root_window->{'sw'}->get_vadjustment;
}
$selected = ${$clist->node_get_row_data($sel[0])};
}
}
foreach(keys(%main::folderidtoname)) {
if ($_ >= 1000) {
$main::folder_tree->node_set_text($main::ft_node[$_],1,"");
$main::folder_tree->node_set_text($main::ft_node[$_],2,"");
}
}
my $box = $clist->{'folder'};
if (defined $box and $box == 0) { $clist->clear(); &main::set_win_title }
if (!$box) { return 1 }
if ($main::mark_timer) { Gtk->timeout_remove($main::mark_timer); }
if ($box != 1000) { if ($main::root_window->visible) {$main::root_window->{'button'}->hide} }
if ($box > 1000) { &Pronto::Search::view_virtual_folder($box); return 1; }
if ($box == 1000) { $main::root_window->{'button'}->show }
$clist->freeze;
$clist->clear;
my($sql,$sth);
if (($box != 3) and ($box != 2) and ($box != 5)) {
${$clist->{'labels'}}[4] = "From";
} else {
${$clist->{'labels'}}[4] = "To";
}
$sql = "select msgid,inreplyto,subject,friendly,localdate,id,newmsg,replyf,priority,contenttype,score,ref,serverstat from messages where boxid = '$box' order by localdate";# order by inreplyto,ref";
$sth = $main::conn->prepare($sql);
$sth->execute();
my ($node);
my (%nodes, %not_found) = ((), ());
while (my($msgid, $inreplyto, $subject, $sentfrom, $date,$id,$newmsg,$reply,$priority,$contenttype,$score,$ref,$serverstat) = $sth->fetchrow_array()) {
my $sub = $subject;
$sub =~ s!\bre(:|\b)\s+!!gi;
if (not defined $score) { $score = 0 }
if ($score == 0) { $score = " "; }
#shut CSV up
if ($main::prefs{'DatabaseDriver'} eq "CSV") {
if (not defined $reply or $reply eq "") {
$reply = 0;
}
}
if (defined $serverstat && $serverstat == 1) {
$serverstat = _("Not Fetched"); # Message is still on server and has NOT been fetched.
#
} elsif (defined $serverstat && ($serverstat == 2 || $serverstat == 6)) {
$serverstat = _("On Server"); # Message is still on server and has been fetched.
#
} elsif (defined $serverstat && $serverstat == 3) {
$serverstat = _("To Be Deleted"); # Message is flagged for deletion.
#
} elsif (defined $serverstat && $serverstat == 4) {
$serverstat = _("To Be Fetched");# Message is flagged for fetching.
#
} elsif (defined $serverstat && $serverstat == 5) {
$serverstat = _("To Be Fetched & Deleted");# Message is flagged for fetch & delete.
#
} else {
$serverstat = " "; # Message is not on server.
#
}
if (!$ref && !$inreplyto) { #toplevel mail
my $title = ["",,"","",$score,$sentfrom,$subject,&main::localdate_to_displaydate($date),$serverstat, $date];
if (defined $reply and $reply ne "" and $reply == 1) {
$node = $clist->insert_node(undef,undef,$title,5,$replyf,$replyf_mask,$replyf,$replyf_mask,0,1);
} elsif (defined $reply and $reply ne "" and $reply == 2) {
$node = $clist->insert_node(undef,undef,$title,5,$forwardf,$forwardf_mask,$forwardf,$forwardf_mask,0,1);
} else {
$node = $clist->insert_node(undef,undef,$title,5,undef,undef,undef,undef,0,1);
}
$nodes{$msgid} = $node;
$nodes{$sentfrom . $date} = $node;
$nodes{$sub} = $node;
} else {
if (!$ref && $inreplyto =~ /^(.+)\'s message of \"([^\"]+)\"/) {
$inreplyto = "$1$2";
$inreplyto =~ s/\"//g;
} elsif ($ref =~ /(<[^>]+>)$/ || $inreplyto =~ /(<[^>]+>)/) {
$inreplyto = $1;
}
if ($nodes{$inreplyto}) {
if ($main::prefs{'arrowthreads'} eq "y") { $subject = $main::prefs{'threadarrow'}; }
my $title = ["","","",$score,$sentfrom,$subject,&main::localdate_to_displaydate($date),$serverstat, $date];
if (defined $reply and $reply ne "" and $reply == 1) {
$node = $clist->insert_node($nodes{$inreplyto},undef,$title,5,$replyf,$replyf_mask,$replyf,$replyf_mask,0,1);
} elsif (defined $reply and $reply ne "" and $reply == 2) {
$node = $clist->insert_node($nodes{$inreplyto},undef,$title,5,$forwardf,$forwardf_mask,$forwardf,$forwardf_mask,0,1);
} else {
$node = $clist->insert_node($nodes{$inreplyto},undef,$title,5,undef,undef,undef,undef,0,1);
}
$nodes{$msgid} = $node;
$nodes{$sentfrom . $date} = $node;
$nodes{$sub} = $node;
} elsif ($nodes{$sub} && $main::prefs{'GuessRejectThreads'} eq "y") {
if ($main::prefs{'arrowthreads'} eq "y") { $subject = $main::prefs{'threadarrow'}; }
my $title = ["","","",$score,$sentfrom,$subject,&main::localdate_to_displaydate($date),$serverstat, $date];
if (defined $reply and $reply == 1) {
$node = $clist->insert_node($nodes{$sub},undef,$title,5,$replyf,$replyf_mask,$replyf,$replyf_mask,0,1);
} elsif (defined $reply and $reply == 2) {
$node = $clist->insert_node($nodes{$sub},undef,$title,5,$forwardf,$forwardf_mask,$forwardf,$forwardf_mask,0,1);
} else {
$node = $clist->insert_node($nodes{$sub},undef,$title,5,undef,undef,undef,undef,0,1);
}
$nodes{$msgid} = $node;
$nodes{$sentfrom . $date} = $node;
$nodes{$sub} = $node;
} else {
my $title = ["","","",$score,$sentfrom,$subject,&main::localdate_to_displaydate($date),$serverstat, $date];
if (defined $reply and $reply ne "" and $reply == 1) {
$node = $clist->insert_node(undef,undef,$title,5,$replyf,$replyf_mask,$replyf,$replyf_mask,0,1);
} elsif (defined $reply and $reply ne "" and $reply == 2) {
$node = $clist->insert_node(undef,undef,$title,5,$forwardf,$forwardf_mask,$forwardf,$forwardf_mask,0,1);
} else {
$node = $clist->insert_node(undef,undef,$title,5,undef,undef,undef,undef,0,1);
}
$nodes{$msgid} = $node;
$nodes{$sentfrom . $date} = $node;
$nodes{$sub} = $node;
}
}
if (not defined $switch or $switch ne "switch") {
if ($id == $selected) { $selected = $node; }
}
$clist->node_set_row_data($node,\$id);
if ($contenttype && ($contenttype !~ /text/i && $contenttype !~ /alternative/i && $contenttype !~ /multipart\/report/i)) {
$clist->node_set_pixmap($node, 1, $paperclip, $paperclip_mask);
}
if (($priority) and ($priority =~ /high/i)) {
$clist->node_set_pixmap($node, 0, $exclamation, $exclamation_mask);
}
if (defined $newmsg and $newmsg eq "y") {
$clist->node_set_pixmap($node,2,$newm,$newm_mask);
if ($main::prefs{'BoldMsg'}) {
$clist->node_set_row_style($node,$main::bold);
}
} else {
if ($main::prefs{'BoldMsg'}) {
$clist->node_set_row_style($node,$main::normal);
}
}
}
if ($main::prefs{'SortCol'} !=5) {
$clist->sort_recursive( undef );
} else {
&Pronto::MessageList::subject_sort($clist);
}
if (not defined $switch or $switch ne "switch") {
if ($selected !=0) {
# $clist->select($selected); for some reason does not work with remembing the $vpos
$clist->node_moveto($selected,2,0.5,0.5);
my $row = $clist->get_node_position($selected);
if ($row != -1) {
Gtk::CList::select_row($clist,$row,1);
Gtk::CList::set_focus_row($clist,$row);
if ($vpos) {
$main::root_window->{'sw'}->set_vadjustment($vpos);
}
}
}
}
if ($main::prefs{'threadpref'} eq "collapsed") { $clist->collapse_recursive(undef) }
$clist->thaw;
return 1;
}
sub get_selected_msgid
{
my ($clist)=@_;
my (@msg_sel, $msgid);
@msg_sel = $clist->selection;
if (!@msg_sel) { return undef; };
if ($main::prefs{'messageview'} eq "clist") {
$msgid = ${$clist->get_row_data($msg_sel[0])};
} else {
$msgid = ${$clist->node_get_row_data($msg_sel[0])};
}
return $msgid;
}
1;
syntax highlighted by Code2HTML, v. 0.9.1