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-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-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.

