2001-06-04  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/file-headers.c: don't translate the "Status:" header being
	written in the mboxes.  Thanks to Michel Julier for reporting this bug.

	* pan/Makefile.am: fixed link bug on IRIX.  Thanks to Himanshu Gohel
	for tracking down this problem & submitting a fix.

2001-06-02  Charles Kerr <charles@rebelbase.com>

	(Speedups)

	* pan/article.c (article_set_header_impl): don't chunk the key
	value if the header isn't going into the extra_headers hashtable.

2001-06-01  Charles Kerr <charles@rebelbase.com>

	(Speedups)

	* pan/gnka.c (gnksa_check_domain): speedups.
	* pan/gnka.c (gnksa_check_localpart): speedups.
	* gmime/gmime-utils.c (g_mime_utils_8bit_header_decode): speedups.

2001-05-31  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/article.h: added xref field: because so many articles have xref
	headers, allocating a field for this keeps us from needing the headers
	hash table for a large percentage of articles.
	* pan/article.c: sync.
	* pan/file-headers.c: sync.

	* pan/article-thread.c (thread_articles): speedup by sorting the
	gslist after all the nodes had been added, rather than as-we-go.

2001-05-31  Charles Kerr <charles@rebelbase.com>
 
	(Bugfixes)
	 
	* pan/article.c (article_xref_foreach): if the group is NULL,
	don't call it in the foreach callback.
			 
	* pan/dialogs/dialog-newuser: s/successfullly/successfully/.
       	Thanks to Per Larsson for finding this.
					 
	* pan/article.c (articles_set_read): fix esoteric bug: when subparts
	of a multipart are marked read, make sure crossposts of those subparts
	are also marked read.
								 
	(Text Cleanup)
	 
	* pan/acache.c (acache_init): Use "MB" for megabytes for consistency.
       	* pan/acache.c (acache_expire_to_size): same.

2001-05-30  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/article-thread.c (thread_articles): Use a buffer for checking
	for subject drift in a thread, rather than alloc'ing every time.

	* pan/newsrc-port.c (newsrc_import): call server_add_groups once,
	rather than once per group.  Thanks to Andreas Scherbaum for
	reporting this bottleneck.

	* pan/pan.c (main): don't call acache_init() a second time.

	* pan/task-decode.c (choose_article_parts_manual): fix small
	compiler warning.

2001-05-29  Andras Timar <timar@gnome.org>

	* configure.in: Added hu to ALL_LINGUAS

2001-05-26  Charles Kerr <charles@rebelbase.com>

	(FIFO .signature files)

	* pan/util-file.c (read_file): Handle FIFO files correctly
	so that complex .signature files work properly.  Thanks to
	Daniel Burrows for suggesting this improvement.

2001-05-25  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/group.c (group_set_article_range): pass the new article range
	along to the group's newsrc object.

	* pan/newsrc.c (mark_range_read): fix the very popular
	read-articles-getting-marked-read bug that I thought I'd already fixed
	fixed in pre5. :)  Thanks to Janus Sandsgaard for helping to track
	this down.

	(Cross-references)

	* pan/nntp.c (nntp_article_download): keep the Xref: header.
	* pan/nntp.c (nntp_download_headers): same.

	* pan/article.c (article_xref_foreach): new utility function.

	* pan/article.c (articles_set_read): completely rewritten to mark
	crossposts read/unread as well.  Thanks to Bob Broughton for
	suggesting this feature.

	* pan/articlelist.c (articlelist_delete_articles): when deleting
	articles, delete the xrefs too.

	("Purged" articles in a Group)

	* pan/group.h (Group struct): added _purged field to Group struct
	* pan/group.c (group_constructor): sync.
	* pan/group.c (group_destructor): sync.
	* pan/group.c (group_set_article_range): sync.
	* pan/group.c (group_get_purged): new func.
	* pan/group.c (group_remove_crossposts): new func.
	* pan/file-grouplist.c: bumped the version number to 3 and added
	code to save/read the _purged newsrc field.

2001-05-24  Charles Kerr <charles@rebelbase.com>

	Pan 0.9.7pre5 Released!

2001-05-23  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/article.c (article_get_headers): if the article is invalid,
	return an empty string instead of a NULL.

	* pan/text.c (menu): fixed crash when activating the "Open in New
	Window", button from the text window's popup menu.  Thanks to
	John LeMay for first reporting this bug and to Ron Youvan for filling
	in some extra details.

        * pan/gui.c (set_widget_font): if the widget isn't realized yet, then
	we need to listen a realize callback from the widget and then set
	it -- setting it before it's realized yields an incorrect GtkStyle.
	Thanks to Duane Healing and Jed Baer for helping track this down.

	(Pause the Queue)

	* pan/queue.c: added the ability to pause the queue.  Thanks to
	Phillip Pi, Ron Youvan, Ryan Daniels, and others for requesting
	this feature.
	* pan/task-manager.c: same.

2001-05-22  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/newsrc.c (maybe_merge_ranges): fix corruption problem that
	came from comparing signed & unsigned integers irresponsibly.

	* pan/server.c (server_destructor): make sure that groups are
	destroyed when their servers are destroyed.

	* pan.spec.in: removed gettext-devel dependency; this package
	apparently isn't existant on RH 7.
	* pan-images.spec.in: same.

	* pan/text.c (update_body_pane_nolock): fixed bug that could insert
	a nil character into the gtktext widget, which cause all kinds of
	wierdness.  Thanks to Dietmar Staab for reporting this bug.

	* pan/articlelist.c (articlelist_article_to_folder): if the user hit
	"move", rather than "copy", make sure that the articles are removed
	from the current group if the copying is successful.  Thanks to
	Wolfgang Schricker for reporting this bug.

	(Cleanup)

	* pan/article-toolbar.c (toolbar_position_menu): removed dead code.
	* pan/article-toolbar.c (my_popup_handler): same.
	* pan/newsrc.c (range_equals): same.

2001-05-21  Charles Kerr <charles@rebelbase.com>

	(Sanity Checks)

	* pan/article.c (article_is_valid): added some more checks, and for
	temporary testing purposes instead of generating a warning it will
	generate an assertion failure.

	* pan/article.c (article_init_header): new function like
	article_set_header but doesn't fire article-dirty events.
	Previously instantiating an Article from the cache fired a
	lot of article-dirty events.

	* pan/article.c (article_init_author_from_header): like
	article_set_author_from_header but diesn't fire article-dirty
	events.

2001-05-18  Charles Kerr <charles@rebelbase.com>

	Pan 0.9.7pre4 Released!

2001-05-17  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/util-mime.c (look_for_uuencoded_data): fix crashing bug.
	Thanks for Jim Henderson for first reporting this bug.

	* pan/newsrc.c (parse_read_str): handle corrupt newsrc files as well
	as possible.  We now handle all sorts of wierd error conditions that
	weren't previously handled.

	(Newsrc)

	* pan/newsrc.c (newsrc_mark_range): new function to mark an entire
	range as read or unread.  This was added to ensure that our own
	ranges would stay accurate even when an imported newsrc file has
	overlapping or contradictory ranges.
	* pan/newsrc.c (newsrc_mark_article): sync.
	* tests/test-newsrc.c: added about twenty new tests to torture the
	new code -- and its programmer :)

2001-05-15  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/article.c (article_is_valid): basic sanity checking on Article
	objects to make sure that we didn't just load a corrupt Article from
	disk or from the newsserver.  Sideways thanks to usenetserver.com for
	providing corrupt headers repeatably so that I could track this down.
	* pan/nntp.c: sync.
	* pan/file-headers.c: sync.

2001-05-15  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/file-headers.c (file_headers_save_group): fix a double-check
	against group->articles_dirty that I checked in yesterday.
	* pan/file-headers.c (file_headers_save): same.

	(Icons)

	* pan/xpm/server.xpm: nice new icon from Paolo Bacchilega!

	* pan/task-manager.c: use the gnome-stock up/down/top/bottom buttons.
	* pan/xpm/arrow_bottom.xpm: removed unused icon.
	* pan/xpm/arrow_top.xpm: same.
	* pan/xpm/arrow_up.xpm: same.
	* pan/xpm/arrow_down.xpm: same.
	* pan/xpm/requeue.xpm: same.
	* pan/xpm/Makefile.am: sync.

	* pan/xpm/article_new.xpm: made icon 16x16 to be flush with others.
	* pan/xpm/article_unread.xpm: same.
	* pan/xpm/article_binary.xpm: same.
	* pan/xpm/bluecheck.xpm: same.
	* pan/xpm/disk.xpm: same.
	* pan/xpm/mini_page.xpm: same.

	* pan/xpm/binary_complete.xpm: reduced number of colors.
	* pan/xpm/binary_incomplete.xpm: same.
	* pan/xpm/bluecheck.xpm: same.
	* pan/xpm/disk.xpm: same.

	* pan/xpm/filter.xpm: another try.

	(Code Cleanup)

	* pan/articlelist.c (articlelist_decode_impl): small code cleanup
	* pan/articlelist.c (articlelist_selected_decode_impl): same

2001-05-13  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/articlelist.c (articlelist_set_selected_nodes): workaround a bug
	in gtk+ 1.2 that, when in zoom mode, moves the clist selection to the
	bottom of the clist.  Thanks very much to Samuel Solon for tracking
	down this problem, submitting a gtk+ patch to bugzilla.gnome.org, and
	providing an interim workaround for Pan.

	* pan/acache.c (acache_file_update_refcount_nolock): ensure that the
	refcount is updated, even if there wasn't already an entry for that
	message_id.  This way we can check out articles before we've finished
	downloading them, which is helpful for downloading large multiparts.

	* pan/gui.c
	* pan/article-toolbar.c: synchronized the text messages on the filter
	menubuttons.

	* pan/articlelist.c (articlelist_bozoize_author): Bozoize the authors
	of all selected articles, not just the first one.
	* pan/articlelist.c (articlelist_selected_thread_watch): Watch/unwatch
	all selected threads, not just the first one.
	* pan/articlelist.c (articlelist_selected_thread_ignore): same.

	* pan/thread-watch.c (thread_get_state): Workaround corrupt References:
	by walking through the parents if we can't find a match.  Thanks to
	Jim Henderson for pointing out cases where corrupt References: headers
	broke thread tracking.

	(UI Changes)

	* pan/text.c (text_get_article_body): add the attachments _after_ the
	main body, by Margus Ramst and Frank Van Damme's requests.

2001-05-10  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/newsrc-port.c (newsrc_import): Fixed crash when trying to import
	a .newsrc file that existed but couldn't be opened.  Thanks to
	Christopher Huy for reporting this bug.

	(UI Changes)

	* pan/article-toolbar.c: added a popdown menu for setting filter items.
	This frees up landscape on the article toolbar and will open up space
	for the custom filters planned for 0.10.0.  I'm adding this now, so
	that it will be in the prerelease & get feedback from testers.

2001-05-09  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/smtp.c (smtp_get_connection): Fix crash that occurred when user
	tried to send mail without having a mail server defined.  Thanks to
	Cory Hill for reporting this bug.

	* pan/article.c (article_get_headers): The header names should NOT be
	i18nized.  Zounds, what a stupid bug I've wrought.
	* pan/article.c (article_set_from_raw_message): If we can't parse the
	message, check to see if maybe <= 0.9.6 generated the message with
	i18nized headers.  If so, back up and try to parse it right.  If this
	fails, use creative license because all articles Must have a Message-ID
	to work right in Pan.
	* pan/file-headers.c (file_headers_load_folder): Don't keep irreperably
	corrupted mbox messages.

	(Bumming Code)

	* pan/article-actions.c (article_supersede): remove unnecessary call
	to article_get_message().

	* pan/article.c (article_set_header): replaced unnecessary
	pan_strcmp with strcmp.
	* pan/article.c (article_remove_header): same.
	* pan/article.c (article_header_is_extra): same.

	* pan/util-file.c (mbox_get_next_message): Use get_next_token_range()
	for less memory overhead while walking through the mbox message.

2001-05-08  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/decode.c (create_filename): Fixed problem with the filename
	collision code which caused attachements to be saved in new and
	unrequested directories.  Thanks to Ron Youvan for first reporting
        this bug.
	* pan/tests/test-deode.c: added regression test for this.
	* pan/tests/data/cache/collision.msg: same.

	* pan/text.c (colorize_html): Fix colorization of text in html mode.
	This was broken in pre1 due to some simplistic code.  Thanks to
	Ihar Viarheichyk for submitting a patch to fix this.

	* pan/acache.c (acache_set_message): if this article is already
	checked out, don't replace the acache entry -- just update its
	timestamp and body size.  Thanks to Huub Reuver for helping find this
	bug.

2001-05-08  Charles Kerr <charles@rebelbase.com>

	Pan 0.9.7pre2 Released!

2001-05-07  Charles Kerr <charles@rebelbase.com>

	(Usability)

	* pan/task-decode.c (task_decode_constructor): check out the messages
	here, rather than in task_decode_run, so that the messages will be
	checked out over the life span of the task.  This way if a multipart
	task fails & is requeued, the parts we had before will be guaranteed
	to still be present.
	* pan/task-decode.c (task_decode_run): sync.
	* pan/task-decode.c (task_decode_destructor): sync.  Also, expire
	multiparts if the task decoded them successfully.  This will leave
	more room for incomplete tasks that have failed.  Thanks to
	Frederik Vanrenterghem and Aluminum Foil Ball for suggesting this.

	(Bugfixes)

	* pan/article.c (article_set_author_from_header): after splitting the
	author into personal and email parts, decode each one of them.  This
	fixes Christian Lohmaier's reported bug about addresses such as
	"From: some@NOSPAM.email.com (M. =?ISO-8859-1?Q?H=F6lle?=)" not
	decoding properly.
	* tests/test-article.c: added regression test to double-check this.

	* pan/util-mime.c (look_for_uuencoded_data): removed unused variable
	that was mistakenly being used. :)

	* pan/gnksa.c (gnksa_check_from): added "strict" flag argument so that
	we can be stricter on what's being posted/mailed from Pan but easygoing
	about what we accept from news servers.
	* pan/gnksa.c (gnksa_split_from): sync.
	* pan/gnksa.c (gnksa_do_check_from): sync.
	* pan/article.c (article_set_from_header): sync - not strict.
	* pan/bozo.c (bozo_init_module): sync - not strict.
	* pan/message-check.c (check_mail_addresses): sync - we're posting
	here, so be strict in what we accept.
	* pan/message-window.c: sync.
	* pan/smtp.c (smtp_send_article): sync.
	* pan/test/test-article.c: sync.
	* pan/test/test-gnksa.c: sync.

2001-05-06  Charles Kerr <charles@rebelbase.com>

	* pan/decode.c (create_filename): use filename_%d.suffix instead of
	filename.%d.suffix, at Ron Youvan's request.  This is apparently
	easier to sort.

2001-05-05  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/articlelist.c (open_article): new function to iterate through
	the different attachements' filenames and open them.  Earlier versions
	of Pan only opened the first attachment.  Thanks to Margus Ramst for
	reporting this bug.
	* pan/articlelist.c (articlelist_selected_delete_attachment): sync.
	* pan/decode.c (decode_article): sync.

	* pan/util-mime.c (separate_uu_from_non_uu): handle >1 uu attachments
	in a single post.  Thanks to Margus Ramst for reporting this bug.
	* pan/tests/test-decode.c: Added a regression test to check this.
	* pan/tests/data/cache/two_uu_attachments.msg: sync.
	* pan/tests/data/cache/makefile.am: sync.

	* pan/grouplist.c (grouplist_update_ui_thread): make sure we're not
	loading a NULL server.  Thanks to John LeMay for reporting this bug.

	* pan/article-toolbar.c: updated tooltip for the search field to
	remove the word "subject" and add a link to a description of fnmatch.
	Thanks to Huub Reuver for suggesting this.

2001-05-04  Charles Kerr <charles@rebelbase.com>

	Pan 0.9.7pre1 Released!

2001-05-02  Charles Kerr <charles@rebelbase.com>

	(Bugfixes for make distcheck)

	* pan/test-decode.c: derive the data path from the srcdir env variable
	* pan/acache.c (acache_get_path): handle relative paths correctly.
	* pan/acache.c (acache_get_full_path): same.
	* pan/acache.c (acache_get_filename): same.
	* pan/acache.c (acache_init): same.
	* pan/util-file.c (pan_make_temp): same.
	* tests/test-decode.c: same.

2001-05-01  Charles Kerr <charles@rebelbase.com>

	* pan/grouplist.c (grouplist_mode_menu_create): fix long-standing FIXME
	item by making sure to call gtk_widget_show() for all the menu items
	created here.

	* pan/message-check.c (check_mostly_quoted): compare ints, rather than
	doubles, to make sure that roundoff error doesn't bite us.

	(Unit Tests)

	* pan/tests: added unit tests to CVS.

	(Search by Author from Toolbar)

	* pan/article-toolbar.c (article_toolbar_get_filter): added mode
	filter to differentiate between subject & author searches.
	* pan/article-toolbar.c (article_toolbar_new): sync.
	* pan/articlelist.c (add_nodes): sync.
	* pan/article-toolbar.c (set_filter_mode): new func.

2001-04-28  Charles Kerr <charles@rebelbase.com>

	(GUI Spiffup)

	* pan/article-toolbar.c (article_toolbar_new): tinkering around with
	a slightly new look for the the toolbar.  Hmm.

	(Expand/Collapse Selected Threads)

	* pan/articlelist.c (articlelist_get_selected_nodes): new function.
	* pan/articlelist.c (articlelist_expand_selected_threads): same.
	* pan/articlelist.c (articlelist_collapse_selected_threads): same.
	* pan/gui.c: added expand/collapse Selected Threads to the menu.

	(Saving Articles)

	* pan/articlelist.c (articlelist_save_selected_article_text): new
	function to tell the save module to save the selected article's text.
	Previously it would save the article displayed in the text window,
	which wasn't always what the user wanted.
	* pan/save.c (save_article): If the article hasn't been downloaded
	yet, queue a body download.  Older versions just complained to the
	user about the missing body.

	(Code Cleanup)

	* pan/text.c (colorize_html): small cleanup.

2001-04-26  Charles Kerr <charles@rebelbase.com>

	(Bug Fix)

	* pan/articlelist.c (articlelist_save_selected_article_text): new
	function to save the currently-selected article text.  This replaces
	the old call to save_current_article, which was confusing in the
	thread view.

	* pan/save.c (save_article): updated to download the article body if
	we don't already have it.

2001-04-26  Charles Kerr <charles@rebelbase.com>

	* pan/text.c: added pan_lock/unlock() calls where appropriate.

	* pan/file-grouplist.c: fixed some cut-and-paste problems with
	debug_enter/debug_exit calls.

	* pan/debug.c: improved debug output formatting somewhat to make it
	easier to follow the app flow by sight.

	* pan/grouplist.c (grouplist_create): populate the grouplist in
	this thread, rather than in its own thread.  This should help kill
	a race condition but may slow down startup... going to look into this
	more.

2001-04-25  Charles Kerr <charles@rebelbase.com>

	(Bug Fix)

	* pan/dialogs/rules_callbacks.c (apply_rules_impl): fix FMR bug
	reported by Jim Henderson.

	(Usability)

	* pan/nntp.c (nntp_article_download): Added the article's message-id
	to error messages.  Thanks to Noah Roamer for submitting a small
	patch to do this: "When an article body download fails (i.e. Error 423
	No Such Article In Group) and I complain to my news isp, invariably,
	the first question they ask is what the message id is. Pan,
	unfortunately, doesn't display the message id for such error messages,
	so here's a 1 line patch to nntp.c to make it do so."

	(HTML Pane)

	* pan/text.c (colorize_html): new function to colorize the text window
	even in html mode.  This function adds <font color="foo"></font> to
	the html, colorizing quoted text & original text appropriately.

	(Tokens, again)

	* pan/pan-glib-extensions.c (get_next_token_range): new function for
	getting the next token from a string.  This has lower overhead than
	get_next_token_str() because it returns the token start point & length
	instead of allocating a new token string and copying the text into it.
	* pan/decode.c (write_big_article): use get_next_token_range.
	* pan/message-check.c (get_nntp_rcpts): same.
	* pan/message-check.c (check_signature): same.
	* pan/message-check.c (check_wide_body): same.
	* pan/message-check.c (check_empty): same.
	* pan/message-check.c (check_mostly_quoted): same.
	* pan/message-check.c (check_all_quoted): same.
	* pan/text.c (update_body_pane_nolock): same.
	* pan/util-wrap.c (get_paragraphs): same.
	* pan/util-wrap.c (fill_paragraph): same.
	* pan/util-wrap.c (mute_quoted_text_in_body): same.

2001-04-24  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/articlelist.c (articlelist_set_group_maybe): make sure that
	even if the new group's an empty folder, the articlelist ui still
	has reffed its articles once.

	* pan/grouplist.c (grouplist_server_groups_added_cb): fix bug that
	kept user-created new folders from appearing in the grouplist
	immediately.
	* pan/grouplist.c (grouplist_server_groups_removed_cb): fix bug that
	kept user-deleted folders from disappearing from the grouplist
	immediately.
	* pan/grouplist.c (grouplist_remove_row): same.
	* pan/grouplist.c (grouplist_group_changed_cb): fix bug that kept
	changes in folders from being reflected in the grouplist immediately.

	* pan/article-actions.c (article_copy_articles_to_folder): fix server
	typo.

	* pan/base-prefs.c: add #include <pan/acache.h> to avoid compiler
	warning.

	(Misc)

	* pan/grouplist.c (grouplist_selected_destroy): simplify this dialog.

	* pan/pan-glib-extensions.c (get_next_token_str): correctness tweak:
	if two delimiters are adjacent, the token returned from inbetween is
	an empty string "" rather than a NULL.

	* pan/util-wrap.c: use get_next_token_str instead of
	get_next_token_g_str; the former has slightly less overhead.

2001-04-23  Charles Kerr <charles@rebelbase.com>

	(RPMs)

	* pan/pan.spec.in: Merged in good ideas from the mdk, redhat, and
	polish versions of the Pan RPM.
	* pan/pan-images.spec.in: split off from pan.spec.in.  This version
	adds the specifics for building with gtkhtml.

	(RFC 977 2.4.1)

	* pan/acache.c (acache_set_message): move the .. fix to nntp.c
	* pan/nntp.c (nntp_article_download) fix the .. here

	(Misc)

	* pan/gnksa.h: layout tweaks

2001-04-21  Fatih Demir <kabalak@gtranslator.org>

	* .cvsignore: Extended cvs ignores.

2001-04-20  Charles Kerr <charles@rebelbase.com>

	* pan/po (POTFILES.in) sync with all of the 0.9.7 changes.

	* pan/article-thread.c (normalize_articles): new func that
	normalizes a set of articles for threading/sorting with much less
	memory allocation than before.

	* pan/server.c (server_add_groups): code cleanup.

	* pan/nntp.c (nntp_article_download): pre-allocate space for the
	article body being downloaded.

	* pan/article-actions.c (article_copy_articles_to_folder): new
	function to copy articles to a folder.  This is moved out of
	articlelist because it makes more sense to move it out of the UI.

2001-04-19  Charles Kerr <charles@rebelbase.com>

	(Cleanup)

	* pan/file-grouplist.c: removed some debugging g_messages.
	* pan/group.c (group_set_dirty): remove unnecessary g_return_if_fail

	(serverlist's active server)

	* pan/serverlist.c (serverlist_get_active_server): new function.
	* pan/serverlist.c (serverlist_set_active_server): new function.
	* pan/grouplist.c: sync.
	* pan/dialogs/dialog-newuser.c: sync.

	(Newsrc auto import/export)

	* pan/pan.c (main): check to auto-import newsrc to active server.
	* pan/pan.c (pan_shutdown): check to auto-export from active server.
	* pan/newsrc-port.c (newsrc_import): handle paths with `~'
	* pan/newsrc-port.c (newsrc_export): same.

2001-04-18  Charles Kerr <charles@rebelbase.com>

	* Spent the evening watching Robotica instead of doing .newsrc. :)
	YKYBHTLW you parse the first 3/4 of Robotica as robot regression
	tests instead of entertainment.  And Ahmet Zappa makes Bill Dwyer
	seem downright urbane.  Still waiting for stateside Robot Wars.

2001-04-17  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/grouplist.c (grouplist_create): ensure that the grouplist
	is populated when it's created.  This avoids a bug that kept the
	list of folders from appearing in the grouplist if Pan was started
	with "Folders" as its default grouplist mode.

	* pan/nntp.c (nntp_download_bodies): If one of the bodies is
	already cached, increment the status item's progress by the
	appropriate number of lines so that the progress bar will line
	up right.  Thanks to Adam Huffman and Sandor for reporting this.

	* pan/task-manager.c (task_moved_cb): selecting all the tasks and
	hitting "down" repeatedly would cause Pan to go into an infinite
	loop.  Thanks to Yannick Pollart for reporting this bug.

2001-04-16  Charles Kerr <charles@rebelbase.com>

	(Wakeup the Queue when the Server goes Online)

	* pan/server.c (server_get_online_status_changed_callback): new
	function for tracking when a server goes online/offline.
	* pan/queue.c: use this online/offline callback.  This gets us
	back in line with 0.9.6 functionality but without the core
	classes (server) needing to know about higher-level classes (queue).

	(Purge Cached Bodies)

	* pan/acache.c (acache_expire_messages): new function to purge
	specified article bodies.
	* pan/articlelist.c (articlelist_selected_purge_bodies): same.
	* pan/articlelist.c (articlelist_selected_purge_bodies_deep): same.
	* pan/articlelist.c (articlelist_all_purge_bodies): same.
	* pan/articlelist.c (purge_bodies_menu): new popup submenu.
	* pan/articlelist.c (articlelist_menu_popup): sync.

2001-04-15  Charles Kerr <charles@rebelbase.com>

	* pan/articlelist.c (open_decoded_cb): If the decode task was
	successful then open the attached file in an outside application.
	* pan/articlelist.c (articlelist_selected_decode_impl): sync.
	* pan/task-decode.c (task_decode_new): removed "open" argument.
	* pan/save.c: sync.

	* pan/text.c: updated the introduction text to refer to the copy of
	the GPL that can be found in Help|About|License, instead of referring
	to the FSF's postal address.

	* pan/articlelist.c (article_passes_filter): small scope tweaks for
	cleanness & possibly some speedup as a side-effect

	* pan/grouplist.c (grouplist_set_server): made this a private function
	because it's now called only directly in a signal handler.

2001-04-14  Charles Kerr <charles@rebelbase.com>

	* pan/prefs.c: handle the cache size correctly.  This bug was causing
	the cache to be zeroed out constantly in CVS yesterday.

	* lots more #include cleanup.

2001-04-13  Charles Kerr <charles@rebelbase.com>

	(Bug Fix)

	* pan/util-wrap.c (wrap_body): don't crash if someone passes in a
	negative number for the wrap column.  The unit tests smoked this out.

	(Group Loading)

	* pan/serverlist.c (serverlist_load_folders): call
	server_ensure_groups_loaded() instead of loading the folders ourselves.
	That way the folder server takes care of the bookkeeping.

	(Cleanup)

	* pan/util.c: removed the rest of the regression tests, as they're now
	all in the 'make check' tests.

	* pan/acache.c: fix #include statements.
	* pan/article.c: same.
	* pan/article-actions.c: same.
	* pan/article-find.c: same.
	* pan/article-thread.c: same.
	* pan/article-toolbar.c: same.
	* pan/articlelist.c: same.
	* pan/file-grouplist.c: same.
	* pan/file-headers.c: same.
	* pan/group.c: same.
	* pan/grouplist.c: same.
	* pan/gui-headers.c: same.
	* pan/gui-notebook.c: same.
	* pan/gui-paned.c: same.
	* pan/message-check-ui.c: same.
	* pan/message-send.c: same.
	* pan/print.c: same.
	* pan/queue.c: same.
	* pan/save.c: same.
	* pan/status-item-view.c: same.
	* pan/task-manager.c: same.
	* pan/util-file.c: same.

2001-04-12  Charles Kerr <charles@rebelbase.com>

	(Bugfix)

	* pan/newsrc.c (newsrc_set_group_range): fix small bug that caused
	single-range newsrcs to be zeroed out.

	(More Backend vs UI cleanup)

	* pan/article-thread.c (thread_articles): added new argument,
	break_thread_when_subject_changes, so that the module no longer needs
	to rely on a global.

	* pan/article.c (article_get_attribution_string): moved to
	message-window.c, which is its only caller.
	* pan/article.c (article_cancel): moved to new file, article-action.c,
	so that libpanbase won't rely on any gui code.
	* pan/article.c (article_supersede): same.

	* pan/file-headers.c: pan_error_dialog call changed to log_add_va.

	* pan/gnksa.c (gnksa_generate_message_id): the argument passed in is
	now a manditory domain name.

	* pan/gnksa.c (rfc822_date_generate): promoted into libpanbase from
	util.c.

	* pan/group.c (group_download_all_articles): moved to grouplist.c,
	which is its only caller.

	* pan/message-check.c (check_article_and_prompt): moved to new module
	messgage-check-ui.c.

2001-04-11  Charles Kerr <charles@rebelbase.com>

	(Bugfix)

	* pan/nntp.c (nntp_download_bodies): if the checkout argument is true,
	then checkout the articles in acache even if they're already cached
	locally.  Thanks to Tony <civ@brevard.net> for reporting this.

	(Unclutter MessageWindow Header)

	* pan/message-window.h: removed gtk contents from header; they were
	unnecessary.
	* pan/message-window.c: sync.
	* pan/gui.c: sync.
	* pan/articlelist.c: sync.
	* pan/article.c: sync.
	* pan/text.c: sync.

	(Server UI vs. Backend)

	* pan/server-ui.c: new file that handles the Server UI code.
	* pan/serverlist.c: new file that handles the server keeping and
	server bootstrap code.
	* pan/server.c: moved bootstrap and UI stuff to server-ui.c and
	serverlist.c.
	* pan/grouplist.c: sync.
	* pan/articlelist.c: sync.
	* pan/prefs.c: sync.
	* pan/gui.c: sync.

	(Group UI vs. Backend)

	* pan/group-ui.c: new file that handles the Group UI code.
	* pan/group.c: move all the gtk/ui stuff into group-ui.c.
	* pan/articlelist.c: sync.
	* pan/grouplist.c: sync.
	* pan/gui.c: sync.

	(Article UI vs. Backend)

	* pan/article.c: removed UI dependencies.  The UI clients now
	register for notification of changes, instead of article.c knowing
	about them a priori.
	* pan/articlelist.c: sync.


2001-04-10  Charles Kerr <charles@rebelbase.com>

	(Group Loading)

	* pan/server.c (server_add_group): fix reassignment of server
	variable.

	(Newsrc Import/Export)

	* pan/server.c: removed newsrc stuff; it's been moved to
	newsrc-port.c and newsrc-ui.c.
	* pan/newsrc-port.c: new file that handles importing newsrc files
	to a server and exporting servers to a newsrc file.
	* pan/newsrc-ui.c: new file that handles the newsrc import/export
	dialogs.

2001-04-09  Charles Kerr <charles@rebelbase.com>

	* pan/articlelist.c (get_column_1_pixmap): check to see if the
	STATE_ERROR flag is on.  If it is, show it first.  Thanks to
	Ron Youvan for reporting this bug.

	* pan/server.c: remove the GStringChunk.  It doesn't seem to be a
	memory win at all here, and it couples server/group too closely which
	will be bad in 0.10.x's group-centric features.
	* pan/file-grouplist.c (read_group_data): sync.
	* pan/group.c (group_new): sync.
	* pan/group.c (group_constructor): sync.
	* pan/group.c (group_destructor): sync.
	* pan/group.c (group_set_download_dir): sync.
	* pan/group.c (group_set_string_field): removed unused function.
	* pan/group.c (server_chunk_string): same.


2001-04-07  Charles Kerr <charles@rebelbase.com>

	(Group Loading & Saving)

	* pan/server.c (server_get_group_type): new function that returns
	a ServerGroupsType with or'ed bits telling which sets the group 
	passed in belongs to.
	* pan/server.c (server_get_groups_type): same.  Tells which group sets
	one or more of the groups passed in belong to.

	* pan/server.c (server_set_group_type_dirty): or's the specified
	ServerGroupsType to the dirty-group-sets bitfield.  It also ensures
	the specified sets are loaded.  For example when someone unsubscribed
	a group then both sub'ed and unsub'ed must be set dirty & loaded so
	that when Pan exits both sets will be saved correctly.
	* pan/server.c (server_remove_group): sync.
	* pan/server.c (server_add_groups): sync.
	* pan/group.c (group_set_subscribed): sync.
	* pan/group.c (group_set_dirty): sync.
	* pan/file-grouplist.c (file_grouplist_save): sync.

2001-04-06  Charles Kerr <charles@rebelbase.com>

	(Group Loading)

	* pan/grouplist.c (grouplist_update_ui_thread): fix bug that caused
	the clist to be populated twice when groups were loaded from disk.

	* pan/server.c (fire_groups_added): added callback that clients can
	register with to listen for groups added to this server.  This
	removes some gui dependencies in server.c (still lots left though. :P)
	* pan/server.c (fire_groups_removed): same.
	* pan/server.c (server_add_groups): sync.
	* pan/server.c (server_add_removed): sync.
	* pan/grouplist.c: sync.

	(Newsrc import/export)

	* pan/prefs.c: added a UI to enable/disable automatic import/export
	of .newsrc files.  The prefs dialog now updates variables related
	to newsrc import/export and saves these settings to the Pan gnome
	config file.

2001-04-05  Charles Kerr <charles@rebelbase.com>

	(Bugfixes)

	* pan/debug.h: fix ## macro warning generated by gcc 2.9.6.

	* pan/decode.c (write_big_article): Add better handling for those darn
	`cut here' messages.  Yesterday's commit failed on the Sandor
	regression test.

	(More Decoding)

	* pan/decode.c (create_filename): when there are duplicate filenames,
	add the renumbering before the file suffix instead of after it
	(foo.2.mp3 rather than foo.mp3.2).

	(Group Loading)

	* pan/file-grouplist.c: now load and save groups based on their
	subscription state.  By default we now don't load the unsubscribed
	groups until the user requests it, which lowers startup time and
	memory footprint.
	* pan/grouplist.c: sync.
	* pan/server.c: sync.
	* pan/gui.c: sync.

2001-04-04  Charles Kerr <charles@rebelbase.com>

	(More Util Splitting)

	* pan/util-file.c: new file split off from util.c.  As the name
	suggests it contains the file and directory-related utilities.
	* pan/util.c: removed the functions that got moved into file-util.
	* pan/util.h: same.

	(Improved Decoding)

	* pan/gmime/gmime-part.c (g_mime_part_append_pre_encoded_content): new
	function which lets content be added incrementally.  This reduces
	the memory requirements of decoding large files.

	* pan/gmime/gmime-parser.c: (g_mime_parser_construct_part_from_file):
	use the new g_mime_part_append_pre_encoded_content function.  I'm going
	to test this out in Pan for a couple of days before passing it upstream
	back to GMime.

	* pan/util-mime.c: rewrote the uudecoding internals.  It's now smarter
	when reading multiposts where non-uu text is appended to the end of
	a part (such as checksums or ads added by the news server).  Also,
	the processing is now done in tmp files instead of in memory to reduce
	the memory overhead of decoding large files.

	* pan/decode.c: now uses temp files instead of a big memory array to
	reduce the memory overhead of decoding large files.


2001-04-03  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/message-window.c (message_reply_external): fixed crash.
	Thanks to Mohit Agarwal for reporting this bug.

	(Domain Name Update)

	* pan/pan-glib-extensions.h: s/superpimp.org/rebelbase.com/
	* pan/gui.c: same.  Thanks to Adam Huffman for suggesting these.

2001-04-02  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes - these were smoked out from unit tests in the 0.10.0 tree)

	* pan/util-wrap.c (mute_quoted_text_in_body): was appending a blank
	line to the end of the message each time it was called.

	* pan/newsrc.c (newsrc_init): clear out the array of old messages,
	if any were present.

	* pan/newsrc.c (newsrc_set_group_range): truncate out Range items from
	the read array when the group range is updated.  This will give more
	correct article read counts and reduce overhead in newsrc.c.

	* pan/pan-glib-extensions.c: new file split off from util.c.  This has
	the non-gui, non-file-io utilities which typically augment glib.

	* pan/pan-glib-extensions.c (get_next_token_int): could walk into the
	next token in its atoi() call.
	* pan/pan-glib-extensions.c (get_next_token_long): same.
	* pan/pan-glib-extensions.c (get_next_token_ulong): same.

	* pan/base/article.c (article_remove_header): didn't work properly for
	subject, message_id, author, and reference strings.

2001-03-21  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/articlelist.c (articlelist_set_group_maybe): fix group refcount
	problem.  Thanks to Adam Huffman (yet again) for reporting this bug.

2001-03-20  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/status-item.c (status_item_describe): fix typo from yesterday.

	(Usability)

	* pan/article-find.c: added 'find article' back by users' requests.

	* pan/articlelist.c (articlelist_selected_decode_impl): already-saved
	articles weren't allowed to be saved again for some reason.  There
	could be valid reasons for wanting to re-decode.    Thanks to Gauze
	for reporting this.

	* pan/grouplist.c (grouplist_update_ui_thread): make the grouplist
	filter string case-insensitive.  Case shouldn't matter at all on
	newsgroup names.  Thanks to Gauze for reporting this.

	(Building)

	* pan/dialogs/Makefile.am: fixed include path for building where
	srcdir!=objdir.
	* pan/dialogs/dialog-group-props.c: fixed includes.
	* pan/dialogs/dialog-headers.c: same.
	* pan/dialogs/dialog-log-viewer.c: same.
	* pan/dialogs/dialog-newuser.c: same.
	* pan/dialogs/dialog.h: same.
	* pan/dialogs/rules_callbacks.c: same.

2001-03-19  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/task-body (task_body_describe): The g_return_val_if_fail
	clauses were returning "" instead of a NULL.  Since the caller
	g_frees the retval when it's done with it, this was a no-no.

	* pan/article-toolbar.c (filter_selected_describe): added i18n
	call for this string.

	* pan/newsrc.c (newsrc_mark_article_unread): Fixed articles-read-range
	bug that could mess up the taly of which articles were read once in a
	blue moon.

	* pan/file-headers.c (file_headers_load_group): Ensure that the
	article count for the group is updated after loading the group --
	even if there were no articles found in the local cache.

	* pan/articlelist.c (articlelist_set_group_maybe): ref the group
	before checking the article count.  This way we'll know for sure
	if there are articles in the local cache.

	* pan/article-thread.c (thread_articles): allow the first part of
	a multipart post to be threaded by reference.  This preserves
	threading in cases where someone posts a multipart message as a
	reply to another message.  Thanks to Adam Huffman for starting me
	on the trail of this bug.

	* pan/article-thread.c (check_multipart_articles): fix bug that kept
	posts with binary attachments from being flagged as binaries
	they weren't top-level articles.  Thanks again to Adam Huffman.

	* pan/articlelist.c (remove_duplicate_articles): utility function to
	make sure that all the articles in a GPtrArray are unique.  This
	probably isn't necessary but it does make things safer.

	(Unparsable From: headers)

	* pan/article.c: two new fields, default_incoming_name_addr and
	default_incoming_name_real, which get used whenever we can't parse
	the poster's name or email address.  Previously these were duplicated
	in a couple of places, causing sync errors.

	* pan/article.c (article_get_short_author_str): new function to get
	a short author string, suitable for placing in the Author: column
	in the thread view.  It's useful to place this in its own function
	so that the ctree code and the sorting code can both call it.

	* pan/article.c (article_get_short_author_str): if the poster's
	name is equal to default_incoming_name_real, don't use it and
	instead try the email address instead.  Previous versions
	compared against NULL instead of the default, because prior to
	0.9.5 default name/email weren't used.  Thanks to Felix Tilley
	for reporting this bug.

2001-03-18  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/decode.c (create_big_article): Fix bug that occurred if the
	article's body was empty.  Thanks to Gauze for reporting this bug.

	* pan/grouplist.c (group_menu_popup): group-action buttons were being
	enabled even when a group wasn't selected -- the has_selection
	boolean at the top of the func was initied to see if get_group!=NULL,
	rather than get_group()!=NULL.  Thanks to Daniel Shackelford for
	reporting this bug.

2001-03-17  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/message-window.c (message_window_new): Removed call to
	gtk_window_set_transient_for(), which made it impossible to
	resize the compose window under some window managers.
	Thanks to Christophe Lambin, Jed S. Baer, and Jan Schaumann
	for reporting this bug.

	* pan/gui.c (gui_restore_window_size): fixed cut-and-paste bug.

	* pan/task-manager.c (window_delete_event_cb): the column widths
	weren't being saved, even though the startup code tried to restore
	them.

	* pan/decode.c (create_filename): another iteration on deriving
	the perfect filename.  0.9.4 let the directory separator through,
	causing the first half of the filename to be created as a directory,
	which held the second half as a file.  Thanks to William Peterson
	for reporting this bug.

	(Usability)

	* pan/message-window.c (populate_post_info_pane): on a new post,
	if the user has >1 groups selected in the grouplist, chain them
	together in the Newsgroups: editable for crossposting.  Thanks to
	Adam Warner for this suggestion.

	* pan/task-headers.c: This task is now always high priority, so
	that it can skip ahead of decode tasks in the queue.  This should
	make leechers happier wihtout bothering text-reading users.

	* pan/dialogs/dialog-log-viewer.c: made the 'message' column of
	the log window default to be much longer, because resizing the
	last column in a clist to get the horizontal scroll is not
	intuitive to many users, even experienced ones.

	* pan/task-manager.c: ditto.

2001-03-16  Charles Kerr <charles@rebelbase.com>

	(Stupid Bug Fixes)

	* pan/group.c (group_set_articles_dirty): new trivial function.
	This does sanity checking with g_return_if_fail(group!=NULL) up
	front, which is an indirect way of fixing Fabrizio Ammollo's
	"If I queue it for download, and then delete it before it's done
	downloading, Pan crashes" bug.

	(Reserved Connections)

	We now give the option to reserve a connection for reading messages.
	This ensures that you can download & read articles comfortably
	even when binary attachments or new headers are being downloaded.
	Thanks to Eric Ortega <eto@splot.org> for this suggestion.

	* pan/prefs.c: update the reserve-connection wording.
	* pan/server.h (Server struct): rename reserve flag for correctness.
	* pan/server.c: sync.
	* pan/queue.c: sync.
	* pan/task.h (Task struct): replace is_leech field with gets_bodies.
	* pan/task-decode.c: sync.
	* pan/task-body.c: sync.
	* pan/task-bodies.c: sync.

2001-03-16  Charles Kerr <charles@rebelbase.com>

	* pan/gmime/gmime-utils.c (get_days_in_month): #if 0'ed out unused
	function.

	* pan/configure.in: raised gtkhtml requirement to 0.8.3.  This
	version seems to fix the crash-on-goofy-images problems I was seeing
	under 0.8.2.

2001-03-15  Charles Kerr <charles@rebelbase.com>

	* pan/grouplist.c: fixed deadlock between grouplist_update_mutex and
	gdk_threads_enter().

	* pan/nntp.c: make some error messages more human-readable.

	* pan/queue.c (sockets_upkeep): If the user's hit the offline button
	for this server, then kill all idle sockets that we've got for that
	server.

2001-03-15  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/gui-headers.c (add_header_nolock): fix small memory leak.

	* pan/message-window.c (populate_article_from_mw): this code was
	letting invalid From: addresses slip by.  This bug was introduced
	in 0.9.5.

	* pan/text.c (text_page_down_or_next_article): during space reading,
	the last line of text in an article body was often cut off.  Fixed.

	(Usability)

	* pan/nntp.c (nntp_download_bodies): added flag on whether or not
	a task should abort if one of the article bodies can't be retrieved
	from the server.  This is for multipart binaries, which won't need
	any of the remaining posts if one is missing.
	* pan/task-decode.c: better error checking & user messages.

	* pan/gui.c (gui_key_press_cb): shift-delete now deletes selected
	articles and replies.

	(Code Tweaking)

	* pan/acache.c (acache_get_filename): sped up this function a great
	deal by not being so stupid about memory usage.
	* pan/util.c (pan_normalize_filename_inplace): speedups.

	* pan/acache.c (acache_file_update_refcount): new static function 
	called by _checkin and _checkout to change the acache entries'
	refcounts.

	* pan/task-group-count.c (task_group_count_run): be more
	fault-tolerant: if the one group can't be selected, then instead of
	failing, proceed to the next group.  Thanks to Sven Neuhaus for
	suggesting this.

	* pan/util.c (pan_normalize_filename_inplace): a replacement for
	pan_normalize_filename().  As the name suggests,


2001-03-14  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/articlelist.c (articlelist_set_node_style_nolock): fix font
	refcount bug that caused crashes when the user changed the fonts or
	some other settings in the prefs window for the first time.  Thanks
	to Adam Huffman and John LeMay Jr. for reporting this bug.

	* pan/article-toolbar.c (article_filter_cb): remove annoying
	refresh bug.


2001-03-14  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/articlelist.c (add_article_to_ctree): fixed potentially nasty
	cast-a-gpointer-to-an-invalid-type bug.

	* pan/article-toolbar.c (state_filter_changed_idle): fixed feedback
	loop bug reported by Sven Neuhaus.

	* pan/Makefile.am: fixed build problem by adding $(GTK_CFLAGS) to the
	INCLUDES variable.  Thanks to Christophe Lambin for reporting this bug.

	(Event Batching)

	* pan/articlelist.c (articlelist_update_node): now takes an array
	of articles, rather than just a single article, so that updates to
	the clist can be batched together.
	* pan/article.c (articles_remove_flag): same.
	* pan/article.c (articles_add_flag): same.
	* pan/articlelist.c (articlelist_selected_unflag_for_dl): sync.
	* pan/articlelist.c (articlelist_selected_unflag_for_dl_deep): sync.
	* pan/articlelist.c (articlelist_selected_flag_for_dl): sync.
	* pan/articlelist.c (articlelist_selected_flag_for_dl_deep): sync.

2001-03-13  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/file-headers.c (file_headers_save_group): fix potential
	file corruption error when writing the extra-headers array.

	(Wrapping)

	* pan/util-wrap.c (fill_body): added wrap_column argument to this
	function so that it doesn't rely on the wrap_column global anymore.
	* pan/text.c: sync calls to fill_body().
	* pan/message-window.c: sync calls to fill_body().

	* pan/util-wrap.c (get_paragraphs): Fixed a couple of wrapping bugs.
	Thanks to Adam Warner for reporting these bugs.

	* pan/util-wrap.c (wrap_regression_tests): Added regression test
	module to shake out bugs reported by Adam Warner.
	* pan/pan.c (main): call wrap_regression_tests if user starts pan
	with the --regression-tests command line argument.

2001-03-12  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/grouplist.c (grouplist_set_server): fixed bug that caused
	old groups to not be cleared out of the grouplist.  Thanks to
	"cyberczar" for reporting this bug.

	* pan/grouplist.c: added GStaticMutex around all the code that
	manipulates the gtkclist.  This keeps the grouplist from getting
	double entries even if you hit the "subscribed" button while the
	"show all groups" task is running.

	* pan/server.c (server_init): Fixed bug that bit first-time users
	when the news server they entered on startup had a name beginning
	with a letter > f: server_init selected the folders server as the
	'current' server, which should never happen.

	(Window Sizes)

	* pan/gui.c (gui_restore_window_size): new utility for remembering
	how big a user wants a window to be, such as the task manager or the
	message composer window.  Thanks to Garry Knight for suggesting this.
	* pan/gui.c (gui_save_window_size): same.
	* pan/message-window.c: use the save/restore window size.
	* pan/task-manager.c: same.
	* pan/dialogs/dialog-log-viewer.c: same.

	(Toggle Thread View On/Off)

	* pan/gui.c: added a keyboard shortcut to turning the thread view
	on/off.  Thanks to Jacob Ils? Christensen for suggesting this.

	(Housekeeping)

	* configure.in: bumped version number to 0.9.6_cvs.

2001-03-12  Charles Kerr <charles@rebelbase.com>

	Pan 0.9.5 Released!

2001-03-11  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/file-headers.c (file_headers_destroy): Fix to work even if
	the group passed in is a folder.  Thanks to Garry Knight for
	reporting this bug.

	* pan/grouplist.c (grouplist_set_server): Fix bug that kept the
	folders from being listed in the grouplist when you started up
	Pan with 'folders' selected as the grouplist mode.

	* pan/grouplist.c: added callback to notify clients when the
	grouplist's server changed.
	* pan/gui.c: when the grouplist's server changes, update the
	titlebar to reflect the new server name.

2001-03-08  Charles Kerr <charles@rebelbase.com>

	* pan/article.c (article_thread_has_new): removed unused function.
	* pan/article.c (article_set_flag): same.
	* pan/status-item-view.c (status_item_view_new_with_item): same.

2001-03-07  Charles Kerr <charles@rebelbase.com>

	(Bring out yer dead!  Bring out yer dead!)

	* pan/articlelist.c (search_menu): removed unused function.
	* pan/articlelist.c (search_offsite): same.
	* pan/articlelist.c (search_deja): same.
	* pan/util.c (pan_strncmp): same.
	* pan/util.c (array_shrink): same.
	* pan/util.c (pan_g_ptr_array_sort): same.
	* pan/util.c (pan_g_ptr_array_merge_sorted): same.
	* pan/task.c (task_set_socket): same.
	* pan/task.c (task_get_socket): same.
	* pan/task.c (task_is_high_priority): same.
	* pan/task.c (task_needs_socket): same.
	* pan/status-item.c (status_item_next_step_gfunc): same.
	* pan/dialogs/dialog-log-viewer.c: removed dead menu items.

	(Housekeeping)

	* pan/server.c (server_add_groups):  Use a hashtable for comparing
	the new groups against the list of groups we've already got.


2001-03-07  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/articlelist.c (articlelist_refresh): make sure that the
	articles are sorted before we rebuild the ctree nodes.  Thanks
	to Sndor Brny for reporting this bug.

	* pan/file-grouplist.c: log message typo fixed.

	(Housekeeping)

	* pan/article-find.c: commented out this file, because it doesn't
	seem very useful now that we've got filters.  This was written a
	long time ago and I'd be surprised if anyone still uses it.
	Let's release 0.9.5 without it and see if anyone yells.

	* pan/bozo.c: cut out 100 loc by replacing a couple of GPtrArrays
	with GHashTables.

	* pan/article.c (compare_pgchar_pparticle_msgid): moved to text.c,
	which is the only file that uses it.
	* pan/article.h: sync.
	* pan/text.c: sync.
	* pan/gui.c: sync.

	* pan/group.c (group_articles_reffed): removed unused function.
	* pan/group.h: sync.

	* pan/server.c (export_newsrc): log a success or failure status
	message depending on how the export goes.


2001-03-07  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/util-mime.c (uu_is_beginning): correctly handle uuencoded
	'begin' lines where the permissions are preceeded with a 0 to
	signifiy octal notation.  Thanks to Brian Keefer for reporting
	this bug.

	* pan/text.c (add_inline_images_mpfunc): new function to recursively
	drill down and pick up inline images that may grandchildren of the
	top-level.  Previously we only walked through the immediate children.

	* pan/text.c (text_get_message_to_reply_to): If the user selected
	a section of an article body to reply to, but made the selection
	"backwards" i.e. from back to front, Pan didn't use the selection in
	the reply window as it should have.  Thanks to A A Arendsen for
	reporting this bug.
	http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=85216

	* pan/message-window.c (rot13_cb): same.  Make sure we get the right
	selection even if the user selected the text "backwards."

2001-03-06  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/file-headers.c (file_headers_load_group): don't crash when
	we read a corrupt article header.  Instead, throw it away and
	log an error message to let the user know what's happening.  Thanks
	to Fabrizio Ammollo for reporting this bug.

	* pan/nntp.c (nntp_download_bodies): when downloading a group of
	articles and emitting a status saying what article number we're
	on, include the article subject in the status message.

	* pan/articlelist.c (articlelist_set_group_maybe): added a mutex
	to prevent thread A from unreffing the articles being sorted by
	thread B.

	* pan/article.c (article_destructor): zero out more fields to try
	and smoke out dangling pointers.

	* pan/message-window.c (update_body_pane_nolock): Don't append an
	extra \n at the end of the body.  If you rewrap the text a number of
	times then this becomes a lot of empty lines at the end of the
	message.

	* pan/util-wrap.c (get_paragraphs): Rewritten to for easier
	maintainence.  Now breaks grouping of two lines when the top
	line is less than half as long as wrap_column.  Short lines often
	aren't supposed to be wrapped, as in "cheers,\nCharles".  Thanks to
	David Watson for reporting this bug.

	* pan/server.h (Server struct): made the port number a gint, rather
	than a gint16, so that large port numbers will work.  Thanks to Keith
	Miller for reporting this bug.

2001-03-05  Charles Kerr <charles@rebelbase.com>

	* pan/task-body.c: ref the article's group in the constructor,
	and unref it in its destructor.
	* pan/task-bodies.c: same.
	* pan/task-decode.c: same.

2001-03-01  Charles Kerr <charles@rebelbase.com>

	* pan/log.c (log_add_entry): Replace 'g_message(foo)' with
	'g_message ("%s", foo)' in case foo has some formatting information
	like %s in it.  Thanks to rschu@cwnet.com for reporting this bug.
	http://bugzilla.gnome.org/show_bug.cgi?id=51521
	* pan/rule-action.c (rule_action_apply): same.
	* pan/status-item.c (status_item_emit_error): same.

	* pan/nntp.c (nntp_articlelist_download): If the article has
	no subject, add a default subject of _("No Subject").
	* removed "corrupt header skipped - no subject" check.
	* removed "corrupt header skipped - no author" check; we already
	insert a default author (_("Unknown Author")) too..
	* removed "corrupt header skipped - no date" check; having no date
	really isn't serious enough to discard the article.

	* pan/nntp.c (nntp_articlelist_download): renamed as
	nntp_download_headers for consistency with nntp_download_*.

	* pan/article.c (article_destructor): zero out a lot of the string
	fields to help shake down any possible uses of dangling Articles.

	* pan/text.c (set_current_article_idle): fixed non-gtkhtml build bug.
	
2001-02-28  Charles Kerr <charles@rebelbase.com>

	* pan/text.c (set_current_article_idle): if the new article is NULL,
	make sure the header table gets cleared out too.  This means other
	parts of the code don't need to clear the headers out by hand.

	* pan/articlelist.c (article_headers): removed this internal array
	that we had to maintain separate of the group.  Now we defer to the
	group's list when we need a list of articles, which is a little
	cleaner.

	* pan/prefs.c (prefs_init): no longer add "X-No-Productlinks: Yes"
	as the default extra header.  Deja is dead now so it's not necessary.

	* pan/group.c (group_add_articles): articles being added did not
	have their group field set to the group which they were being to.
	Good grief!

	* pan/articlelist.c (articlelist_articles_read_changed): don't
	add an idle func to update the thread view if the articles
	whose read state is changed don't belong in the thread view's
	group.

	* pan/grouplist.c (grouplist_update_groups): don't add an idle
	func to update the grouplist if the groups being updated
	don't belong to the grouplist's visible server.

	* pan/message-send.c: added debug_{enter|exit} logging to these
	functions.

2001-02-27  Charles Kerr <charles@rebelbase.com>

	* pan/gui.c (update_menus_idle): remove the sensitivity command
	for the "rename" menu button; there's no such menu button anymore.
	(Rename got moved to the properties dialog.)  Thanks to Craig
	Maloney, Lance Simmons, and A V Flinsch for noticing this.

	* pan/articlelist.c (get_column_1_pixmap): put the article-is-read
	check before the article-is-new check.  Thanks to German Gomez
	Garcia for reporting this bug.

	* pan/articlelist.c (get_column_2_pixmap): the 'article saved'
	icon takes priority over the 'article cached locally' icon.

	* pan/acache.c (acache_file_checkout): this function now takes an
	array of message_ids, rather than just one, for effeciency's sake.
	* pan/acache.c (acache_file_checkin): ditto.

	* configure.in: bump version to 0.9.5_cvs.

	* pan/nntp.c (nntp_article_download): if the article download fails,
	log an error to the application log.

	* gmime/gmime-utils.c (get_time): lenient parsing of times posted
	with no seconds.  Dave Hill reports that Ameol software puts dates
	in with hh:mm but no seconds and mailed in a patch to let these
	be parsed right.

	* pan/acache.c (acache_expire_to_size): Wrap this function in a
	mutex to prevent two threads from expiring the cache at the same
	time.

	* gmime/gmime-content-type.c (g_mime_content_type_get_parameter):
	remove small glib warning.

	* pan/article-toolbar.c (article_toolar_get_filter): return a copy
	of the string, rather than the original string pointer.  It's possible
	that if the string changes the client could be left holding a pointer
	to a free string.
	* pan/articlelist.c (add_nodes): sync.

	* pan/text.c (welcome): Fixed copyright typo in the text view.

	* pan/dialogs/rules_callbacks: fixed #include problems that caused
	Pan to be hard to build from separate directories.  Thanks to
	Igor Khavkine for reporting this problem.

	* pan/articlelist.c (get_article_pixmap): removed unused function.

2001-02-26  Charles Kerr <charles@rebelbase.com>

	Pan 0.9.4 Released!

2001-02-24  Charles Kerr <charles@rebelbase.com>

	(Tweaks)

	* pan/debug.c (debug_printf): added depth notation to the trace
	mechanism.

	(Bug Fixes)

	* pan/articlelist.c (articlelist_article_to_folder): fixed
	free-memory-twice bug.  Thanks to Markus Kalb for reporting this.

	* pan/acache.c (acache_file_checkout): fixed bad format string bug.

	* pan/grouplist.c (grouplist_filter_changed_cb): remove annoying
	refresh bug.

	* pan/text.c (set_current_article): fixed timing problem that
	caused the current group's article refcount to not get saved
	on shutdown under certain circumstances.  d'oh!

	* pan/text.c (alloc_this_font_and_squeal_like_a_pig):
	new utility function to force htmlgdkpainter to use the font that
	the user selected in the Pan prefs page.  There is probably a better
	way to do this without using GConf to force Pan's font prefs on
	the rest of the system but it's not immediately obvious to me.
	<rant>why the fuck is gtkhtml tied to capplet lib anyway?</rant>

	* pan/sockets.c: all log_add() messages wrapped in _() for i18n.

	* pan/gui.c (gui_refresh_connection_label_idle): new function to work
	around the bug reported by Matt yesterday.

2001-02-23  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/text.c (get_default_font_stats): fixed crashing bug that
	occurred when default_font was NULL.  Thanks to Noah Robin for
	reporting this bug.

2001-02-22  Tov Are Jacobsen  <tovj@rebelbase.com>

	* pan/articlelist.c (column_to_title): No translation of blankspace.

2001-02-21  Charles Kerr <charles@rebelbase.com>

	(Thread Icons & Filters)

	* pan/article_toolbar: added cached/not cached filter; removed
	thread-toggling button.

	* pan/articlelist.c: plugged in the icons for the first two columns
	of the article thread tree.

	(Tweaks)

	* pan/text.c (make_safe_for_html): speed/memory tweaks.

	* pan/log.c: use string and memory chunks for the log entries.

2001-02-20  Charles Kerr <charles@rebelbase.com>

	* pan/acache.c:  Even more cleanup.  The tables have been consolidated
	into one container to waste less space and to reuse code.

	* pan/log.h: renamed the severity enumerations to be less verbose.
	* pan/*c: sync.

2001-02-19  Charles Kerr <charles@rebelbase.com>

	* pan/acache.c:  More cleanup.  We now keep a hash of all the
	files in the cache for faster message-id lookup.

	* pan/text.c: removed some debugging statements.

	* pan/gui.c: added a button to raise the log window.  This button
	has an 'information' icon which will changed to an error icon when
	errors are logged.

2001-02-17  Charles Kerr <charles@rebelbase.com>

	(Header Display)

	* pan/gui-headers.c: when a header is truncated, its tooltip now
	shows the full header.  Thanks to Manoel Henrique Galhardo de Abreu
	for suggesting this change.

	(Acache)

	* pan/acache.c (acache_clear_tmp): removed this function because
	acache doesn't use tmp files anymore.

	* pan/acache.c (acache_init): calculate how big the article cache
	is, so that we'll know -- correctly, for a change -- when we're
	starting to hit the cache limit and need to purge out old articles.
	* pan/acache.c (acache_set_message): increment the acache size
	counter appropriately.
	* pan/acache.c (acache_expire_to_size): decrement the acache size
	counter appropriately.

	* pan/acache.c: added signals that the rest of Pan can listen to for
	knowing when articles have been added to or removed from the local
	cache.  This is so the thread view can give an icon to show which
	articles are stored locally.

	* pan/articlelist.c: first cut at plugging in the first two columns
	in the thread view.  Before you complain -- this is just a placeholer,
	there will actually be icons (and buttons in the filter bar to match
	them, and those will have tooltips) instead of obscure single-character
	placeholders.

2001-02-16  Charles Kerr <charles@rebelbase.com>

	(Log)

	* pan/sockets.c (read_from_socket): log socket errors.

	* pan/dialogs/dialog-log-viewer: more cleanup.

2001-02-16  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/nntp.c (nntp_handshake): fix tov's typo.

	* pan/gui.c (turn_off_status_item_views): new function to disable the
	progress bars at the bottom of the main window during shutdown.
	Thanks to Sven Neuhaus for reporting this bug.

	* pan/decode.c (create_big_article): if articles have that annoying
	'cut here' messages, make sure we trim around them.  Thanks to
	Sndor Brny for reporting this bug.

	* pan/articlelist.c (articlelist_article_to_folder): make sure that this
	runs in its own task so that if we need to we can download the bodies
	of the articles that we're copying to the folder.

	(Purge Less Frequently)

	* pan/acache.c (acache_checkin): only clear out older articles when we
	start to fill out the cache instead of every after every half-meg is
	checked in.

	(Logging)

	* pan/log.c: completely rewritten to fit Pan's signals model and to
	separate the UI from the log model.  This also opens the door for
	having a spot in the UI to notify the user when an error's occurred,
	and to pop open the log viewer for more info.

	* pan/dialogs/dialog-log-viwer.c: sync.  This needs a little more work.

2001-02-16  Tov Are Jacobsen  <tovj@rebelbase.com>

	* pan/nntp.c (nntp_handshake):  We need to succeed no errors
	has occured. 

2001-02-15  Charles Kerr <charles@rebelbase.com>

	* pan/decode.c (decode_article): only block on big decodes; let
	the small ones go through.  Thanks to acmay@linuxpowered.org
	for suggesting this & providing a patch.

	* pan/nntp.c (nntp_handshake): only try to authenticate if the
	user has the "server needs authentication" button checked.
	Thanks to Markus Kalb for reporting this bug.

	* pan/smtp.c (smtp_handshake): handle the case where >1 "220"
	line comes from the server during the handshake.  Thanks to
	Adrian Miranda for reporting this bug.

	* pan/text.c (text_get_message_to_reply_to): fix NULL pointer bug
	that occurred when following-up to an zero-line post.  Thanks to
	A V Flinsch for reporting this bug.

2001-02-15  Tov Are Jacobsen  <tovj@rebelbase.com>

	* pan.spec.in (Requires): Removed docdir so that docs install in
	default location.

	* pan/nntp.c (nntp_disconnect): A server is not required to
	accept any authentication volunteered by the client.

2001-02-14  Charles Kerr <charles@rebelbase.com>

	(Clickable URLs)

	* pan/util.c (linkify_text): new function that takes an article
	body and wraps its urls in hrefs so that they'll be clickable.

	* pan/util.c (find_url): utility function used by linkify_text.
	This function was originally in slrn, which is GPLed and written
       	by John Davis <davis@space.mit.edu>.

	(Be more forgiving of anonymous posters)

	* pan/article.c (article_set_author_from_header): if we absolutely
	can't parse the user's email address, use
	_("unknown@spammesenseless.com") as a default.  If we absolutely
	can't parse the real name, use _("Unknown") as a default.  Previously
	Pan discarded articles whose From: headers it couldn't parse.

2001-02-13  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/nntp.c (nntp_download_article): If the task failed, don't
	save the incomplete article to the acache.  This can corrupt
	downloads.  Thanks to Ronny Haryanto for reporting this bug.

	* pan/article.c (find_matching_sent_article): small bug fix.

	(Cruft)

	* pan/group.c (compare_particle_pparticle_msgid): removed unused func.
	* pan/group.c (compare_pparticle_pparticle_msgid): same.

	* pan/debug.c: removed DEBUG_DB field.
	* pan/debug.h: same.
	* pan/pan.c: same.

2001-02-13  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/text.c: fixed Pan 0.9.2 object refcount bug.

	(Task Bodies)

	* pan/group.c (group_download_all_articles): fix memory corruption
	error: the group's array was being deleted by the task_bodies task.

	* pan/task-bodies.c (task_bodies_new): make a copy of the array
	passed in and let the caller free the original array themselves.
	* pan/articlelist.c: sync.
	* pan/rule-action.c: sync.

	(group_get_articles)

	* pan/group.c (Group::_articles): this private field is now a hash
	table instead of a pointer array, which speeds up, and clears up code
	for the most common group_* article tasks: adding and removing.
	It also makes the two next bug fixes trivial:

	* pan/group.c (group_add_articles): If there are duplicate
	articles being passed in the "add these" list, only take one.

	* pan/group.c (group_remove_articles):  If there are duplicate
	articles being removed in the "remove these" list,  only take
	one.


2001-02-13  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/pan.c (main): patch for people linking against a version of
	gtkhtml that uses GConf.  Thanks to Thomas Zajic for supplying
	this patch.

	* pan/nntp.c (nntp_handshake): call nntp_authenticate right
	off the bat.  Yes we still perform authentication on demand
	as the spec says, but it appears that up-front makes some
	servers happier, such as whether or not changing to members-only
	groups is allowed.  Thanks to Sbastien Delestaing for reporting
	this problem.

	* pan/text.c (welcome): There were some spaces between words missing
	from the html version of the welcome message; oops.

	* pan/decode.c (create_filename): use g_strescape instead of
	walking through the string by hand and replacing suspect
	characters.  Thanks to Jed S. Baer and Aluminum Foil Ball
	for reporting problems with the previous code.

	* pan/gmime.c (gmime_part_get_filename): fix small glib warning.

	* pan/queue.c (queue_run_what_we_can): fixed small shutdown
	hashtable g_warning.

	(Save State)

	* pan/gui.c (save_state): by request, a feature to save the current
	state of Pan.  This works the same as exiting Pan & restarting.
	Apparently some people would rather be able to use Pan _now_ than
	wait until all the bugs have been worked out. :)

	(Text Wrapping)

	* pan/prefs.c (prefs_init): Now we default to having article
	text wrapping turned off.

	(Date Format)

	* pan/prefs.c: added thread_date_format and body_date_format, which
	are format strings passed to strftime when formatting text.  This is
	so that users can configure their own date format.
	* pan/articlelist.c: sync.
	* pan/gui-headers.c: sync.
	* pan/text.c: sync.

	(Bottlenecks)

	* pan/articlelist.c (articlelist_article_read_changed): changed to
	articlelist_articles_read_changed, so that a group of articles can
	be batched up and sent to this function all at once.
	* pan/article.c (articles_mark_read): sync.
	* pan/article.c (article_set_read_impl): sync.
	* pan/article.c (article_set_unread_impl): sync.

	* pan/articlelist.c (remove_article_nolock): be being a little less
	dumb about the way we find nodes that need reparenting.
	* pan/articlelist.c (group_articles_removed_cb): be a little less
	dumb about the way remove articles from the article_headers array.

	(Copyrights)

	* pan/*[ch]: Updated the copyright notices to reflect the year 2001.


2001-02-13  Tov Are Jacobsen  <tovj@rebelbase.com>

	* pan/text.c (set_text_from_article): Teporarily commented out the
	<font> setting because it doesn't work quite right yet.

	* pan/articlelist.c (search_menu): Deja to google.
	(search_deja): Changed URL to new Google URL.

2001-02-13  Tov Are Jacobsen  <tovj@rebelbase.com>

	* pan/dialogs/rules_interface.c (create_rule_edit_dialog): Removed
	translation req. for label21

2001-02-13  Tov Are Jacobsen  <tovj@rebelbase.com>

	* pan/gui-paned.c (gui_paned_construct): Reused hpane parameter
	for second vertical component in Layout No. 5

	* pan/gui.c (gui_shutdown): Added layoutaware layout persistence.

2001-02-11  Jeffrey Stedfast  <fejj@ximian.com>

	* pan/util-mime.c (find_uu_content): Fixed a logic error when
	finding the end of a block of UUencoded data. We don't want to
	include the 'end' line as the uudecoder is not expecting this.

	(GMime)

	* gmime/gmime-part.c: #include unistd.h
	(g_mime_part_to_string): Oops. Don't init content_md5 with the
	content location string ;-)

	* gmime/gmime-parser.c (g_mime_parser_construct_part): Init
	content to NULL to get rid of a warning (this doesn't really
	matter as 'len' was init'd to 0)

2001-02-09  Gediminas Paulauskas <menesis@delfi.lt>

	* TODO: removed my TODO entry, as I have added history to
	newsrc import/export dialogs long ago.

2001-02-08  Charles Kerr <charles@rebelbase.com>

	(New Feature: Break a thread when the subject changes)

	* pan/article-thread.c (thread_articles): added code to optionally
	break the threading of followups when the subject line changes.
	Thanks to Belinda Schramm for suggesting this feature.

	* pan/prefs.c: enabled the code to let the user turn this feature
	on or off.

	(Tweak)

	* pan/article-toolbar.c: when the article filter entry field loses
	focus, update the filter.   Previously it only updated when the user
	hit "enter".  Thanks to Jeff Lightfoot <jeffml@pobox.com> for
	suggesting this feature.

	* pan/grouplist.c: ditto for the group filter.

2001-02-07  Charles Kerr <charles@rebelbase.com>

	* pan/gui-headers.c: applied patch from James Amundson that keeps
	the text window from growing too large when there is a long
	header being displayed.

2001-02-06  Charles Kerr <charles@rebelbase.com>

	* configure.in: bumped version to 0.9.4_cvs

	(Idle Funcs)

	* pan/articlelist.c (articlelist_update_node_idle): new func.
	* pan/articlelist.c (articlelist_update_node): now delegates its
	work to articlelist_update_node_idle.

	* pan/articlelist.c (articlelist_article_read_changed_idle): new func.
	* pan/articlelist.c (articlelist_article_read_changed): now delegates
	its work to articlelist_article_read_changed_idle.

	* pan/grouplist.c (grouplist_update_groups_idle): new func.
	* pan/grouplist.c (grouplist_update_groups): now delegates its
	work to grouplist_update_groups_idle.

	(Group)

	* pan/group.h (Group struct): rearranged bits to try to save a
	little space.

	* pan/group.c (group_set_string_field): handle NULL strings more
	gracefully.

	* pan/group.c (group_remove_articles): use a temporary buffer to
	hold the list of articles that we're removing.  Previously we were
	sorting the array passed in instead of a temporary.

	(Group Rename)

	* pan/dialogs/dialog-group-props.c: added "Name" for renaming a group.
	* pan/grouplist.c (grouplist_selected_rename): removed unused func.
	* pan/grouplist.c (grouplist_selected_rename_cb): same.
	* pan/gui.c (group menu): removed "Rename" option.

2001-02-05  Charles Kerr <charles@rebelbase.com>

	* pan/text.c (text_set_raw_idle): handle NULL pointers more
	gracefully.  Thanks to Christophe Lambin for reporting this bug.

	* pan/dialog/dialog-about.c: fixed unterminated string.  Thank to
	Sven Neuhaus for reporting this bug.

	* pan/decode.c (get_array_of_decodable_parts_func):  Include text
	attachments for saving if they've specified a filename.  Previously
	.sfv files weren't getting saved because of this omission.  Thanks to
	Ronny Haryanto for reporting this bug.

	* configure.in: bump gtkhtml requirement to 0.8.2

2001-02-03  Charles Kerr <charles@rebelbase.com>

	* pan/decode.c (create_filename): one-liner bug fix.  Pan was
	always using the subject header rather than thet uu encoding's
	specified filename.

2001-02-01  Charles Kerr <charles@rebelbase.com>

	* pan/decode.c (create_filename): replace funny characters
	(such as ones that might indicate a subdirectory) from the
	filename before prepending the path.

	* pan/file-headers.c (file_headers_load_group): emit a
	"loading group" status message before we open the data files.

	* pan/file-headers.c (file_headers_save_group): use a separate
	hash table for different items so that lookups should be faster.
	Also, use a hash table to cache References: so that >1 followup
	to the same message will get to share that string.

	* pan/gui-headers.c: small glib correctness (int->gint, etc.)

	* pan/dialogs/pan-about.c (pan_about_construct): fix mem corruption.

2001-02-01  Charles Kerr <charles@rebelbase.com>

	(PanAbout)

	* pan/dialogs/pan-about.[ch]: new reusable GnomeDialog subclass that
	behaves somewhat like the KAboutData class. This is nice because I can
	put the thank-yous and the license in the about window.

2001-01-31  Charles Kerr <charles@rebelbase.com>

	(Small bug fixes)

	* pan/decode.c (create_filename): when creating a filename from
	the article's subject, strip out verboten characters that could
	cause the file to not be created.

	* pan/decode.c (create_filename): check to make sure that the GMime
	part has a filename available before copying it to the GString.
	This avoids a glib warning.

2001-01-30  Charles Kerr <charles@rebelbase.com>

	(Tov's Bug Reports)

	* pan/acache.c (acache_clean_tmp): fail gracefully if the tmp directory
	doesn't exist.

	* pan/servers.c (server_add_new_server): new function for startup.
	* pan/dialogs/dialog-newuser.c (druid_finish): sync.

	* pan/prefs.c (edit_profile_dialog_clicked): fixed small memory leak.

2001-01-29  Charles Kerr <charles@rebelbase.com>

	(Text cleanup -- now instead of terrifyingly bad it's merely awful)

	* pan/text.c: push some of the gui update routines into idle functions;
	merge some redundant code.

	(Idle func fixes)

	* pan/text.c: in idle functions, make sure to call
	pan_lock_unconditional() before doing any UI work.
	* pan/gui.c: same.

	(GMime)

	* gmime/gmime-part.c (g_mime_part_set_content_byte_array): new function
	That works more smoothly than last weel's _set_content_array.  Thanks
	Jeffrey...
	* pan/util-mime.c (look_for_uuencoded_data): sync.

2001-01-28  Charles Kerr <charles@rebelbase.com>

	* pan/text.c (text_set): added text_set_idle() to work around an
	Xlib async error.

2001-01-27  Charles Kerr <charles@rebelbase.com>

	* pan/smtp.c (smtp_get_connection): Fixed crash that occurred when
	Pan was unable to open a connection to the mail server.

	* pan/sockets.c: yet even more work done on them.  We're back where
	we started from now, using select() before writing to or reading from
	the server.  Handles disconnects nicely.  The code isn't really much
	different from two days ago, but it's been a "learning experience" :P

	* pan/file-headers.c (file_headers_save_group): put the References:
	string in the cache.  If more than one article replies to the same
	article, their References: will be the same, so reusing that string
	will save memory & disk space.

	* pan/decode.c (create_big_article): remove debugging code.

2001-01-26  Charles Kerr <charles@rebelbase.com>

	* pan/update_menus_cb: added a gtk idle function to eliminate an
	async Xlib error that I was getting under Mandrake.

	* pan/gui_set_title: same.

	* pan/status-item-view.c: removed unused 'activity' code.
	* pan/status-item.c: same.

	* pan/text.c (text_page_down_or_next_article): fixed bug where space
	reading wouldn't skip to the next article after the first one was read
	if no vertical scrollbar was visible.

2001-01-26  Charles Kerr <charles@rebelbase.com>

	(Network Code Reworked)

	* pan/sockets.c: use GIOChannel.

	(Code Cleanup)

	* pan/text.c (do_wrap): removed the global 'do_wrap' and replaced it
	with the accessor/mutator text_set_wrap() and text_get_wrap().  This
	fixes a sync bug between View|Wrap and Edit|Preferences|Text|Wrap.

	* pan/text.c (mute_quoted_text): code cleanup.  It now mirrors the
	style of the new wrap code.

	* pan/text.c (show_all_headers_in_body): same.

	* gmime/gmime-part.c (g_mime_part_set_content_array): new function.

	* ChangeLog/NEWS: replaced my old email address with a working one.

2001-01-25  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* gmime/gmime-part.c (g_mime_part_destroy): small memory leak plugged.

	(Behavior Tweak)

	* pan/articlelist.c (article_passes_filter): Added patch from Jeff
	Lightfoot that filters out read articles when only the 'new' filter is
	turned on.

	(Eye Candy)

	* pan/gui.c (gui_set_connecting_flag): added a little "connecting"
	state so that the left bottom corner will say "connecting" instead of
	"offline" while Pan's trying to make a net connection.

	(Code cleanup)

	* pan/grouplist.c (select_row_cb): use gtk_idle_add instead of the
	wierd new-thread-using-usleep thing we had been using.

	* pan/articlelist.c (select_row_cb): same.

2001-01-24  Charles Kerr <charles@rebelbase.com>

	(Getting "Save Attachments" to work with MIME again)

	* pan/decode.c: rewrite with Mime in mind, including a multipart mime
	post.  The scheme is to now merge all the bodies into one big article
	which is fed into pan_g_mime_parse_message() for decoding.  This takes
	up space but works with [single,multiparts] x [uuencodes,mime].

	* pan/util-mime.c: removed unused functions that were obsoleted by the
	decode rewrite.

2001-01-23  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes - Recipient Unknown)

	* pan/smtp.c: applied patch from Tov that fixes Jan's recipient
	unknown problem.

	* pan/gnksa.c (gnksa_check_message_id): loosen up the domain checking
	of Message-IDs in a Reference: header -- even if the domains aren't
	syntactically valid, stripping them is a bad idea because they're
	still used for threading.  Thanks to Jim Henderson for reporting this
	bug.

2001-01-18  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/util-mime.c: added length arguments to the functions that
	walk through the message's parts, as they might not be zero-terminated
	and so we have to be careful to not treat them like strings.

	* gmime/*: updated snapshot -- gmime had the same walk-past-the-end
	errors until they were reported yesterday.

	* pan/util-wrap.c (mute_quoted_text_in_body): memory leak fixed:
	the line GString wasn't being g_string_free()d.

2001-01-17  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/sockets.c (socket_destructor): memory leak fixed:
	nntp_username and nntp_password weren't being g_free()d.

	* pan/decode.c (decode_article): memory leak fixed: the filename
	temporary variable wasn't being g_free()d.

2001-01-13  Charles Kerr <charles@rebelbase.com>

	* pan/message-check.c (check_body): only run the "Make sure it's not
	all quoted text" check if the message is being posted to usenet.
	If it's only going out in mail then the check isn't necessary, such
	as when a user forwards a usenet post to so someone via email.
	Thanks to John LeMay and Ben Elliston for reporting this bug.

2001-01-08  Charles Kerr <charles@rebelbase.com>

	* pan/task-headers.c (task_headers_run): fix bug that kept Pan from
	downloading headers from groups that had exactly one article in them.

	* pan/text.c (text_set_body_from_article): when inventing new cid's
	for messages that don't have them, add the article's message-id to the
	cid so that each message's cid is unique.  gtkhtml appears to be
	caching images. :)

	* pan/text.c (text_set_body_from_article): can now show an attached
	image even if the article body is empty.

	* pan/grouplist.c (grouplist_add_group_nolock): go ahead and prepend
	the group instead of appending it, because it saves time in GtkCList's
	implementation.  I've done this before and apparently undid it at some
	point because I'm stupid.

2001-01-07  Charles Kerr <charles@rebelbase.com>

	(Making date display consistent)

	* pan/util.c (get_date_display_string): new function that gets the
	user-visible formatting of a date.  This uses the user preference
	on whether to display an article date in local time or UTC.  Thanks 
	to Christophe Lambin for suggesting this.
	* pan/articlelist.c (add_article_to_ctree_nolock): sync.
	* pan/text.c (set_text_from_article): sync.
	* pan/gui-headers.c (gui_headers_set): sync.

	(Grouplist not updating when adding a folder)

	* pan/grouplist.c (grouplist_get_visible_server): returns the
	folder server if 'folders' is selected in the optionmenu, or the
	actual nntp server otherwise.
	* pan/grouplist.c (grouplist_update_ui): compare the server argument
	against grouplist_get_visible_server() before deciding whether or not
	to update the clist.  This is needed because folders are a special
	case that have a dummy server that need not be selected for servers to
	be visible.
	* pan/server.c (server_add_groups): unconditionally call
	grouplist_update_ui; see above.  Thanks to Gediminas Paulauskas for
	reporting the folderlist-not-updating-when-adding-new-folder bug.

2001-01-06  Charles Kerr <charles@rebelbase.com>

	(Success/Failure cleanup)

	* pan/status-item.c (status_item_emit_status_va): downgraded the entry
	check "status!=NULL" from a g_assert() to a g_return_if_fail().
	* pan/status-item.c (status_item_emit_status): same.
	* pan/status-item.c (status_item_emit_error_va): same.
	* pan/status-item.c (status_item_emit_error): same.

	* pan/nntp.c (nntp_noop): cleaned up entry sanity checks.
	* pan/nntp.c (nntp_disconnect): same.
	* pan/nntp.c (nntp_authenticate): same.
	* pan/nntp.c (nntp_can_post): same.
	* pan/nntp.c (nntp_set_group): same.
	* pan/nntp.c (nntp_set_group): same.
	* pan/nntp.c (nntp_post): same.
	* pan/nntp.c (nntp_get_group_info): same.
	* pan/nntp.c (set_header_if_match): same.

2001-01-04  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/util-mime.c (uu_decode_body): wasn't skipping leading whitespace
	before decoding, causing multiparts to miss huge chunks.  Multipart
	decoding seems to work right now, at least to my ears.

	* pan/decode.c (decode_article): on success, make sure that the
	article's ARTICLE_DECODED flag gets set to true.  This got broken when
	we switched from uulib to gmime.

2001-01-04  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/text.c (group_articles_removed_cb): make sure to get a gui
	lock before updating the text widget.  Thanks to Christophe for
	reporting this bug.

	* pan/article.c (article_set_from_raw_message): handle empty article
	bodies without crashing.

	* pan/text.c (set_text_from_article): the gtktext version of this
	function crashed when there was an attachment without a filename.

	(Code cleanup)

	* pan/file_rules.c (file_rules_exists): removed unused function.

	(GUI)

	* pan/text.c (set_text_from_article): the html view now obeys the
	user's preferences for what font to use when reading articles.

	* pan/text.c (get_default_font_stats): new utility function for
	parsing the font name/size out of the X font string.  Used by
	set_text_from_article, see above.

	(Rules)

	* pan/rule-manager.c (rule_manager_module_init): add two new
	canned rules: "Delete Bozos" and "Delete Old Articles".  The ability
	for Pan to do the latter is frequently requested by people who haven't
	delved into the Rule tool, so here is is.

2001-01-02  Charles Kerr <charles@rebelbase.com>

	(Bug Fix)

	* pan/server.c (server_add_groups): fixed serious bug where additions
	made to the group list weren't kept unless the server was currently
	being displayed by the grouplist.  This caused the folders pan.sent
	and pan.sendlater to not get saved properly the first time through and
	lots of other side-effects.

	(UI Tweak)

	* pan/text.c (set_text_from_article): put a linefeed between the
	headers and the article body if the user has "Show All Headers"
	turned on.

	(NNTP Compliance)

	* pan/nntp.c (nntp_command): new convenience function for executing a
	command to an NNTP server.  It handles checking for socket failure on
	read/write & cuts client socket code LOC in half.  It also provides
	user authentication to the server if a command's reply is an NNTP 480
	error.  This allows Pan to authenticate on demand -- as is specified
	in the NNTP rfc's -- instead of on connection, as previous versions of
	Pan did.  A couple of someones finally submitted bug reports that the
	older scheme didn't work on their servers.

	* pan/nntp.c (nntp_command_va): new convenience function: vararg
	version of nntp_command.

	(Code Cleanup)

	* pan/status-item.c (status_item_emit_error_va): new function for
	emitting variable-argument status errors.
	* pan/status-item.c (status_item_emit_status_va): new function for
	emitting variable-argument status reports.

	(Images)

	* pan/util-mime.c (pan_g_mime_parser_construct_message): check for
	content transfer encoding of x-uuencode, which Hogwasher uses for
	top-level image parts.

2000-12-31  Charles Kerr <charles@rebelbase.com>

        (Bug: displaying NNTP error messages)
	 
	* pan/task-body.c (task_body_run): changed call from
	update_message_window() to text_set(), which works correctly whether
	the Pan.text widget is gtktext or gtkhtml.

	* pan/text.c: make text_set() public.
					 
	(Wart: folders not being loaded before GUI looks for selection)
	 
	* pan/server.c (server_init_servers): new internal function that
	ensures that the server list & folders have are loaded before
	they are needed.  Previously the gui module had asked for
	Pan.sendlater before it had been loaded.             

2000-12-29  Matt Eagleson <matt@rebelbase.com>
	
	* pan/server.c (server_add_groups): only update the grouplist
	UI after a grouplist download if that server is still the active
	server

2000-12-29  Charles Kerr <charles@rebelbase.com>

	* pan/text.c (text_set_maybe_lock): finished implementing this for the
	text-only mode.  Deleting the current article now once again blanks out
	the text view, and starting up pan shows the welcome message.

2000-12-28  Charles Kerr <charles@rebelbase.com>

	* pan/decode.c (decode_article): more safety checking before calling
	strstr() so that we don't pass NULL in as an argument.  Thanks to
	David Chambers for reporting this bug.
	
	* pan/decode.c (decode_article): more sanity checking at the beginning
	of this function.

2000-12-28  Matt Eagleson <matt@rebelbase.com>

	* pan/dialogs/dialog-headers.c (dialog_download_headers): Default
	to "Download All Headers" on an empty group, rather than "New".
	* pan/decode.c (decode_article): Added a directory_check for dd->path.
	* pan/decode.c (decode_article): Added some error checking.  Also
	check to make sure the fopen succeeds.  These two changes cleared
	up some segfaults I was having.
	* pan/util-mime.c (uu_decode_body): This function now returns a
	char pointer.  NULL on success, otherwise a malloc'ed error
	message.
	
2000-12-27  Charles Kerr <charles@rebelbase.com>

	* pan/gui.c (gui_add_status_item): This code was too brittle because
	there are times when we want a status item to not be displayed.
	Moreover, making clients invoke this function by hand couples clients
	to the gui module.  So this has been replaced with a new function,
	status_item_set_active(), which fires an event that the gui module
	can listen to and add/remove status items when appropriate.  Thanks to
	Ken Geis for reporting the bug that led to this code.
	* pan/gui.c (gui_remove_status_item): same.
	* pan/status-item.c (status_item_set_active): same.

2000-12-26  Charles Kerr <charles@rebelbase.com>

	(Bug Fix)

	* pan/gui.c (gui_shutdown): remember to unregister from the gui update
	callbacks before destroying the widgetry.  That way we won't have a
	race condition of Pan trying to update widgets that are being
	destroyed.  Thanks to Christophe Lambin for reporting this bug.

	(UI Tweak)

	* pan/status-item-view.c (status_item_view_constructor): let the child
	progressbar grow with the status-item-view container so that it'll be
	flush with other widgets in a parent container.

2000-12-24  Charles Kerr <charles@rebelbase.com>

	(Replying to messages)

	* pan/text.c (text_get_message_to_reply_to): new function that finds
	the selected text of the view window and massages it into shape.  This
	function has been added to encapsulate the code differences between
	html mode and text mode.

	(Inline Images)

	* pan/util-mime.c (look_for_uuencoded_data): in the new GMimePart,
	set its content-disposition to inline to ensure that it's shown in
	the article view.

	* pan/text.c (text_set_body_from_article): walk through the subparts
	looking for subparts with a content-disposition of "inline".  Display
	the inlined subparts of type image.
      
	* pan/text.c (text_set_body_from_article): if a subpart we want to
	show was created without a cid, create a temporary one for it so
	that it can be used as the URL for the img src="cid" callback.

	(Bug Fixes)

	* pan/text.c (set_text): this was causing a double-gui-mutex-lock
	in zoomed mode.  Thanks to Tov for reporting this bug.

2000-12-23  Charles Kerr <charles@rebelbase.com>

	(Inline Images)

	* pan/util-mime.[ch]: new module that acts as a wraper around some of
	GMime's stuff.  In partiucular it handles finding and decoding
	uuencoded data, so that articles with uuencoded image attachments
	can be viewed.

	* pan/text.c: sync.

	* gmime/gmime-parser.c: revert back to the canonical version of GMime.

	(Saving Decoded Articles)

	* pan/decode.c:  Pan no longer uses uulib!  A re-implementation of the
	decode module removes the ties to uulib and instead use's gmime's
	uudecoder utility, which is speedier and has a smaller footprint.

	* pan/Makefile.am: sync.

2000-12-21  Charles Kerr <charles@rebelbase.com>

	(Progress)

	* pan/gui.c: another approach for having status items that don't
	cause continual flicker.  We create a handful of progressbars and
	never remove them, thus keeping the parent widgets from resizing
	when we add new/remove old items.

	* pan/status-item-view.c (status_item_view_set_item): clear out the
	progressbar when the item being set is NULL.

	(Bug Fixes)

	* pan/prefs.c (prefs_init): fix bug that misread the external_mailer
	user preferences option.  Thanks to Garry Knight for reporting this
	bug.

	* pan/group.c (group_new): chunk our own copy of the group's name
	instead of keeping the strin pointer passed in by the caller.  This
	fixes memory problems reported by Jan Schaumann on importing newsrc
	files.

	* pan/file-grouplist.c (file_grouplist_save): don't let the permissions
	be a '\0' character, because that causes parsing errors.  Instead save
	with a '?' for unset permissions.  This should fix the grouplist
	save problems reported by Jan Schaumann and others.

	* pan/file-grouplist.c (grouplist_read): sync.

2000-12-19  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/group.c (group_constructor): fixed small UMR bug - the permissions
	field wasn't being zeroed out when a new group was constructed.

2000-12-17  Charles Kerr <charles@rebelbase.com>

	(References)

	* pan/group.c (group_get_article_from_message_id): resurrected this
	function so that we can test to see if a given message-id is in a
	group.

	* pan/articlelist.c (messageid_to_node): use a string compare instead
	of a pointer compare, since we now have message-id strings coming from
	the URLs being clicked.

	* pan/articlelist.c (articlelist_view_message_id): new function for
	the References: hrefs.

	* pan/text.c (set_text_from_article): fixed up the References: line in
	the HTML display.  It now selects the threads correctly or leaves it
	blank if there's no References: string.

2000-12-16  Charles Kerr <charles@rebelbase.com>

	(Supersede / Cancel)

	* pan/article.c (find_matching_sent_article):  Looks in Pan.sent for
	an article matching the one passed in.  It compares based on subject,
	author address, and body -- comparing based on message-id is
	unreliable because servers often change the message-id.
	* pan/article.c (article_supersede): sync.
	* pan/article.c (article_cancel): sync.

	(GMime)

	* pan/article.c (article_set_from_raw_message): GMime 0.3 (in
	yesterday's updated snapshot) stores the message-id explicitly,
	so we have to extract it by hand now from the GMimeMessage.

	(Bug Fixes)

	* pan/group.c (group_add_articles): yes, this function again. :(
	The problem this time is that the 'changed' flag wasn't always
	being set to true when it should've been, so clients weren't
	sent events to notify them about added articles.

2000-12-15  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/message-send.c (send_article_now): nasty bug fixed: do_mail and
	do_send variables were being reversed, so if user was doing both but
	one failed, the wrong one would retry.

	* pan/nntp.c (nntp_post): error message typo fix

2000-12-14  Charles Kerr <charles@rebelbase.com>

	(HTML mode should be co-existing with the text mode now)

	* configure.in: added "--enable-html" check.  Now to build with html
	support this flag must be passed to the autogen or configure script.

	* gmime/*:  updated snapshot to gmime 0.3

	* pan/text.c: updated so that both text mode and html mode work
	without breaking each other.

	* pan/util-wrap.c: this module is growing to hold other generic message
	massaging utilities.  Moved rot13() and mute_quoted_text_in_body() to
	this module.
	* pan/text.c: sync.
	* pan/message-window.c: sync.

2000-12-14  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/file-headers.c: what was I thinking on the seventh when I made
	these integers!?
	* pan/file-grouplist.c: same.
	
2000-12-12  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/util.c (directory_check): Fixed BSW caused by off-by-one error.
	Thanks to Purify for finding this error.  I hope Rational makes a
	Linux version of Purify someday.

	* pan/acache.c (acache_file_in_use): Fixed the cache bug that's been
	haunting multi-connection users for the week.

	* pan/message-check.c (check_body): There was an entry test
	g_return_if_fail (body!=NULL), which wasn't good for one of
	our checks, check_empty().  Ooops. :)  Thanks to Adam Bailey
	for reporting this bug.

	* pan/message-window.c (populate_post_info_pane): a quoted signature
	string caused the rest of the message to be cut.  Only unquoted
	signatures should cause this.  Thanks to Adam Bailey for reporting
	this bug.

	* pan/article.c (article_supersede): load the article from the local
	article cache, so that any extra headers not typically stored by Pan
	will be present in the supersede window.

	(Portability(!))

	* pan/decode.c: use G_DIR_SEPARATOR instead of '/' for portability.
	* pan/prefs.c: same.
	* pan/util.c: same.

	(Utility)

	* pan/util.c (pan_normalize_filename): New utility function that strips
	the double slashes out of a pathname so that two paths can be reliably
	compared with strcmp.

2000-12-11  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/articlelist.c (articles_removed_cb): removed very serious
	memory corruption error.

	(group_add_articles)

	* pan/group.c (group_add_articles_remove_unused): new convenience
	wrapper around group_add_articles() that deletes the articles that
	don't get used, and removes them from the incoming article array.
	This fixes a pan-crashing bug in applying rules to incoming articles.

	* pan/group.c (group_add_articles): it's clear that we may want to do
	different things with the articles that get added or that the group
	decides not to add, so this function has two new optional GPtrArray
	arguments that, if non-NULL, will be populated with the used and
	ignored articles.  This makes group_add_articles() harder to use so
	it becomes more of an internal function to be called by others like
	group_add_articles_remove_unused().

2000-12-10  Charles Kerr <charles@rebelbase.com>

	(User Interface)

	* pan/prefs.c: the cache size is now set in megs, rather than in
	bytes, which was myopic.

	(Util)

	* pan/util.c (string_ends_with): small utility function that was
	in acache, now made public.

	* pan/util.c (pan_stristr): new utility function.

	(GNKSA)

	* pan/smtp.c (smtp_send_article): if the article has a References:
	string, include it as a header.  Thanks to Adam Bailey for suggesting
	this.

	* pan/message-window.c (menu): changed "Fill Text" to "Rewrap", which
	is clearer.  Thanks to Adam Bailey for suggesting this.

	* pan/article.c (article_supersede): a bug made it such that the
	body from the original message wasn't displayed.  Thanks to Adam Bailey
	for reporting this bug.

2000-12-08  Charles Kerr <charles@rebelbase.com>

	(Layout)

	* pan/gui.c: A little more work on the bottom toolbar.  It now gives
	tasks: running/total, and connections: N @ KBps, where the latter
	updates once per second.

	(Transfer Rates)

	* pan/sockets.h (pan_socket_get_total_xfer_KB): new function used by
	the new toolbar.
	* pan/task-manager.c: changed the terminology around to use KBps,
	where kb/s was incorrectly used before.
	* pan/sockets.c: same.

	(Speed Tweaks)

	* pan/server.c (server_add_groups): doubled the speed of this function
	by sorting the incoming list and doing a sorted-list-merge, just like
	group_add_articles() does.

	* pan/article-thread.c (normalize_article): small speed wins.
	* pan/file-grouplist.c (file_grouplist_save): same.
	* pan/file-grouplist.c (file_grouplist_load): same.
	* pan/file-headers.c (file_headers_save): same.
	* pan/file-headers.c (file_headers_load): same.

	(Code cleanup)

	* pan/gnksa.c: avoid some g_warnings.
	* pan/pan-object.c (pan_object_new): removed unused function.
	* pan/task-grouplist.c (task_grouplist_run): removed debugging printf.

	(Bug Fixes)

	* pan/prefs.c: fix memory trashing bug I introduced yesterday.

	* pan/sockets.c: fix read-would-block error.

2000-12-07  Charles Kerr <charles@rebelbase.com>

	(Layout)

	* pan/prefs.c: completed implementation of customizable window layout.
	* pan/gui-paned.c: same.

	* pan/gui.c: Started work on cleaning up the toolbar to cause less
	X traffic.  adding/removing all the progressbars caused a lot of
	flicker.

	(Bottleneck Removal - thanks, Quantify)

	* pan/article-thread.c (normalize_subject): cut the average time for
	this function in half.

	* pan/articlelist.c (add_article_to_ctree_nolock): removed unnecessary
	(and expensive) call to strftime -- since we only need four fields,
	do the printf'ing ourselves straight from the struct tm.

	* pan/file-grouplist.c (file_grouplist_load): use ints, rather than
	longs, as indices into the grouplist.

	* pan/file-headers.c (file_headers_load): same.

2000-12-06  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/gui.c (update_menu_cb): the group menu items were insensitive
	even when there was a group selected in the group list.  Thanks to
	Steven Lusk for reporting this bug.

	(Keyboard Navigation)

	* pan/message-window.c (post_menu): Adopted the Gravity keyboard
	shortcuts of ctrl-return for 'send now' and ctrl-d for 'send later'

	(Layout)

	* pan/prefs.c (prefs_layout_page): beginnings of an Agent/Gravity-like
	layout configuration tool.
	* pan/xpm/layout_1.xpm: same.
	* pan/xpm/layout_2.xpm: same.
	* pan/xpm/layout_3.xpm: same.
	* pan/xpm/layout_4.xpm: same.
	* pan/xpm/layout_5.xpm: same.

2000-12-05  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/task-body.c (task_body_run): This function was calling
	acache_file_checkin twice instead of once, which corrupted the
	file reference counting.

	* pan/task-body.c (task_body_run): If the user hit `abort' at just
	the right time, an article checked out by task-body wasn't checked in
	as it should have been.

	(More Acache)

	* pan/acache.c: finished applying the $data_dir -> $data_dir/cache/
	changes and made the reference counting such that the .msg filename
	is used as the key, rather than a munged message_id.

	* pan/acache.c (acache_get_tmp_filename): handle a NULL message_id
	argument better.  As far as I know this isn't necessary but it doesn't
	hurt either.

2000-12-05  Charles Kerr <charles@rebelbase.com>

	(Acache)

	* pan/acache.c (acache_get_filename): changed the filename of the
	locally cached messages such that the '<' and '>' characters don't
	appear in them.  These characters were causing problems on filesystems
	which couldn't create files containing a '<' such as vfat.  Thanks to
	Arjan Drieman for reporting this bug.

	* pan/acache.c (acache_get_filename): cached messages are now stored
	in $data_dir/cache/ instead of just $data_dir.  This keeps $data_dir
	cleaner.

2000-12-05  Charles Kerr <charles@rebelbase.com>

	(Moderated and Read-Only Newsgroups)

	* pan/group.h: (Group): added new field 'permission' which corresponds
	to the group permissions given in the NNTP "LIST" command: 'y' means
	posting is allowed, 'n' means the group is read-only, and 'm' means
	that the group is moderated.

	* pan/grouplist.c (grouplist_add_group_nolock): append " (Moderated)"
	to moderated groups, " (Read-Only)" to read-only groups.

	* pan/group.c (group_is_moderated): new utility function.

	* pan/server.c (server_add_groups): even if we already have the group,
	check to see if the permissions flag has changed since the last time.

	* pan/task-grouplist.c (task_grouplist_run): parse the permission
	field out of the output of the NNTP "LIST" command.

	* pan/file-grouplist.c (file_grouplist_save): bumped the grouplist
	file format version to 2 and added a permission field.

	* pan/file-grouplist.c (file_grouplist_load): added compatability
	for file format version 2 grouplists.  For type 1 lists, we assume
	a permission value of 'y' for the group; this is a reasonable default.

	* pan/message-check.c (check_groups): added new warnings for read-only
	groups ("WARNING: Group %s is read-only") and moderated ("INFORMATION:
	please be aware that messages posted to foo won't appear until approved
	by the group's moderator.").


	(skip_next_token)

	* pan/util.c (skip_next_token): new utility function.
	* pan/util.c (get_next_token_int): now uses skip_next_token internally.
	* pan/util.c (get_next_token_long): same.
	* pan/util.c (get_next_token_ulong): same.
	* pan/nntp.c (nntp_articlelist_download): very small code cleanup: this
	function now uses skip_next_token where appropriate.


2000-12-05  Charles Kerr <charles@rebelbase.com>

	(Help)

	* pan/gui.c (feedback_cb): added a simple "Send Feedback" button onto
	the help menu.  This pops up a new email message to pan@superpimp.org
	in message-window.
	* pan/gui.c (help_menu): sync.

	* pan/gui.c (help_menu): Added an "Online Users' Manual" button that
	leads the user to our currently-empty User's Manual.

	(Bug Fixes)

	* pan/task_headers.c (real_task_headers_new): don't create a new task
	if the group whose new headers we're being asked to fetch is actually
	a folder.  Thanks to Dave Hill for reporting this bug.

	(Code Cleanup)

	* pan/acache.c (acache_get_filename): handle NULL message-ids more
	gracefully.
	* pan/util.c (file_exists): handle NULL filename strings more
	gracefully.

2000-12-04  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/article.c (article_get_attribution_string): '%d' was acting as
	a '%i' in the code because of a typo.  Thanks to Leo Papandreou for
	reporting this bug.

	* pan/task-decode.c (task_decode_destructor): Plug memory leak: the
	articles GSList wasn't being free'd.

	(Tweaks)

	* pan/group.c (group_add_articles): rewrote about half of this function
	from scratch so that it will scale better for large numbers of groups.

	* pan/util.c (lower_bound): added "register" keyword to loop variables.

	* pan/util.c (pan_strcmp): removed unnecessary comparison.

	* pan/article-thread.c (normalize_subject): same.

	* pan/acache.c (acache_delete): removed an unnecessary call to
	g_file_exists().

	(Code Cleanup)

	* pan/task-decode.c (task_decode_destructor): On destructor, turn off
	the DECODE_QUEUED flags for the articles in this task.  Thanks to
	Francesco Lamonica for reporting this bug.
	* pan/task-decode.c (task_decode_constructor): set the DECODE_QUEUED
	flag in the task_decode constructor.  Previously the invokers of this
	function had done this by hand because just because of the way the code
	has mutated over time.
	* pan/articlelist.c (articlelist_selected_decode_impl): sync.
	* pan/save.c (save_attachment_as_dialog_clicked_cb): sync.

2000-12-03  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/prefs.c: committed Dave Hill's patch that fixes the selection
	of the message body font in the preferences dialog.

2000-12-01  Charles Kerr <charles@rebelbase.com>

	(Tweaks)

	* pan/text.c (text_update): move some of the entry assertions to the
	very top of the function where they belong.

	* pan/file-headers.c (file_headers_save_group): smaller data files.

2000-11-29  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/article.c (article_set_from_raw_message): added backwards
	compatability to 0.9.2's incorrect use of "Author:" instead of "From:"
	when archiving messages in folders.  Thanks to Jan Schaumann for
	reporting this bug.

	* pan/article.c (article_get_headers): memory leak fixed.

	* pan/file-headers.c (file_headers_load_folder): set the group dirty
	flag to false after loading in all the articles.  The act of loading
	the articles sets it to true.

	(Tweaks)

	* pan/articlelist.c (articlelist_update_node): small speedup: don't
	bother bsearching through the article nodes for a match if the
	article's group doesn't match the articlelist's group.

2000-11-21  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/acache.c (acache_file_checkin): memory leak fixed.

	* pan/nntp.c (nntp_article_download): same.

	(Download New Headers on Group Load)

	* pan/prefs.h (fetch_new_on_group_load): new preferences variable
	to specify whether or not to download new headers when loading a
	group.
	* pan/articlelist.c (articlelist_set_group_maybe): sync.
	* pan/prefs.c: sync.

2000-11-20  Charles Kerr <charles@rebelbase.com>

	* pan/sockets.c (pan_socket_getline): removed the use of select();
	each transaction is in its own thread, we don't care if it blocks or
	not.  This change seems to speed up downloading nicely.

	* pan/acache.c (acache_get_existing_filename): removed unused func.
	* pan/gui.c (dialog_draw_centered): same.

2000-11-18  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/article.c (article_get_message): memory leak fixed.

	(API Tweak)

	* pan/article.c (article_set_header_pair): renamed article_set_header.

	(Adding mbox support for folders)

	* pan/article.c (article_set_from_raw_message): new function to
	scan in a new message and parse it into an Article object.

	* pan/file-headers.c (file_headers_load_folder): now uses
	article_set_from_raw_message.  Importing mbox files works now.

2000-11-17  Charles Kerr <charles@rebelbase.com>

	* configure.in: bumped version number to 0.9.3_cvs

	(Speedups)

	* pan/articlelist.c (articlelist_repopulate): freeze/thaw the
	msgid-to-CTreeNode* hashtable in the appropriate places.

	* pan/thread-watch.c (thread_init_module): same.

	(Adding mbox support for folders)

	* pan/file-headers.c (file_headers_exists): removed unused func.

	* pan/file-headers.c (file_headers_load_group): moved the bits of
	loading .idx/.dat files out of file_headers_load to this new function.

	* pan/file-headers.c (file_headers_load_folder): new function for
	loading archived articles from mboxes.

	* pan/file-headers.c (file_headers_load): now delegates all its work
	out to file_headers_load_group and file_headers_load_folder.

	* pan/file-headers.c (file_headers_save_group): moved the bits of
	saving .idx/.dat files out of file_headers_save to this new function.

	* pan/file-headers.c (file_headers_save_folder): new function for
	saving folders as mbox files.

	* pan/file-headers.c (file_headers_save): now delegates all its work
	out to file_headers_save_group and file_headers_save_folder.

	* pan/util.c (mbox_get_next_message): utility for converting a message
	to mbox format.

	* pan/util.c (mbox_format_message): new utility for converting a
	message from mbox format.
	
2000-11-16  Charles Kerr <charles@rebelbase.com>
	
	(Bug Fixes)

	* pan/nntp.c (nntp_articlelist_download): fixed crash that occurred
	when the date string is missing from the article header information.

	* pan/util.c (get_default_author_address): fix small glib warning.

	* pan/file-grouplist.c (file_grouplist_load): fix small glib warning.

	* pan/task-headers.c (task_headers_run): fix small glib warning.

	* pan/server.c (server_folders_load): fix small memory leak incurred
	by first-time users.

2000-11-16  Gediminas Paulauskas <menesis@delfi.lt>

	* pan/article-find.c: Marked "Case Sensitive" for translation.
	* pan/rule-criteria.c: a comment for translators.

2000-11-15  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/group.c (group_mark_all_read): small bug fix: don't reload
	the articlelist unless the group being caught up matches the
	articlelist's group.

	* pan/group.c (group_remove_articles): fix bug from yesterday's commit

	(Cancel / Supersede)

	* pan/article.c (article_set_header_pair): replaced a_s_h_p_chunk with
	this; this function has an Action argument to let the function do the
	chunking instead of forcing the client to always do it.

	* pan/article.c (article_was_posted_here): new function to check and
	see if an article was posted here, so that we'll know if we can cancel
	or supersede it.  We check the author address, and then if that fails,
	we look for the message-id in the pan.sent folder.

	* pan/article.c (article_supersede): first cut at this implementation.

	* pan/util.c (get_default_author_address): gets the default email
	address to be used in a new message.  Also used by
	article_was_posted_here() when comparing email addresses.

	* pan/gui.c (post_menu): added gui hooks for cancelling/superseding
	posts written by the user.

	* pan/group.c (group_article_index): new function that returns the
	index of an article with the specified message-id in the group's
	article array.

	* pan/util.c (get_default_author_from): gets the default value for
	a From: header in a new message.

	* pan/message-window.c (populate_post_info_pane): use
	get_default_author_from instead of building the string by hand.

2000-11-14  Charles Kerr <charles@rebelbase.com>

	(Cancel/Supersede)

	* pan/nntp.c (nntp_cancel): first cut at cancelling articles.
	* pan/article.c (article_cancel): same.
	* pan/articlelist.c (articlelist_selected_cancel): same.

	* pan/article.c (article_supersede): stub for superseding articles.	
	* pan/articlelist.c (articlelist_selected_supersede): same.

	(Bug Fixes)

	* pan/article.c (article_get_headers): this function never added the
	Newsgroups: header to the batch due to a coding glitch.

	* pan/message-send.c: reworked the internals of this module so that
	the Newsgroups: and Pan-Mail-To: headers are kept for future reference
	even after posting/mailing is done.

	(Speedups)

	* pan/group.c (group_remove_articles): this function now works much
	faster for large numbers of articles being removed.  In 0.9.1 this
	function was a big performance hit when expiring old articles.

2000-11-13  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/nntp.c (nntp_article_download): fixed very large memory leak
	that I introduced into CVS last week.  Thanks to Lou Sortman for
	reporting this bug.

	* pan/gnksa.c (gnksa_split_from): fixed a bug that incorrectly parsed
	old-style email addresses.  Thanks to robert at freeserve for reporting
	this bug.

	(Queue Tinkering)

	* pan/queue.c (queue_shutdown): new function that adds a SHUTDOWN item
	in the todo queue.  When shutdown is run the queue's internal memory
	is cleared out and sockets are closed.  This is where saving tasks on
	Pan shutdown will be added in the future

2000-11-12  Charles Kerr <charles@rebelbase.com>

	(Small cleanups)

	* configure.in: look for the header errno.h, so that uulib will
	be able to include it properly.  This fixes a build problem reported
	by Peter Abrahamsen.

	* pan/message-window.c (message_post_window): removed the unused
	Article argument from the argument list.

	* pan/group.c: check to see if the array is zero-sized before passing
	its contents into grouplist_update_groups.  This avoids a small glib
	warning reported by John LeMay.
	* pan/grouplist.c: same.

2000-11-11  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/prefs.c: editing fields in the server popup dialog now enables
	the "ok" button.  A recent CVS commit broke this.  Thanks for Jan
	Schaumann and Jim Henderson for both reporting this bug.

	* pan/prefs.c: squashed a gtk warning.  Thanks for Jim Henderson for
	reporting this bug.

2000-11-07  Charles Kerr <charles@rebelbase.com>

	(Bundling a GMime snapshot)

	* pan/gmime: new directory.
	* configure.in: updated for gmime.
	* Makefile.am: added gmime to the list of subdirectories.

	(gui_popup_draw)

	* pan/group.c: replaced gui_popup_draw with gnome_dialog_set_parent
	* pan/grouplist.c: same.
	* pan/article-find.c: same.
	* pan/message-window.c: same.
	* pan/prefs.c: same.
	* pan/print.c: same.
	* pan/save.c: same.
	* pan/server.c: same.
	* pan/rule-action.c: same.
	* pan/dialogs/bozo-callbacks.c: same.
	* pan/dialogs/dialog-about.c: same.
	* pan/dialogs/dialog-group-props.c: same.
	* pan/dialogs/dialog-headers.c: same.

	(Cleanup)

	* pan/article.c (decode_quoted_printable): removed unused func.
	* pan/prefs.c (header_selection_changed): same.
	* pan/prefs.c (edit_profile_changed): same.
	* pan/gui.c (gui_popup_draw): same.

2000-11-06  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/newsrc.c (newsrc_get_read_str): bug fix: the wrong string was
	being generated if the group had never had an article read, yet the
	newsrc had been initialized.

	* pan/group.c (group_catchup_task_run): make sure that the newsrc
	object knows what we've got planned, so that the marked read
	articles will stay marked read.  Thanks to Aaron Digulla for
	reporting this bug.

	* pan/text.c (realize_text_cb): removed unnecessary initial call
	to gui_headers_set_default().  This appears to have been causing
	a gui lockup on startup.  Thanks to Robert at freeserve for
	helping track this problem down.

	* pan/util.c (pan_unlock): tracked down main-thread-double-lock
	bug.  Thanks to Christophe Lambin for helping track this problem
	down.

	* pan/message-send.c (build_nntp_header): the Path header was
	incorrectly listing the local machine as a newsserver.  Thanks to
	Rune Kristian Viken for reporting this bug.

	* pan/articlelist.c: the unread color wasn't being shown properly
	for read articles.  Thanks to Jeff and Jan for reporting this bug.

	* pan/articlelist.c: the 'unread' count column was off-by-one in
	rows where the article for that row was read.

	(New Features)

	* pan/articlelist.c: new features: "mark entire thread read" and
	"mark entire thread unread"

	* pan/dialogs/rules.glade: added "apply rule to subscribed groups"
	button.

	(Speedups)

	* pan/acache.c: only flush out the cache after each half-meg that
	we check in to the article cache, rather than after every checkin.
	We check in an article every time we read it.

2000-11-02  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/message-window.c (make_reply_string): handle NULL strings
	passed in more gracefully.  Thanks to J at hushmail.com for reporting
	this bug.

	* pan/rule-critera.c (rule_criteria_test_article): pattern matching
	on authors' names were not working right.  Thanks to Jim Henderson
	for reporting this bug.

	(Usability Tweaks)

	* pan/dialogs/rules.glade: on the "use regular expression" checkbutton
	in the rule editor, added tooltip http://www.linux-learn.org/regexp.tut
	for regular expression newbies.

2000-11-01  Charles Kerr <charles@rebelbase.com>

	(Usability Tweaks)

	* pan/prefs.c: large reorganization that groups UI interface pieces
	by what part of the UI -- group list, threads, or article body --
	the options affect.

	(Bug Fixes)

	* pan/articlelist.c (find_next_thread):  Fixed bug that made
	"Skip to next thread" not work.  Thanks to Ilja Booij for reporting
	this bug.

	* pan/articlelist.c (add_article_to_ctree_nolock): fixed line count
	display error.

2000-10-31  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/gui.c (update_menus): when the article ctree is set to NULL,
	make sure that the group name in the titlebar gets cleared out
	appropriately.

	* pan/article.c (article_get_headers): the version of this that
	I checked in yesterday had a bug in misassigning the return value.

	* pan/nntp.c (nntp_article_download): small fix: \n wasn't being
	stripped out of the extra headers before we made a copy for keeping.

	* pan/gui.c: the "Online/Offline settings" menu button was incorrectly
	being greyed out.  Thanks to Robert at freeserve for reporting
	this bug.

	(Usability Tweaks)

	* pan/nntp.c: the "Read/write failed during socket no-op" error
	messages were apparently too opaque, so the error messages are
	more self-explanatory now.

	* pan/message-window.c: when forwarding a message via email,
	prepend the subject header with the group to which the article
	was posted.

	* pan/articlelist.c: made the default column widths for the
	article tree a little more usable.

2000-10-30  Charles Kerr <charles@rebelbase.com>

	(Acache Changes)

	* pan/acache.c: merged the head/body into a single file ending with
	".msg".  Decode does work with this.  This is partially to reduce the
	number of files in ~/.pan/data, but mostly because it'll be easier to
	work with GMime this way.
	* pan/nntp.c (nntp_article_download): sync.
	* pan/decode.c (decode_article): sync.

	* pan/article.c (article_get_headers): new func.  This is used so
	that save/print can get the entire message, including the extra
	headers.
	* pan/article.c (article_get_message): new func.  Convenience
	function that wraps article_get_body() and article_get_headers().

	(Code Cleanup)

	* pan/article.c (article_set_encoding_chunk): remove unused func.
	* pan/article.c (article_set_reply_to_chunk): same.
	* pan/article.c (article_set_newsgroups_chunk): same.
	* pan/article.c (article_set_followup_to_chunk): same.

2000-10-29  Charles Kerr <charles@rebelbase.com>

	* pan/task-grouplist.c (task_grouplist_run): fixed serious bug
	with adding the new groups to the server.  This bug was added
	during last week's grouplist cleanup.

	* pan/articlelist.c: a different approach to select-vs-activate:
	in single-click mode, mouse button 1 activates and mouse button 2
	selects.

2000-10-27  Charles Kerr <charles@rebelbase.com>

	* pan/util.c (fill_body): speedups.

	* pan/message-send.c: added 8bit encoding of headers.

	* pan/smtp.c: same.

	* pan/message-window.c: commented out the "lines per post"
	code for attachments, since attachments also are commented
	out right now.

2000-10-26  Charles Kerr <charles@rebelbase.com>

	(UI Behavior Fixes)

	* pan/articlelist.c: when harvesting binaries it's often useful
	to have a quick way to disable single-click activation.  Holding
	down the shift or control key now temporarily disables single-click
	activation.

	* pan/grouplist.c: same.

2000-10-26  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/rule.c (rule_destructor): leak plugged:  g_free the strings
	of the groups in the group_list array.  Thanks to Purify for finding
	this bug.

	(New Feature)

	* _finally_ handle mime-encoded headers properly.  We do this through
	the use of libgmime, which is available from the gnome cvs tree.
	(Maybe this should be built in with Pan iff not found on the system?)

2000-10-25  Charles Kerr <charles@rebelbase.com>

	(UI Behavior Fixes)

	* pan/articlelist.c: because of the single-click-selection ->
	activation coding, Shift-N _still_ downloaded the binaries even
	when it wasn't supposed to.  Thanks to Jan Schaumann for reporting
	this bug.

	* pan/group.c: group_catchup now takes an array of groups, so
	that the UI progressbar/grouplist updates can all be batched
	together, instead of one per group.

	(New feature: display article date in local time)

	* pan/prefs.c: added preference to let article posting dates be
	displayed in local time, rather than UTC, in the article tree.
	Thanks to Steve Cox for suggesting this feature.

	(Code cleanup)

	* pan/grouplist.c: more code reorganization to put related pieces
	together.

2000-10-25  Charles Kerr <charles@rebelbase.com>

	(UI Behavior Fixes)

	* pan/gui.c (menus): by request from the pan-users mailing
	list, reversed the Shift-Key and Key navigation buttons
	so that the more common functions wouldn't need the Shift key.

	* pan/grouplist.c: some long and nasty (but well commented)
	hackage to get the desired selection/activation behavior.
	* pan/articlelist.c: same.

2000-10-24  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/gui.c: removed the `space reading' menu option, since it
	was causing the space reading callback to be called twice.

	(Code cleanup)

	* pan/server.c (server_add_group): replaced this function with a
	new function, server_add_groups(), which does the same thing but
	more efficiently for >1 groups.

	* pan/grouplist.c (grouplist_update_row): replaced this function
	with grouplist_update_groups(), which does the same thing but more
	efficiently for >1 groups.

2000-10-23  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/prefs.c: added gdk_fontset_load back in, as it's apparently
	preferred after gdk_font_load in some situations.  Thanks to GNOME
	translator Gediminas Paulauskas for suggesting this.

	* pan/articlelist.c (create_articlelist_ctree): ensure that the
	colors are allocated for the watched and ignored threads.

	* pan/articlelist.c (articlelist_set_node_style_nolock): fix font
	refcount bug -- it wasn't being reffed each time it was added to
	a new style.

	* pan/article.h (Article): 'part' and 'parts' fields were gint8s,
	but this wasn't big enough to hold really big multipart post
	information.  Thanks to gpb@gpb.seanet.com for reporting this bug.
	* pan/file-headers.c: sync.

	(UI Tweak)

	* pan/articlelist.c: The line count column in the article list
	wasn't resizable, which was a problem for binary groups where
	the # of lines could be in the 7 digit range.  Thanks to Rick Cosby
	for suggesting this.

       	* pan/prefs.c (mail server page): made the port number entry a
	spinbutton instead of a gtk entry. 

	(Config)

	* uulib (Makefile.am): added -DPROTOTYPES to the CFLAGS variable
	to shut up the compiler warnings

2000-10-22  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/rule-manager.c (rule_manager_shutdown_module): fixed small
	memory leak.

	* pan/dialogs/rules_callbacks.c (on_rule_edit_dialog_clicked):
	fixed small memory leak that occurred when a user cancelled the
	creation of a new rule.

	* pan/file-grouplist.c (file_grouplist_save): the sort style was being
	saved as an unsigned number, rather than a signed as it should have
	been.  This caused user sort preferences to not be saved.  Thanks to
	Jonathan Itzhaky for reporting this bug.

	* pan/articlelist.c (build_article_ctree_recursive_nolock): add nodes
	in reverse order so that we can take advantage of the sibling node
	properly.  Also be careful about when we update the sibling node.
	Thanks to Ken Geis for reporting this bug.
	* pan/articlelist.c (add_nodes): same.

	* pan/dialogs/rules_callbacks.c (on_rule_edit_dialog_clicked): add
	a test in to make sure the user did add a rule criteria to the
	criteria list.  This is a common gotcha, yet I can't find a way to
	make the gotcha impossible in the UI, so I've added a check + error
	dialog instead.  Thanks to skeldof for leading me to this gotcha.

	(New Feature: Rot13 Selected Text in Composer)

	* pan/message-window.c (rot13_cb): added new feature "Rot13 Selected
	Text" feature & menu button in the message composer window.  Thanks
	to Xander D Harkness for requesting this feature.

2000-10-21  Charles Kerr <charles@rebelbase.com>

	(Prefs Cleanup)

	* pan/prefs.c: removed the "fill on send"; it's no longer needed
	because 0.9.0 has line wrap in the composer.

	* pan/prefs.c: cleaned up the color/font pane a great deal, shaving
	~300 lines of code out of prefs.c

	* pan/prefs.c: removed `use gdk_fontset_load' option; the i18n gurus
	say that one should always use gdk_fontset_load, so Pan will always
	use gdk_fontset_load and therefore doesn't need this switch.

2000-10-21  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/knews-parse.c: added this new date parser and threw away the
	old date parser, which was returning dates from 1978.  Thanks to
	Christophe Lambin, Steve Cox, Wendell, Lisa, and V Pascal Nelson
	(so far) for reporting this bug.

	* pan/util.c (rfc822_date_generate): the timezone offset was always
	positive, even when it should have been negative.  The new date
	regression test ferreted this out, but surprisingly nobody reported
	this bug.

	* pan/articlelist.c (tree_toggle_focus_row_cb): this is a hack to
	get space reading to work even when the article tree has focus.
	Space reading now seems to work correctly.

	* pan/articlelist.c (tree populating): do the entire population
	inside a gui lock and only unlock to fire status-item events.
	This speeds up the articlelist population time.

	* pan/message-window.c: reading messages in their own window now
	works properly.  Thanks for Steven Ellis for reporting this bug.

	(New Feature: Single-click group loading)

	* pan/prefs.c: add support for optional single-click group loading.
	* pan/articlelist.c: sync.
	* pan/grouplist.c: sync.

	(Regression Tests)

	* pan/util.c (regression_test_result): new utility for reporting the
	results of a regression test.
	* pan/util.c (regression_test_result_va): same, vararg version.
	* pan/util.c (regression_tests_summary): new function that reports the
	number of successes & failures passed through regression_test_result*.

	* pan/util.c (util_regression_tests): new function to run regression
	tests on the util functions.  Currently it does a date parsing check
	to help ensure that the 1978 bug doesn't come back.

	* pan/gnksa.c (gnksa_regression_tests): use the new
	regression_test_result* functions.

	(Misc)

	* configure.in: bumped version number to 0.9.2-cvs

2000-10-20  Charles Kerr <charles@rebelbase.com>

	Pan 0.9.1 Released.

2000-10-17  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/rule-manager.c (apply_rules_to_incoming_articles): only invoke
	rules whose ``apply to incoming articles'' flag is set.  Thanks to
	cav and Jim Henderson for reporting this bug.

	* pan/article.c (article_decode_header): small bugfix in the
	quoted-printable decoding:  the check for the "quoted-printable"
	string should have been case insensitive.  Thanks to Jan Schauman
	for reporting this bug.

	* pan/message-window.c (create_reply_window):  Crash when selecting
	text of one article, then reading a second article (but not selecting
	text), and then hitting follow-up.  The gtktext widget's 'selected'
	flag is incorrectly still true after the text update between messages
	one and two.  Thanks to Jeroen Bron for reporting this bug.

2000-10-17  Robert Brady  <rwb197@zepler.org>

	* configure.in: Added en_GB to ALL_LINGUAS.

2000-10-16  Tov are Jacobsen <tovj@stud.ntnu.no>

	* Robert Brady and Kjartan Maraas did some bug hunting and figured
	out that some problems was due to some bad glibc <-> gtk interaction
	and we need to call gtk_set_locale() in main.c . A lot of the display
	problems are gone now.

2000-10-16  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/rule-criteria.c (rule_criteria_test_article): If an "AND"
	clause has no children, return 'no match' just to be safe.  Thanks
	to Jan Schaumann for reporting this bug.  (Though this is only a
	half-fix; the UI shouldn't allow rules like this to be saved.)

	(libunicode & camel)

	* These are proving to be more trouble than they're worth, mostly
	because they're still in a development stage.  I'm going to punt
	on character encoding temporarily and use slrn's date parser.

2000-10-15  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/group.c (group_add_articles): bugfix: don't unref the group
	articles until after writing them to disk.  I don't know anywhere
	where this condition happened, but it doesn't hurt to have it
	these steps in the right order anyway.

	* pan/queue.c (queue_requeue_failed_tasks): make sure that a task is
	failed before we allow it to be requeued.  Previously you could even
	requeue a task that was already running, resulting in it running
	twice!  Thanks to Mark Hinkle for reporting this bug.
	* pan/task-manager.c (requeue_cb): walk through the selected tasks
	and check their queue state for QUEUE_TASK_STATE_FAILED before
	requeueing them.

	(Tweaks)

	* pan/newsrc.c: rewrote internals.  Newsrc now uses up to 50% less
	memory.  Newsrc objects should take up less space now and be faster
	to create and destroy.

	* pan/bozo.c (bozo_remove): finished the bozo module rewrite by
	implementing the bozo_remove function.

	* pan/group.c (group_remove_articles): small code cleanup.

2000-10-13  Charles Kerr <charles@rebelbase.com>

	(Bug Fixes)

	* pan/newsrc.c (newsrc_mark_all): fixed bug with marking all read.
	"Catch Up" wasn't working properly because of this.

	* pan/dialogs/rules (on_rule_edit_dialog_clicked): fixed bug that
	crashed Pan when a new Rule was saved.

	* pan/message-window.c: fixed crashing bug that occurred when user
	was in a post window and clicked Message->New.

	* pan/articlelist.c (add_article_to_ctree): fixed small bug I
	introduced yesterday, which showed the author name incorrectly.

	* pan/gnksa.c (gnksa_check_author): bad From: headers still fail in
	the state return value, but this function now tries harder to fill
	in the address/real name arguments even if the header's bad.

	* pan/server.c (server_folders_load): pan.sendlater and pan.sent
	were being created with i18n names, rather than the english names.
	Now they're being created with the english names, and the folders'
	'readable name' field is set with the translation.  This way other
	folder lookups can lookup under the constant PAN_SENDLATER without
	having to translate it.  Yuck.

	(Bozos)

	* pan/bozo.c: complete rewrite.  The new bozo code handles cases
	where the user has only the real name, or only the email address,
	of the bozo.  Thanks to Jason Poynting, Kevin D. Knerr, and others
	for reporting on the bozo file weaknesses.

	* pan/dialogs/bozo_callbacks.c: sync.

2000-10-12  Charles Kerr <charles@rebelbase.com>

	(NNTP Improvements)

	* pan/nntp.c (nntp_article_download): use the NNTP ARTICLE command,
	instead of the HEAD and BODY commands.  This means one less round trip
	on the network and cleans up the code too.

	* pan/socket.h: added new field "nntp_group_name" that will remember
	what the current group is.  This way we don't have to have a round
	trip to the server before each command.  
	* pan/nntp.c (nntp_set_group): sync.
	* pan/nntp.c (nntp_get_group_info): sync.

2000-10-12  Charles Kerr <charles@rebelbase.com>

	(Small Tweaks)

	* pan/articlelist.c (add_article_to_ctree): very small speedups.
	* pan/file-grouplist.c (file_grouplist_load): same.

	(Expand/Collapse)

	* pan/gui.c: added "Expand All Threads" menu item.
	* pan/gui.c: added "Collapse All Threads" menu item.
	* pan/articlelist.c (articlelist_expand_all_threads): new function.
	* pan/articlelist.c (articlelist_collapse_all_threads): new function.

2000-10-11  Charles Kerr <charles@rebelbase.com>

	(Bug Damage Control)

	* pan/group.c (compare_particle_pparticle_msgid): warn if either
	message id string is NULL or empty, and use pan_strcmp() instead
	of vanilla strcmp().  Thanks to Vasco Figueira for suggesting this
	patch.

2000-10-12  Gediminas Paulauskas  <menesis@delfi.lt>

	* configure.in: added lt to ALL_LINGUAS.
	* desktop.po: changed lt strings.

2000-10-11  Charles Kerr <charles@rebelbase.com>

	Pan 0.9 Released.

