2000-05-09  Charles Kerr <charles@superpimp.org>

	Pan 0.8.0 Released.

2000-05-09  Jason Leach  <leach@wam.umd.edu>

	* pan/Makefile.am (pan_SOURCES): we need globals.h here, otherwise
	it doesn't make it into the tarball and build breaks.

2000-05-09  Charles Kerr <charles@superpimp.org>

	Pan 0.8.0 Beta 8 Released.

2000-05-09  Charles Kerr <charles@superpimp.org>

	* pan.spec.in: dropped the gnome-libs requirement back down to 1.0.16.

	* configure.in: do a test to see what gnome-libs we have; set a
	config.h variable appropriately

	* pan/pan.c (main): ifdeffed the window icon such that this is only
	done if the user has 1.0.60 or better.

2000-05-08  Jason Leach  <leach@wam.umd.edu>

	* pan.spec.in: bumped gnome-libs requirement to 1.0.60 here
	too. fun.

	* configure.in: bumped gnome-libs requirement to 1.0.60 because
	gnome-window-icon requires this.

	* pan/pan.c (main): set our window icon (for the tasklist) via the
	new gnome-window-icon stuff.

2000-05-08  Charles Kerr <charles@superpimp.org>

	(Bug Fix)

	* pan/articlelist.c: (articlelist_get_selected_articles): don't add
	NULL articles to the list.  This happened when the user selected
	the top-level row, which doesn't have an article but rather the
       	groupname.  This bug was causing 'delete all selected + replies'
	to crash Pan when the groupname row was selected.

2000-05-07  Charles Kerr <charles@superpimp.org>

	(Bug Fix)

	* pan/message-send.c (build_nntp_message): the lines in the message
	body should be terminated with CRLF, not LF.  Thanks to John Moreno
	for reporting this bug.

2000-05-07  Andreas Hyden  <a.hyden@cyberpoint.se>

	* configure.in: Changed se to sv in ALL_LINGUAS.

2000-05-07  Matt Eagleson <e.Messiah@superpimp.org>

	* pan/message-window.c (create_post_body_pan): Add an extra insert
	after the blue quoting so the text color gets set back to black for
	the user's input.

2000-05-07  Charles Kerr <charles@superpimp.org>

	(UI Changes)

	* pan/util.[ch] (not_implemented): removed this ugly function.
	* pan/dialogs/dialog-log-viewer.c: commented out 'not_implemented'
	print function.
	* pan/message-window.c (top menu): Commented out 'not implmented'
	use-third-party-editor button.

2000-05-07  Charles Kerr <charles@superpimp.org>

	(Bug Fix: 441 Document Contains no Body, only Headers)

	* pan/message-send.c (build_nntp_message): completely rewritten to
	fix the "411 document contains no body, only headers" bug reported
	by David K. Watson, to fix a small memory leak, and to make the code
	much easier to read & test.

	(Tweaks)

	* pan/util.[ch]: added pan_g_string_replace(), a utility which does
	a search-and-replace inside a GString.

	* pan/message-window.c: use pan_g_string_replace() instead of
	pan_substitute(); it's cleaner.

	* pan/acache.h: formatted the headers to look more like gnome/gtk
	headers, for readability.  Yawn.

2000-05-06  Matt Eagleson <e.Messiah@superpimp.org>

	* pan/acache.c (acache_open_something): We
	know add .tmp to the end of a cache file while
	they are being built so that a sudden shutdown
	won't leave corrupted files eligible for use.
	* pan/acache.c (acache_close_and_relink): New function that
	closes a cache file and removes the .tmp extension.
	* pan/acache.c (acache_close_header): Sync.
	* pan/acache.c (acache_close_body): Sync.
	* pan/nntp.c: Add arguments to acache_close functions.
	* pan/task-decode.c: Same.
	* pan/acache.c (acache_clean_tmp): New function to destroy
	half written files on exit.
	* pan/acache.c (acache_shutdown): New function to handle
	application termination tasks related to acache.
	* pan/pan.c (pan_shutdown): Call acache_shutdown, FlushOnExit
	check moved into acache.c

2000-05-05  Charles Kerr <charles@superpimp.org>

	(Small Speed Tweak)

	* pan/articlelist.c (articlelist_selected_decode_impl):  Prepend to
	the GSList, and then reverse when we're done, instead of always
	appending.  This is faster on long lists.
	* pan/articlelist.c (articlelist_selected_decode_as): same.

	(Small Memory Tweaks)

	* pan/article.h: re-ordered the fields in Article.  This makes
	sizeof(Article) 72 instead of 80 on Sparc and Intel.

	* pan/article.h: made 'number' a gulong instead of a char*.
	* pan/article.c (article_destructor): sync.
	* pan/article.c (article_constructor): sync.
	* pan/article-db.c: sync.
	* pan/task-decode: sync.
	* pan/nntp.c: sync.

	(Housekeeping)

	* Changed my mailing address from charles@skywalker.ecn.ou.edu to
	charles@skywalker.ou.edu.

	* NEWS, CREDITS: fixed tab damage.

2000-05-05  Jason Leach  <leach@wam.umd.edu>

	* configure.in: tweak the version checking, bumping gnome-libs
	requirement to 1.0.55, and check for glib 1.2.7 and gtk 1.2.7
	instead of just glib 1.2.7

	* NEWS: noted the New Russian translation

	* CREDITS: add Valek Filippov <frob@df.ru> for his Russian
	translation contribution.

	* pan.spec.in: bumped gtk+ requirement to 1.2.7

2000-05-05  Valek Filippov  <frob@df.ru>

	* pan/article-toolbar.c, gui.c, message-window.c: Typos fixed.

	* configure.in: Added "ru" to ALL_LINGUAS.
	
2000-05-04  Charles Kerr <charles@superpimp.org>

	* pan/task-headers.c (run_task_headers): fix the progressbar.

	* pan/text.c (text_refresh): be smarter about when we can reload
	the article's body/headers from disk.  This gets rot13 mode working
	again.

	* pan/article.c: removed unused article_chunk.

	* pan/server.c (server_fetch): small memory leak fixed.

	* pan/prefs.c (apply): if the colors for the text window have changed,
	make a new copy of the widget's style before calling
	gtk_widget_set_style().   A different GtkStyle* is necessary to get
	things gtk_widget_set_style_internal() to do its thing.

	* pan/task-grouplist.c (nntp_grouplist_download_all): use
	get_next_token_str() instead of extracting the next token by hand.

	* pan/task-grouplist.c (nntp_grouplist_download_new): same.

2000-05-04  Charles Kerr <charles@superpimp.org>

	(Bug Fix: Delete Article thread race condition)

	* pan/articlelist.c (tree_select_row_cb): ref the selected article
	before we start a new thread to fire the articlelist_selection_changed
	callback.  Otherwise, the article may have been deleted by the time
	we reach the thread.  Thanks to Marvin Pierce for reporting this bug,
	and to Purify helping it to make sense.
	* pan/articlelist.c (tree_select_row_cb_thread): unref the selected
	article that we reffed back in tree_select_row_cb.

	* pan/grouplist.c (grouplist_update_ui_thread): avoid dereferencing
	a NULL pointer here.  Thanks to rpbrown for reporting this bug.

	(Article Functions: Act-on-Selected & Act-on-Selected-and-Replies)

	* pan/article.c (article_get_thread_impl): new function to handle the
	implementation of both article_get_entire_thread() and
	article_get_subthread().
	* pan/article.c (article_get_entire_thread): now just a public wrapper
	around article_get_thread_impl().

	* pan/article.c (article_get_subthread): new function for getting
	a list of an article and its tree of replies.

	* pan/articlelist.c (popup_menu): Re-organize many functions in terms
	of 'act on selected articles' and 'act on selected articles + replies'.
	This lets you delete subtrees of conversations, or mark them read, and
	so forth.  Currently it was the entire thread, or nothing.  Now you
	can download, delete, mark read, and mark unread subtrees.
      
	* pan/gui.c (article_menu): same.

	* pan/articlelist.c (articlelist_get_unique_threads): new utility
	function to get a subthread or entire thread of articles, for use
	by the routines mentioned above.

	* pan/articlelist.c (articlelist_mark_articles): sync.
	* pan/articlelist.c (articlelist_all_mark_read): sync.
	* pan/articlelist.c (articlelist_selected_mark_read): sync.
	* pan/articlelist.c (articlelist_selected_mark_unread): sync.
	* pan/articlelist.c (articlelist_selected_delete_thread): sync.
	* pan/articlelist.c (articlelist_selected_thread_download): sync.

	(Speed Tweaks of Questionable Value)

	* pan/article-thread.c (mp_strcasecmp): very small speed tweaks.
	According to gprof, this helps a very tiny bit during article
	threading.

	* pan/article-thread.c (pp_article_subject_comp): 'register' hints
	to the compiler to try to speed this function up.  This is a hotspot
	during article threading.

	(Misc)

	* pan/pan.c (main): if any debug flags are turned on, start
	the pan session with printing "Pan $VERSION Started", so that
	we can get version numbers in the debug logs.

	* pan/sockets.c (read_from_socket): if errno is set after select()
	fails, use strerror() in the error message given to the user.

	* pan/articlelist.c (popup_menu): Grouped all the 'violent' menu items
	(delete article, delete subthread, add thread to killfile) down near
	the bottom of the menu to make them less likely to be hit by accident.

2000-05-02  Matt Eagleson <e.Messiah@superpimp.org>

	* pan/message-send.c (build_nntp_message): Use \r\n
	between header and body during post, some servers are
	picky about this.

2000-05-02  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fix: Bad parsing of "25 Apr 00")

	* pan/date.c (parse_date): "25 Apr 00 18:07:51 +0500" was being
	parsed as 1905/09/16 12:43, because it's stupid.  Thanks to 
	Jeff Shepherd for reporting this bug.

	(Bug Fix: Date header timezone offset)

	* pan/date.c (generate_date): use difftime() instad of just doing
	a straight subtraction of two time_t's, so that a signed difference
	between two unsigned integer quantities can be made correctly.
	This was screwing up the timezone offset in the Date: string for
	people on the positive side of GMT.  Thanks to Philip Johnson
	for reporting this bug.

	(UI Changes)

	* pan/articlelist.c (articlelist_get_subject): removed the much-
	misunderstood and maligned Re: " feature.

	* pan/task-manager.c (task_manager_spawn): made the default size
	wider so that the task descriptions will be visible by default.

2000-05-02  Charles Kerr <charles@skywalker.ou.edu>

	(Configure)

	* configure.in, README, NEWS: Upped version number to 0.8.0 beta 8.

	(Signed vs. Unsigned)

	* pan/group.c: (group_set_attrib_ul): func to set ulong group settings.
	* pan/group.c: (group_get_attrib_ul): same.
	* pan/task-headers.c (task_get_header_range): use group_get_attrib_ul
	and group_set_attrib_ul intead of the int versions.
	* pan/task-headers.c (task_headers_run): same.

	(Bugfix: "Last" property not being saved properly)

	* pan/task-headers.c (task_headers_run): in cases where there were no
	new articles in a group, the "Last article number" attribute was
	corrupted.  This was introduced over the weekend as a result of the
	offline reading patches.

	(Code tweaks)

	* pan/group.c (compare_group): const correctness.
	* pan/group.c (compare_group_std): same.

2000-05-02  Matt Eagleson <e.Messiah@superpimp.org>

	* pan/nntp.c (nntp_articlelist_download): return -2 on NNTP protocol
	errors

	* pan/task-body.c (task_body_run): Abort article downloads that fail
	with protocol errors immediately, since a retry isn't going to help

2000-05-02  Charles Kerr <charles@skywalker.ou.edu>

	* pan/nntp.c (nntp_articlelist_download): removed debugging message
	that should ahve been left out.

	* pan/task-headers.c: fixed the format string for "Getting article
	headers n of N"; they held ints but should have held unsigned longs.

	* pan/text.c (text_set_show_all_headers_in_body): this function broke
	in beta 7 as a side-effect of the text_refresh() cleanup.

2000-05-01  Matt Eagleson <e.Messiah@superpimp.org>

	* pan/prefs.c (prefs_get_dir): Don't call directory
	check here, since we may be getting directories that
	have tokens in them.  Bug reported by Bill Hester.

2000-05-01  Charles Kerr <charles@skywalker.ou.edu>

	* Pan 0.8.0 Beta 7 Released.

2000-04-30  Charles Kerr <charles@skywalker.ou.edu>

	* pan/articlelist.c (articlelist_selected_thread_download): now
	supports >1 selected thread.

	* pan/articlelist.c (articlelist_get_selected_articles): new
	convenience function.

2000-04-29  Jason Leach  <leach@wam.umd.edu>

	(Implementing the great suggestions from Jeff Lightfoot)

	* pan/gui.c (warn_about_tasks_running): new function to give the
	graphical warning and dialog box about quitting Pan while some
	tasks are still going.

	* pan/queue.c (queue_has_running_tasks): new function to count and
	return all the tasks that are running, queued, or connecting.
	
	* pan/save.c (create_save_attachment_as_dialog): made the Save
	Binary Attachment As user-specified "Location" entry have a
	[Browse...] button.

2000-04-29  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/task-decode.c (nntp_article_decode): the g_return_val_if_fail()
	sanity checks at the beginning of the function should return a -1
	on failure, rather than (success state) 0.  Thanks to Paul McGarry
	<mcgarry@tig.com.au> for reporting this bug.

	* pan/save.c (save_attachment_as_dialog_clicked_cb): check to make
	sure the group-preferences radiobutton in the "Save Attachment As..."
	dialog is actually non-NULL before casting it as a togglebutton to
	get its state.  I have no idea how this has slipped by before;
	nevertheless, thanks to Paul <paul@redhotants.com> for reporting
	this bug.

	* pan/nntp.c (nntp_articlelist_download): if no articles exist in the
	specified group, then return a zero, instead of an error signal.
	An error signal will cause Pan to keep retrying.  And retreiving 0
	articles from an empty group is not an error.

	* pan/queue.c (real_queue_task_abort): When a task isn't running, then
	instead of setting the ABORT flag, go straight on to FAILED without
	passing go.

	* pan/task_headers.c (task_headers_run): is no longer corrupting the
	Article* array passed into articlelist_set_contents that was causing
	some memory corruption after my offline reading checkin yesterday.
	See the articlelist section below for more info.

	(Articlelist)

	* pan/articlelist.c: internal rearrangement: Article** article_headers
	and article_header_qty have been merged into a GPtrArray.  This cleans
	up some of the dependencies between articlelist and task-headers.

	* pan/articlelist.c (articlelist_set_contents): no longer keeps the
	array handed to it or leaves the pan object's ref counts alone; it now
	makes its own copy of the Article** and refs the objects.

	* pan/articlelist.c (articlelist_load): unref the articles when we're
	done with them.
	* pan/task-headers.c (task_headers_destructor): same.

	(Misc)

	* pan/sockets.c (pan_socket_constructor): give a better error message
	when gethostbyname() fails.

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

2000-04-28  Charles Kerr <charles@skywalker.ou.edu>

	(Style "Fixes")

	I'm not sure I understand what's going on here, but what I've found,
	using no theme:

	(1) You must call widget_set_font() *before* setting the fg/bg, since
	    widget_set_font() overwrites the widget's previous style.
	(2) In order for our clists, ctrees, and ctext widgets to have a nice
	    background color, they must copy the main window's style via
	    widget_set_font().
	(3) If widget_set_font() is called for the three main widgets in the
	    main window, then the prefs clist has the right colors, too.
	    Otherwise, the prefs clist has a black background.

	I've jiggered things such that set_widget_font() is called, even
	when there's no font present (set_widget_font() checks for null now).
	But I don't understand why item 2 seems to be true.  I also don't know
	what this will do under a pixmapped theme.  Does someone else want to
	drive on this for awhile?

2000-04-28  Charles Kerr <charles@skywalker.ou.edu>

	(Since we're having another beta, I decided to commit the offline
	newreading stuff before it gets stale.  It Works For Me (tm), and
	I'll be testing it over the weekend.)

	* pan/task-headers.c: has a new ctor, task_headers_new_with_bodies().
	"headers" may be a misnomer now, but it's where the code fit best.

	* pan/task-headers.c (task_get_header_range): new function,
	part of an internal reworking of task-headers to accomodate bodies.

	* the argument list to task_headers_new has been changed slightly
	to be constent with the argument list in new_with_bodies().  Updated
	calls in articlelist, group, and grouplist.

	* grouplist's popdown, and the top-level menu, now have options
	for new, all, and sampling of groups with bodies.

	* pan/nntp.c (nntp_articlelist_download): more flexible version of
	the article download that used to be in task-headers.  Slowly, the
	nntp-specific pieces are floating back to nntp.c.  Yay!

	* pan/nntp.c (nntp_get_group_info): now takes unsigned long for the
	group article numbers; they were overflowing on comp.lang.c.

	* pan/nntp.c (nntp_download_bodies): downloads a group of article
	bodies, much like in task-bodies but is a little more flexible.

	* pan/task-bodies.c (task_bodies_run): use nntp_download_bodies.

	And other things, but I'd hate to bloat the ChangeLog too much. :)

2000-04-28  Jason Leach  <leach@wam.umd.edu>

	* pan/decode.c (decode_article): ok, _now_ open attachment works.

	* pan/task-decode.c (task_decode_run): Moved things back to where
	they were before I did the preserving article->filename stuff.

	(GtkStyle setting tweaks)	     

	* pan/message-window.c (create_post_body_pane): fixed the style
	issues here too, removing another style_copy()
	(create_read_body_pane): another small style tweak.  Think this is
	the last one.

	* pan/text.c: removed text_set_style(), instead made the order of
	style setting correct so that we are still guaranteed theme style
	or Pan's preferences, took out a unecessary gtk_style_copy too.

	(Fixing a preferences crash)

	* pan/prefs.c (struct PrefsWindow): removed unused
	GtkWidget *edit_profile_dialog

	* pan/prefs.c: new GSList *sprof_list, contains a list of server
	profile GnomeDialog's, so we can destroy them when the full prefs
	are closed (instead of leaving them open and then crashing Pan
	when a users clicks apply or makes a change).

2000-04-27  Jason Leach  <leach@wam.umd.edu>

	* pan/text.c (text_set_style): a new little static function, lets
	us set the Pan.text style with a single gtk_widget_set_style call
	and more guarantee that the fonts and colors will be consistent
	with the user's gtk theme or with their custom Pan preferences.

	* pan/prefs.c (prefs_apply_cb): removed a gtk_style_copy because I
	don't think we don't need to copy it here.

2000-04-27  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/decode.c (decode_article): check to make sure filename!=NULL
	before we g_strdup_printf() it into article->filename.  If the decode
	failed, then filename will be NULL and this will add insult to injury
	by saying "aha, your decode failed!  For that, I will crash Pan!
	Muhaha!!!"

	* pan/decode.c (decode_article): found the decoding problem.
	The UUSetValue (SAVEPATH) call should have had three arguments, not
	two.

2000-04-27  Jason Leach  <leach@wam.umd.edu>

	* pan/decode.c (decode_article): took out the && party_qty==1 for
	the checking whether to enalbe UUOPT_FAST, grabbing the slist
	length of the articles list isn't an accurate way to measure if
	there is >1 attachment per message.  Really all this did was keep
	UUOPT_FAST from being used when you are decoding any multipart,
	where it is especially beneficial.

2000-04-26  Charles Kerr <charles@skywalker.ou.edu>

	(Tweak for Typhoon 1.2.3)

	* pan/task-grouplist.c (nntp_grouplist_download_new):  Alex V Flinsch
	<avflinsch@att.net> reports that asking for new groups since
	19700101 000000 GMT doesn't work on Typhoon v1.2.3, but that
	19700101 000001 does.  So the initial string has been set to this.
	I've confirmed this on a Typhoon server I use.

	(New Group List)

	* pan/task-grouplist.c: was writing the 'last date of grouplist' to
	gnome-config, but on exit server.c wipes the server info in
	gnome-config and rewrites it from its internal fields.  These two
	things are in opposition with one another.  I don't know that server.c
	is doing the right thing here, but it's the bigger of the two pieces
	so I've re-jiggered things such that last_newgroup_list_date is a
	Server field loaded/saved when the Server is loaded/saved.
	task-grouplist now uses/updates this field, rather than using
	gnome-config.  Thanks to Alex V Flinsch <avflinsch@att.net> for
	reporting this bug.
	* pan/server.c: same.
	* pan/server.h: same.
	* pan/task-grouplist.c (update_last_grouplist_update_time): removed
	unused function.

	(Font/Color Setting)

	* pan/gui.c (widget_set_font): If the widget being set is realized,
	then use it instead of the main window.  This way we don't overwrite
	the widget's other style attributes, such as the foreground/background
	colors.   Thanks to Alex V Flinsch <avflinsch@att.net> for reporting
	this bug.

	* pan/prefs.c (prefs_apply_cb): if the article window's font is
	changed, call text_refresh().  Thanks to Alex V Flinsch
	<avflinsch@att.net> for reporting this bug.

	* pan/text.c (text_refresh): changed this to work even if there's no
	current article, we just pull the text out of the GtkText and reset
	it with the new font/color etc.  Thanks to Alex V Flinsch 
	<avflinsch@att.net> for reporting this bug.

	* pan/util.c (get_next_token_g_str): fixed bug that occurred when two
	delimiters were adjacent.  The GString was correctly set to zero length,
	but the function returned FALSE (to indicate no tokens left) rather
	than TRUE (to indicate an empty token).  Amazingly enough, this bug
	wasn't reported by Alex V Flinsch <avflinsch@att.net>.

2000-04-26  Matt Eagleson <e.Messiah@superpimp.org>
	
	(Bug Fixes)

	* pan/util.c (directory_check): It was probably a bad idea to free
	char *dir before we use it as an argument to mkdir

2000-04-26  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/dialogs/dialog-log-viewer (log_save_ok_clicked): Fix memory
	leak and clist memory corruption -- gtk_clist_get_text() just sets
	the text** to point to the cell's internal memory, so we shouldn't
	free this.  Likewise, the call overwrote the g_malloc() that we
	used on the text**.

	* pan/dialogs/dialog-log-viewer (log_save_ok_clicked): Fix memory
	error where the contents of gtk_file_selection_get_filename() were
	being g_free()d.  This is an internal string used by GtkFileSel
	and shouldn't be g_free()d.  Moreover if nothing is selected it
	points to a static array that wasn't g_malloc()ed.

	* pan/util.c (directory_check): fixed tiny small memory leak that 
	was only tickled when directory_check() failed.

	* uulib: removed about 50 Solaris compile warnings.  Mostly these
	were just int/char casts, but also three uninitialized variables
	in uuscan.

2000-04-26  Jason Leach  <leach@wam.umd.edu>

	* pan/decode.c (decode_article): removed gchar *tmp, killed a
	warning.

	(Log Viewer optimization)
	
	* pan/globals.h (struct PanApp): added a GSList *eventlog here.

	* pan/dialogs/dialog-log-viewer.c (log_toolbar): shortened the
	text on some toolbar items.

	* pan/log.h (remove_crlf): removed now dead prototype
	(log_viewer_spawn): ditto
	(log_init): ditto

	* pan/server.c (server_menu_update): fixed the i18n problem with
	Server menu not getting filled/translated/something, reported by
	good ol' Kang.

	(Moving stuff into dialogs/* directory structure)

	* pan/dialogs/dialog-log-viewer.c: this is the new home of about
	all the main graphical parts of the Log Viewer
	
	* pan/dialogs/dialog-group-props.c: this is the new home of
	pan/group-props.[ch]

	(Decode Optimization)
	
	* pan/decode.c (decode_article): replaced the chdir() with a
	UUSetOption (UUOPT_SAVEPATH, ...), this is the "right" way to save
	files somewhere else, and should be a little more optimized when a
	user is decoding like 3000 things to not have to call chdir() 3000
	times.

	* uulib/uulib.c (UUDecodeFile): added a "/" inbetween the path and
	the filename, so UUSetOption won't screw up decodes where the
	$download_dir doesn't have a trailing slash.
	
2000-04-26  Charles Kerr <charles@skywalker.ou.edu>

	* pan/statistics.[ch]: removed unused source files.  These tracked --
	or would have, if they had been used -- things like connection time
	and transfer rates, which is done now in the task manager.

	* pan/Makefile.am: sync.

	* uulib/uunconc.c (UUDecodeLine): cast some chars to ints to avoid
	compiler warnings. 

2000-04-26  Jason Leach  <leach@wam.umd.edu>

	* uulib/uuscan.c: removed unused variable char *pan_tmp_dir

	* pan/gui.c (gui_set_headers_default): forgot a ulong -> gulong
	here charles.

2000-04-25  Jason Leach  <leach@wam.umd.edu>

	* pan/prefs.c: added trailing /'s to the $data_dir, $download_dir,
	and $tmp_dir default values, this is how it should be (if you are
	in the prefs and you click "Browse" it shows up a directory lower
	if they aren't there)

2000-04-25  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/articlelist.c (articlelist_selected_download): handle the special
	case where the groupname (the root of article_ctree) is in the
	selection.  Thanks to Jim Robinson for reporting this bug.

	* pan/sockets.c (socket_constructor): Handle bug that didn't initialize
	all the bits in the socket fields before returning when there was no
	route to host.  This bug must have been around for ages, but strangely
	enough didn't get reported until today.  Thanks to Craig Orsinger
	<orsingerc@epg-gw1.lewis.army.mil> for reporting this bug.

	* pan/prefs.c (prefs_message_page): changed nonstandard 'ulong'
	reference to 'unsigned long'.  Thanks to Geoff Roth for reporting tihs
	bug.

	(Tweak)

	* pan/message-window.c (update_body_pane): use get_next_token_g_str
	instead of g_strsplit, so that we only have to malloc/free memory for
	one line, rather than all of them.

2000-04-25  Jason Leach  <leach@wam.umd.edu>

	* pan/task-decode.c (task_decode_run): left a superfluous
	conditional check in here.

	(Bug fix)

	* pan/util.c (pan_error_dialog): uncommented the
	gnome_error_dialog and removed the FIXME comment about why it's
	commented out (for purify), looks like it was in 0.8.0b6, so users
	won't see any gnome_error_dialog's.

	(Breaking backwards article-db compatability to add some features)
	
	* pan/articlelist.c (articlelist_selected_delete_attachment): new
	function for the articlelist popup (which might be better
	described), deletes the decoded attachment and then updates the
	article's state.

	* pan/articlelist.c (articlelist_selected_decode_impl): don't
	re-download articles that we have files for.
	
	* pan/article.c (article_destructor): free the filename here

	* pan/article-db.c (article_deserialize): save the decoded
	attachment filename into the database here
	(ahdb_save_with_buffer): load it here

	* pan/article.h (_Article): added the field 'char *filename' that
	will hold the filename of decoded attachments.

2000-04-24  Jason Leach  <leach@wam.umd.edu>

	* Pan 0.8.0 Beta 6 Released.
	
2000-04-24  Jason Leach  <leach@wam.umd.edu>

	* pan/util.c: added some utility functions for socket-type stuff

	* pan/sockets.c (pan_socket_constructor): removed a 'struct
	hostent host_info' because it wasn't being used anywhere.

2000-04-24  Charles Kerr <charles@skywalker.ou.edu>

	* pan/article-db.c (article_deserialize): Added in some simple sanity
	checks to make sure the article has most of the required pieces
	(message-id, subject, author) just in case the database has gotten
	corrupted.  Added a warning message if an article has been corrupted.

2000-04-23  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fix)

	* pan/queue.c (real_queue_task_requeue_failed): set the task's
	abort_hint to FALSE when re-queueing an aborted task.

	(Futzing)

	* pan/article.h: reformatted the structs and function prototypes
	to be more gnome-like.

2000-04-21  Matt Eagleson <e.Messiah@superpimp.org>

	(Bug Fix)

	* pan/decode.c (decode_open):  Use an exec instead
	of the users shell, so that shell characters in filenames
	don't confuse the open function
	
	* pan/articlelist.c (nntp_articlelist_download): article
	bytes were being used to fill the article linecount field.
	this was messing up the progress bar and the articlelist
	display.

2000-04-21  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fix)

	* pan/articlelist.c: fixed a nasty condition where the articlelist
	wasn't getting rid of all of its references to Articles before
	unref'ing them.  Articlelist would unref before threading the new
	articles; however, the ctree's node data and the message-id-to-article
	hashtable kept the references until the new tree was being built.
	If some other thread came knocking on the door (task-decode, in
	my case) to let articlelist know that an article's state had changed,
	articlelist would look through the hashtable for that article,
	gleefully looking through pointers that point to who-knows-what.

	(Speed Tweaks)

	* pan/task-headers.c (task_headers_run): instead of calling
	ahdb_length() -- which walks through the database to find out exactly
	how many records are there  -- just use the group attribute "Total"
	to get the estimated size.  This is just for the initing the status
	item's progress count, so it's not the end of the world if the count
	is a little off.

	* pan/article-thread.c (pp_article_subject_comp): tiny speed tweak.
	* pan/article-thread.c (p_article_subject_comp): same.

	(UULib)

	* acconfig.h: added the _FP utilities to the config.h template.
	uulib uses its own versions of most of <string.h> for portability's
	sake.  Now we go through in configure and find out which functions
	exist natively on the build target; this way we can pick up the
	(probably faster, probably better) system versions of the functions.

	* configure.in: added checks for each of the _FP utilities.

	* uulib/fptools.[ch]: added #ifndef's for each of the _FP
	utilities that we try to replace with system functions.

	* uulib/fptools.c (_FP_fgets): this function uses fgetc() to read each
	character.  It does this to handle CR, CRLF, and LF each as an
	end-of-line delimiter.  However since inside of Pan uulib only
	reads files that we've written, we can make assumptions about the
	linefeeds and trade this safeguard for speed.

2000-04-20  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/message-filter.c (message_filter_get_action): added conditional
	to filter out based on crosspost qty.  This had been stubbed in the
	UI but had never been implemented here.

	(Memory Leak)

	* pan/prefs.c (prefs_init): when the user hit 'apply', the old strings
	were never freed before the pointers were re-assigned to the new
	strings.

	(UI Tweaks)

	* pan/gui.c: fixed the copyright date in the "About Pan" popup.

	(Code Cleanup)

	* pan/status-item-view.[ch]: removed all traces of socket statistics:
	since StatusItemView is no longer used in the task manager, this is
	unused.

2000-04-19  Charles Kerr <charles@skywalker.ou.edu>

	(UI Tweaks)

	* pan/task-manager.c (get_xfer_str): changed the way a task's remaining
	time is displayed.  Now it's shown as 0:00:00 for hours, minutes, and
	seconds remaining.

	* pan/articlelist.c: the quote-parent-subject-with-a-'"' added
	yesterday tweaked slightly to look better with responses whose
	subjects differ only in that they prepend a "Re: ".

	(New Functionality)

	* pan/articlelist.c (articlelist_read_parent_article): new utility
	function to let the user zip to the parent article.  This is handy
	when you don't want to have to use the mouse, or when you've got
	the articlelist unthreaded so that parents may not be on-screen in the
	articlelist.

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

	* pan/gui.c (article_menu): plugged in menu items & accelerators for
	move-to-parent and move-to-reply.

2000-04-18  Charles Kerr <charles@skywalker.ou.edu>

	(Speed Tweaks)

	* pan/sockets.c (pan_socket_getline): optimized this such that we move
	the string over in one memcpy, rather than byte-by-byte.  I've been
	banging on this for an hour so so and it seems to work fine; it should
	have more testing.

	(Cleanup)

	* pan/task-headers.c (nntp_articlelist_download): clean up the code I
	checked in earlier today.

	* pan/articlelist.c (articlelist_repopulate): remove a pan_warning that
	I added earlier today in the commit that dealt with this function.

2000-04-18  Charles Kerr <charles@skywalker.ou.edu>

	(Bugfixes)

	* pan/article.c (article_get_thread_message_id): this function wasn't
	safe when the article passed in was the top of the thread (ie, when it
	had an empty 'references' field).  Thanks to Paul
	<super.geek@redhotant.com> for reporting this bug.

	* pan/prefs.c (prefs_display_page): changed typo that displayed
	the text foreground color selector as "background color".  Thanks
	to Craig Orsinger <orsingerc@epg-gw1.lewis.army.mil> for reporting
	this bug.

	* pan/message-window.c (create_post_body_pane): use the user-specified
	background, foreground, and quoted colors.  Thanks to Craig Orsinger
	<orsingerc@epg-gw1.lewis.army.mil> for reporting this bug too.

	* pan/message-window.c (create_read_body_pane): same.

	* pan/text.c (realize_text_cb): use the user-specified background and
	foreground colors for the startup welcome message.  Thanks to
	Craig Orsinger <orsingerc@epg-gw1.lewis.army.mil> for reporting this
	bug too.

2000-04-18  Charles Kerr <charles@skywalker.ou.edu>

	(UI Tweaks)

	* pan/articlelist.c (articlelist_repopulate): when sorting, threading,
	etc, try to keep the article selection even after the list's been
	repopulated.

	* pan/articlelist.c (add_article_to_ctree): if a response's subject
	is the same as its parent article, then instead of repeating the
	subject say '"' instead.

	(Memory Tweaks)

	* pan/task-headers.c (nntp_articlelist_download): use the
	get_next_token utility functions instead of strsplitting the 
	header buffer returned from the NNTP server.  This uses less
	malloc/free overhead.

2000-04-17  Charles Kerr <charles@skywalker.ou.edu>

	(Bugfixes)

	* pan/folerlist.c (folderlist_shutdown): check to see if folder_server
	is NULL before unreffing it, so as to avoid a g_warning if the user
	hits "close" after the first window of the "welcome new user" druid.

	* pan/util.c (get_paragraphs): ANOTHER darn bug of mine in
	get_paragraphs().  This time around we were throwing away the last
	paragraph of each post.  <sigh>  Maybe I should've left bad enough
	alone with wrap_long_lines(). :)

	* pan/articlelist.c: big gui lockup bug fixed.  If any code called
	articlelist_set_selected_node(), it would block: it calls
	gtk_ctree_select_node(), which has to be pan_locked().  However
	we listen for changes to the selection for firing a pan_callback
	to listeners.  Tweaked this by having the articlelist selection
	listener start up a different thread for firing the pan_callback.

2000-04-16  Charles Kerr <charles@skywalker.ou.edu>

	(Bugfixes)

	* pan/message-filter.c (message_filter_get_action): this function
	was crashing in 0.8.0 beta 5 whenever the user had a rule that
	involved article message-ids.  Pan was dereferencing a null pointer
	inside a strncmp().  Thanks to cyberclay <cclay@abednnego.com> for
	reporting this bug.

	* pan/util.c (pan_strncmp): added a null-safe version of strncmp
	to avoid problems such as those in the above paragraph.

2000-04-14  Charles Kerr <charles@skywalker.ou.edu>

	Pan 0.8.0 Beta 5 Released.

2000-04-13  Charles Kerr <charles@skywalker.ou.edu>

	(Bugfixes)

	* pan/task-decode.c (choose_article_parts_auto): if the Article we're
	looking at has a value of '0' for its part field, throw it away -- it's
	someone's reply to a multipart message, that has gotten threaded in with
	parts 2..n.  Thanks to Jonas <spectral@hangar18.campus.luth.se> for
	reporting this bug.

	* pan/task-manager.c (periodic_update_timer): use
	pan_lock_unconditional and pan_unlock_unconditional instead of
	pan_lock and pan_unlock.  These lock the gui for glib timeouts
	running in the main thread and need to get a gui lock anyway.

	* pan/staus-item.c (status_item_get_progress_of_100): bugfix where
	the this function was returning zero and the '% Done' column in
	task-manager didn't work during a decode.

	* pan/server.c (online_prompt_cb): only set server->online_prompted
	to false if the new online state differs from the old; that way,
	users will only be asked once per server, rather than again and again,
	whether or not they want to go online.

	(Tweaks)

	* pan/message-window.h: gtk+-ified the header file layout.
	* pan/status-item.[ch]: same.
	* pan/task-decode.h: same.
	* pan/task-headers.h: same.
	* pan/task-manager.h: same.
	* pan/task-send.h: same.
	* pan/task.h: same.

2000-04-12  Charles Kerr <charles@skywalker.ou.edu>

	(Bugfix)

	* pan/articlelist.c (articlelist_selected_delete): fixed thread-unsafe
	usage of the articlelist GtkCTree.

	* pan/articlelist.c (articlelist_mark_read): fixed thread-unsafe
	usage of the articlelist GtkCTree.

	* pan/task-decode.c: big bugfix: memory was being trashed fiercely if
	you changed groups while a decode task from the previous group was 
	still alive.

2000-04-12  Matt Eagleson <e.Messiah@superpimp.org>

	(Bugfix)

	* pan/nntp.c: (nntp_get_group_info): Was doing one
	to many reads which caused group downloads to hang on
	select.

2000-04-11  Charles Kerr <charles@skywalker.ou.edu>

	(Bugfixes)

	* pan/util.c (get_next_token_str): fixed minor UMR bug reported by
	purify.

	* pan/util.c (get_paragraphs): fixed minor bug introduced by me on
	April 3 when I added g_strings to this function.

	* pan/queue.c (queue_init): the order of the arguments in the
	declaration and definition were inconsistent.

	(Going Online Changes)

	* pan/prefs.[ch] (going_online_preference): new preference option
	to let the user specify how Pan goes online: go online without asking,
	prompt the user before going online, or shut up & stay offine until
	the user goes online manually.  We had two of these three states in
	the 0.6.x series of Pan, but it broke with the multisockets added in
	0.7.0.

	* pan/queue.c (queue_get_socket_for_task): respect the going_online
	preference setting.

	(Task Manager)

	* pan/task-manager.c: more UI tweaks.

	(Prefs)

	* pan/prefs.c: now listen to the user's "max number of connections
	total" specification in the Online Settings pane.  I believe this
	completes the online options preferences page.

	(Wrapping/Filling)

	* pan/prefs.c: let the user specify how many columns wide the
	wrapped/filled message should be.

2000-04-10  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/gui.c (gui_save_column_widths): sync the gnome config db after
	saving these widths.

	* pan/folderlist.c (folderlist_shutdown): fix small memory leak:
	folders_server wasn't being freed.

	(Server Changes)

	* pan/server.[ch]: Server is now a PanObject.  This is mainly to
	consolidate the ctor/dtor code so that it's easier to track
	default values for online, offline, and so forth; also added
	online_status_changed PanCallback for servers.

	* pan/server.c (server_prompt_to_go_online): new utility function.

	(Prefs)

	* pan/prefs.c (prefs_connections_page): now the maximum number of
	connetions per server is bounded by the Max_Connections_Per_Server
	variable under [General] in the ~/.gnome/Pan config file.  This isn't
	going to be advertised but those really interested in upping the limit
	past 4 can add "Max_Connections_Per_Server=8" or whatever in their
	~/.gnome/Pan file.

	* pan/task-manager.c: can't get it to crash on Slowaris now.  Will try
	on Linux later today.

2000-04-09  Charles Kerr <charles@skywalker.ou.edu>

	(Queue)

	* pan/queue.c (real_queue_remove_task): bug fix in callback invocation:
	the index of the task in the queue was not being sent as the call_arg
	as advertised in queue.h.

	* pan/queue.c (queue_get_socket_for_task): twiddled the logic around
	such that the reserved socket can be used not just for reading, but
	also for group lists and anything else without the Task "is_leech"
	flag set.  This has been requested by a handful of people ever since
	the behavior changed back in 0.8.0 beta 1.

	(Task Manager: Still Not There Yet)

	* pan/task-manager: more work done.  Added a timer to refresh the list
	every second.  Fixed bug in the 'remove task' code.

2000-04-09  Charles Kerr <charles@skywalker.ou.edu>

	(Articlelist Toolbar: Added "New" Filter)

	* pan/group.h (flags): added filter for toggling the display of
	new articles.
	* pan/articlelist.c (article_passes_filter): sync.
	* pan/article-toolbar.c: sync.
	* pan/gui.c: sync.

	(Util)

	* pan/util.c (parse_download_dir): Removed tihs function.  Jason,
	take a look at pan_substitute and how we do the attribution strings
	in message_window.c.  pan_substitute works very well for this.

	(Queue)

	* pan/task-manager.c: more hacking.  Not done yet, but getting there.

2000-04-07  Jason Leach  <leach@wam.umd.edu>

	* pan/util.c (parse_download_dir): new function, do %g ->
	groupname conversion for the download string things.  I guess we
	could add things like %s in here pretty easily too.  Thanks to
	William Hester for this suggestion.

2000-04-07  Charles Kerr <charles@skywalker.ou.edu>

	(Queue)

	* pan/queue.c (queue_get_socket_for_task): use server field 'reserve
	nonleech thread' instead of using the now-removed global variable.

	* pan/queue.[ch] (queue_wakeup): made this a public function.

	(Prefs)

	* pan/prefs.c (create_connections_window): make one-stop-shop UI for
	managing all things connective.

	* pan/prefs.c (prefs_apply_cb): tie in the connections window

	* pan/prefs.[ch] (prefs_spawn_to_news_connections): new function

	(Code Cleanup)

	* pan/group.[ch]: removed unused func check_new_group_list_for_newness.

2000-04-05  Jason Leach  <leach@wam.umd.edu>

	* pan/grouplist.c (grouplist_process_selected): fixing bug
	reported by Rick Younie about setting group properties for >1
	group at a time.  Who added these unselect_all & return calls?
	Why?


2000-04-05  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/article-thread.c (skip_reply_leader): fixed read one-past-end-
	of-array bug that was previously masked by the contiguous memory
	allocation in article-db.  Moving to get_next_token_[int|str]()
	uncovered this.

	(Futzing)

	* pan/util.c: reformatted some code to be more gnome-like

2000-04-04  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/debug.c (debug): looks like g_message truncates at mumble
	characters.  Changed from g_message() to printf() to avoid
	truncation in long log messages (such as posting).

	* pan/nntp.c (nntp_send_noop): switched the no-op from "help" to
	"mode reader" because it uses less bandwidth.

2000-04-04  Matt Eagleson <e.Messiah@superpimp.org>

	(Bugfix)

	* pan/gui.c (gui_articlelist_group_changed_cb): We
	now lock the gui before changing widget sensitivity.

2000-04-04  Charles Kerr <charles@skywalker.ou.edu>

	(Speed Tweaks)

	* pan/util.c (get_next_token_int): new utility function that marches
	through a delimited string and picks off pieces of it.  This is nice
	so that we don't have to call g_strsplit anymore.
	* pan/util.c (get_next_token_str): same.

	* pan/article-db.c (article_deserialize): use get_next_token_int() and
	get_next_token_str() instead of g_strsplit.
	* pan/grouplist.c (grouplist_load_gdata): same.

	(UI Tweaks)

	* pan/articlelist.c: change padding from GNOME_PAD to GNOME_PAD_SMALL.
	* pan/text.c: change padding from GNOME_PAD to GNOME_PAD_SMALL.

2000-04-04  Charles Kerr <charles@skywalker.ou.edu>

	* Whoops, a showstopper bug crept into 0.8.0 beta 3 right before I
	made the RPMs and tarballs.

	Pan 0.8.0 Beta 4 Released.

2000-04-04  Charles Kerr <charles@skywalker.ou.edu>

	Pan 0.8.0 Beta 3 Released.
	
2000-04-04  Charles Kerr <charles@skywalker.ou.edu>

	* pan/util.c (pan_g_ptr_array_insert): off-by-one bugfix.

	* pan/acache.c (acache_expire_to_size): almost completely rewrote this
	function in order to make it scale to large numbers of files better.
	The old acache wasn't clearing out the files, and it took forever to
	do so, as it walked through the entire directory each iteration to find
	the oldest file.  Now we create an array of temporary structs, sorted
	by age, for easy deletion.

2000-04-03  Charles Kerr <charles@skywalker.ou.edu>

	(Offline Reading)

	* pan/task-bodies.[ch]: new task class to download a set of articles
	in a batch.

	* pan/articlelist.c (message_menu): added "Download Selected
	Article(s)" menu item.
	* pan/articlelist.c (articlelist_button_press): grey out the new
	menu item according to whether or not articles are selected.
	* pan/articlelist.c (articlelist_all_download): new utility function
	to download all the articles in the article list's group.
	* pan/articlelist.c (articlelist_selected_download): new utility
	function to download all the articles selected in the article list.

	* pan/group.c (group_download_all_articles): new utility function to
	download all the articles in a given group.

	* pan/grouplist.c (menu): added "Download Selected Group(s) for
	Offline Reading" menu item
	* pan/grouplist.c (grouplist_selected_download_bodies): new utility
	function for downloading all the articles in all the selected groups.

	* pan/articlelist.h (articlelist_all_download): func prototype added.
	* pan/articlelist.h (articlelist_selected_download): same.
	* pan/group.h (group_download_all_articles): same.
	* pan/grouplist.c (grouplist_selected_download_bodies): same.

	* pan/gui.c (view_menu): renamed "Sort" to "Sort Articles" to make
	it easier for someone looking at the view menu to see what's going on.

	* pan/nntp.c (nntp_article_download): removed the "set group" command;
	callers should call nntp_set_group beforehand.  This way the
	task-bodies task will only have to set the group once, rather than
	once per article.

	* pan/nntp.c (nntp_article_download): added "verbose".  When disabled
	the only status item emissions from this function will be if a
	download error occurs.

	(Util)

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

2000-04-03  Charles Kerr <charles@skywalker.ou.edu>

	(Command-Line)

	* pan/pan.c: added "--debug-socket", which is shorthand for
	"--debug-socket-input --debug-socket-output".

	(Bug Fixes)

	* pan/pan-db.c (pan_db_get_value_str): when --debug-db was turned on,
	Pan would crash in the "looking for <key> and found <retval> if
	retval was NULL.

	* pan/util.c (get_paragraphs): fixed small text alignment bug in the
	paragraph builder.  Filled paragraphs previously began with a one-space
	indentation they shouldn't have had.

	(UI: Moved the Server selector out of the optionmenu, into main menu)

	* pan/server.c (server_menu_create): removed unused function.
	* pan/server.c (server_menu_update): removed optionmenu code and
	added main menu code instead.
	* pan/grouplist.c (grouplist_create): removed the optionmenu code.

	(UI: Moved the article view menu items out of the very long Message
	menu and moved them to the View menu.)

	(Speed Tweaks)

	* pan/pan-db.c (pan_db_get_value_i): call the db directly, rather than
	calling pan_db_get_value_str.  This skips the overhead of allocating
	and freeing the pan_db_get_value_str's return value.

	* pan/server.c (server_list_save): replaced the
	g_strdup_sprintf-then-free-and-repeat code with a single g_string.
	This reduces the number of times that malloc/free is called.
	* pan/grouplist.c (grouplist_save_list): same.
	* pan/util.c (get_paragraphs): same.
	* pan/util.c (pan_clean_temp_dir): same.
	* pan/server.c (server_menu_update): same.
	* pan/gui.c (gui_restore_column_widths): same.
	* pan/gui.c (gui_save_column_widths): same.

	(Misc)

	* pan/server.c (server_list_load): sort the server list alphabetically
	as we load it from the config file.
	* pan/server.c (server_name_compare): new function used for sorting
	the server list.

	* pan/pan-db.c (pan_db_get_value_i): added in more
	g_return_value_if_fail()s.

	* pan/server.c (server_list_free): removed unused function.
	* pan/util.c (pan_append): same.

	* pan/article-db.c (ahdb_save): format argument list correctly.
	* pan/article-db.c (ahdb_save_all): same.
	* pan/article-db.c (article_deserialize): same.
	* pan/pan-db.c (pan_db_put_value_str): same.
	* pan/pan-db.c (pan_db_get_value_i): same.

	* pan/pan-db.c (pan_db_get_value_str_byte_array): new function like
	pan_db_get_value_str except that the return value is stored in a
	GByteArray passed in by the client.  If this byte array has memory
	allocated, it is used, thus avoiding the overhead of allocating and
	freeing the pan_db_get_value_str's return value.

2000-04-01  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/task_grouplist.c (task_grouplist_run): fixed bug that caused old
	groups to be unsubscribed when another grouplist task was run.
	Thanks to Bruce Richardson for reporting this bug.

	* pan/task_grouplist.c (task_grouplist_run): merged a lot of the
	get_new and get_all code, cleaning things up nicely.  This also fixes
	a small potential memory leak in the get-new-groups task.

	(Speed Tweaks)

	* pan/server.c (server_has_group): now use a bsearch rather than a
	linear search to find the group.

	* pan/task_grouplist.c (task_grouplist_run): same.

	(Utility)

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

	* pan/util.c (pan_g_ptr_array_reserve): same.

2000-03-31  Charles Kerr <charles@skywalker.ou.edu>

	(Misc)

	* pan/*.[ch]: changed (c) 2000 to (c) 1999, 2000 as suggested by
	Francesco Lamonica and in irc.

	* bit-twiddled some of the structs' gbooleans to be one bit, rather
	than take up a whole int.  Trying to whittle down the memory use
	little by little.

2000-03-30  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fix / Speed Tweak)

	* pan/status-item.c: removed the init_steps and next_step callbacks;
	status-item now has 'step' and 'steps' fields to calculate a
	percentage each time next_step is invoked.  This way status-item
	listeners only have to listen to one progress callback (progress_cb)
	instead of three.  This does three things: (1) it simplifies the code.
	(2) it lets us filter repeated progress percentages in status-item,
	rather than in the views, so that if a next_step doesn't result in
	an actual percentage change (5 out of 30000 stepping to 6 out of 30000,
	for example), the progress callback doesn't even need to be fired.
	(3) the views no longer have to keep track of step/steps, so
	status-item-view progress bars now work in the task manager even if
	you pop up the task manager in mid-task.

	(Bug Fixes)

	* pan/task-decode.c (select_articles_clicked_cb): fix GSList corruption
	bug that I introduced in 0.8.0 beta 2.  Forgot to keep the return value
	of g_slist_remove(),  This bugger's been playing hide-and-seek with me
	for a couple of days now. :)

	* pan/task-manager.c (online_status_changed_cb): off-by-one array
	reading to see if we're dedicating a line for reading articles or not.

	* pan/task-decode (task_decode_destructor): fix free-memory-twice bug.

	* pan/status-item-view (status_item_view_shutdown): fixed bizarre
	memory leak.  Purify had been complaining about this for awhile but I
	hadn't been able to track it down.  The problem was that I need
	StatusItemView to explicitly call the parent class' shutdown method
	at the end of siv's shutdown method.  HP's book says "the default
	implementation will always be invoked, even if it's overridden",
	which is apparently a guideline to those overriding shutdown, rather
	than a even-if-you-override-the-parent-implementation-gets-called
	as I interpreted it the first time. :)

	* pan/grouplist.c (grouplist_load_gdata): another memory leak plugged,
	again thanks to Purify.

	(Misc)

	* pan/queue.c: removed some debug g_messages I checked in by accident
	yesterday.

	* pan/*.[ch]: updated copyright from 1999 to 2000 via
	perl -p -i -e 's/1999/2000/g' *.[ch]


2000-03-30  Jason Leach  <leach@wam.umd.edu>

	* uulib/*.[ch]: Went ahead and changed tab width to 4 (from 2, was
	thinking 8, but the code is written with 2 space tabs in mind, the
	very deep nests can just be too wide at 8, will reconsider later
	though) to improve readability, we're going to have to read over
	some of it's internals to do things like inline image viewing,
	encoding, or strong detection of attachments.

2000-03-29  Matt Eagleson <e.Messiah@superpimp.org>

	* pan/task-decode.c (choose_article_parts_auto): Added
	a function to automatically select the best fit from multipart
	posts with duplicate parts.  Hasn't been tested on posts with
	triplicate parts.
	* pan/task-decode.c (task_decode_validate_and_queue_or_self_destruct):
	Made sure we don't check for duplicate parts when there is <= 1 part.

	* pan/prefs.c: Added a prefs option to toggle auto/manual duplicate
	part resolution.

	* pan/articlelist.c: Disabled check for parts>=1 that was preventing
	users from decoding some single part articles. 
	* pan/gui.c: Same

2000-03-29  Charles Kerr <charles@skywalker.ou.edu>

	* pan/*.[ch]: whee, it's a renaming frenzy!
	Changed ARTICLE_DATA() to ARTICLE().

2000-03-29  Jason Leach  <leach@wam.umd.edu>

	* pan/*.[ch]: changed the structure names to more Object like,
		group_data   -> Group,
		server_data  -> Server,
		article_data -> Article,
		druid_data   -> Druid

	* macros/*.m4: updated all these macro stuff to sync with the
	latest the gnome cvs has to offer.  shouldn't really change
	anything noticable, just maintenance crap.

2000-03-29  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fix)

	* pan/task-grouplist.c (nntp_grouplist_download_all): emit a status
	while downloading the group descriptions.  Otherwise on a slow
	connection it looks like Pan has hung after downloading the group
	names.  Thanks to Mike Brodbelt <mike@coruscant.demon.co.uk> for
	reporting this bug.

	(Queue Hacking)

	* pan/queue.c: better support for flagging task failures.  Now when
	a task fails, it's put back into the queue.  Once it reaches 5
	retries, the task's status is set to "failed".

	* pan/queue.c: added CONNECTING task status.  This is so that users
	can see why a single task is just sitting idle in the queue in an
	otherwise-idle session -- usually the delay is from waiting for a
	connection to the news server.

	* pan/task-manager.c: added retry and status columns to the "queued"
	tab.  This way you can see what the task is doing (queued or
	connecting) and see how many tries the task has made to succeed.

	(UI Tweaks)

	* pan/articlelist.c (articlelist_load): downgrade the "pan expected
	x messages, got y" from a warning to an informational message.  This
	serves a purpose, but that purpose isn't to scare users.

	* pan/text.c, pan/articlelist.c, pan/article-toolbar.c: some more UI
	tweaks following yesterdays tweaks.  Lining up rows and little stuff
	like that.

2000-03-28  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fix)

	* pan/prefs.c: made fast_decode_enabled default to false, rather than
	true.  Some messages with >1 file encoded in the posts were skipping
	all but the first file.  Thanks to Manuel Lucena Lopez
	<mlucena@ujaen.es> for reporting this bug.

	(UI Tweaks)

	* pan/grouplist.c: tweaked the main window user interface a little.
	* pan/articlelist.c: same.
	* pan/article-toolbar.c: same.
	* pan/text.c: same.

	* pan/status-item-view.c (update_sock_info): updated to give estimated
	time remaining on a socket task.

2000-03-28  Charles Kerr <charles@skywalker.ou.edu>

	Pan 0.8.0 Beta 2 Released.

2000-03-27  Charles Kerr <charles@skywalker.ou.edu>

	* pan/gui.c (add_header): added a "width" argument so that we can
	break up the header not only by delimiter but also by width.  This
	does two things: first, it lets us break up subject lines in a
	reasonable way; second, it lets us format the "<more>" popup dialog
	in a more attractive way.  Thanks to Bruce Richardson
	<brichardson@lineone.net> for reporting this bug.

	* pan/queue.c (queue_add): when a high priority task gets added to
	the queue, put it at the front of the list automatically.

	* pan/nntp.c (nntp_body): fix small bug that reported expired messages
	incorrectly.  Pan did report them as expired, and they are expired,
	but got some of the small details wrong.  Thanks to
	Reijo Korhonen <Reijo.Korhonen@iki.fi> for reporting this bug.

2000-03-26  Jason Leach  <leach@wam.umd.edu>

	* pan/gui.c: added some icons to the popup menus and some of the
	menus lacking them.
	* pan/grouplist.c: ditto
	* pan/articlelist.c: ditto

	* pan/grouplist.c (click_groups_column_cb): added back in the
	ability to click on the grouplist column to flip to different view
	modes.
	
	* pan/gui.c (article_menu): fix a typo that was preventing "Delete
	Thread" in the menu from doing anything.

2000-03-25  Charles Kerr <charles@skywalker.ou.edu>

	(A handful of User-Reported Bugs.  Thanks, Users!)

	* pan/grouplist.c (grouplist_grep): Pan crashed whenever you hit
	return in the grouplist filter, when the grouplist filter had been
	full but had then been "over erased".  Thanks to John Krause
	kensail <kensail@yahoo.com> for reporting this bug.

	* pan/task-grouplist.c (task_grouplist_run): fixed sorting bug.
	Thanks to Kevin Brammer <kncbram@hawaii.rr.com> for reporting this
	bug.

	* pan/task-grouplist.c (nntp_get_grouplist): added backwards
	compatability for clients that can only handle two-digit years
	in the NEWGROUP request.  Thanks for Paul McGarry <mcgarry@tig.com.au>
	for tracking down this bug.

	* pan/articlelist.c (articlelist_init): call set_widget_font() to set
	the article_ctree's font to whatever the user has specified for the
	articlelist font.  Previously we had just been setting the styles for
	the individual nodes -- which is still there of course -- but we need
	to do a widget-wide font set in order for the row height calculations
	to be set.  Otherwise if the user-specified font size differs too much
	from the default font size, you could experience clipping.  Thanks to
	Kingsley Turner <kingsley@krt.com.au> for reporting this bug.

	* pan/util.c (get_paragraphs): wasn't filtering out the \r as it
	should have been doing.  Thanks to random_static@bigfoot.net for
	reporting this bug.

	* pan/nntp.c (nntp_login): added backwards compatability for servers
	that don't support the "mode reader" NNTP extension.  Thanks to
	Magnus Holmberg <pucko@lysator.liu.se> for reporting this bug.

2000-03-24  Charles Kerr <charles@skywalker.ou.edu>

	(Big Bug Fixes)

	* pan/article.c (article_free): very big memory leak fixed: the
	"threads" gslist wasn't being freed!

	* pan/message-send.c (trim_references): this was crashing when the user
	replied to an original message; ie, when there was only one message-id
	in the references string.  Thanks again Matthew Cline
	<matt@nightrealms.com>.

	* pan/util.c (get_paragraphs): fixed amazingly bad array bounds bug.

	* pan/util.c (get_paragraphs): one big and one small memory leak fixed.


	(article_data reorg)

	article_data is now a PanObject.  The main reason for this is to give
	us reference-counted adatas, so that we can pass adatas around from
	articlelist to tasks without having to make copies.  The problem was
	that often we have two adatas with different state fields.  Syncing
	them is a headache, so this alternative makes article_dup()ing and
	article_copy()ing unnecessary.

	* pan/article-db.c (ahdb_get_all_dbfunc): unref, rather than destroy,
	the adatas that refer to articles that are being expired.

	* pan/article.c (article_destructor): new protected function.

	* pan/article.c (article_constructor): same.

	* pan/everywhere: replace article_free() with pan_object_unref().

	* pan/article.c (article_add_flag_from_message_id): same.

	* pan/article.c (article_remove_flag_from_message_id): same.

	* pan/article.h (article_dup): removed unused function.

	* pan/article.c (article_dup): same.

	* pan/article.h (article_copy): same.

	* pan/article.c (article_copy): same.

	* pan/article.h (article_free): same.

	* pan/article.c (article_free): same.

	* pan/tasks: rather than copying articles, up their refcount in the
	task constructor and unref them in the task destructor.


	(QueueItem reorg)

	* pan/everywhere: replace QueueItem with Task, QUEUE_ITEM with TASK,
	and queue_item with task.  Matt, could you rename the files in CVS?


	(Text/Message reorg)

	* pan/queue-item-body.c: we can't share these adatas everywhere if
	we're passing Messages around instead, so queue-item-body now takes
	an adata with secondary arguments on "open in own window" and
	"message type" a la message-window.  Also queue-item-body is smart
	enough now to open the new window itself, rather than delegating
	the work to update_text().

	* pan/text.c (update_text): sync.


2000-03-23  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/article-cache.c (acache_expire_to_size): fix potential infinite
	loop bug.  Thanks to Matthew Cline <matt@nightrealms.com> for the
	patch.

	* pan/queue-item-headers.c (queue_item_headers_run): fix very large
	memory leak that manifested itself when loading article headers from
	groups other than the "active" group.

	(Speed Tweaks)

	* pan/article-db.c (ahdb_get_all_dbfunc): steal the adata's message-id
	string for articles being expired; the adata is only a few lines away
	from destruction, so this is innocent enough and saves us a call to
	g_strdup for each article being expired.

	* pan/article-db.c (ahdb_get_all): pre-allocate an array of pointers
	before loading the article_datas.  This saves us from calls to realloc
	during the loading of articles.

	* pan/queue-item-headers.c (nntp_articlelist_download): same.

	* pan/article-db.c (article_new): use g_chunk() instead of g_new() for
	allocating an adata.  This had been added in a few weeks ago but was
	commented out when tracking down memory errors.  Uncommented back in
	now.

	* pan/article-db.c (article_free): same.

	* pan/queue-item-headers.c (nntp_articlelist_download): use the
	same g_strsplit trick here, as is used in article-db as described
	in the 2000/01/03 changelog entry.

	(New Feature)

	* pan/prefs.c: added "Fast Decode" option.  This option, when enabled,
	will decode faster but assumes there is only one attachment per
	article.  This is a good thing for single-part images, but bad for
	multipart mp3s.  Pan automatically temporarily disables this fast
	decoding if it knows the decode is a mulitpart.

	(UI Tweak)

	* pan/task-manager.c (task_manager_spawn): now when "task manager" is
	clicked a second time, the task manager dialog is de-iconified and
	brought into focus.  Previously we would just create a second task
	manager. :)

2000-03-22  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/queue-item-grouplist (queue_item_grouplist_run): bugfix:
	"Get New Groups" was creating duplicate copies of previously existing
	groups.

	* pan/grouplist.c (grouplist_next_unread_group): fixed bug that caused
	infinite loop whenever user hit "next group with unread messages" and
	there were no groups matching that.  Thanks to Ben De Rydt
	<ben.de.rydt@pandora.be> for submitting the one-liner patch that fixes
	this.

2000-03-22  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fix: Pan now prompts the user if reposts, etc. make it such
	that there is more than one of a given part in a multipart.  The
	user must tell Pan wich post to use for that part.)

	* pan/articlelist.c (articlelist_selected_decode_impl): pass adatas,
	rather than message ids.

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

	* pan/decode.c: DecodeData struct now takes a GSList of article_datas,
	rather than message-ids.  This way we don't have to go to the db to
	get subject, etc. information about the article.

	* pan/decode.h: same.

	* pan/queue-item-decode.c: QueueItemDecode now takes a GSList of
	article_datas, rather than message-ids.  This way we don't have to go
	to the db to get subject, etc. information about the article.

	* pan/queue-item-decode.h: same.

	* pan/queue-item-decode.c (queue_item_decode_validate_and_queue_or_
	self_destruct): long-winded new function.  If there is >1 version of
	a given part to a multipart, the user is prompted to choose which
	post to use for that part.  When the user hits "ok" we continue by
	queueing the message.  Otherwise we unref the task.

	* pan/save.c (save_attachment_as_dialog_clicked_cb): updated to use
	validate_and_queue_or_self_destruct() and to create the decode task
	with a GSList of adatas instead of message-ids.

	(UI Tweaks)

	* pan/articlelist.c (articlelist_set_contents): init the progress
	bar to qty*5 steps, rather than qty*4, so that the progress will be
	shown correctly.

	* pan/task-manager.c (task_manager_spawn): make the task manager a
	singleton.

	(Cleanup)

	* pan/article-thread.c (thread_articles): removed reference to
	obsolete article flag STATE_UNREAD_CHILDREN.

	* pan/article.c (state enums): same.

2000-03-21  Charles Kerr <charles@skywalker.ou.edu>

	Pan 0.8.0 Beta 1 Released.

2000-03-20  Matt Eagleson <emessiah@superpimp.org>

	(Bug Fixes)

	* pan/nntp.c:  Fixed arguments to the log_add
	function on authorization failure.

	* pan/gui.c: Re-enabled Ctrl-D for decode.  And fixed
	up other bindings.
	* pan/articlelist.c: Same.

2000-03-20  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/article-toolbar.c (article_filter_cb): was freeing memory that
	wasn't ours.  This fixes the "crashes in article filter" bug reported
	on Saturday.

	* pan/grouplist.c (grouplist_grep): fixed the analog bug in grouplist.

	* pan/status-item-view.c (status_item_view_destroy): fixed small
	memory leak.

2000-03-18  Charles Kerr <charles@skywalker.ou.edu>

	(Small Tweaks)

	* pan/util.c (fill_paragraphs): removed g_message that had been used
	during debugging.

	* pan/message-send.c (send_cb): make the "sent successfully." dialog a
	child of the main window, rather than the send window, so that it will
	stay up even after the send window's been destroyed.

	* pan/message-window.c (create_post_info_pane): wrap the user's real
	name in quotes, a la "Charles Kerr" <charles@skywalker.ou.edu>


2000-03-17  Charles Kerr <charles@skywalker.ou.edu>

	(Max Connections)

	* pan/queue.c: removed set_max_per_server
	* pan/task-manager.c: same

	* pan/prefs.c: added back in per-server maximums
	* pan/queue.c: same
	* pan/task-manager.c: same

	(Bug Fixes)

	* pan/articlelist.c (passes_article_filter): fix for the bug eto
	reported in the mailing list -- incomplete & complete children were
	getting confused with regular children.

	(UI Tweaks)

	* pan/message-send.c (trim_references): removed a g_message() that was
	left over from testing.  Also added a couple more comments.

	* pan/prefs.c (general): beautified the general tab a little bit by
	adding separators to divide unrelated items.  Left-justified the
	"attribution" label.

	* pan/task-manager.c: #if 0'ed load, remove buttons since it's not
	realistic to get these in & tested before 0.7.7

2000-03-16  Charles Kerr <charles@skywalker.ou.edu>

	(Bug Fixes)

	* pan/druid.c: re-separate the real name from the email name.
	What was I thinking?  It was a bad idea to join them.
	* pan/message-window.c (build_reply_headers): be a little smarter and
	add the real name if it's found and not encountered in the email name.
	We decide this by looking for a '<' in the email name.

	* pan/queue: bugfix: sink the task when it's added.  Previously we
	didn't sink it, and the tasks leaked.

	* pan/message-send.c (trim_references): rewrite to make it less
	malloc-happy and mutilate the original references string less.  This
	also fixes the bad-references bug reported yesterday.

	* pan/task-manager.c (row_moved_cb): fix feedback loop that was
	causing a second task to be moved when the user did a click-and-drag
	to re-order taskss.

	* pan/task-manager.c (up_clicked_cb): if a group of tasks are selected,
	don't let the lower ones move any higher than the previous ones.
	Otherwise when they reach index 0, the latter ones will move *ahead*
	of the previous ones in the selection, and it looks very strange.

	(UI Tweaks)

	* pan/queue.c: added support for a configurable "dedicate one
	connection to only reading articles" setting.
	* pan/task-manager.c: same.

	* pan/message-send.c (check_body): give more information when the
	lines are too wide: now we tell what the widest line was.  This should
	help prevent users from posting paragraphs as single lines.

	* pan/task-manager.c (titlebar): if there's a failed task, show that
	in the titlebar.

2000-03-15  Charles Kerr <charles@skywalker.ou.edu>

	* pan/articlelist.c (popup menu): change from "Save Attachment" to
	"Save Binary Attachment" at the request of John Krause

	* pan/queue.c: took out some g_message() messages that got left in by
	accident.

	* pan/status-item-view.c: updating the socket label constantly was
	causing some gtk pixmap themes (apparently) to get all confused.  Now
	we just update them once per second via a timeout function.

2000-03-14  Matt Eagleson <emessiah@superpimp.org>

	(Bugfix)

	* pan/task-manager.c (update_titlebar_cb): Now we properly lock 
	the GUI before changing the title bar.  This was causing all kinds
	of strange issues.

	* pan/task-manager.c (add_task_to_run_clist): Moved gtk_eventbox
	creation inside the GUI lock... You can never be too careful.

2000-03-14  Charles Kerr <charles@skywalker.ou.edu>

	(Bugfix)

	* pan/task-manager.c: fix feedback loop in the max connection
	spinbuttons.  Added dampen_feedback_loop variable for them.

	(Article "Filling")

	* pan/prefs.c: added support for auto-filling replies and messages
	being read.  Also added support for filling before sending, but I'm
	real nervous about turning that on until after we've gotten some
	user feedack.  I just *know* the algorithm will make the text look
	stupid for someone, and Pan will catch trouble for it.

	(UI Tweaks)

	* pan/gui.c: online/offline menu buttons are now radiobuttons and are
	tied into the queue, so they'll reflect state right if the user goes
	online/offline via the task manager.

	* pan/task-manager.c: show the number of queued/running tasks, in the
	window titlebar, so that you can check on the status of tasks even
	when pan and the task manager are iconized.

	(Queue)

	* pan/server.c: removed "max_connections" from the server struct.
	The task manager's "max connections per server" supercedes this.

	* pan/prefs.c: same.

2000-03-13  Charles Kerr <charles@skywalker.ou.edu>

	(Queue/Task Manager)
	
	* max connections per server now supported
	* aborting running tasks (via a popup in the "running" tab) works
	* requeue failed/aborted tasks works, woo-hoo!

2000-03-12  Charles Kerr <charles@skywalker.ou.edu>

	(Message Filling)

	* pan/util.c (fill_body): new utility.

	* pan/util.c (fill_paragraph): new private utility.
	* pan/util.c (get_paragraphs): same.
	* pan/util.c (get_leader): same.

	* pan/util.c (wrap_long_lines): bugfix: was entering an infinite loop
	when a line, longer than the client-specified width, with no spaces to
	wrap at, was reached.

	* pan/message-window.c: added toolbar hooks for filling the body.
	Also commented out the spellcheck and external editor buttons, because
	those features haven't been written yet.

2000-03-12  Charles Kerr <charles@skywalker.ou.edu>

	(Queue)

	* pan/queue.c: now honors online/offline requests better
	* pan/queue.c: now honors getting/setting/honoring socket max
	* pan/queue.c: added support for a user-specified retry count
	* pan/queue.c: fixed bug where sockets weren't being recycled on fail.

	(Task Manager)

	* pan/task-manager.c: more work on supporting the fail list.  Not done.
	* pan/task-manager.c: added go online/offline button.
	* pan/task-manager.c: added "clear queue" button.
	* pan/task-manager.c: made the queue tab look more like leechftp.

	(NNTP: some housekeeping to get ready for "download group" task)

	* pan/nntp.c (nntp_download_body): moved this back from queue-item-body
	to here where it belongs.  The API takes a StatusItem for reporting
	info, much like the SMTP module does.

	* pan/queue-item-body.c: removed nntp_download_body and instead call
	the version that's now located in nntp.c.

2000-03-11  Charles Kerr <charles@skywalker.ou.edu>

	* pan/queue.c: small code cleanups.

2000-03-10  Charles Kerr <charles@skywalker.ou.edu>

	(Task Manager)

	* pan/task-manager.[ch]: wrote new task manager based on Matt's code
	for the queue manager, and the leechftp user interface.  What works,
	works pretty well: watching queued items, watching running items,
	deleting queued items.  what doesn't work: cancelling running items
	(which doesn't work just because there's no button for it yet)
	and dragging items to re-order in the queue list.

	* pan/status-item-view.c (status_item_view_shutdown): remove the
	pan callbacks here, rather than in siv_destroy, to avoid race
	conditions between callback unregistering and widget destruction.

	* pan/sockets.[ch]: added socket statistics.

	* pan/pan-callback.c (pan_callback_call): added slightly better
	checks to make sure we don't get a race condition between callback
	unregistering and callback calling.  This code still isn't perfect,
	but is safer than what we had before.


2000-03-09  Charles Kerr <charles@skywalker.ou.edu>

	(Queue)

	* pan/queue.[ch]: added QUEUE_TASK_STATUS_ABORTING.

	* pan/queue.c (real_queue_task_remove): if the item is running, just
	change its state to abort and send the task an abort message.  If
	there's no thread id for the task, that means it's done
	running/aborting so unref the task and remove it from our list.

	* pan/queue.c (queue_run_thread): handle cleanup of tasks better
	in the light of yesterday's changes (where requests are delegated to
	the main thread).  If a task is aborted it's moved to the 'failed'
	list; if it was a socket error, it's requeued; if it was successful,
	it's removed from the queue.

	* pan/queue.c (queue_get_socket_for_task): use the sockets list mutex
	properly.

	* pan/queue-item-body.c: added support for "abort"

	* pan/queue-item-headers.c: added support for "abort"

	* pan/queue-item-grouplist.c: added support for "abort"

	* pan/queue-item-decode.c: added support for "abort"

2000-03-08  Charles Kerr <charles@skywalker.ou.edu>

	(Queue)

	* pan/queue.c: another significant reworking.  After Matt's rewrite
	to use fine-grained mutexes the deadlocks went away, but we no longer
	were guaranteed the contents of the queue at any given time.  The new
	approach is to defer all the queue manipulation tasks to the queue
	thread.  This way we can know, in callbacks, that the queue structure
	won't be changing underneath our feet (such as indices invalidated
	or Tasks are being destroyed while we're looking at them.

	(Expired Articles)

	* pan/queue-item-body.c (queue_item_body_run): when we get an error
	reading an article from the network, and the user has selected that
	article as a high priority (ie, to show up when it's loaded), then
	place the error message in the text window.  This works, frinstance,
	with "The article may have expired." messages.

2000-03-06  Jason Leach  <leach@wam.umd.edu>

	* pan/grouplist.c (grouplist_server_selected): fixed a small mem
	leak, woo!
	
2000-03-06  Charles Kerr <charles@skywalker.ou.edu>

	(Queue Bugfix)

	* pan/queue.c (sockets_upkeep): we were destroying sockets while
	walking through the list; this was guaranteed to invalidate the
	walk iterator.  Now we build a "cull" list and free them after we've
	walked through the sockets list completely.  This should fix tov's
	bug from Sunday.

2000-03-05  Charles Kerr <charles@skywalker.ou.edu>

	(Tweaking Queue)

	* pan/queue.c (queue_task_pause): now seems to work, at least for
	changing queued task to paused ones.  Pausing a running task is going
	to be a much bigger job, since all the task classes will need to
	listen for "pause" messages.

	* pan/queue.c (queue_task_unpause): same.

	* pan/queue-manger.c (popup menu): added "unpause" item, works

2000-03-04  Charles Kerr <charles@skywalker.ou.edu>

	(The New Queue Starts to Take Shape)

	* pan/queue.c: complete rewrite of queue.c.  Retains many of the same
	ideas as the old version, but this has different structures and
	supports the new queue API Matt and I hashed out.  This seems to work
	for basic use, but needs a good deal of testing.  See the top of
	queue.c for more information.

	* pan/pan-object.c (pan_object_sink): made this more gtk-like with
	respect to sinking an object lowering its refcount by 1 if it was
	previously floating.  Updated all calls to pan_object_sink to call
	pan_object_ref first, just as Gtk does with gtk_object_sink and
	gtk_object_ref.

2000-03-03  Charles Kerr <charles@skywalker.ou.edu>

	(Queue Manager API)

	* pan/queue.h: reworked the sample API again.  Matt and I agree on
	this version and are going to start doing the front and back ends,
	respectively.

	(Bug fixes)

	* pan/decode.c (decode_articles): "chdir" was happening outside of
	the decode lock, so files were sometimes winding up in the wrong
	directory.

	* pan/prefs.c (prefs_servers_changed): unconditionally call
	sever_menu_update(); otherwise, the updated server information doesn't
	get saved back to the ~/.gnome/Pan file.

2000-03-02  Charles Kerr <charles@skywalker.ou.edu>

	(Dead code removal)

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

	* pan/gui.c (replace_checkbox): same.

	* pan/status-item-view.c (count_children): same.

2000-03-02  Charles Kerr <charles@skywalker.ou.edu>

	(Save Attachment As dialog: a dialog to customize where, and with
	what name, you save an article.  The old prefs option "use subject
	as filename" has been absorbed into this, and I've duplicated the
	"Save Attachment" and "Save Attachment As..." menu itmes in the
	File menu.  Lastly, the menu items now sensitize correctly depending
	on whether we've selected a binary article or not.)

	* pan/decode.h (DecodeStruct): added "path" field.

	* pan/prefs.h (use_subject_as_filename): removed unused prefs option.

	* pan/queue-item-decode.c (queue_item_decode_new): changed constructor
	arguments.  Now the user must pass in a path and a filename.  If the
	path is NULL, then the decode object falls back on the group prefs,
	and then finally on the global download directory.  If the filename is
	NULL, then the encoded filename is used.

	* pan/save.c (save_attachment_as): new utility to let the user specify
	where, and under what names, an attachment should be saved. 

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

	* pan/articlelist.c (articlelist_selected_decode_impl): removed
	unused "prompt for filename" argument.

	* pan/articlelist.c (articlelist_selected_decode_impl): removed the
	restriction that you can only queue an article for decoding once.
	It doesn't make much sense, but it's possible that the queueing flag
	got corrupted.  At least this way we don't refuse to decode a message
	that the user wants decoded.

	* pan/articlelist.c (articlelist_selected_decode_as): rewritten to
	take advantage of save.c's "save_attachment_as" function.

	* pan/decode.c (decode_article): general cleanups; removed the
	"use_subject_as_filename" pieces.

	* pan/gui.c (file_menu): added "Save Attachment" and
	"Save Attachment As" for the people who couldn't find it in the
	articlelist popup menu or in the Message menu. :)

	* pan/gui.c (file_menu): 80-column beautification.
	* pan/gui.c (help_menu): same.
	* pan/gui.c (article_sort_menu_2): same.

	* pan/gui.c (gui_articlelist_group_changed_cb): set the
	"Save Article", "Save Attachment", and "Save Attachment As"
	menu items to be sensitized properly depending on whether the
	user has selected no article, a text article, or a binary article.

	* pan/prefs.c (PrefsStruct): removed subject_as_filename_cbutton;
	that prefs option is no longer used.

	* pan/prefs.c (prefs_update): removed "use subject as filename"
	update code

	* pan/prefs.c (prefs_init): removed "use subject as filename" init code

	* pan/queue-item-decode.c (queue_item_decode_destructor): free the
	path and filename variables now used by queue_item_decode.

	* pan/queue-item-decode.c (queue_item_decode_new): now receives and
	keeps copies of user-specified path and filename.  As described above
	if either of these is NULL, the decode item falls back on user
	preferences for the download dir, and the encoded filename for the
	filename.

	* pan/save.c (SaveAsDialogStruct): new internal function for
	"Save Attachment As..." functionality.
	* pan/save.c (save_attachment_as_dialog_clicked_cb): same.
	* pan/save.c (append_groupname_toggled_cb): same.
	* pan/save.c (last_save_as_path_rb_toggled_cb): same.
	* pan/save.c (save_attachment_as_dialog_destroy_cb): same.
	* pan/save.c (user_specified_path_changed_cb): same.
	* pan/save.c (create_save_attachment_as_dialog): same.
	* pan/save.c (save_attachment_as): same.

	(article utilities)

	* pan/article.c (article_add_flag_from_message_id): new utility for
	adding a flag to a message when you don't have an adata handy.
	Convenient, but expensive in that it must go to the database and
	instantiate an article_data for this.

	* pan/article.c (article_remove_flag_from_message_id): new utility for
	removing a flag to a message when you don't have an adata handy.
	Convenient, but expensive in that it must go to the database and
	instantiate an article_data for this.

2000-03-01  Charles Kerr <charles@skywalker.ou.edu>

	(chunks)

	* pan/article.c (article_new): use a GMemChunk for faster allocation
	of article_data objects.

	* pan/article.c (article_free): same.

	* pan/group.c (group_new): use a GMemChunk for faster allocation of
	group_data objects.

	* pan/group.c (group_free): same.


	(grouplist)

	* pan/grouplist.c (grouplist_free): removed unused function.

	* pan/grouplist.c (grouplist_load): made this run it in its own thread;
	now it creates a StatusItem to keep the user appraised of how the
	group loading is coming along.


	(GSLists and GPtrArrays)

	* pan/article-db.c (ahdb_get_all): now uses a GPtrArray instead of a
	GSList.  This lessens the overhead of getting a new GSList* for every
	article and also makes obtaining the article qty free.

	* pan/article-db.c (ahdb_save_all): now uses an article_data** instead
	of a GSList, because most of the rest of Pan is using GPtrArrays of
	articles instead of GSLists of articles now.

	* pan/article-db.h: sync.

	* pan/article-thread.c (thread_articles): some nice cleanup due to the
	fact that we're passed in an article_data**, instead of a GSList, so
	we don't have to build a reference array by hand.

	* pan/article-thread.h: sync.

	* pan/articlelist.c (articlelist_load): Use GPtrArrays instead of
	GSLists for article loading and handling.

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

	* pan/articlelist.h: sync.

	* pan/queue-item-headers.c (queue_item_headers_run): same.

	* pan/queue-item-headers.c (nntp_articlelist_download): same.

	* pan/queue-item-headers.h: sync.


	(other speedups)

	* pan/article-db.c (article_deserialize): put back in the
	keep-g_strsplit's-pointers trick.  These were taken out awhile back
	when memory was a concern and before Purify.  The trick has a
	noticable speedup.

        
2000-02-26  Charles Kerr <charles@skywalker.ou.edu>

	(queue)

	* pan/queue.h: stubbed in the first draft of an API for queue
	management.  It tends to give a lot of flexibility to the client
	code.  Jason, Matt, check it out and let me know what you think.
	If it's good, I'll start implementing the backend and Jason can work
	on the GUI as we agreed.

	(error handling)

	* pan/pan-db.c: changed some g_assert()s to g_return_if_fail()s.

	* pan/queue-item-headers.c (nntp_articlelist_download): make sure we
	have a non-empty message-id, subject, etc. before allowing the article
	to be saved.

	(toolbar entry filters)

	* pan/grouplist.c (grouplist_grep): if the user has just entered in
	spaces or something in the grouplist, don't actually perform a filter.
	No groups have spaces in their name and the usual result is a "where
	are my groups?" bug report.

	* pan/article-thread.c (article_filter_cb): likewise, don't filter out
	articles if the article subject entry field is just a bunch of spaces.
	This was confusing behavior -- because spaces are invisible, there's no
	visual feedback about why the articles aren't showing up.

2000-02-25  Charles Kerr <charles@skywalker.ou.edu>

	(single-click group loading)

	* pan/grouplist.c (grouplist_select_row): handle single-click group
	loading.

	* pan/prefs.c (prefs_apply_cb): let user specify whether or not to
	do single-click group loading.
	* pan/prefs.c (prefs_init): same.
	* pan/prefs.c (prefs_general_page): same.

2000-02-24  Charles Kerr <charles@skywalker.ou.edu>

	(bug fixes)

	* pan/articlelist.c (apply_filter_tests): fixed bug that was keeping
	nodes 2..n of a multipart binary from being shown in the articlelist
	even when the preferences option said they should be shown.

2000-02-23  Charles Kerr <charles@skywalker.ou.edu>

	(bug fixes)

	* pan/prefs.c: fixed external_mailer==NULL in strcmp bug.  We now check
	for null after calling gnome_config_get_string() to get the values of
	external_mailer and external_editor.

	(new utility)

	* pan/util.c: pan_strcmp, a NULL-safe version of strcmp.

2000-02-22  Charles Kerr <charles@skywalker.ou.edu>

	(gnksa)

	* pan/message-window.c: in the compose text widget, turn off word and
	line wrapping.  This is to make sure that what the users sees is what
	gets posted.  I've seen one complaint on the mailing list, and another
	in Usenet, about users posting very wide messages in Pan, so perhaps
	this will help that.

	* pan/message-send.c: a loophole in the previous validation code lets
	people post a message with an empty "From:" line.  This has been fixed.

	These are the only two "must" items that showed up as failures in my
	evaluation of Pan today.  I'll hold off on a formal submission until we
	get these two features into a public release, which hopefully will be
	soon. :)

	(configure problems)

	* macros/gnome.m4: give more helpful/descriptive error message when
	gnome-config not found.  This has shown up on Usenet and on the mailing
	list.

