2004-01-29  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (get_channel_icon): If we're requesting a scaled
	icon and we got None back, pass it through.  When getting the icon
	from the daemon, handle an invalid_channel fault if we're
	asynchronously requesting a channel icon for a channel that might
	have disappeared.

	* red_transaction.py (TransactionArray): Make this derive from a
	ServerListener.
	(TransactionArray.refresh): Added, removes any packages from the
	pending ops if its channel is no longer there.
	(TransactionArray.channels_changed,
	TransactionArray.packages_changed): Added, calls self.refresh().

2004-01-22  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (AppWindow.load_geometry): When setting the
	window's default size, cast the result to int since we're
	multiplying by a float.

	* red_depcomponent.py (DepComponent.display_license_window): Wrap
	the call to dialog.run() and dialog.destroy() in
	gtk.threads_enter() and gtk.threads_leave().

	* red_mount.py (mount_channel): Cast the recursive parameter to an
	int since it's a boolean in python 2.3.

	* red_pendingview.py (PendingView_Simple): Fix up the polling so
	that it works better in Python 2.3 and doesn't excessively hit the
	daemon.

	* ximian_xmlrpclib.py (Marshaller): Marshal boolean values to make
	Python 2.3 happy.

2004-01-20  Joe Shaw  <joe@ximian.com>

	* red_depcomponent.py (check_licenses): Call
	display_license_window() with the right number of arguments.

2004-01-15  Joe Shaw  <joe@ximian.com>

	* red_about.py, red_depview.py: Explicitly encode some python
	unicode strings as UTF-8 since they're not automatically encoded
	by pygtk on RHEL 3.0 for some reason.

2004-01-14  Joe Shaw  <joe@ximian.com>

	* red_packageview.py (_ShowChannelNames.__init__): Use
	config.getboolean() so we can properly handle loading python 2.3's
	boolean values from the config file.

	* red_searchbox.py (_ShowAdvanced.__init__): Ditto.

	* red_sidebar.py (SideBar.__init__): Ditto.

2003-12-05  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (AppWindow.__init__): Cast the sidebar
	request to an integer to avoid a deprecation warning on
	Python 2.3.

2003-12-03  Joe Shaw  <joe@ximian.com>

	* red_prefs.py (CellRendererPref.on_activate): Don't call a cell
	renderer's activate method if event is None, since it'll
	traceback.  We get this on keyboard events, and just not calling
	it seems to work okay.

2003-10-30  Joe Shaw  <joe@ximian.com>

	* red_connection.py: Set the required rcd version to 2.0.0.

2003-10-28  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (filter_package_dups): Remove this, it wasn't being
	used anywhere.

	* red_packagearray.py (UpdatedPackages.get_packages_from_daemon):
	Filter out duplicates so we don't show two identical updates in
	the list.  Needed for the change to libredcarpet.

2003-10-17  Joe Shaw  <joe@ximian.com>

	* red_pendingops.py (package_action): We need to compare package
	keys, not their names, when we're getting the action for a certain
	package.  Fixes #49803.

2003-10-03  Joe Shaw  <joe@ximian.com>

	* red_depcomponent.py (DepComponent): Change over a few things to
	use serverproxy.

	* ximian_xmlrpclib.py (RawTransport): Fix a potential fd leak.

2003-10-02  Joe Shaw  <joe@ximian.com>

	* red_activation.py (activate_finished_cb): We don't actually care
	about the return value from the activation call anymore... if
	there's an error, it'll be thrown as a fault.

	* red_pendingview.py (PendingView.poll_worker): We want to assert
	out if poll_worker() isn't defined, not just return 0.
	(PendingView_Simple.set_pending_list): If the pending list we get
	is empty, just finish right now, since we have nothing to poll.

2003-09-25  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (get_channel_icon): Remove a FIXME and a hack around
	channel wildcards.

	* red_channeloption (is_channel_wildcard): Added.  Checks whether
	the channel id matches one of the wildcards (MATCH_ANY_CHANNEL,
	etc.).
	(is_valid_channel): Checks whether the channel id is set and that
	it's not a wildcard.
	(ChannelOption.__assemble): Only get the channel icon if it's not
	a wildcard.

	* red_searchbox.py (SearchBox.get_query): Check if the channel ID
	is valid, not > 0.  Remove some useless assignments.
	(SearchBox.get_filter): Fix a bunch of numeric channel ID
	comparisons to use is_valid_channel() and such.

	* red_services.py: Forgot to add this yesterday... Adds various
	classes for dealing with services.  ServicesModel is a
	red_listmodel similar to ChannelModel.  ServicesWindow is for
	editing services.  ServicesOption is used in activation when the
	user needs to pick a specific service.

2003-09-24  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (get_channel, get_channel_icon): Enforce that
	channel ids be strings.  Man, times like this I wish Python were
	strongly typed.
	(fetch_channels): Don't add hidden channels to the list of
	available channels.
	(reset_services, fetch_services, get_all_services): Added,
	gets the list of services from the daemon and caches it.
	(refresh): Update for refresh API change.
	(fault): Add new faults.

	* red_activation.py: Add a ServicesOption so the user can select
	what service to activate against.  Add a bunch of code to handle
	sensitization when there are no services set.
	(activate): Update for activation API change.

	* red_appwindow.py (activate_sensitize_fn): Desensitize the
	Activate menu option when there are no services.
	(assemble_menubar): Add Edit -> Services...

	* red_channelmodel.py (COLUMNS): Make the ID column a string, not
	an int.  Add "hidden" and "mounted" columns, remove "transient".

	* red_channeloption.py (set_channel_by_id): Change a format
	specifier to %s from %d for a channel id.

	* red_connection.py: Require rcd version 1.5.1 and protocol
	version 2.

	* red_depcomponent.py (begin_transaction): Update for transact API
	change.

	* red_mount.py (mount_channel): Get the aliases by mapping the
	result of get_channel_alias(x["id"]), not the value of the
	function itself.  Update for API changes.
	(has_mounted_channels): Check the "mounted" property, not
	"transient".
	(MountWindow): Add a checkbox to get packages recursively in
	mounting packages.
	(UnmountWindow): Get the "mounted" property, not "transient".

	* red_pendingview.py (PendingView.update): Don't show size info if
	total_size is <= 0.

	* red_prefs.py (PrefsViewPage_General): Remove the "Server"
	section, since that stuff is in Edit->Services now.  Add in
	refresh interval.
	(PrefsViewPage_General): Add in rollback checkbox.

	* red_searchbox.py (SearchBox): Add some warnings of comparisons
	to fix.

	* red_serverlistener.py (set_world_seqnos): Take a lock argument
	and set it.
	(check): Reset the services as well as the channels.
	(poll_cb): Don't call lock_sequence_number() anymore... it doesn't
	exist, and we get it from world_sequence_numbers()
	(lock_seqno_cb): Nuke this.

	* red_subscriptions.py (SubscriptionsView.__init__): Fix a typo in
	which we were calling set_sensitive() instead of set_shadow_type().

2003-09-16  Joe Shaw  <joe@ximian.com>

	Patch from Marcin Krzyzanowski <krzak@linux.net.pl>

	* red_depcomponent.py (DepComponent): red_component.Component
	already inherits from gobject.GObject, so don't do it again.

	* red_settings.py (RCConfig): Add a getboolean method which
	accepts "true", "on", "yes", "1".
	(DaemonData): Call getboolean() for getting whether the daemon
	we're talking to is local.

2003-09-05  Joe Shaw  <joe@ximian.com>

	* red-carpet.in: Get the locale dir and pass it into
	red_gettext.py.

	* red_gettext.py: Add an init function which takes the localedir
	and sets up the translation class.  This should get i18n working
	in more cases.  Call t.gettext() instead of t.ugettext().

	* red_activation.py, red_connection.py, red_mount.py,
	red_users.py: Replace calls to gtk.Table.attach_defaults() to
	gtk.Table.attach() to avoid a deprecation warning.

2003-09-05  Joe Shaw  <joe@ximian.com>

	* red_connection.py (connect_real): Check the protocol version and
	pop up an error dialog if it doesn't match.

2003-08-07  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (get_channel_icon): import gobject and put the
	gdk-pixbuf loader functions in a try-except block so we can
	correctly handle when we get invalid data from the daemon.  Should
	fix #43143, #44985, and #45133.

2003-06-12  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (assemble_menubar): Change "Connect..." to be
	"Connect to daemon..." to be more clear.  Fixes #40205.

2003-06-10  Tambet Ingo  <tambet@ximian.com>

	* red_connection.py (check_rcd_version): Require rcd version
	1.4.1. (require rcd.mirror.get_all()). Fixes #44350.

2003-06-04  Joe Shaw  <joe@ximian.com>

	* red_depview.py (escape_markup): the python equivalent of
	g_markup_escape_text() for passing strings to a gtk markup
	function.
	(DepView.add_note): Escape the notes, since they frequently
	contain things like < and >.

	* red_pendingview.py: Add an unscientific but useful total
	progress bar.  Fixes #40419.

2003-06-04  Joe Shaw  <joe@ximian.com>

	* red_connection.py (StartDaemon.run): Fix an instance where we
	were returning None instead of 0.
	(start_daemon): If the user cancels the start, return -1.
	(connect_from_window): Try to connect if start_daemon() doesn't
	return -1.

2003-06-03  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (build): Get the GtkSettings and set the
	toolbar style and icon sizes and connect to the notify signal for
	those properties so we can automatically update whenever they're
	changed.  Fixes the rest of #43231.

2003-06-03  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (build): Set the statusbar on the menubar.
	(assemble_menubar): Set a description property for all the menu
	items.

	* red_menubar.py (set_statusbar): Added.  Associates a statusbar
	with a menubar.
	(add): Take a "description" property to be displayed in the
	statusbar.
	(walk_tree): If the menubar has an associated statusbar and the
	item has a description, connect to the menu item's select and
	deselect signals and push messages onto the statusbar.  Fixes part
	of #43231.

	* red_search.py, red_software.py: Add ability to select all/none.
	Part of #43231.

	* red_statusbar.py: Import red_gettext since we have a
	translatable string here.
	(set_connected): Push the "Connected to foo" message onto the
	statusbar stack.  Fixes #40468.

	* red_transaction.py (TransactionComponent): Add ability to select
	all/none.  Part of #43231.

2003-06-03  Joe Shaw  <joe@ximian.com>

	* red_serverproxy.py (ServerThread.run): Also re-raise xmlrpc
	faults if RC_ALWAYS_RAISE_FAULTS is set.  Be less-encompassing
	with the dead daemon dialog, only catching a few socket and
	protocol-related exceptions so we can shake out a few more bugs.

	* red_thrashingtreeview.py (post_thrash_model): Only do all the
	cursor/selection stuff if we have a model.

2003-06-02  Joe Shaw  <joe@ximian.com>

	* red_pendingview.py: Use "transaction" instead of "update"
	because the user might just be removing things.  Fixes #42731.

	* rcd_util.py (byte_size_to_string): Use proper units for kB and
	MB.  Fixes #42283.

	* red_thrashingtreeview.py (pre_thrash_model): Save the items, not
	their paths for restoring post-thrash.
	(post_thrash_model): Do a couple passes over the list's items to
	set the cursor and selection so that selected items are maintained
	across a thrashing (a re-sort or a change in the daemon).  Fixes
	#43543.

2003-06-02  Joe Shaw  <joe@ximian.com>

	* red_pendingview.py (PendingView_Simple): Poll every 150ms.  Take
	it easy on the polling; make sure we only do it on the interval,
	not several times a second.  Fixes #42931.

2003-05-27  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (refresh): Improve error message slightly.

	* red_searchbox.py (__assemble_status_option): Make all_cb() the
	default status filter

	* rcd_util.py (refresh): Move the refresh function here.  We have
	to do an on-demand import of red_pendingview because of circular
	import issues though, boo.

	* red_activation.py (activate_finished_cb): If we successfully
	activated, refresh the channel data.  (Fixes #43740)

	* red_appwindow.py (refresh_cb): Moved to rcd_util.py.
	(assemble_menubar, assemble_toolbar): Call rcd_util.refresh().

	* red_prefs.py (PrefsViewPage_General): Save the old host and add
	a flag indicating if the host has changed.  Connect to the
	window's destroy signal to fire off a refresh if the host info has
	changed.  Connect to the host entry's focus_out event and the
	enable premium checkbox's toggled signal to set the host_changed
	flag.  Also do that when changing the mirror.  (Fixes #40644)

2003-05-20  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (dialog_from_fault): Take a generic "error_text"
	argument to specify what the larger error is, and an
	"additional_text" argument for additional info, like suggestions
	on how to fix the problem.  Also don't do linebreaking ourselves,
	the GtkMessageDialog will take care of that for us.

	* red_activation.py (activate_finished_cb): Pass in some
	error_text and additional_text to the fault dialog.

2003-05-19  Joe Shaw  <joe@ximian.com>

	This commit fixes most of #43231.

	* red_news.py: HIGify the layout of the news within the dialog.

	* red_packagebook.py: Use the Close button instead of OK.  Don't
	set the main page's background to white, it violates all sorts of
	themes.

	* red_packageview.py: Get rid of the event parameter to the popup
	signal; it isn't used.  Connect to the popup-menu signal (for
	shift-f10) and pop up the menu.  Add mnemonics for the items.

	* red_prefs.py (PrefsViewPage.create_section): Added.  Does all
	sorts of nasty layout crap with hboxes and vboxes to make it HIG
	happy.  Returns a tuple of the toplevel widget and the widget to
	pack content into.
	(PrefsViewPage_General, PrefsViewPage_Cache): Get rid of the
	frames and use bold labels and indention for HIG compliance.

	* red_statusbar.py: Don't stretch the image, just use it as is.

	* red_subscriptions.py: Use Close button instead of OK, add some
	padding for HIG conformance.

2003-05-15  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (which): Added.  Basically equivalent to the
	which tool: returns the first instance of "file" in PATH.
	(help_cb): Refactor this so we don't block when certain help
	programs are run, and try to support more help programs, including
	Red Hat's htmlview and KDE's khelpcenter and netscape on CDE.
	Fixes #42895 and probably #42943
	(assemble_menubar): Drop the Control-W shortcut for news.
	Conflicts with what is normally "Close Window". Fixes #42703

	* red_depcomponent.py: Set wordwrap mode on the license window,
	since we're going to remove the formatting info.

	* red_searchbox.py: Make "All Packages" the default for Search.

	* red_transaction.py (ok_to_quit): Set the quit confirmation
	dialog's parent to the main app window.

2003-05-09  Joe Shaw  <joe@ximian.com>

	* red_connection.py (check_rcd_version): Require rcd 1.4.0.

	* red_searchbox.py (filter_fn): If the __uninstalled_packages_only
	flag is set and a channel is selected, actually filter out
	packages which don't match the channel.  Fixes #42667.

2003-05-09  Joe Shaw  <joe@ximian.com>

	* red_sidebar.py: Get rid of the frame around the "Pending
	Actions" list in the sidebar.  It is discouraged by the HIG and
	makes the GUI look less busy.

2003-05-01  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py: Make the sidebar request 1.5 times its normal
	size so we have a decent default.  Change it back so that the
	content area is resized when the window is resized.  Change it
	back so that the content area is shrinkable.
	(load_geometry): If we don't have any saved window geometry, make
	a best guess at a good default size so we can get all the tabs and
	have a nice aspect ratio.

	* red_componentbook.py: Make our notebook scrollable.

	* red_main.py: Don't set the default window size here anymore.

2003-04-30  Joe Shaw  <joe@ximian.com>

	* red_channeloption.py: The channel ID parameter is a string in
	libredcarpet/rcd HEAD, so change it in the signal definition.

	* red_searchbox.py (__assemble): Fix typo, we *don't* want the
	"No/Unknown channel" option when browsing available software.

2003-04-29  Joe Shaw  <joe@ximian.com>

	* red_my_computer.py: Renamed to red_software.py

	* red_summary.py: Renamed to red_updates.py; renamed
	SummaryComponent to UpdatesComponent.

	* red_main.py: Fix up for renamed files.

2003-04-28  Joe Shaw  <joe@ximian.com>

	* *.py: Use gtk.SHADOW_IN for all scroll windows (Fixes #41979).

	* red_appwindow.py (AppWindow.build): Change the pane resizing
	rules so we can never resize the right pane smaller than the width
	of the notebook.
	(package_info_cb): Pass in the appwindow as the parent window.

	* red_depcomponent.py: Use less harsh yellow and red for the
	dependency resolution view.  Add a margin for the text in dep
	failure.

	* red_main.py: Change "MyComputerComponent" to
	"InstalledComponent" and add "AvailableComponent".

	* red_my_computer.py: Rename MyComputerComponent/System Packages
	to InstalledComponent/Installed Software.  Add an Available
	Software component for not installed packages.

	* red_packagebook.py (show_package_info): Take a parent parameter
	and pass it off to the dialog constructor.

	* red_packagepage_deps.py: Use less harsh green, yellow and red
	for package dependency info.

	* red_packageview.py (do_popup): Find out or toplevel window and
	pass it in as the parent to red_packagebook.show_package_info().

	* red_searchbox.py (SearchBox): Add a uninstalled_packages_only flag
	to the constructor.

	* red_serverinfo.py (select_and_dump): Make the file selector
	transient for the main window.

	* red_sidebar.py (update_label): Fix a cut-and-paste-o where it
	should show the number of installs as the number of removals too.

	* red_summary.py: Add a mnemonic for the Update All button.

2003-04-24  Joe Shaw  <joe@ximian.com>

	* red_about.py (contributors): Add Jakub to the list.
	(About): Try to make this a little less ugly.

	* red_depcomponent.py (check_licenses): Check to see if we have to
	agree to any licenses and pop up a dialog with the text if we do.
	If the user agrees, proceed with the transaction.
	(build_normal_page): When "Continue" is clicked check licenses,
	don't run the transaction.

2003-04-24  Tambet Ingo  <tambet@ximian.com>

	* red_pendingview.py (PendingView_Transaction.update_transaction):
	Set __working_query when starting a poll, DOH! Fixes #40312.

2003-04-18  Joe Shaw  <joe@ximian.com>

	* rcd_util.py: A bunch of channel-related checks so we can work
	against daemons that have both numeric and string channel ids.
	(get_package_channel_name): Just check for boolean value of
	pkg["channel"], not if it's greater than 0.
	(get_package_channel_icon): Ditto.
	(is_system_package): Default the channel id to an empty string and
	check for boolean value, not 0.  Also fix a typo, "quess" to
	"guess".
	(get_package_key): Default the channel id to an empty string and
	pass in a string to the package key.
	(pkg_to_key): Pass in a string for the channel id.
	(filter_package_dups): Check boolean value, not equality to 0.

2003-04-16  Tambet Ingo  <tambet@ximian.com>

	* red_componentbook.py (ComponentPage.__init__): Set border
	width for main container.

	* red_summary.py (SummaryComponent.build): Add often requested
	"Update All" button.
	(SummaryComponent.update_all): Update everything.

2003-04-16  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (help_cb): Prefer gnome-help to gnome-moz-remote.

2003-04-16  Joe Shaw  <joe@ximian.com>

	* red-carpet.in: Set up the help path, and set it in red_main.

	* red_appwindow.py (help_cb): Added.  Tries to launch a help
	browser application with the help in the user's locale.
	(assemble_menubar): Add a "Contents" item to the "Help" menu.

	* red_main.py: Add a help_path parameter, set by red-carpet.in and
	read by red_appwindow.py:help_cb().

2003-04-15  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (get_package_channel_icon): Use the empty icon
	scaled to 24x24 if there isn't a channel for the package, so we
	can ensure that all of our rows are the same size.

	* red_appwindow.py (set_title): No real need to pass a title in
	here, just get it from red_main.
	(assemble_menubar): Update some accelerators and access keys.

	* red_component.py: Get rid of the long_name(); we don't use it
	anymore.

	* red_depcomponent.py: Update for long_name change.

	* red_history.py: Get rid of the component's bold title, it's
	clear from the notebook now.

	* red_my_computer.py: Change "My computer" to "System Packages",
	don't pass in a title to the searchbox anymore.

	* red_search.py: Get rid of the long name, don't pass title to
	searchbox anymore.

	* red_searchbox.py (SearchBox.__init__): Don't take a title
	argument anymore, we don't need it.  Make the channel selector
	fill the row... not sure if this is good yet or not.

	* red_sidebar.py: Change "Installations and Removals" to "Pending
	Actions".

	* red_summary.py: Get rid of long name, update accelerator and get
	rid of "Summary", since it's not a summary anymore.  Don't show a
	title since it's clear from the notebook now.

	* red_transaction.py: Change "Installations and Removals" to
	"Pending Actions".  Get rid of the title since it's clear from the
	notebook now.

2003-04-15  Jon Trowbridge  <trow@ximian.com>

	* red_appwindow.py (AppWindow.assemble_toolbar): Desensitize the
	refresh button when the dependency component is visible.

	* red_appwindow.py: Instead of managing components itself, the
	appwindow now uses a componentbook to get a tabbed UI.

	* red_sidebar.py: Removed a lot of code related to the shortcut
	bar, which we no longer use.

	* red_componentbook.py: Added.  A tabbed widget for displaying
	components.

2003-04-15  Tambet Ingo  <tambet@ximian.com>

	* red_news.py (NewsWindow): Remove News component, add News
	window.

	* red_main.py (main): Don't register News component.

	* red_appwindow.py (AppWindow.assemble_menubar): Add RC News.

2003-04-11  Joe Shaw  <joe@ximian.com>

	* red_actionbar.py: Default to ICON_SIZE_MENU, not BUTTON.

	* red_appwindow.py (assemble_toolbar): Update channels icon.
	(assemble_actionbar): Fix the icon sizes.
	(assemble_menubar): Add icons for Install from File, Install from
	URL, Users, and update the channels icon.

	* red_channeloption.py (ChannelOption.__assemble): Update
	subscribed icon.

	* red_connection.py: Update text to not mention "daemon".

	* red_packagearray.py: Update installed and not installed icons,
	temporarily turn off newer and older icons.

	* red_packageview.py (append_status_column): Turn the status icon
	back on by default.

	* red_pendingview.py: Be more explicit about expand, fill, and
	padding parameters to Box.pack_start().  Fix it so the text box
	expands as the dialog is resized.  Fixes #41028.
	(PendingView_Transaction.transaction_finished): Allow the finished
	text to be selected.  Fixes #41035.

	* red_sidebar.py: Mark the pending install/removal text for
	translation.
	(ShortcutBar): Make the side of the buttons MENU, not BUTTON.

	* red_summary.py: Use "updates" pixbuf, not "summary".

2003-04-07  Tambet Ingo  <tambet@ximian.com>

	* red_thrashingtreeview.py (TreeView.sort_by): Fix sorting by
	channel. Less magic.
	(TreeView.add_column): Ditto.
	(TreeView.get_column_by_sort_id): Prefer visible column. Fixes
	problem with sort indicator for channels column.

2003-04-04  Tambet Ingo  <tambet@ximian.com>

	* red_searchbox.py (SearchBox.__assemble_section_option): Mark
	section names for translations.

2003-04-02  Joe Shaw  <joe@ximian.com>

	* red_connection.py (connect_from_window): Actually make starting
	the daemon work again.
	(StartDaemon.run): Catch exceptions when trying to kill the daemon
	in case it isn't there anymore.
	(StartDaemon.wait_for_daemon_cb): Catch exceptions when trying to
	read from the pidfile and make sure we close it when we're
	finished.

2003-04-02  Tambet Ingo  <tambet@ximian.com>

	* red_pendingops.py (clear): Remove package from package_data
	list if it doesn't have any other keys set. (Fixes #40620).

	* Makefile.am (red_carpetsupport_DATA): Add red_statusbar.py.

	* red_statusbar.py: New file for custom statusbar. (Fixes #40468).

	* red_connection.py (ConnectionNotify): Dumb new class to emit
	signals notifing new rcd connection.
	(connect): Notify the world we have a new server.

	* red_appwindow.py (AppWindow.__init__): Create the new custom
	statusbar.

2003-04-01  Joe Shaw  <joe@ximian.com>

	* red_about.py (About): Set the window title and icon.

	* red_appwindow.py (assemble_menubar): Only show the about box
	once.  (Fixes #40640)

	* red_connection.py (ConnectionWindow): Set the window title and
	icon.

	* red_main.py: Add a get_title() method.

2003-04-01  Jon Trowbridge  <trow@ximian.com>

	* red_mirrors.py: Added.  Code for the mirrors dialog.

	* Makefile.am (red_carpetsupport_DATA): Added red_mirrors.py.

	* red_prefs.py (PrefsWindow.__init__): Pass the parent window into
	the PrefsView.
	(PrefsView.__init__): Store the parent window.
	(PrefsView.build): Propagate the parent window into the
	PrefsViewPages.
	(PrefsViewPage_General.__init__): Store the parent.
	(PrefsViewPage_Cache.__init__): Ditto.
	(PrefsViewPage_Advanced.__init__): Ditto.
	(PrefsViewPage_General.build): Place a 'Mirrors' button next to
	the 'Server URL' entry.  Pop up the mirrors dialog when clicked.
	Hook up a whole bunch of signals to keep the mirrors dialog and
	the entry in sync.
	(PrefsViewPage.enqueue): Change our preference-application idle
	into a 10ms timeout.  This works around a very strange bug that
	was causing the main loop to spin until the mirrors dialog was
	closed.

	* rcd_util.py (get_mirrors): Added.
	(reset_mirrors): Added.
	(register_server): Call reset_mirrors when we register a server.

2003-04-01  Joe Shaw  <joe@ximian.com>

	* red_installfiles.py (install_local): Begin the file selector in
	the user's home directory.  (Fixes #40447)

	* red_mount.py (FileEntry.browse): Ditto.

	* red_serverinfo.py (select_and_dump): Ditto.

2003-04-01  Joe Shaw  <joe@ximian.com>

	Cleans up the relationship between server objects, making
	connections to the daemon, and saving the settings.  Fixes #40396.

	* rcd_util.py (connect_to_server): Nuke this.
	(get_server): Don't try to do any connection stuff, just return
	the server object.

	* red_appwindow.py (connect_to_daemon): Added.  Pops up a
	connection window and registers the new server object if it was
	successful.  Otherwise, it sets the settings back to what they
	were.
	(assemble_menubar): Call connect_to_daemon().

	* red_connection.py (show_error_message): Take an optional parent
	window parameter.
	(get_credentials, save_credentials): Nuke these.
	(check_rcd_version): Remove the empty try-except block.
	(can_start_daemon): Added.  Checks a few variables to see if we
	can start a daemon on this machine
	(ConnectException): Added.
	(connect): Make the parameters required and mostly rewrite to be
	much simpler; basically try to make the connection and raise a
	ConnectException if we fail for any reason with the error message.
	(connect_from_window): Added.  Pops up a ConnectionWindow and
	loops until the user cancels or successfully connects.  Returns a
	server object and whether its local.
	(ConnectionWindow): Moved here from red_settings.py and unified
	with the DaemonSettings widget for simplicity.

	* red_main.py: Clean up the connection and server management a
	lot.  First try to connect with the command-line parameters we
	were given, otherwise use the last saved data.  If that failed, go
	to the connection dialog.  If the user cancels out of that, exit,
	otherwise register the server and go on about our business.

	* red_pendingops.py (UnknownPackage, UnknownKey): Fix typo in
	__repr__ function definition.

	* red_settings.py (data_get): Reorder the layout of the tuple so
	it can be passed into red_connection.connect() with the *
	operator.
	(data_set): Added.  Takes a tuple in the form of data_get() and
	sets the settings.
	(DaemonSettings, ConnectionWindow): Merged and moved to
	red_connection.py.

2003-04-01  Tambet Ingo  <tambet@ximian.com>

	* ximian_xmlrpclib.py: XML-RPC methods can be cancelled now!
	Fixes #38839.
	(ServerProxy.cancel): Ask current transport to cancel.
	(Transport.__init__): Prepare a list for receiving cancellations.
	(Transport.cancel): New method, add new thread to cancel to our
	"threads to cancel" list.
	(Transport.parse_response): Check whether we are cancelled, if yes,
	cancel reading, return empty tuple.

	* red_serverproxy.py (ServerThread.cancel): Cancel running XML-RPC
	call.

	* red_packagearray.py (PackagesFromQuery.query_finished_cb): Reset
	worker when we're done with it.
	(PackagesFromQuery.set_query): Cancel previous query (if running).

2003-03-31  Tambet Ingo  <tambet@ximian.com>

	* ximian_xmlrpclib.py: Removed lots of unused pre-historic stuff:
	unmarshaller in python, bunch of different xml parsers. Requires
	ximian_unmashaller now.

2003-03-28  Tambet Ingo  <tambet@ximian.com>

	* red_sidebar.py (ShortcutBar.construct): Connect to all registered
	components' "display" signal. Fixes #40414.

2003-03-27  Joe Shaw  <joe@ximian.com>

	* red_packageview.py (PackageView.do_popup): If there's no valid
	path at the mouse position, don't try to display a popup.  (Fixes
	#40441)

	* red_prefs.py (flush_cache_cb): Add a confirmation dialog before
	flushing the cache.  (Fixes #40359)

	* rcd_util.py (connect_to_server): Take an optional parent
	argument and pass it off to red_connection.connect().

	* red_appwindow.py: When File -> Connect is clicked, pass in the
	appwindow as the parent.  (Fixes #40365)

	* red_connection.py (get_credentials): Take a parent argument and
	set the dialog transient for that parent if it's set.
	(connection): Take an optional parent argument and pass it to
	get_credentials().

2003-03-27  Tambet Ingo  <tambet@ximian.com>

	* red_sidebar.py (ShortcutBar.construct): Connect "toggled" signal,
	add a wrapper to callback to avoid inconsistent ui state.
	Fixes #40367.

	* red_appwindow.py (AppWindow.register_component): Don't hide
	first argument of callback while registering components.

	* red_my_computer.py (MyComputerComponent.search_cb): Assign method
	instead of exectuing it. Doh. Fixes #40351.

2003-02-26  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py: Change the "Channel Names" mnemonic.  Get rid
	of the "access_key" hack, it's not going to work with i18n.  Just
	get a "menu name" string from the component instead.

	* red_component.py: Remove access_key(), add menu_name().
	* red_history.py: Ditto.
	* red_my_computer.py: Ditto.
	* red_news.py: Ditto.
	* red_search.py: Ditto.
	* red_summary.py: Ditto.
	* red_transaction.py: Ditto.

2003-03-26  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (assemble_menubar): Fix a bug where a
	translated menu title would cause no items to appear underneath.
	It's okay to include the mnemonic in the menu path, and it means
	many fewer strings to localize.  Add mnemonics for "Advanced
	Search Options" and "Channel Names".
	(register_component): Use the localized string for "_View" when
	adding the component to the menus.

2003-03-26  Tambet Ingo  <tambet@ximian.com>

	* red_actionbar.py (Actionbar.pendingops_changed): Don't start
	sensitize_actionbar_items for every single pendingops_changed.
	Once is enough. Fixes #40308.

	* red_users.py (UsersWindow.build): Removed all sensitizing from
	here to sensitize method. Call sensitize method whenever users
	option is changed.
	(UsersWindow.users_changed): Don't try to be smart, just call the
	sensitize method.
	(UsersWindow.sensitize): New method. The man himself. Fixes couple
	of sensitivity issues in users dialog.
	(UsersOption.got_cb): Don't require users to be returned, zero is
	fine too. Hopefully fixes #40245.

	* red_searchbox.py (SearchBox.__emit): Don't call
	self.get_filter() yet, assign it to filter_fn. Fixes #40291.

	* red_packagearray.py (PackagesFromQuery.get_packages_from_daemon):
	Get the filter function by calling self.__query_filter(), then
	use it for filtering.
	(PackagesFromQuery.query_finished_cb): Ditto.

	* red_thrashingtreeview.py (TreeView.add_column): Added a new
	optional argument 'resizable' which defaults to true. If it's
	set, set column resizable. Fixes #40246.

	* red_packageview.py (PackageView.append_action_column): Don't
	set resizable here.
	(PackageView.append_name_column): Ditto.
	(PackageView.append_version_column): Ditto.
	(PackageView.append_current_version_column): Ditto.

2003-03-25  Joe Shaw  <joe@ximian.com>

	* red_packagearray.py (PackagesFromDaemon): Add channels_changed
	and subscriptions_changed handlers because we'll need to update
	our queries if channels or subscriptions changed.
	(PackagesFromQuery): Chain up the channels_changed handler to
	PackagesFromDaemon.  Add a subscriptions_changed handler.
	(UpdatePackages): Delete the subscriptions_changed,
	channels_changed, and locks_changed handlers; they're handed in
	PackagesFromDaemon.

2003-03-25  Joe Shaw  <joe@ximian.com>

	* red_prefs.py: Fix some typos, change around some wording, and
	kill the Daemon prefs tab.  (Fixes most of #40263)

2003-03-24  Jon Trowbridge  <trow@ximian.com>

	* red_pendingview.py (PendingView.set_label): Try to set the
	scrollbox containing the label to a reasonable size. (Fixes 
	#40209).
	(PendingView.__init__): Set the scrollbox to a reasonable
	initial size.  Store the height of one line of text for
	use in set_label.

	* Makefile.am (red_carpetsupport_DATA): Removed red_throbber.py.

	* red_appwindow.py: Removed the throbber. Fixes #39979.

2003-03-24  Joe Shaw  <joe@ximian.com>

	* red_installfiles.py (DownloadWatcher.fetch_package): Initialize
	data to be an empty string, not an empty list, so we send down
	byte data to the daemon.  (Fixes #40066)

2003-03-24  Jon Trowbridge  <trow@ximian.com>

	* red_history.py (HistoryComponent.activated): Chain a call to
	the base class 'activated' method.

	* red_depcomponent.py (DepComponent.deactivated): Chain a call to
	the base class 'activated' method.

	* red_my_computer.py (MyComputerComponent.search_cb): Respect the
	state of show-channel-name.

	* red_search.py (SearchComponent.build): Respect the state of
	show-channel-name.
	(SearchComponent.activated): Chain a call to the base class
	'activated' method.

	* red_component.py (Component.__init__): Initialized
	__connected_view to None.
	(Component.connect_view): Store our connected view.
	(Component.activated): Schedule a columns_autosize() for our
	connected view.

	* red_appwindow.py (AppWindow.assemble_menubar): Mark a bunch of
	menu stuff for translation.  Add a View->Channel Names option.
	(Fixes #38833)

	* red_summary.py (SummaryComponent.updates_changed_cb): When
	creating the channel column, make it pay attention to the
	show-channel-name status.

	* red_searchbox.py (_ShowAdvanced.set): Sync after we change the
	show-advanced-search-options status.

	* red_packageview.py (_ShowChannelNames): Added a 'singleton'
	class to emit signals when our show-channel-name status changes.
	(show_channel_names_get): Added.  A getter for the
	show-channel-name status.
	(show_channel_names_set): Added.  A setter for blah the
	show-channel-name status.
	(PackageView.append_channel_column): Retooled to do the right thing
	based on the show-channel-name status.

2003-03-20  Joe Shaw  <joe@ximian.com>

	* red-carpet.in: Wrap everything in a try block so we can catch
	KeyboardInterrupt and exit cleanly.

	* red_pendingview.py (PendingView.build): Put the step_label in a
	scrolled window so we'll scroll on very long messages.  (#40048)

2003-03-20  Joe Shaw  <joe@ximian.com>

	This commit fixes #40049.

	* red_appwindow.py (sensitize_run_button): Added.  First checks to
	see if the component allows the run button to be sensitized and
	then checks to see if we have any pending ops to do.
	(assemble_toolbar, assemble_menubar): Use the new
	sensitize_run_button() function instead of just
	pending_ops_exist().
	(pendingops_changed): Ditto.

	* red_component.py (run_sensitized): Added.  Determines whether
	the component allows the "Run Now" button to be sensitized.
	Defaults to 1.

	* red_depcomponent.py (DepComponent): Override the
	run_sensitized() method to always return 0.

2003-03-19  Joe Shaw  <joe@ximian.com>

	* red_connection.py: Bump up the required rcd version to 1.3.2.

	* red_pendingops.py (toggle_action): Only set the action if we
	have the permissions to set it.

	* red_prefs.py (create_entry, create_checkbox, create_spinbutton):
	Only allow the prefs to be set if the user has superuser
	privileges.
	(PrefsViewPage_General.build): Don't show proxy settings if the
	user isn't superuser.
	(PrefsViewPage_Cache): Display the current cache size and allow
	the user to flush it, if they have permission to. (#39942)

2003-03-19  Jon Trowbridge  <trow@ximian.com>

	* red_main.py (main): If we can't connect to a server, print an
	error and suggest that the user run red-carpet as root.  Fixes
	#39936.

	* red_settings.py (RCConfig.sync): Display a semi-clear error
	message if we can't save our settings.  Also, actually close our
	file objects after we are done with them.  Fixes #39976.

2003-03-19  Joe Shaw  <joe@ximian.com>

	* rcd_util.py: Keep track of whether our server is local or
	remote.
	(register_server): Take a second "is_local" argument, and set the
	server_local global variable.
	(connect_to_server): Get a tuple from red_connection.connect()
	containing (server, is_local).
	(get_server_local): Added.

	* red_connection.py (connect_real): Fix a typo in
	RC_TRANSPORT_DEBUG.
	(connect): Return a tuple of the sever and whether its local.

	* red_installfiles.py (install_local): Handle streaming packages
	to a remote daemon. (#39977)

	* red_prefs.py (create_entry): Connect to the "focus_out_event"
	instead of "changed" so we don't send pref changed events to the
	daemon for every keypress.  Also conforms better with the HIG
	(#39945).
	(PrefsViewPage_Cache): The "cache enabled" and "cache cleanup
	enabled" were swapped at the backend.

	* red_serverproxy.py (ServerThread.run): If the
	RC_ALWAYS_RAISE_FAULTS environment variable is set, raise a fault
	instead of showing the dead daemon dialog.

2003-03-19  Jon Trowbridge  <trow@ximian.com>

	* red-carpet.in: Check to make sure that we can import gtk, and
	fail semi-gracefully if we can't.  Fixes #39975.

	* red_serverlistener.py (poll_cb): Turn off the damn 'working
	polls' warning I put in yesterday, since it can happen under
	legitimate non-error circumstances. (i.e. if the daemon is
	blocking a lot)  Fixes #39974.

2003-03-18  Joe Shaw  <joe@ximian.com>

	* red_packagearray.py (PackagesFromQuery.__init__): Initialize
	self.query to be None.  Fixes a traceback when you go to the
	"Search" page but don't perform a search and then have a seqno
	change.

2003-03-18  Jon Trowbridge  <trow@ximian.com>

	* red_serverlistener.py: Added global working_polls variable,
	which counts the number of unfinished polling threads.
	(SeqNoChecker.check): Decrease the number of working_polls.
	(poll_cb): If there are too many working polls, don't poll again.
	This is sort of hacky, but at least this way we won't eat up all
	of the file descriptors over time if something goes terribly
	wrong.  Increment the number of working polls.  Release the poll
	lock if rcd_util.get_server_proxy() returns None.

2003-03-18  Joe Shaw  <joe@ximian.com>

	* red_actionbar.py (Actionbar.add): Use mnemonics in the text.

	* red_appwindow.py (assemble_actionbar): Add mnemonics.

	* red_connection.py: Add license, rename bleh() to munge_uri().

2003-03-17  Joe Shaw  <joe@ximian.com>

	* red-carpet.in: Swap around some logic here.

	* red_searchbox.py: s/upgrade/update

	* red_subscriptions.py: s/Sub'd/Subscribed

	* red_summary.py: s/upgrades/updates

2003-03-17  Jon Trowbridge  <trow@ximian.com>

	* red_search.py (SearchComponent.search_finished_cb): When we put
	up our 'no matching packages' screen, clear the selection so that
	the buttons at the bottom ('mark for install', etc.) will
	desensitize.
	(SearchComponent.unselect_all): In some cases, the selection
	doesn't seem to be emitting the changed signal when we
	unselect_all.  I'm not sure why this is happening, but it is easy
	to work around by explicitly with a call to
	self.packages_selected([]).

	* red_summary.py (SummaryComponent.updates_changed_cb): See above.
	(SummaryComponent.updates_changed_cb): Ditto.

2003-03-17  Frank Belew  <frb@ximian.com>

	* red-carpet.in: more robust check to see if we are standalone

2003-03-14  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py: Don't capitalize the 'f' in "from", it's not
	an important enough word.  Add the About stock icon from gnome.

	* red_my_computer.py: Add an access_key and accelerator.

	* red_packageview.py (button_clicked_for_popup_cb): Pass along the
	x and y coordinates of the button press event to the popup signal,
	so we can determine what row received the click.
	(do_popup): If the popup is happening outside our current
	selection, select that item and perform the action in the popup on
	it rather than the old selection.

	* red_summary.py: Change the long name from "Updates Summary" to
	"Update Summary", as it makes more sense.

2003-03-14  Frank Belew  <frb@ximian.com>

	* red-carpet.in: don't muck with weird paths if we're inside a 
	standalone archive

2003-03-14  Tambet Ingo  <tambet@ximian.com>

	* red_packagearray.py (COLUMNS): Enable sorting by package status.

	* red_thrashingtreeview.py (TreeView.post_thrash_model): Resize
	columns immediately.

	* red_listmodel.py (ListModel.do_changed): Show busy cursor while
	working with list.

	* red_packagearray.py (PackagesFromQuery.query_finished_cb): Don't
	empty model before search. It's not the best solution but otherwise
	"empty page" will be visible during the search.
	(PackagesFromDaemon.refresh_end): Release busy cursor in the idle
	callback.

	* red_emptypage.py: New file.

	* Makefile.am (red_carpetsupport_DATA): Add red_emptypage.py

	* red_summary.py (SummaryComponent.__build_no_updates): Remove. Use
	common component for that.
	(SummaryComponent.build): Use the new code for "empty" page.

	* red_search.py (SearchComponent.build): Build empty page with
	apropriate message for cases where search doesn't return any fields.

	* red_packagearray.py (PackagesFromQuery.__init__): Run query only
	if needed. Prevents "empty" page on first time.

	* red_history.py: Removed some old commented out cruft.
	(HistoryComponent.build): Build empty page with
	apropriate message for cases where search doesn't return any fields.

2003-03-13  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py: Don't connect to and change the sensitivity of
	the sidebar buttons any more.

	* red_main.py: Move the Installations/Removals component to the
	end.

	* red_sidebar.py: Nuke the details button.
	(ShortcutBar): If there are an odd number of buttons, make the
	last one span two columns.

	* red_transaction.py (TransactionComponent): Give this a pixbuf
	and show it in the shortcuts.

	* rcd_util.py (fault): Add not_supported fault.

2003-03-13  Tambet Ingo  <tambet@ximian.com>

	* red_transaction.py (TransactionComponent.name): Fix inconsistency
	with main window.
	(TransactionComponent.long_name): Ditto.
	(TransactionComponent.access_key): New access key.

	* red_sidebar.py (ShortcutBar.construct): Add tooltips.

	* red_packageview.py (PackageView.set_package_action): Fix
	inconsistent popup menu items' names.

	* red_appwindow.py (AppWindow.assemble_toolbar): Fix tooltips'
	capitalization.
	(AppWindow.checked_set_cb): Fix inconsistent menu items' names.

	* red_actionbar.py (Actionbar.__init__): Add tooltips.
	(Actionbar.add): Ditto.

2003-03-12  Tambet Ingo  <tambet@ximian.com>

	* rcd_util.py (is_system_package): Implement.
	(get_package_key): If the package is installed and has guessed channel,
	use it in key composion.
	(get_channel_icon): Show default channel icon for mounted and iconless
	channels. Fixes part of #38833.

	* red_packagearray.py (PackagesFromQuery.query_finished_cb): We _have_
	to remove duplicates before applying other filters and saving to cahce.
	There isn't any way to do it later. Fixes #39519.
	(PackagesFromQuery.filter_duplicates): Always run filtering. Fixed a
	logic bug.

2003-03-11  Joe Shaw  <joe@ximian.com>

	* red_installfiles.py (DownloadWatcher.fetch_package): Check to
	see if we've been cancelled immediately after we've successfully
	opened the URL and close if we have.  When checking to see if
	we've been cancelled during the read, close if we have.

	* red_main.py: Exit the app using os._exit() so that we don't join
	our threads and block on them finishing.

	* red_packagearray.py (pkg_is_name_installed): Changed this to
	only check to see if the "name_installed" field is not 0.

	* red_pendingops.py (can_perform_action_single): In the
	to-be-removed case, due to the change above, check to see if the
	package is either installed or name_installed.  In the
	to-be-installed case, if the package is marked as installed, never
	allow it to be installed again.

	* red_summary.py (SummaryComponent.build): Show a blank updates
	list instead of the no updates page by default so we don't get bad
	flicker in the case where the user does have updates.

	* rcd_util.py (fault): Add cant_activate fault.

2003-03-10  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py: Change the button to say "Information" instead
	of "Info".

	* red_depcomponent.py: Connect to the window's destroy signal and
	pop the component in there, instead of in the finished signal
	callback.

	* red_pendingview.py: Change the semantics of the "finished"
	signal.  It's now emitted whenever the pending view is done doing
	whatever it's doing, not when the dialog is destroyed.  (For that,
	connect to the destroy signal).  Now we destroy the window when
	the "OK" button is clicked (for non-self destructive windows) or
	immediately after calling the finished method (for self
	destructive windows).
	(transaction_finished): Call the finished method.
	(update_transaction): Don't set the label to "Starting
	Transaction", it causes a lot of flicker.

2003-03-10  Joe Shaw  <joe@ximian.com>

	* red_sidebar.py (construct): Calculate the number of rows based
	on the number of visible, not total, components.

	* red_appwindow.py: For the install/remove/cancel/info buttons,
	check to make sure that any packages are selected.  If not,
	desensitize them.

	* red_component.py (Component.packages_selected): Emit a single
	signal with the entire list of selected packages, since doing an
	emit per package is overkill and then we have no way of knowing
	that there are no packages selected.
	
2003-03-10  Joe Shaw  <joe@ximian.com>

	* red_actionbar.py (Actionbar): Make this an HBox instead of an
	HButtonBox so we don't have to have homogeneous buttons.

	* red_appwindow.py (info_sensitive_cb): Make this sensitize when
	multiple packages are selected.
	(package_info_cb): Handle multiple packages, pop up a dialog when
	more than 5 are selected for the user to confirm.
	(assemble_actionbar): Move the "Info" button down here from the
	toolbar.

	* red_history.py (PackageHistory): Make the Time column the first
	column to be consistent with the system history view.

	* red_packagebook.py (show_package_info): Make the window default
	to 450x350.

2003-03-10  Tambet Ingo  <tambet@ximian.com>

	* red_appwindow.py (AppWindow.activate_component): Show/hide actionbar
	according to new component's requirements.

	* red_depcomponent.py (DepComponent.show_actionbar): Don't show
	actionbar.

	* red_component.py (Component.show_actionbar): New method, defaults
	to true.

	* red_sidebar.py (ShortcutBar.construct): Make buttons' table
	homogeneous.

	* red_news.py: I don't deserve to be on the shortcutbar!

	* red_actionbar.py: Implement.

	* Makefile.am (red_carpetsupport_DATA): Install red_actionbar.py.

	* red_appwindow.py Import red_actionbar.
	(AppWindow.assemble_toolbar): s/Run/Run Now/.
	(AppWindow.__init__): Build "Actionbar".
	(AppWindow.assemble_actionbar): Add items to actionbar. Use more
	descriptive and longer labels.

	* red_depcomponent.py (DepComponent.get_deps_cb): Removed some
	debugging output.

	* red_subscriptions.py (SubscriptionsWindow.__init__): Replace "Close"
	button with "Ok" Button.

	* red_summary.py (SummaryComponent.name): s/Summary/Updates/.
	(SummaryComponent.long_name): s/Update/Updates/.

	* red_sidebar.py (SideBar.build): Use frame to group pending ops.
	Change label to "Installations and Removals". Change the label of
	"Details" button, center it.

2003-03-07  Jon Trowbridge  <trow@ximian.com>

	* red_searchbox.py (SearchBox.__assemble): Enable the 'no channel'
	flag on the ChannelOption.  This allows us to easily search for
	locally installed rpms, etc.
	(SearchBox.filter_fn): Tweaked to filter out packages with a
	channel or guessed channel when the 'no channel' option is
	selected.

	* red_channeloption.py (ChannelOption.__assemble): Change the 'no
	channel' option label to "No Channel/Unknown Channel".  We might
	want to change this.

2003-03-07  Tambet Ingo  <tambet@ximian.com>
   
	* red_component.py (Component.__init__): current_pkgs is now an
	array instead of single package.
	(Component.packages_selected): Emit "package_selected" for each
	package.
	
	* red_packageview.py (PackageView.__init__): Allow multiple
	selection.  Send all selected packages with "selected" signal.
	(PackageView.button_clicked_for_popup_cb): Ignore middle
	button. End signal emission if pressed button is right button.
	(PackageView.get_selected_packages): New helper function.
	(PackageView.do_popup): Make it look and feel like toolbar's
	action items: Show them all in the same order, sensitize as
	necessary.

	* red_pendingops.py (can_perform_action_single): New
	function. Helper for sensitize functions, takes care of privileges
	also.
	(can_perform_action_multiple): Ditto for multiple packages.

	* red_appwindow.py (AppWindow.install_sensitive_cb): Cleaned up,
	use common helper function, handle multiple selections.
	(AppWindow.remove_sensitive_cb): Ditto.
	(AppWindow.cancel_sensitive_cb): Ditto.
	(AppWindow.set_package_action_cb): Ditto.
	(AppWindow.info_sensitive_cb): Ditto. It's sensitive only if a
	single package is selected.
	(AppWindow.package_info_cb): Handle multiple selections.
	(AppWindow.assemble_toolbar): Change tooltips to plural form.

	* red_my_computer.py (MyComputerComponent.build): Connect view to
	the component. Fixes toolbar item's sensitize methods.

	* red_thrashingtreeview.py (TreeView.pre_thrash_model): Save all
	selected paths.
	(TreeView.post_thrash_model): Restore all saved paths.

	* red_summary.py (SummaryComponent.select_all): Just select all
	rows, don't set any actions.
	(SummaryComponent.unselect_all): Ditto for unselect.
	(SummaryComponent.build): Save view widget, it's needed in select
	all/none methods.

	* red_search.py (SearchComponent.select_all): Just select all
	rows, don't set any actions.
	(SearchComponent.unselect_all): Ditto for unselect.
	(SearchComponent.build): Save view widget, it's needed in select
	all/none methods.

2003-03-07  Jon Trowbridge  <trow@ximian.com>

	* red_searchbox.py (SearchBox.all_cb): "Not Installed" is bad
	English.  Changed back to "Uninstalled" for now, though maybe we
	can come up with something better.

2003-03-07  Tambet Ingo  <tambet@ximian.com>

	* red_appwindow.py (AppWindow.assemble_menubar): Get icon sizes
	from gtk theme instead of magic "16".

	* red_channeloption.py (ChannelOption.__assemble): Ditto.

	* red_searchbox.py (SearchBox.__assemble_section_option): Ditto.

	* red_sidebar.py (SideBar.build): Ditto.
	(ShortcutBar.construct): Ditto.

	* red_toolbar.py (Toolbar.add): Use large stock icons instead of
	small which is Gtk's default toolbar icon size. Fixes part of
	#39136.

	* red_appwindow.py (AppWindow.assemble_toolbar): Get icon sizes
	from gtk theme instead of magic "16". Fixes part of #39136.  Moved
	"Run" button to the beginning of toolbar.

	* red_searchbox.py (SearchBox.all_cb): Changed "Uninstalled
	Packages" to "Not Installed Packages". If it's not good english,
	then change it again, but it should be more acurate than
	"uninstalled".

2003-03-06  Joe Shaw  <joe@ximian.com>

	* red_gettext.py: Hook this stuff up to the python gettext stuff.

2003-03-06  Jon Trowbridge  <trow@ximian.com>

	* red_packageview.py (PackageView.append_status_column): Turn
	of status icons by default.

	* red_appwindow.py (AppWindow): Make AppWindow a
	PendingOpsListener.
	(AppWindow.__init__): Call PendingOpsListener.__init__.
	(AppWindow.connect_sidebar_buttons): Removed code related to run
	button.
	(AppWindow.assemble_toolbar): Added code for run button in
	toolbar.
	(AppWindow.pendingop_changed): Sensitize/desensitize the run
	button.

	* red_sidebar.py (SideBar.build): Removed run button.
	(SideBar.get_run_button): Removed.
	(SideBar.sensitize_run_button): Removed.
	(SideBar.pendingops_changed_cb): Use pending_ops_exist fn,
	removed code related to run button.

	* red_pendingops.py (pending_ops_exist): Added.

2003-03-06  Tambet Ingo  <tambet@ximian.com>

	* red_history.py (HistoryView.build): Moved "Time" column from last to
	first.

2003-03-05  Jon Trowbridge  <trow@ximian.com>

	* Makefile.am (red_carpetsupport_DATA): Add red_my_computer.py.

	* red_main.py (main): Register the "My Computer" component.

	* red_my_computer.py: Added.  Implements a customized search
	component for browsing packages on the system.

	* red_packagearray.py (pkg_status): Replace the status strings
	"upgrade" and "downgrade" with "newer" and "older".

	* red_searchbox.py (SearchBox.__init__): Add a "system packages
	only" flag to customize behavior for our "My Computer" component.
	(SearchBox.__assemble): When just browsing system packages, don't
	offer the "any subscribed channel" option item and hide the status
	option menu.
	(SearchBox.get_query): If we are searching system packages only,
	assemble an appropriate query.
	(SearchBox.get_filter): Correctly filter when we are only
	searching system packages.

2003-03-05  Joe Shaw  <joe@ximian.com>

	* red_prefs.py: Make native pages and make the Advanced page
	only include settings which are not on the other pages.  Also fix
	a bug where setting a numeric field to "0" or "1" made it turn
	into a checkbox.  (Fixes #38702, #39093)

2003-03-05  Jon Trowbridge  <trow@ximian.com>

	* red_depcomponent.py (DepComponent.__init__): Call get_deps() in
	an idle function so that we are fully initialized before we do
	anything.
	(DepComponent.get_deps_cb): Try to do the right thing if our
	worker thread was cancelled.
	(DepComponent.get_deps): Display a server proxy dialog while
	we are working. (Fixes #38894)

	* red_component.py (Component.switch_to): Set the parent on
	the component we are switching to.
	(Component.push): Set the parent on the component we are
	pushing.

	* rcd_util.py (server_proxy_dialog): Added a can_cancel
	argument.  This allows us to create proxy dialogs w/o cancel
	buttons.

2003-03-05  Tambet Ingo  <tambet@ximian.com>

	* red_news.py (NewsModel.__init__): Derive from ServerListener, update
	on channels_changed event. Fixes #38860.

	* red_history.py (HistoryComponent.activated): Fix my previous "fix".

	* Makefile.am (red_carpetsupport_DATA): Added red_connection.py.

	* red_main.py (main): Fixed server/local command line argument parsing.

	* rcd_util.py (md5ify_password): Use red_connection.

	* red_connection.py: New file. Home of connecting to server and saving/
	loading of credentials.

	* red_depcomponent.py (DepComponent.finished_cb): Save temporary
	variable to let history view know it should update itself.

	* red_history.py: Remove unused global model.
	(HistoryComponent.activated): Check if we have to update. Fixes #38920.

2003-03-04  Jose Mercado  <jose@ximian.com>

	* rcd_util.py (StartDaemon): Use /etc/init.d/rcd, which will
	work on all LSB compliant distros.
	(connect_to_server): Get rid of /sbin/services here too.	

	* red_main.py (main): Fixed typo.

2003-03-04  Jon Trowbridge  <trow@ximian.com>
	
	* red_search.py (SearchComponent.select_all): If a package is
	already installed, don't mark it as TO_BE_INSTALLED.

	* red_summary.py (SummaryComponent.select_all): If a package
	is already installed, don't mark it as TO_BE_INSTALLED.

2003-03-04  Tambet Ingo  <tambet@ximian.com>

	* red_pendingview.py (PendingView.set_label): Make sure label has
	at least 3 lines to avoid "jumpyness".
	(PendingView.__init__): Don't set height, it won't grow
	otherwise. Fixes part of #39001.

	* rcd_util.py (linebreak): Handle cases where string has "words" longer
	than "width" argument.

2003-03-03  Frank Belew  <frb@ximian.com>

	* red_pendingview.py (PendingView.calculate_required_text_size): 
	remove length argument on call to pango.Layout.set_text()

2003-03-03  Jon Trowbridge  <trow@ximian.com>

	* red_searchbox.py (SearchBox.get_filter): When filtering out
	unsubscribed channels, don't filter system packages.

	* red_pendingview.py (PendingView_Transaction.update_pending_cb):
	If an error occured, do a slightly better job of formatting the
	error message and set the window title to "Update Failed". (This
	is part of #39001)

2003-02-28  Jon Trowbridge  <trow@ximian.com>

	* red_channeloption.py (ChannelOption.__assemble): Put the
	subscription icon in option menu entries that correspond to
	subscribed channels. (Fixes #38899)

	* red_appwindow.py (AppWindow.assemble_menubar): Changed
	Edit->Subscriptions to Edit->Channel Subscriptions to be more
	consistent with the language in the toolbar (and hopefully clearer
	too).  Added the subscription icon to the menu item.

2003-02-28  Tambet Ingo  <tambet@ximian.com>

	* red_searchbox.py (SearchBox.__assemble): Added spacing for entry_row.

2003-02-28  Jon Trowbridge  <trow@ximian.com>

	* red_thrashingtreeview.py (TreeView.post_thrash_model): Always
	autosize the treeview's columns after we thrash.  This helps keeps
	us from ending up with badly sized, unresizable columns.

2003-02-28  Tambet Ingo  <tambet@ximian.com>

	* red_history.py: Uses red_listmodel and red_thrashingview for model
	and view. Sorts by time by defaults.

	* red_thrashingtreeview.py (TreeView.add_column): Moved it here from
	red_packageview. Sorting is now done by column id, not column object.
	Changed all files to reflect that.

	* red_listmodel.py: Moved sorting here from red_packagearray. Moved
	message pushing/pooping and busy signal handling here from
	red_packagearray. Changed all files to reflect that.

2003-02-28  Jon Trowbridge  <trow@ximian.com>

	* red_depcomponent.py (DepComponent.build_verified_ok_page): Make
	the "yes, your system is valid" page prettier.

	* red_searchbox.py (_ShowAdvanced): Store the state of
	'view->advanced search options' in the config.

	* red_summary.py (SummaryComponent.build): Added a "the system
	is up-to-date" page that gets displayed if there are no updates.

	* red_packagearray.py (PackagesFromDaemon.schedule_refresh): Track
	the id of the idle handler.
	(PackagesFromQuery.set_query): Explicitly disconnect any existing
	query when we start a new query. (fixes part of #33839)

	* Makefile.am (red_carpetsupport_DATA): Removed unused files.

	* red_searchbox.py: Removed unneeded imports.

	* red_search.py: Removed unneeded imports.

	* red_searchbar.py: Removed.

	* red_sectionoption.py: Removed.

	* red_statusoption.py: Removed.

	* red_depcomponent.py (DepComponent.begin_transaction): A hack.
	We hold a reference to our PendingView_Transaction window in
	order to work around pygtk bug 92955 (a refcounting glitch).

	* red_sidebar.py (SideBar.update_label): Again, "pending
	operations" instead of "pending actions"

	* red_transaction.py (TransactionComponent.name): Changed "Pending
	Transactions" to "Pending Operations".
	(TransactionComponent.long_name): Ditto.
	(ok_to_quit): To be consistent, we call them "pending operations"
	here instead of "pending actions".

	* red_sidebar.py (SideBar.build): Changed "Pending Transactions"
	to "Pending Operations".

	* red_packageview.py (PackageView.append_status_column): If we
	aren't displaying the status name, center the icon.
	(PackageView.activated_cb): If we aren't displaying the action
	name, center the icon.
	(PackageView.append_channel_column): If we aren't displaying the
	channel name, center the icon.

2003-02-27  Tambet Ingo  <tambet@ximian.com>

	* red_packagearray.py (sort_pkgs_by_action): Fixed an embarassing
	typo which crashed rc on sorting by "action".

2003-02-27  Joe Shaw  <joe@ximian.com>

	* red_settings.py (DaemonSettings.build): Make enter in the
	entries activate the default, and make it not activate the
	drop-down box in the combo.

2003-02-27  Jon Trowbridge  <trow@ximian.com>

	* red_search.py (SearchComponent.activated): Have the SearchBox
	try to grab focus when the component is activated...
	(SearchComponent.build): ...as well as when it is constructed.

	* red_searchbox.py (SearchBox.try_to_grab_focus): Pick an
	appropriate search-related widget and have it grab the focus.

	* red_appwindow.py (AppWindow.assemble_toolbar): Add a
	"refresh" item to the toolbar. (Fixes #38705)

	* red_prefs.py (PrefsView.editing_done_cb): Don't set the
	preference if we didn't actually change it. (Fixes #38834)

	* red_packagearray.py (pkg_status): "not installed" is better
	than "uninstalled".

	* red_appwindow.py (AppWindow.assemble_menubar): Added menu
	option View->Advanced Search Options.

	* red_channeloption.py: Added symbolic names for magic channel
	IDs.
	(ChannelOption.__init__): Added 'any subd channel' option.
	(ChannelOption.__assemble): Support 'any subd channel'.
	(ChannelOption.get_channel_id): Work properly when one of our
	magic channels (i.e. "any channel", etc.) is selected.

	* red_search.py (SearchComponent.build): Hacked to use the
	new SearchBox widget.

	* red_searchbox.py: Added.  A revised widget for controlling
	searches.

	* red_console.py (Console.write): Queue up any messages and write
	them to the console window in a timeout.  This avoids gtk locking
	problems if another thread writes to stderr.

2003-02-26  Jon Trowbridge  <trow@ximian.com>

	* red_pendingview.py (PendingView_Transaction.finished): Thaw the
	serverlistener polling when we are finished, not when we cancel.
	(PendingView_Transaction.transaction_finished): Don't thaw the
	polling yet.

2003-02-26  Tambet Ingo  <tambet@ximian.com>

	* red_pendingview.py (PendingView.delete_event_cb): Connect this
	function to "delete_event" signal of the dialog. Basically, dialog's
	"delete_event" == button's "clicked".

2003-02-26  Jon Trowbridge  <trow@ximian.com>

	* red_pendingview.py (PendingView_Transaction.cancelled): Chain
	to PendingView's cancelled function.
	(PendingView_Transaction.finished): Thaw the serverlistener
	polling when we are finished, not when we cancel.
	(PendingView_Transaction.transaction_finished): Don't thaw the
	polling yet.

	* red_appwindow.py (AppWindow.assemble_toolbar): Renamed the
	"Subscriptions" button to "Channels" and changed the tooltip.

	* Makefile.am (red_carpetsupport_DATA): Removed red_system.py from
	the list, since it doesn't exist anymore.

2003-02-25  Tambet Ingo  <tambet@ximian.com>

	* red_search.py (SearchComponent.activated): Add. Activate search entry
	every time the SearchComponent is activated.

	* red_searchbar.py (SearchBar.get_search_entry): Add.

	* red_pendingview.py (PendingView.__init__): Give default focus to
	Ok/Cancel button.

2003-02-25  Joe Shaw  <joe@ximian.com>

	* rcd_util.py: Get rid of the mono icon hack.

	* red_console.py, red_depcomponent.py, red_packageview.py: Change
	the names of some images.

2003-02-25  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (StartDaemon): Remove some debugging output.

2003-02-25  Tambet Ingo  <tambet@ximian.com>

	* red_pendingview.py (PendingView_Transaction.update_pending_cb):
	Don't just mindlessly pulse every time, it makes things too flashy.
	Pulse only on unhandled step_pendings.

	* rcd_util.py (check_rcd_version): When I said 'n' I meant '\n'.

2003-02-25  Joe Shaw  <joe@ximian.com>

	* red_main.py (main): Always save our local flag, so -l works
	correctly.

2003-02-25  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (check_rcd_version_: Require rcd 1.2.1.

	* red_main.py: Add argument parsing.  Get host info from
	arguments.

	* red_packagearray.py (pkg_status): Mark these for translation.

	* red_settings.py (get, get_private): Return "" instead of None if
	the option isn't in the file, so we don't try to load/save None
	values.
	(url_set): Always remove the url from the list if we match and
	insert at 0, so the most recently used are always at the head.

	* red_subscriptions.py: Mark "Sub'd" for translaction.

	* ximian_xmlrpclib.py: Don't use the rcd_util.hexstr() functions,
	use them directly out of the md5 module (since we're using Python
	2.2).

2003-02-25  Jon Trowbridge  <trow@ximian.com>

	* red_pendingview.py: Tweak the window sizing/line wrapping
	parameters a bit.
	(PendingView_Transaction.download_pending_cb): If our download
	failed, print the associated error message in the dialog and set
	the __finished flag.

2003-02-25  Tambet Ingo  <tambet@ximian.com>

	* red_pendingview.py (PendingView.calculate_required_text_size):
	Calculate height also, renamved from (calculate_required_width).
	(PendingView.__init__): Set required size to label, not to whole
	dialog.
	(PendingView_Transaction.update_pending_cb): If we're already finished,
	we don't want to update anything anymore. Caused lots'n'lots
	Gdk-CRITICAL warnings (progressbar pulse).

2003-02-25  Jon Trowbridge  <trow@ximian.com>

	* red_gettext.py: Don't import red_main.  Instead of using the
	global debug env, check RC_GUI_TRANSLATION_DEBUG.

2003-02-24  Tambet Ingo  <tambet@ximian.com>

	* red_serverinfo.py (dump_finished_cb): Removed use of "app" variable
	which was not defined.

	* red_search.py (SearchComponent.build): Set spacing.

	* red_searchbar.py (SearchBar.__init__): Ditto.

	* red_appwindow.py (AppWindow.assemble_toolbar): Old icon is better
	than no icon at all :)

	* red_pendingview.py (PendingView.__init__): Use PendingView class to
	store the status about cancel button. It was giving some troubles when
	we stored it in button.

	* red_depcomponent.py (DepComponent.build_dep_error_page): Set the "OK"
	button to be the default widget.
	(DepComponent.build_verified_ok_page): Ditto.
	(DepComponent.build_normal_page): Ditto for "Continue" button.

	* red_pendingview.py (PendingView.calculate_required_width): Calculate
	the width of glyphs using current gtk font.
	(PendingView.__init__): Use calculated width instead of magical "350"
	for PendingView dialog.
	(PendingView.set_title): Since default "msg" is None we want to
	convert it to empty string.

	* red_packageview.py (PackageView.do_popup): Commented out locking.

	* red_appwindow.py (AppWindow.run_sensitive_cb): Get sensitivity
	directly from pendingops, not from sidebar's run button. We happened
	to get here before sidebar gets updated.

	* red_menubar.py (MenuBar.__init__): Refresh menu items before before
	giving control to AcceleratorGroup, otherwise some items' sensitivity
	might be out of sync.

	* red_sidebar.py (SideBar.pendingops_changed_cb): Don't rush with
	updating, do it in the idle callback. Otherwise, with "Select all"
	we updated ourself once for every package.

	* red_toolbar.py (Toolbar.pendingops_changed): Ditto.

2003-02-24  Jon Trowbridge  <trow@ximian.com>

	* red_gettext.py (_): If we are in debug mode, replace strings by
	((strings)) to make it easy to spot untranslated strings.

	* red_main.py: Make sure that debug (and some other variables) get
	set right away.

2003-02-24  Tambet Ingo  <tambet@ximian.com>

	* red_summary.py (SummaryComponent.build): Catch busy signals.

	* red_packagearray.py (PackagesFromDaemon.schedule_refresh): We had
	problems with determining pending refresh. It got reset right after
	get_packages_from_daemon returned, but that function just kicked off
	query, results came later from different thread.
	(PackagesFromDaemon.refresh_start): New method. We need it to be
	"protected" data. Also, moved setting busy cursor here.
	(PackagesFromDaemon.refresh_end): New method, restore cursor here.
	(PackagesFromDaemon.refresh_pending): New method.
	(PackagesFromQuery.get_packages_from_daemon): Removed cursor changing,
	notify, that we are finshed getting data.
	(UpdatedPackages.get_packages_from_daemon): Ditto.

2003-02-22  Tambet Ingo  <tambet@ximian.com>

	* rcd_util.py (check_rcd_version): Implement.
	(connect_real): Make sure we have recent enough daemon.

	* Makefile.am (red_carpetsupport_DATA): Added red_console.py

	* red_users.py (User.__init__): Added new parameter "any_user". This
	represents "All" users in History page.
	(User.is_any_user): Return true for meta-user "All"

	* red_history.py (HistorySearchBar.updated): Use is_any_user method
	instead of string comparision.

2003-02-22  Jon Trowbridge  <trow@ximian.com>

	* Marked a whole bunch of strings for translation.  Made
	trivial changes to some text.

	* red_gettext.py: A home for translation-related magic.
	Currently just defined _ to be the identity function.

	* red_about.py (About.__init__): Removed the "this is really ugly"
	comment.  Hopefully the about box can get some design-love later
	on.

	* red_main.py: import red_console

	* red_console.py: Added an error console, so that we can get
	reasonable bug reports from people running rc from menus.

2003-02-21  Tambet Ingo  <tambet@ximian.com>

	* red_depcomponent.py (DepComponent.build_dep_error_page): Set
	shadow to main view.
	(DepComponent.build_dep_error_page): Use buttonbox to house button(s),
	so that all of them are sized consistently.
	(DepComponent.build_verified_ok_page): Here too.
	(DepComponent.build_normal_page): Ditto.
	(DepComponent.build_normal_page): Add gtk.STOCK_GO_FORWARD icon to
	"continue" button.

	* red_prefs.py (PrefsView.get_prefs_cb): Get preferences here, also
	catch exceptions.

	* red_serverinfo.py (dump_finished_cb): Catch exceptions.

2003-02-21  Joe Shaw  <joe@ximian.com>

	* red_activation.py: Make the entries activate the default.  For
	the activity dialog, set the parent.

	* red_appwindow.py: Give access keys and accelerators to the menu
	items, add an icon for File->Connect.

	* red_channelmodel.py: Remove some debugging output and move
	make_channel_view() out of here.

	* red_channeloption.py: Sort the channels alphabetically.

	* red_component.py: Add a stock() function which returns the stock
	id for a component and an access_key() function which returns the
	menu access key for a component.

	* red_history.py: Add an access key.

	* red_installfiles.py (install_local): Run the stat.S_ISDIR() in a
	try block or else we'll get an exception if the file isn't there.

	* red_mount.py (mount_channel): Handle ~ to mean $HOME.  If we
	can't mount a channel, run the dialog in the main thread.
	(FileEntry): Make the entries activate the default widget.
	(MountWindow): Ditto.  Also make the dialog transient of its
	parent.  Call the changed method on the model so it gets updated
	if the user activates the toggle button using the keyboard.  Set
	the "xalign" property on the toggle button so it's left-aligned.
	Make the OK button grab the default.

	* red_news.py: Add an access key.

	* red_packagearray.py (sort_pkgs_by_locked): Added.  Sorts the
	packages by whether it is locked.
	(changed_sort_by_locked): Added.

	* red_packagebook.py: Make the OK button grab the focus.

	* red_packageview.py (append_locked_column): Add
	change_sort_by_locked() as the sort_callback for this column.

	* red_search.py: Add an access key and replace its pixbuf() with
	stock().

	* red_serverinfo.py (view_server_info_cb): Set the default
	response to OK.
	(dump_xml): Set the dialog's parent.

	* red_sidebar.py: When populating the sidebar, use stock() if it
	doesn't return None.

	* red_statusoption.py (_status_types): Add a Locked status type.

	* red_subscriptions.py: Move make_channel_view() here from
	red_channelmodel.py.  Make the Close button grab the default.

	* red_summary.py: Add an access key.

	* red_thrashingview.py (pre_thrash_model): Save the cursor path
	and column so we can maintain keyboard focus.
	(post_thrash_model): Restore it if we had it.

	* red_transaction.py: Add an access key and Get rid of the
	pixbuf, it's not used anymore
	(long_name): Make it just "Pending Transactions".

	* red_users.py: Make the Close button grab the default.

2003-02-21  Tambet Ingo  <tambet@ximian.com>

	* red_packageview.py (PackageView.do_popup): Use the new icon
	for upgrade here also.

2003-02-21  Tambet Ingo  <tambet@ximian.com>

	* red_depcomponent.py (DepComponent.__init__): We are a GObject
	now, we want to emit signal when we're done with fetching data.
	(DepComponent.get_deps): New method, moved all data fetching code
	here from __init__ method. Use serverproxy method to fetch data,
	emit a signal when ready. Set buys while being busy.
	(DepComponent.build): Build a blank page since we don't have data
	yet. Catch the signal which notifes the data arrival.
	(DepComponent.build_normal_page): Build a "normal" page. Too bad
	we can't use quotes in method names :)
	(DepComponent.build_verified_ok_page): Build a page for all deps
	satisifed.
	(DepComponent.build_dep_error_page): Dependency error page.

2003-02-21  Jon Trowbridge  <trow@ximian.com>

	* red_statusoption.py (_status_types): Properly filter upgrades.

	* red_main.py (debug): Set the debug flag based on the
	RC_GUI_DEBUG environment variable.

	* red_packagearray.py: Removed debug spew.  Icon-related tweaks.

	* red_searchbar.py (SearchBar.__assemble): Remove the "Find Now"
	button, which wasn't really needed anyway.

	* red_pendingview.py: Add support for static or animated icons in
	the dialog.  Add the cool new spinning Rupert to the transact
	dialog.

	* red_depcomponent.py (DepComponent.build_dep_error): Make the
	error textview non-editable and hide the cursor.

	* red_appwindow.py (got_channels_cb): Add new icon to refresh
	progress dialog.

2003-02-21  Tambet Ingo  <tambet@ximian.com>

	* red_depcomponent.py (DepComponent.__init__): Set default values to
	install_packages and remove_packages to [] (instead of None). It
	caused problems when we try to add None and list types.

	* red_prefs.py (PrefsView.build): Sensitize views correctly depending
	on privileges.

	* red_subscriptions.py (SubscriptionsView.__init__): Ditto.

2003-02-21  Tambet Ingo  <tambet@ximian.com>

	* red_users.py: Import ximian_xmlrpclib.

	* red_appwindow.py (AppWindow.install_sensitive_cb): Check if user
	has permission to install or upgrade.
	(AppWindow.remove_sensitive_cb): Ditto for remove.

2003-02-20  Tambet Ingo  <tambet@ximian.com>

	* red_pendingview.py (PendingView_Transaction.cancelled): As added
	to FIXME: This is really ugly hack, but otherwise ui will be
	unresponsive if connection with rcd is lost (even if rcd comes back).

	* red_history.py (HistoryModel.set_component): New method. Model
	uses component to put it in busy state.
	(HistoryModel.get_history_cb): If we have a component, make it busy.

2003-02-20  Tambet Ingo  <tambet@ximian.com>

	* red_pendingview.py (PendingView.finished): Emit "finished" singal
	here instead of in poll() method.

2003-02-20  Tambet Ingo  <tambet@ximian.com>

	* red_users.py (PrivilegesModel.request_update_cb): Implement.
	Necessary to force the treeview update all cells if "superuser"
	privilege is toggled.
	(UsersOption): Added "updated" signal.

2003-02-20  Tambet Ingo  <tambet@ximian.com>

	* red_locks.py (toggle_lock): Catch exceptions, let user know
	if something is wrong. Let serverlistener know we have updated.

2003-02-20  Tambet Ingo  <tambet@ximian.com>

	* red_users.py (UsersWindow.password_update_cb): Reset password
	entries after successful password update.
	(PrivilegesModel.got_cb): Catch possible exception.
	(User.update): Use serverproxy for update.
	(User.delete): Use serverrpoxy for delete.

	* red_history.py: Cleaned up some unused stuff from last commit.

2003-02-20  Jon Trowbridge  <trow@ximian.com>

	* red_depcomponent.py: If we get a dependency error, show it in
	the component.  (Showing it in the dialog looks terrible, even
	for relatively simple errors.)

	* Makefile.am (red_carpetsupport_DATA): Updated.

	* red_main.py: Updated to reflect red_search/red_browse rename.

	* red_browse.py: Renamed to red_search.py.

	* red_search.py: Replaced with red_browse.py.

2003-02-20  Tambet Ingo  <tambet@ximian.com>

	* red_users.py: Changed users treeview to optionmenu. Use serverproxy
	for getting users/privileges. It turned out to be almost a rewrite :)

	* red_history.py (HistorySearchBar.build): Use UsersOption from
	red_users.
	(HistorySearchBar.updated): ditto.

2003-02-19  Joe Shaw  <joe@ximian.com>

	* Makefile.am: If we're installing usermode files, install into
	$(sbindir) instead of $(bindir).  Add red_locks.py.

	* red-carpet.glade: Delete.  We never used it.

	* red-carpet.in: Reorganize this a bit so we can pull in pygtk
	libs from the correct prefix.

	* rcd_util.py: Also get a "local" flag from
	red_settings.DaemonData.data_get() and
	red_settings.ConnectionWindow.get_server_info().
	(connect_to_server): If we're connecting locally, and we're root
	and we have /sbin/service, offer to start a daemon.
	(StartDaemon): New class which starts a daemon.
	(set_pref): Nuke this, it's been absorbed in red_prefs.py.

	* red_channelmodel.py (toggle_subscribed): Make this use
	ServerProxy.

	* red_prefs.py (PrefsView.build): Mostly rewrite this to get prefs
	async via ServerProxy.  Make the view a thrashing view
	(CellRendererPref): get the pref using get_list_item() instead of
	accessing the prefs directly.
	(PrefsModel): Make this a ListModel, make it mostly opaque.

	* red_serverlistener.py: import ximian_xmlrpclib.

	* red_settings.py (DaemonData.data_get): Expand the tuple to
	return a local flag.

2003-02-19  Tambet Ingo  <tambet@ximian.com>

	* red_news.py (NewsModel.get_news_cb): Catch xmlrpc faults.

	* red_history.py (HistoryModel): Use serverproxy.

2003-02-19  Jon Trowbridge  <trow@ximian.com>

	* red_serverlistener.py (poll_cb): Silently ignore xmlrpc faults
	when polling sequence numbers.  This sort of sucks, but keeps
	things from blowing up if something has gone terribly wrong
	(with permissions, for example).

	* red_packagearray.py (PackageArray.message_push): Support transient
	mesages.
	(PackagesFromQuery.set_packages): Display the number of matching
	packages in a transient message.
	(PackagesFromQuery.get_packages_from_daemon): Properly catch
	xmlrpc faults.
	(UpdatedPackages.get_packages_from_daemon): Properly catch
	xmlrpc faults.

	* red_mount.py (mount_cb): Catch xmlrpc faults and put up an error
	dialog.
	(unmount_cb): Ditto.

	* red_depcomponent.py (DepComponent.__init__): Catch dependency
	exceptions and show them in a dialog.  Pop the dependency
	component in a post-dialog thunk.

	* red_component.py (Component.message_push): Add support for
	transient messages.

	* red_appwindow.py (got_channels_cb): Catch xmlrpc faults and
	put up an error dialog.  Set the parent window on the server
	proxy dialog.
	(AppWindow.do_component_message_push): Always pop off transient
	messages when another message is pushed.

	* red_activation.py (ActivationWindow.activate_finished_cb): Catch
	xmlrpc faults and put up an error dialog.

	* rcd_util.py (dialog_from_fault): Run our dialog in an idle
	function.  Added support for a post-dialog thunk.
	(server_proxy_dialog): Allow a parent window to be passed in.

2003-02-19  Tambet Ingo  <tambet@ximian.com>

	* red_news.py: Use red_listmodel.ListModel instead of home-grown
	one. Also, use serverproxy to retrieve data.
	(NewsView.__init__): Use thrashingview instead of standard treeview.

2003-02-18  Joe Shaw  <joe@ximian.com>

	* rcd_util.py (md5ify_password): Python 2.2's md5 module contains
	hexdigest(), so get rid of our impl.
	(get_channel_icon): Use the name of the fault, not the number.
	(set_pref): Use a ServerProxy and run a gtk main loop to block the
	result while things finish up in the thread.  May need to rethink
	this.

	* red_serverproxy.py (ServerThread): If we encounter a
	ximian_xmlrpclib.Fault, save it and throw it when the user calls
	get_result().
	
	* red_locks.py (toggle_lock): Use ServerProxy.

	* red_packagearray.py (PackagesFromQuery): Added a locks_changed
	handler which flushes the query cache and chains up.
	(PackagesFromDaemon): Added a locks_changed handler which
	schedules a refresh of the query.

	* red_prefs.py: Make categories mandatory, use ServerProxy.

2003-02-18  Jon Trowbridge  <trow@ximian.com>

	* red_pendingview.py (PendingView.set_label): Break up long
	messages to span multiple lines.
	(PollPending_Transact.finish): Call the callback when we are
	partially finished, not just at the end.  This gives us better
	interactive performance.
	(PendingView_Transaction.poll_worker): Since we can't cancel a
	transaction after the download is complete, desensitize the cancel
	button from the start if there is nothing to download.
	(PendingView_Transaction.update_pending_cb): Do the right thing
	if we get called with partial results.

	* red_depcomponent.py: Make the throbber throb during the
	transaction.

	* red_packagearray.py (PackagesFromQuery): Use ServerProxies.

	* red_mount.py: Use ServerProxies.

	* red_pendingview.py: A bunch of changes to
	PendingView_Transaction to make it use ServerProxies.

	* red_summary.py (SummaryComponent.select_all_sensitive): If there
	are no updates, don't sensitize the select all/select none menu
	items.

	* red_pendingops.py (set_action): Restored the code that cancels
	any operations on packages w/ the same name.

	* red_packagearray.py (PackagesFromQuery.packages_changed): Make
	sure that PackagesFromDaemon's packages_changed also gets called.
	This makes sure that our search window gets updated after we do a
	transaction, etc.

	* red_browse.py (BrowseComponent): Implemented
	select_all/unselect_all magic.

2003-02-14  Tambet Ingo  <tambet@ximian.com>

	* red_locks.py (toggle_lock): New file, new function. Locks
	unlocked package and vice versa.

	* red_serverlistener.py: Added listener for locks.
	(ServerListener.users_changed): New method which should be
	implemented by subclasses which want to catch locks changed events.

	* red_packageview.py (PackageView.do_popup): Add Lock/Unlock item
	to popup menu.
	(PackageView.activated_cb): Allow resizing if action name is visible
	and col can get wide.

	* red_packagearray.py (UpdatedPackages.locks_changed): Refresh
	itself on locks_changed event.

	* rcd_util.py (get_package_channel_name): Return "None" instead of
	"????" if package doesn't have channel (or even guessed channel).

	* red_sidebar.py (SideBar.build): Set ButtonBox' layout to "start"
	so it acts like shortcut bar.

2003-02-13  Jon Trowbridge  <trow@ximian.com>

	* red_packagearray.py (sort_pkgs_by_name): Fixed a bug that I
	introduced yesterday, which caused sorting to stop working
	properly.
	
	* red_pendingview.py: Removed some annoying debug spew.

2003-02-12  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (open_or_raise_window): Set the window
	transient for the AppWindow.
	(assemble_menubar): Pass in the AppWindow to install_local() and
	install_remote() so they can be set transient for it.

	* red_browse.py: Remove the red_packagebrowser import.

	* red_installfiles.py (install_local, install_remote): Take our
	parent window as an arg.

	* red_pendingview.py (PendingView.__init__): Allow our window to
	be resized and set a default size.

2003-02-12  Jon Trowbridge  <trow@ximian.com>

	* red_transaction.py (TransactionArray.pendingops_changed): When
	we detect a change in the pending ops, do the change to the
	TransactionArray in an idle function instead of right away.  This
	makes "Select All" and "Select None" actually work in a reasonable
	amount of time.

	* red_pendingops.py: Removed some old cruft.

	* red_packagearray.py (sort_pkgs_by_name): Cache the lower-case
	version of package names.  This speeds things up slightly.

	* red_searchbar.py: Lots of hacking.

	* red_packagepage_info.py (_info_rows): Add a "Channel" row.
	(build_rows): If our row value is a widget, and the function that
	builds the row returns None, just drop the whole row.

	* red_packagearray.py (PackagesFromQuery.set_query): Add an
	optional query_filter argument.
	(PackagesFromQuery.query_finished_cb): Filter our list of packages
	using the query_filter function.  Cache the results of the query
	before we do any filtering.
	(PackagesFromQuery.get_packages_from_daemon): Do the right thing
	if we are handed the empty query.

	* red_statusoption.py: Various changes for the Browse component.

	* red_channeloption.py: Various changes for the Browse component.

	* red_about.py (contributors): Credit where credit is due.

	* red_browse.py: Added.  First version of a unified search
	component.

2003-02-12  Tambet Ingo  <tambet@ximian.com>

	* red_packagearray.py (PackagesFromQuery.filter_duplicates):
	Implement. Prefer system packages as they have correct "installed
	size" (as opposed to channel packages with "package size").
	Don't scan through packages if we don't have system packages.

	* red_sectionoption.py (SectionOption.assemble_menu): Activate
	current menuitem if necessary.

2003-02-11  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (AppWindow.__init__): Connect to our
	size_allocate signal and load our width, height, and sidebar
	width.
	(save_geometry): Added.  Uses red_settings to save our width,
	height, and sidebar size to disk.
	(load_geometry): Load it up.

	* red_packageview.py (CellRendererActivatablePixbuf): Added new
	class.  Basically proxies everything to a CellRendererPixbuf,
	except it handles the on_activate, which emits the "activated"
	signal.
	(PackageView.append_action_column): Add an "activatable"
	parameter, defaulting to on.  Instead of creating a regular pixbuf
	cell renderer, create our activatable one and connect to the
	activated signal, which then emits an "activated" signal on the
	TreeView.

	* red_transaction.py (TransactionComponent.build): Show the action
	name for our pending transactions so it's more clear what happens
	when you disable an action on a package.
	(TransactionSimple.build): Make these not activatable.

2003-02-11  Tambet Ingo  <tambet@ximian.com>

	* red_packagearray.py (pkg_status): Return "uninstalled" string
	for uninstalled packages.
	(pkg_status_icon): Show uninstalled icon.

	* red_packageview.py (PackageView.append_current_version_column):
	Enable resizing of the column.
	(PackageView.append_version_column): Ditto.
	(PackageView.append_name_column): Ditto.

	* red_transaction.py (TransactionComponent.act_cb): Add page
	title.

	* red_channelbrowse.py (ChannelBrowseComponent.build): Add page
	title. Add shadow.

	* red_search.py (SearchComponent.build): Add shadow.

	* red_system.py (SystemComponent.build): Add shadow.

	* red_news.py (NewsView.__init__): Add shadow.

	* red_transaction.py (TransactionSimple.__init__): Add shadow.
	(TransactionComponent.build): Add shadow.

	* red_depcomponent.py (DepComponent.build): Add shadow. Add page
	title.

	* red_history.py (HistoryView.build): Add shadow.
	(long_name): name = long_name.
	(HistorySearchBar.build): Removed unnecessary words "Package".
	(HistoryView.build): Set columns resizable.

	* red_summary.py (SummaryComponent.build): Add shadow.

2003-02-10  Tambet Ingo  <tambet@ximian.com>

	* red_appwindow.py (AppWindow.__init__): Don't show_all()
	everything. show_all() main area, leave sidebar's visibility to
	itself.
	(refresh_cb): Don't block UI while getting list of channels.

	* red_sidebar.py (SideBar.__init__): Read initial visibility from
	config.
	(SideBar.change_visibility): Save visibility.

	* red_packagepage_info.py (pkg_description): Implement. We want
	to format package descriptions.

2003-02-07  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py: Move the install/remove/cancel/info
	sensitivity and activation callbacks out the toolbar's scope and
	into the class's scope.  Add "Package Information" to the View
	menu.  Add back the Actions menu and move "Refresh Channel Data"
	and "Verify System Dependencies" there and add in "Run
	Transaction", "Install Package", "Remove Package", and "Cancel
	Action".

	* red_menubar.py: Make the "pixbuf" argument mean a gtk.gdk.Pixbuf
	and added an "image" argument which means a gtk.Image widget.
	When the image is set, create the gtk.ImageMenuItem using the name
	and the provided image.

	* red_packageview.py (PackageView.do_popup): Change "Remove
	action" to "Cancel action" to match the toolbar and remove
	confusion over the work "Remove".
	(PackageView.append_action_column): Don't show the action name by
	default.

	* red_serverinfo.py: Change some references of "server" to
	"daemon".

	* red_summary.py (SummaryComponent.build): Add back in the action
	column.

	* red_toolbar.py (Toolbar.sensitize_toolbar_items): Don't pass any
	arguments to the sensitize function, to match the menubar
	arguments.

	* red_transaction.py (TransactionSimple.build): Show the action
	name in this one.

2003-02-07  Frank Belew  <frb@ximian.com>

	* red-carpet.in: added red_carpet_pixbuf_path to fix art loading

	* red_pixbuf.py: fixed up pixbuf_path to fix art loading

	* src/Makefile.am: added red_toolbar.py to red_carpetsupport_DATA

2003-02-07  Frank Belew  <frb@ximian.com>

	* red-carpet.in: added red_carpet_libdir to the path append so client
	works after make install

2003-02-07  Tambet Ingo  <tambet@ximian.com>

	* red_packagepage_info.py (pkg_section): Implement.
	(build_rows): Show icons and nicer text for package sections.

	* red_pendingops.py (package_action): Use get method with default
	value instead of [].

2003-02-06  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (AppWindow.connect_sidebar_buttons): Don't
	sensitize the details button.
	(AppWindow.assemble_toolbar.info_cb): show_package_info() is in
	red_packagebook now, not red_packagebrowser.

	* red_channelbrowse.py (ChannelBrowseComponent.build): Go back to
	using a PackageView.

	* red_depcomponent.py (DepComponent.activated): Desensitize the
	whole sidebar, not just the run button.

	* red_packagebook.py: Move the PackagePage out of here and into
	its own file, mainly for circular dependency reasons.
	(show_package_info): Move this here.  Connect to the "destroy"
	signal, not the "destroy_event" signal.

	* red_packagebrowser.py: Deleted.  The show_package_info()
	functionality has been moved to red_packagebook.py and the
	popup functionality has been moved to red_packageview.py.

	* red_packagepage.py: Added.  Contains the base PackagePage class
	and the PackagePage_History class (formerly PageHistory).  Removed
	the unused PageSummary class.

	* red_packagepage_deps.py, red_packagepage_info.py: Fix up the
	module references.

	* red_packageview.py (PackageView.do_popup): Moved the code from
	red_packagebrowser.py here.

	* red_search.py (SearchComponent.build): Connect the view to the
	component and go back to using PackageView.

	* red_sidebar.py (SideBar): Derive also from
	red_pendingops.PendingOpsListener.  Kill the transaction bar and
	do it ourselves.  Get rid of the RunButton class.  Handle updating
	the pending transactions label and the run button's sensitivity in
	our pendingops_changed() implementation.

	* red_summary.py, red_search.py: Go back to using PackageView.

	* red_thrashingtreeview.py (post_thrash_model): If we don't have
	any more items in our tree, our saved selpath will be invalid.
	Catch the ValueError exception and happily go on.

	* red_transaction.py (TransactionBar): Removed.  Equivalently
	handled now by the sidebar.
	(TransactionComponent.build): Connect the view to the component.

2003-02-06  Tambet Ingo  <tambet@ximian.com>

	* red_pixbuf.py: Added Peter Bowen's patch to append art
	dir to system path, not to hardcode it to '../'.

	* red_history.py (HistoryComponent.pixbuf): Updated icon.

	* red_transaction.py (TransactionBar.update_label): Add a
	newline if there are both installs and removals. Otherwise it
	got too long.

	* red_sidebar.py (SideBar.change_visibility): Implement

	* red_appwindow.py (AppWindow.connect_sidebar_buttons): Connect
	sidebar's buttons here.
	(AppWindow.activate_component): Update toolbar items.
	(AppWindow.info_cb): Add pixbuf to "info" toolbar item.
	(AppWindow.__init__): Allow shrinking for 2nd pane. Otherwise,
	if main window is not big enough, both sides will fight for
	their part. Set icon for appwindow.
	(AppWindow.assemble_menubar): Added
	View/Hide sidebar.

	* red_sidebar.py (RunButton): New class for sidebar's "Run"
	button. It is subclass of PendingOpsListener so it can
	sensitize itself correctly.
	(SideBar.sensitize_run_button): Convenient function, moved here
	from red_appwindow.py.
	(SideBar.build): Use new icons for buttons.

2003-02-05  Joe Shaw  <joe@ximian.com>

	* red_channeloption.py (get_channel): We could get a -1 from
	self.get_history().  If so, return None.

	* red_mount.py: Set the title of the mount and unmount dialogs.
	Iterate over the keys of a dictionary by doing "for x in d"
	instead of "for x in d.keys()" for efficiency.

2003-02-05  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py: Switch the naming of "toolbar" and "shortcut
	bar"; the buttons that take the user to different components
	should be the shortcut bar.  Also changed "show_on_toolbar" to
	"show_in_shortcuts" throughout all the files.
	(AppWindow): Remove the transactionbar from here.  It's in the
	sidebar now.  Replace the hbox containing the sidebar and the main
	area with an hpaned, so that it can be resized.  Make the toolbar
	a red_toolbar.Toolbar.
	(assemble_toolbar): Use the red_toolbar API, and hook up the
	buttons.  Replace the Settings and Help icons with Cancel, Info,
	and Subscriptions buttons.
	(do_component_package_selected): Added, sensitize the toolbar
	items.

	* red_channelbrowse.py: Change the name to "Packages".  Connect
	the view to the component so we can signal changes to the toolbar.

	* red_component.py (Component): Add a package_selected, which
	emits the new signal of same name.  Added a get_current_package
	method which returns the last selected package.  Added a
	connect_view method which proxies the view's selected signal to
	the component's package_selected signal.
	(ComponentListener): Add ids for the package_selected signal, add
	a do_component_package_selected virtual method.

	* red_history.py: Change some text, make the title text stand by
	itself.

	* red_sidebar.py: Toolbar -> ShortcutBar rename.  Add the
	transaction bar here.

	* red_summary.py: Don't show the action column, don't show the
	channel name by default.  Connect the view to the component.

	* red_system.py: Don't show this in the shortcut bar.

	* red_toolbar.py: Added.  Listens to changes in the pending
	operations and calls the sensitize functions as necessary.

	* red_transaction.py (TransactionBar.__init__): Don't require the
	AppWindow anymore.  This is such a simple piece of code, it should
	probably just go away and be absorbed by the sidebar.

2003-02-05  Tambet Ingo  <tambet@ximian.com>

	* red_history.py (HistorySearchBar.build): Changed some labels.
	(HistoryComponent.build): Show component's name in main window.

	* red_news.py (NewsComponent.build): Ditto.

	* red_system.py (SystemComponent.build): Ditto.

	* red_summary.py (SummaryComponent.build): Ditto, removed "You have
	N updates available" label.

	* red_appwindow.py (register_component):  Activate first component
	in gtk.idle to get the default active componet on toolbar.
	(AppWindow.__init__): Moved creation throbber to it's own method,
	init is getting too long. Added "Shortcut bar" to main window.
	(AppWindow.create_throbber): New method.
	(AppWindow.assemble_shortcut_bar): Construct shortcut bar here.

	* red_sidebar.py (SideBar.build): Center icon and label on buttons.
	(Toolbar.construct): Ditto.

2003-02-04  Tambet Ingo  <tambet@ximian.com>

	* Makefile.am (red_carpetsupport_DATA): Added red_sidebar.py.

	* red_sidebar.py: New file.
	(SideBar): New class, implements sidebar for the main window.
	(Toolbar): New class, implements new toolbar. I think
	red_extras/toolbar.c is now deprecated?

	* red_transaction.py (TransactionComponent.build): Made
	data model global to be shared with TransactionSimple.
	(TransactionSimple): New class.

	* red_news.py (NewsComponent.show_on_toolbar): Yes,
	we want to be on the toolbar.

	* red_history.py (HistoryComponent.show_on_toolbar): Ditto.

	* red_channelbrowse.py (ChannelBrowseComponent.name): Made
	it's name shorter (we still have (long_name) method).

	* red_summary.py (SummaryComponent.name):  Ditto.

	* red_system.py (SystemComponent.name): Ditto.

	* red_appwindow.py (AppWindow.__init__): Added new sidebar
	widget, modified other code to work with it.
	(AppWindow.register_component): Add all components to toolbar.
	Toolbar decides which components are visible.

2003-02-03  Jon Trowbridge  <trow@ximian.com>

	* red_pendingview.py (PendingView_Simple): Revamped to use
	ServerProxys for the poll_pending calls so that we won't ever
	block on a busy daemon.  PendingView_Simple is what is used for
	feedback when refreshing channel data, so that operation is now
	much nicer.  The total number of threads we throw off is bounded,
	so that the whole system won't bog down if your rcd sees a whole
	bunch of channels.

2003-02-03  Tambet Ingo  <tambet@ximian.com>

	* red_activation.py (ActivationWindow.activate): Don't block
	UI, use call rpc call through serverproxy. Fixed email storing
	to conf on successful activation.

	* rcd_util.py (server_proxy_dialog): Moved it from
	red_serverinfo.py to here.

	* red_serverinfo.py (dump_finished_cb): Use dialog from new
	location.

	* red_transaction.py (TransactionArray.__init__): Show packages
	with actions only.

	* red_summary.py (SummaryComponent.select_all_sensitive): Select
	all/none are active only if user has "upgrade" privilege.
	(SummaryComponent.updates_changed_cb): Sort by importance by
	default.

	* red_component.py (Component.select_all_sensitive): New method
	to determine whether select all/none should be sensitve.

	* red_appwindow.py (AppWindow.__init__): Removed some old unused
	variables.
	(AppWindow.select_all_sensitive_cb): Callback to sensitize Select
	All/None menu items.
	(AppWindow.activate_sensitive_fn): Activate is available only for
	superuser.

2003-01-31  Jon Trowbridge  <trow@ximian.com>

	* Removed extraneous imports from lots of files.

	* red_statusoption.py (StatusOption.__init__): Correctly chain
	the constructors.

	* red_serverlistener.py: Removed some really annoying debug spew.

	* red_searchbar.py: Light hacking.

	* red_menubar.py (MenuBar.exercise_menubar): Added.  Call (almost)
	all menu item callbacks in sequence.

	* red_channeloption.py (ChannelOption.__assemble): Added an
	(optional) "Any Channel" menu item.

	* red_appwindow.py (AppWindow.assemble_debug_menubar): Added.
	Access to useful debugging functions.
	(AppWindow.exercise_components): Added.  Activates all components
	in sequence.

	* red_main.py: Added debug flag.

	* Makefile.am (red_carpetsupport_DATA): Added new files.  Now
	we should be able to make distcheck again.

2003-01-31  Tambet Ingo  <tambet@ximian.com>

	* red_users.py: Removed some old cruft.
	(UsersData.refresh): Make sure active_user still exists.
	(UsersData.get_current_user): Implement.
	(UsersData.delete_user): Try to select current user after
	deleting active user.
	(UsersData.set_active_user): Emit signal only if active user
	really changed.
	(UsersWindow.__init__): Select current user by default.
	(UsersWindow.active_user_changed_cb): Don't trust return values
	without checking.

	* red_summary.py (SummaryComponent.updates_changed_cb): Added
	special case if there's no updates.

2003-01-30  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (run_transaction_cb): Fix a regression where we
	couldn't remove packages listed as upgrades.  Feels like a hack,
	though, so add a FIXME about it.

2003-01-30  Joe Shaw  <joe@ximian.com>

	* red_appwindow.py (run_transaction_cb): Added.  Call this instead
	of into some random function in red_transaction.py.
	(verify_deps_cb): Added.
	(assemble_menubar): Add "Verify System Dependencies"

	* red_component.py: Remove some cruft.

	* red_depcomponent.py: Unify the dependency resolution and
	transaction in here.  We take a list of packages to install and
	remove and whether this is a verification as arguments to the
	constructor now, instead of asking red_pendingops.  Resolve deps
	immediately and build the UI on the results, connect the continue
	button to a method which runs the transaction and connects a
	PendingView_Transaction window to it.

	* red_pendingops.py (packages_with_actions): Take an optional
	argument which is the list of actions to check for.  Use list
	comprehension syntax to make it easier to read.
	(resolve_dependencies): Removed.  Moved into red_depcomponent.py.

	* red_transaction.py (resolve_deps_and_transact): Removed.
	(begin_transaction): Ditto.  Moved into red_depcomponent.py.

2003-01-30  Jon Trowbridge  <trow@ximian.com>

	* red_serverlistener.py: Changes to make the sequence number
	checks happen using ServerProxies, so that we'll get the nice
	behavior if the daemon crashes or otherwise goes away.

	* red_serverproxy.py: Dead daemon code moved into
	red_deaddaemon.py.

	* red_deaddaemon.py: Added.  Contains a better version of the
	"lost contact with the daemon" dialogs/code that used to be in
	red_serverproxy.py.

2003-01-30  Tambet Ingo  <tambet@ximian.com>

	* red_users.py (User.privileges_get): Make sure user has at least
	"view" privilege.
	(User.update): Notify serverlistener that we have updated.
	(User.delete): Ditto.
	(UsersWindow.build_password_part): Added a frame with user's
	name on it to make it more explicit. Senzitise entries and button
	to make it more intuitive.
	(UsersWindow.selection_changed_cb): Catch programmatically changed
	active_user and modify the visual selection.
	(UserAdd.add_cb): Set the new user active_user.
	(UsersData.set_active_user_cb): New method to wait until threads
	are finished.
	(UsersData.add_user): Use (set_active_user_cb)
	(UsersData.delete_user): Ditto.
	(UsersModel.get_iter_for_user): Find it by name, don't require
	equality.

	* red_serverinfo.py (dump_xml): Get dump in new thread to avoid
	UI blocking.
	(filesel_destroy): Cleanup on destroy.
	(show_server_proxy_dialog): New function to show to user that
	we're working. It should probably be moved to red_serverproxy
	so it could be used by others (activation, ...) also.

2003-01-29  Joe Shaw  <joe@ximian.com>

	* red_settings.py: If .gnome2 or .gnome2_private don't exist,
	create them.

2003-01-29  Tambet Ingo  <tambet@ximian.com>

	* red_mount.py (select_and_mount): Removed, not used anymore.

	* red_appwindow.py (AppWindow.unmount_sensitive_fn): Get server
	info from new location.

	* red_serverinfo.py (view_server_info_cb): New file, moved
	(red_appwindow.view_server_info_cb) here, implemented "dump xml"
	button.

2003-01-28  Joe Shaw  <joe@ximian.com>

	* rcd_util.py: Add a current_user global.
	(register_server): Reset the current_user
	(reset_current_user, get_current_user): Added.  Gets the current
	user making the calls, so the client doesn't have to muck around
	with transport details.

	* red_users.py (User.update): Set the new password on the server
	object.
	(PermissionsView.__init__.activated_cb): If we're editing our own
	privileges and we're disabling the superuser privilege, warn the
	user because this is bad bad bad.
	(UsersWindow.build): Connect to the model's changed signal and
	sensitize the change password table if the current user is editing
	himself or has superuser privileges.  This allows users to edit
	their own passwords.

	* ximian_xmlrpclib.py (Transport.request): Reset our tried_once
	attribute to 0 once we've made our auth request.  This way, if our
	password requirement changes, we'll try again before giving up.
	(ServerProxy.set_username, ServerProxy.set_password): Added.
	These methods allow setting of the username and password outside
	of the constructor.

2003-01-28  Tambet Ingo  <tambet@ximian.com>

	* red_users.py: Rewrote models to make things (hopefully)
	suck less.

2003-01-27  Jon Trowbridge  <trow@ximian.com>

	* red_users.py: Rearranged the dialog a bit.  Made pretty much
	everything in sight a ServerListener.  Added code so that stuff
	will automatically refresh if the daemon reports a user change
	while the dialog is open.  If the user doesn't have superuser
	privileges, a bunch of the widgets will now be insensitive.

2003-01-24  Joe Shaw  <joe@ximian.com>

	* red_channelmodel.py: Change the ChannelModel to derive from
	red_extra.ListModel to red_listmodel.ListModel, and remove a large
	chunk of code.

	* red_packagearray.py: Ditto.

	* red_listmodel.py: Created a ListModel class, which moves a lot
	of code duplicated in the PackageArray and ChannelModel to here.
	Includes the "changed" and "changed_one" signals, the
	pending_changes queue, the sort and filter functions, and the
	len/get/get_all() methods.

	* red_statusoption.py (_status_types): For the "Installed" list,
	we want to show installed packages with the same name.

	* red_thrashingtreeview.py (TreeView): We need to call
	gtk.TreeView.set_model(), calling the constructor isn't sufficient.

2003-01-24  Joe Shaw  <joe@ximian.com>

	* red_packageview.py: Call the thrashing treeview's constructor
	explicitly.

2003-01-24  Joe Shaw  <joe@ximian.com>

	* red_channelmodel.py: Add a TRANSIENT column, take sort and
	filter functions, make it pretty similar to a PackageArray so we
	can share some code between them with an abstract class later.
	Add a "changed" signal.  Make the view for subscriptions use the
	ChannelModel and derive from a thrashing treeview.

	* red_mount.py: Get rid of the mounted_channels global list.  We
	don't really need it, and we'll just ask the daemon for our
	transient channels instead.  Make the treeview in the unmount
	window use a ChannelModel instead of a ListStore so it handles
	channel and subscription changes correctly, don't create a column
	for an icon, since mounted channels don't have icons.

	* red_packageview.py: Make the PackageView derive from
	red_thrashingtreeview.TreeView and move most of the thrashing code
	into an abstract class so things can use it for ChannelModels too.

	* red_thrashingtreeview.py: Abstract widget which derives from
	gtk.TreeView and thrashes the model so changes are rendered
	correctly.

2003-01-24  Tambet Ingo  <tambet@ximian.com>

	* red_appwindow.py (AppWindow.register_component): Put on the
	toolbar only if component asks for it.

	* red_component.py (Component.show_on_toolbar): New method to
	determine whether component should be placed on the toolbar.

	* red_summary.py (SummaryComponent.show_on_toolbar): Yes, put
	me on toolbar.

	* red_transaction.py (TransactionComponent.show_on_toolbar): ditto.

	* red_channelbrowse.py (ChannelBrowseComponent.show_on_toolbar):
	ditto.

	* red_system.py (SystemComponent.show_on_toolbar): ditto.

	* red_packagebrowser.py (show_package_info): Don't show more than
	one dialog fore every package.

	* red_appwindow.py (AppWindow.mount_callback): Use new dialog
	widget.

	* red_mount.py (FileEntry): New class which looks (and acts) a bit
	like GnomeFileEntry.
	(MountWindow): New class to mount channels.
	(mount_channel): Added optional name argument for channel name.

	* red_packagearray.py (UpdatedPackages.subscriptions_changed): 
	(UpdatedPackages.channels_changed): Removed server argument.

	* test-listeners.py (MyServerListener.channels_changed): ditto,
	just to be in sync.

2003-01-24  Jon Trowbridge  <trow@ximian.com>

	* red_packagebrowser.py (PackageBrowser.show_popup_cb):
	Desensitize the remove/install/upgrade items in the right-click
	menu if we don't have sufficient privileges to perform those
	actions.

	* red_appwindow.py (AppWindow.assemble_menubar): Desensitize the
	File->Install, File->Mount and File->Unmount menu items if we
	don't have sufficient privileges to perform the associated
	actions.

	* red_menubar.py (MenuBar.refresh_items): Added code to allow
	sensitive functions and callbacks to be passed in as sequences,
	where the 0th item is the actual callable and the subsequent items
	are arguments to the callable... sort of a poor man's lexical
	closure.

	* red_packagearray.py (PackagesFromQuery): Multiple small changes to
	reflect revised ServerListener API.

	* red_channeloption.py (ChannelOption): Ditto.

	* red_channelinfo.py (ChannelInfo): Ditto.

	* red_channelmodel.py (ChannelModel): Ditto.

	* red_serverlistener.py: Extended to track the user sequence
	number as well as the world sequence numbers, and to clear the
	permission cache (via a call to rcd_util.reset_server_permissions)
	when the user sequence number changes.  When polling the server,
	execute both sequence-number-fetching calls as normal xml-rpc
	calls in a thread, instead of using ServerProxy objects.  If we
	detect a change, throw off an idle function to notify the
	ServerListeners.  This ensures that the notification happens in
	the main thread.  Also, removed a bunch of cruft which caused the
	server to be propogated throughout the ServerListener calls.  Our
	current policy is that if you need a server object, you get it by
	just calling rcd_util.get_server.

	* red_about.py (About.__init__): Use the copyright years from
	red_main.red_copyright, instead of hard-wiring it into the string.

	* red_main.py (red_copyright): Added a variable containing the
	program's copyright years, along with the name and version.

	* rcd_util.py (check_server_permission): Added.  Tests to see if
	the user has the specified permission on the server.  The results
	are cached, so subsequent queries don't require a (potentially
	blocking) xml-rpc call.
	(reset_server_permissions): Clears the permission cache.


2003-01-23  Joe Shaw  <joe@ximian.com>

	* red_channelmodel.py: Begin porting this over to be a
	RedListModel and ServerListener.  Still need to thrash the model,
	add filtering and proper sorting, and probably optimize for the
	local subscription changed case.

	* red_serverlistener.py: Fix a bug where channel seqno listeners
	were being signaled for a change in the subscription seqno.

	* red_subscriptions.py: Removed some code which didn't appear to
	have any purpose and was causing tracebacks.


2003-01-23  Jon Trowbridge  <trow@ximian.com>

	* red_packagebrowser.py (PackageBrowser.show_popup_cb): Use the
	extra time and button number arguments when popping up the menu.

	* red_packageview.py (PackageView.button_clicked_for_popup_cb):
	Propagate the event button number and time through the chain of
	callbacks and idle functions, since the GdkEvent itself seems to
	get mangled by the time we actually need this info to pop up our
	menu.  This fixes the weird problem (due to a bad event time)
	where the pop-up menu would disappear unless button 3 was held
	down
	(PackageView.do_popup): Support the extra arguments discussed
	above.
	

	* Makefile.am (red_carpetsupport_DATA): Updated the list of files
	so that we can make distcheck.

