gnome-packagekit r224 - trunk/src



Author: rhughes
Date: Wed Jun 11 15:30:23 2008
New Revision: 224
URL: http://svn.gnome.org/viewvc/gnome-packagekit?rev=224&view=rev

Log:
from git

Modified:
   trunk/src/Makefile.am
   trunk/src/gpk-application.c
   trunk/src/gpk-check-update.c
   trunk/src/gpk-client-run.c
   trunk/src/gpk-client.c
   trunk/src/gpk-client.h
   trunk/src/gpk-repo.c
   trunk/src/gpk-update-viewer.c
   trunk/src/gpk-watch.c

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Wed Jun 11 15:30:23 2008
@@ -168,6 +168,8 @@
 	gpk-application.h				\
 	gpk-application-state.c				\
 	gpk-application-state.h				\
+	gpk-cell-renderer-uri.c				\
+	gpk-cell-renderer-uri.h				\
 	$(shared_SOURCES)				\
 	$(NULL)
 
@@ -188,8 +190,6 @@
 
 gpk_update_viewer_SOURCES =				\
 	gpk-update-viewer.c				\
-	gpk-statusbar.c					\
-	gpk-statusbar.h					\
 	gpk-cell-renderer-uri.c				\
 	gpk-cell-renderer-uri.h				\
 	$(shared_SOURCES)				\
@@ -201,8 +201,6 @@
 
 gpk_repo_SOURCES =					\
 	gpk-repo.c					\
-	gpk-statusbar.c					\
-	gpk-statusbar.h					\
 	$(shared_SOURCES)				\
 	$(NULL)
 

Modified: trunk/src/gpk-application.c
==============================================================================
--- trunk/src/gpk-application.c	(original)
+++ trunk/src/gpk-application.c	Wed Jun 11 15:30:23 2008
@@ -53,6 +53,7 @@
 #include "gpk-animated-icon.h"
 #include "gpk-client-run.h"
 #include "gpk-client-chooser.h"
+#include "gpk-cell-renderer-uri.h"
 
 static void     gpk_application_class_init (GpkApplicationClass *klass);
 static void     gpk_application_init       (GpkApplication      *application);
@@ -88,6 +89,7 @@
 	GConfClient		*gconf_client;
 	GtkListStore		*packages_store;
 	GtkListStore		*groups_store;
+	GtkListStore		*details_store;
 	PkControl		*control;
 	PkClient		*client_search;
 	PkClient		*client_action;
@@ -135,6 +137,13 @@
 	GROUPS_COLUMN_LAST
 };
 
+enum {
+	DETAIL_COLUMN_TITLE,
+	DETAIL_COLUMN_TEXT,
+	DETAIL_COLUMN_URI,
+	DETAIL_COLUMN_LAST
+};
+
 static guint	     signals [LAST_SIGNAL] = { 0 };
 
 G_DEFINE_TYPE (GpkApplication, gpk_application, G_TYPE_OBJECT)
@@ -263,6 +272,189 @@
 }
 
 /**
+ * gpk_application_allow_install:
+ **/
+static void
+gpk_application_allow_install (GpkApplication *application, gboolean allow)
+{
+	GtkWidget *widget;
+	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_install");
+	gtk_widget_set_sensitive (widget, allow);
+}
+
+/**
+ * gpk_application_allow_remove:
+ **/
+static void
+gpk_application_allow_remove (GpkApplication *application, gboolean allow)
+{
+	GtkWidget *widget;
+	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_remove");
+	gtk_widget_set_sensitive (widget, allow);
+}
+
+/**
+ * gpk_application_packages_checkbox_invert:
+ **/
+static void
+gpk_application_packages_checkbox_invert (GpkApplication *application)
+{
+	GtkTreeView *treeview;
+	GtkTreeModel *model;
+	GtkTreeIter iter;
+	GtkTreeSelection *selection;
+	GtkWidget *widget;
+	const gchar *icon;
+	gboolean checkbox;
+	GpkPackageState state;
+	gboolean ret;
+
+	/* get the selection and add */
+	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
+	treeview = GTK_TREE_VIEW (widget);
+	selection = gtk_tree_view_get_selection (treeview);
+	ret = gtk_tree_selection_get_selected (selection, &model, &iter);
+	if (!ret) {
+		pk_warning ("no selection");
+		return;
+	}
+
+	gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_STATE, &state, -1);
+
+	/* do something with the value */
+	gpk_application_state_invert (&state);
+
+	/* get the new icon */
+	icon = gpk_application_state_get_icon (state);
+	checkbox = gpk_application_state_get_checkbox (state);
+
+	/* set new value */
+	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
+			    PACKAGES_COLUMN_STATE, state,
+			    PACKAGES_COLUMN_CHECKBOX, checkbox,
+			    PACKAGES_COLUMN_IMAGE, icon,
+			    -1);
+}
+
+/**
+ * gpk_application_get_checkbox_enable:
+ **/
+static gboolean
+gpk_application_get_checkbox_enable (GpkApplication *application, GpkPackageState state)
+{
+	gboolean enable_installed = TRUE;
+	gboolean enable_available = TRUE;
+
+	if (application->priv->action == PK_ACTION_INSTALL) {
+		enable_installed = FALSE;
+	} else if (application->priv->action == PK_ACTION_REMOVE) {
+		enable_available = FALSE;
+	}
+
+	if (gpk_application_state_installed (state)) {
+		return enable_installed;
+	}
+	return enable_available;
+}
+
+/**
+ * gpk_application_set_buttons_apply_clear:
+ **/
+static void
+gpk_application_set_buttons_apply_clear (GpkApplication *application)
+{
+	GtkWidget *widget;
+	GtkTreeView *treeview;
+	gboolean valid;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
+	GpkPackageState state;
+	gboolean enabled;
+
+	g_return_if_fail (PK_IS_APPLICATION (application));
+
+	/* okay to apply? */
+	if (application->priv->package_list->len == 0) {
+		widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
+		gtk_widget_set_sensitive (widget, FALSE);
+		widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
+		gtk_widget_set_sensitive (widget, FALSE);
+		application->priv->action = PK_ACTION_NONE;
+	} else {
+		widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
+		gtk_widget_set_sensitive (widget, TRUE);
+		widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
+		gtk_widget_set_sensitive (widget, TRUE);
+	}
+
+	/* correct the enabled state */
+	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
+	treeview = GTK_TREE_VIEW (widget);
+	model = gtk_tree_view_get_model (treeview);
+	valid = gtk_tree_model_get_iter_first (model, &iter);
+
+	/* for all current items, reset the state if in the list */
+	while (valid) {
+		gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_STATE, &state, -1);
+		enabled = gpk_application_get_checkbox_enable (application, state);
+		gtk_list_store_set (GTK_LIST_STORE (model), &iter, PACKAGES_COLUMN_CHECKBOX_ENABLE, enabled, -1);
+		valid = gtk_tree_model_iter_next (model, &iter);
+	}
+}
+
+/**
+ * gpk_application_install:
+ **/
+static gboolean
+gpk_application_install (GpkApplication *application)
+{
+	gboolean ret;
+	guint index;
+
+	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
+
+	/* shouldn't be possible */
+	if (application->priv->package == NULL) {
+		pk_warning ("no package");
+		return FALSE;
+	}
+
+	/* changed mind, or wrong mode */
+	if (application->priv->action == PK_ACTION_REMOVE) {
+		ret = pk_ptr_array_remove_string (application->priv->package_list, application->priv->package);
+		if (ret) {
+			pk_debug ("removed %s from package list", application->priv->package);
+
+			/* correct buttons */
+			gpk_application_allow_install (application, FALSE);
+			gpk_application_allow_remove (application, TRUE);
+			gpk_application_packages_checkbox_invert (application);
+			gpk_application_set_buttons_apply_clear (application);
+			return TRUE;
+		}
+		pk_warning ("wrong mode and not in list");
+		return FALSE;
+	}
+
+	/* already added */
+	index = pk_ptr_array_find_string (application->priv->package_list, application->priv->package);
+	if (index != -1) {
+		pk_warning ("already added");
+		return FALSE;
+	}
+
+	application->priv->action = PK_ACTION_INSTALL;
+	g_ptr_array_add (application->priv->package_list, g_strdup (application->priv->package));
+
+	/* correct buttons */
+	gpk_application_allow_install (application, FALSE);
+	gpk_application_allow_remove (application, TRUE);
+	gpk_application_packages_checkbox_invert (application);
+	gpk_application_set_buttons_apply_clear (application);
+	return TRUE;
+}
+
+/**
  * gpk_application_menu_homepage_cb:
  **/
 static void
@@ -336,8 +528,57 @@
 	g_strfreev (files);
 }
 
-static void gpk_application_button_install_cb (GtkWidget *widget_button, GpkApplication *application);
-static void gpk_application_button_remove_cb (GtkWidget *widget_button, GpkApplication *application);
+/**
+ * gpk_application_remove:
+ **/
+static gboolean
+gpk_application_remove (GpkApplication *application)
+{
+	gboolean ret;
+	guint index;
+
+	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
+
+	/* shouldn't be possible */
+	if (application->priv->package == NULL) {
+		pk_warning ("no package");
+		return FALSE;
+	}
+
+	/* changed mind, or wrong mode */
+	if (application->priv->action == PK_ACTION_INSTALL) {
+		ret = pk_ptr_array_remove_string (application->priv->package_list, application->priv->package);
+		if (ret) {
+			pk_debug ("removed %s from package list", application->priv->package);
+
+			/* correct buttons */
+			gpk_application_allow_install (application, TRUE);
+			gpk_application_allow_remove (application, FALSE);
+			gpk_application_packages_checkbox_invert (application);
+			gpk_application_set_buttons_apply_clear (application);
+			return TRUE;
+		}
+		pk_warning ("wrong mode and not in list");
+		return FALSE;
+	}
+
+	/* already added */
+	index = pk_ptr_array_find_string (application->priv->package_list, application->priv->package);
+	if (index != -1) {
+		pk_warning ("already added");
+		return FALSE;
+	}
+
+	application->priv->action = PK_ACTION_REMOVE;
+	g_ptr_array_add (application->priv->package_list, g_strdup (application->priv->package));
+
+	/* correct buttons */
+	gpk_application_allow_install (application, TRUE);
+	gpk_application_allow_remove (application, FALSE);
+	gpk_application_packages_checkbox_invert (application);
+	gpk_application_set_buttons_apply_clear (application);
+	return TRUE;
+}
 
 /**
  * gpk_application_menu_install_cb:
@@ -345,7 +586,7 @@
 static void
 gpk_application_menu_install_cb (GtkAction *action, GpkApplication *application)
 {
-	gpk_application_button_install_cb (NULL, application);
+	gpk_application_install (application);
 }
 
 /**
@@ -354,7 +595,7 @@
 static void
 gpk_application_menu_remove_cb (GtkAction *action, GpkApplication *application)
 {
-	gpk_application_button_remove_cb (NULL, application);
+	gpk_application_remove (application);
 }
 
 /**
@@ -518,11 +759,41 @@
 }
 
 /**
+ * gpk_application_add_detail_item:
+ **/
+static void
+gpk_application_add_detail_item (GpkApplication *application, const gchar *title, const gchar *text, const gchar *uri)
+{
+	gchar *markup;
+	GtkWidget *tree_view;
+	GtkTreeIter iter;
+	GtkTreeSelection *selection;
+
+	/* format */
+	markup = g_strdup_printf ("<b>%s:</b>", title);
+
+	pk_debug ("%s %s %s", markup, text, uri);
+	gtk_list_store_append (application->priv->details_store, &iter);
+	gtk_list_store_set (application->priv->details_store, &iter,
+			    DETAIL_COLUMN_TITLE, markup,
+			    DETAIL_COLUMN_TEXT, text,
+			    DETAIL_COLUMN_URI, uri,
+			    -1);
+
+	g_free (markup);
+
+	tree_view = glade_xml_get_widget (application->priv->glade_xml, "treeview_detail");
+	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
+	gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE);
+	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (tree_view));
+}
+
+/**
  * gpk_application_details_cb:
  **/
 static void
 gpk_application_details_cb (PkClient *client, const gchar *package_id,
-			    const gchar *license, PkGroupEnum group,
+			    const gchar *license, PkGroupEnum group_enum,
 			    const gchar *detail, const gchar *url,
 			    guint64 size, GpkApplication *application)
 {
@@ -532,6 +803,7 @@
 	PkPackageId *ident;
 	const gchar *repo_name;
 	const gchar *icon;
+	const gchar *group;
 	gboolean valid;
 	gboolean installed;
 	PkInfoEnum info;
@@ -545,10 +817,6 @@
 	}
 	installed = pk_strequal (ident->data, "installed");
 
-	pk_debug ("details = %s:%i:%s:%s", package_id, group, detail, url);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-	gtk_widget_show (widget);
-
 	/* get the icon */
 	icon = pk_extra_get_icon_name (application->priv->extra, ident->name);
 
@@ -564,25 +832,39 @@
 	gtk_image_set_from_icon_name (GTK_IMAGE (widget), icon, GTK_ICON_SIZE_DIALOG);
 	gtk_widget_show (widget);
 
+	gtk_list_store_clear (application->priv->details_store);
+
 	/* homepage */
 	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_homepage");
 	if (pk_strzero (url) == FALSE) {
 		gtk_widget_set_sensitive (widget, TRUE);
-		g_free (application->priv->url);
-		/* save the url for the button */
-		application->priv->url = g_strdup (url);
 
 		/* set the tooltip to where we are going */
 		text = g_strdup_printf (_("Visit %s"), url);
 		gtk_widget_set_tooltip_text (widget, text);
 		g_free (text);
 
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
-		gtk_widget_set_sensitive (widget, TRUE);
+		gpk_application_add_detail_item (application, _("Project"), _("Hompage"), url);
+
+		/* save the url for the button */
+		g_free (application->priv->url);
+		application->priv->url = g_strdup (url);
+
 	} else {
 		gtk_widget_set_sensitive (widget, FALSE);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
-		gtk_widget_set_sensitive (widget, FALSE);
+	}
+
+	/* group */
+	if (TRUE || group_enum != PK_GROUP_ENUM_UNKNOWN) {
+		group = gpk_group_enum_to_localised_text (group_enum);
+		gpk_application_add_detail_item (application, _("Group"), group, NULL);
+	}
+
+	/* group */
+	if (!pk_strzero (license)) {
+		/* This should be a licence enum value - bad API, bad.
+		 * license = pk_license_enum_to_text (license_enum); */
+		gpk_application_add_detail_item (application, _("License"), license, NULL);
 	}
 
 	/* set the description */
@@ -591,114 +873,27 @@
 	gpk_application_set_text_buffer (widget, text);
 	g_free (text);
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-	gtk_widget_hide (widget);
-
 	/* if non-zero, set the size */
 	if (size > 0) {
 		/* set the size */
-		widget = glade_xml_get_widget (application->priv->glade_xml, "label_filesize");
 		value = gpk_size_to_si_size_text (size);
 		if (installed) {
-			text = g_strdup_printf (_("Installed size: %s"), value);
+			gpk_application_add_detail_item (application, _("Installed size"), value, NULL);
 		} else {
-			text = g_strdup_printf (_("Download size: %s"), value);
+			gpk_application_add_detail_item (application, _("Download size"), value, NULL);
 		}
-		gtk_label_set_label (GTK_LABEL (widget), text);
-		g_free (text);
 		g_free (value);
-
-		gtk_widget_show (widget);
-
-		/* and the containter */
-		widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-		gtk_widget_show (widget);
-	} else {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "label_filesize");
-		gtk_widget_hide (widget);
 	}
 
 	/* set the repo text, or hide if installed */
-	if (installed) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "label_source");
-		gtk_widget_hide (widget);
-	} else {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "label_source");
-		gtk_widget_show (widget);
-
+	if (!installed) {
 		/* see if we can get the full name of the repo from the repo_id */
 		repo_name = gpk_application_get_full_repo_name (application, ident->data);
-		text = g_strdup_printf (_("Source: %s"), repo_name);
-		gtk_label_set_label (GTK_LABEL (widget), text);
-		g_free (text);
-
-		/* and the containter */
-		widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-		gtk_widget_show (widget);
+		gpk_application_add_detail_item (application, _("Source"), repo_name, NULL);
 	}
 	pk_package_id_free (ident);
 }
 
-static gint
-pk_ptr_array_find_string (GPtrArray *array, const gchar *string)
-{
-	gint i;
-	gchar *item;
-
-	g_return_val_if_fail (array != NULL, FALSE);
-	g_return_val_if_fail (string != NULL, FALSE);
-
-	for (i=0; i<array->len; i++) {
-		item = (gchar *) g_ptr_array_index (array, i);
-		if (pk_strequal (string, item)) {
-			return i;
-		}
-	}
-	return -1;
-}
-
-static gboolean
-pk_ptr_array_remove_string (GPtrArray *array, const gchar *string)
-{
-	guint i;
-	gchar *item;
-	gboolean ret = FALSE;
-
-	g_return_val_if_fail (array != NULL, FALSE);
-	g_return_val_if_fail (string != NULL, FALSE);
-
-	for (i=0; i<array->len; i++) {
-		item = (gchar *) g_ptr_array_index (array, i);
-		if (pk_strequal (string, item)) {
-			g_free (item);
-			g_ptr_array_remove_index (array, i);
-			ret = TRUE;
-		}
-	}
-	return ret;
-}
-
-/**
- * gpk_application_get_checkbox_enable:
- **/
-static gboolean
-gpk_application_get_checkbox_enable (GpkApplication *application, GpkPackageState state)
-{
-	gboolean enable_installed = TRUE;
-	gboolean enable_available = TRUE;
-
-	if (application->priv->action == PK_ACTION_INSTALL) {
-		enable_installed = FALSE;
-	} else if (application->priv->action == PK_ACTION_REMOVE) {
-		enable_available = FALSE;
-	}
-
-	if (gpk_application_state_installed (state)) {
-		return enable_installed;
-	}
-	return enable_available;
-}
-
 /**
  * gpk_application_package_cb:
  **/
@@ -809,7 +1004,6 @@
 static gboolean
 gpk_application_refresh_search_results (GpkApplication *application)
 {
-	GtkWidget *widget;
 	gboolean ret;
 	GError *error = NULL;
 	PkRoleEnum role;
@@ -830,10 +1024,7 @@
 	}
 
 	/* hide details */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-	gtk_widget_hide (widget);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
-	gtk_widget_set_sensitive (widget, FALSE);
+	gtk_list_store_clear (application->priv->details_store);
 	return TRUE;
 }
 
@@ -974,10 +1165,7 @@
 	application->priv->has_package = FALSE;
 
 	/* hide details */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-	gtk_widget_hide (widget);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
-	gtk_widget_set_sensitive (widget, FALSE);
+	gtk_list_store_clear (application->priv->details_store);
 
 	/* switch around buttons */
 	gpk_application_set_find_cancel_buttons (application, FALSE);
@@ -1001,375 +1189,157 @@
 	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
 	g_return_val_if_fail (application->priv->group != NULL, FALSE);
 
-	/* cancel this, we don't care about old results that are pending */
-	ret = pk_client_reset (application->priv->client_search, &error);
-	if (!ret) {
-		pk_warning ("failed to reset client: %s", error->message);
-		g_error_free (error);
-		return FALSE;
-	}
-
-	/* unsorted */
-	gpk_application_treeview_set_sorted (application, FALSE);
-
-	/* refresh the search as the items may have changed */
-	gtk_list_store_clear (application->priv->packages_store);
-
-	if (application->priv->search_mode == PK_MODE_GROUP) {
-		ret = pk_client_search_group (application->priv->client_search,
-					      application->priv->filters_current,
-					      application->priv->group, &error);
-	} else {
-		ret = pk_client_get_packages (application->priv->client_search,
-					      application->priv->filters_current, &error);
-	}
-
-	if (ret) {
-		/* switch around buttons */
-		gpk_application_set_find_cancel_buttons (application, FALSE);
-	} else {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
-		gpk_error_dialog_modal (GTK_WINDOW (widget), _("The group could not be queried"),
-					_("Running the transaction failed"), error->message);
-		g_error_free (error);
-	}
-	return ret;
-}
-
-/**
- * gpk_application_perform_search:
- **/
-static gboolean
-gpk_application_perform_search (GpkApplication *application)
-{
-	gboolean ret = FALSE;
-
-	if (application->priv->search_mode == PK_MODE_NAME_DETAILS_FILE) {
-		ret = gpk_application_perform_search_name_details_file (application);
-	} else if (application->priv->search_mode == PK_MODE_GROUP ||
-		   application->priv->search_mode == PK_MODE_ALL_PACKAGES) {
-		ret = gpk_application_perform_search_others (application);
-	} else {
-		pk_debug ("doing nothing");
-	}
-	return ret;
-}
-
-/**
- * gpk_application_find_cb:
- **/
-static void
-gpk_application_find_cb (GtkWidget *button_widget, GpkApplication *application)
-{
-	g_return_if_fail (PK_IS_APPLICATION (application));
-
-	application->priv->search_mode = PK_MODE_NAME_DETAILS_FILE;
-	gpk_application_perform_search (application);
-}
-
-/**
- * gpk_application_quit:
- * @event: The event type, unused.
- **/
-static gboolean
-gpk_application_quit (GpkApplication *application)
-{
-	gboolean ret;
-	GError *error = NULL;
-
-	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
-
-	/* we might have visual stuff running, close them down */
-	ret = pk_client_cancel (application->priv->client_search, &error);
-	if (!ret) {
-		pk_warning ("failed to cancel client: %s", error->message);
-		g_error_free (error);
-		error = NULL;
-	}
-	ret = pk_client_cancel (application->priv->client_details, &error);
-	if (!ret) {
-		pk_warning ("failed to cancel client: %s", error->message);
-		g_error_free (error);
-		error = NULL;
-	}
-	ret = pk_client_cancel (application->priv->client_files, &error);
-	if (!ret) {
-		pk_warning ("failed to cancel client: %s", error->message);
-		g_error_free (error);
-		error = NULL;
-	}
-
-	pk_debug ("emitting action-close");
-	g_signal_emit (application, signals [ACTION_CLOSE], 0);
-	return TRUE;
-}
-
-/**
- * gpk_application_delete_event_cb:
- * @event: The event type, unused.
- **/
-static gboolean
-gpk_application_delete_event_cb (GtkWidget	*widget,
-				GdkEvent	*event,
-				GpkApplication	*application)
-{
-	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
-
-	gpk_application_quit (application);
-	return FALSE;
-}
-
-/**
- * gpk_application_text_changed_cb:
- **/
-static gboolean
-gpk_application_text_changed_cb (GtkEntry *entry, GdkEventKey *event, GpkApplication *application)
-{
-	gboolean valid;
-	GtkWidget *widget;
-	const gchar *package;
-	GtkTreeSelection *selection;
-
-	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
-
-	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
-	package = gtk_entry_get_text (GTK_ENTRY (widget));
-
-	/* clear group selection if we have the tab */
-	if (pk_enums_contain (application->priv->roles, PK_ROLE_ENUM_SEARCH_GROUP)) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
-		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
-		gtk_tree_selection_unselect_all (selection);
-	}
-
-	/* check for invalid chars */
-	valid = pk_strvalidate (package);
-
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
-	if (valid == FALSE || pk_strzero (package)) {
-		gtk_widget_set_sensitive (widget, FALSE);
-	} else {
-		gtk_widget_set_sensitive (widget, TRUE);
-	}
-	return FALSE;
-}
-
-/**
- * gpk_application_set_buttons_apply_clear:
- **/
-static void
-gpk_application_set_buttons_apply_clear (GpkApplication *application)
-{
-	GtkWidget *widget;
-	GtkTreeView *treeview;
-	gboolean valid;
-	GtkTreeIter iter;
-	GtkTreeModel *model;
-	GpkPackageState state;
-	gboolean enabled;
-
-	g_return_if_fail (PK_IS_APPLICATION (application));
-
-	/* okay to apply? */
-	if (application->priv->package_list->len == 0) {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
-		gtk_widget_set_sensitive (widget, FALSE);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
-		gtk_widget_set_sensitive (widget, FALSE);
-		application->priv->action = PK_ACTION_NONE;
-	} else {
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
-		gtk_widget_set_sensitive (widget, TRUE);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
-		gtk_widget_set_sensitive (widget, TRUE);
-	}
-
-	/* correct the enabled state */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
-	model = gtk_tree_view_get_model (treeview);
-	valid = gtk_tree_model_get_iter_first (model, &iter);
-
-	/* for all current items, reset the state if in the list */
-	while (valid) {
-		gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_STATE, &state, -1);
-		enabled = gpk_application_get_checkbox_enable (application, state);
-		gtk_list_store_set (GTK_LIST_STORE (model), &iter, PACKAGES_COLUMN_CHECKBOX_ENABLE, enabled, -1);
-		valid = gtk_tree_model_iter_next (model, &iter);
-	}
-}
-
-/**
- * gpk_application_packages_checkbox_invert:
- **/
-static void
-gpk_application_packages_checkbox_invert (GpkApplication *application)
-{
-	GtkTreeView *treeview;
-	GtkTreeModel *model;
-	GtkTreeIter iter;
-	GtkTreeSelection *selection;
-	GtkWidget *widget;
-	const gchar *icon;
-	gboolean checkbox;
-	GpkPackageState state;
-	gboolean ret;
-
-	/* get the selection and add */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_packages");
-	treeview = GTK_TREE_VIEW (widget);
-	selection = gtk_tree_view_get_selection (treeview);
-	ret = gtk_tree_selection_get_selected (selection, &model, &iter);
+	/* cancel this, we don't care about old results that are pending */
+	ret = pk_client_reset (application->priv->client_search, &error);
 	if (!ret) {
-		pk_warning ("no selection");
-		return;
+		pk_warning ("failed to reset client: %s", error->message);
+		g_error_free (error);
+		return FALSE;
 	}
 
-	gtk_tree_model_get (model, &iter, PACKAGES_COLUMN_STATE, &state, -1);
+	/* unsorted */
+	gpk_application_treeview_set_sorted (application, FALSE);
 
-	/* do something with the value */
-	gpk_application_state_invert (&state);
+	/* refresh the search as the items may have changed */
+	gtk_list_store_clear (application->priv->packages_store);
 
-	/* get the new icon */
-	icon = gpk_application_state_get_icon (state);
-	checkbox = gpk_application_state_get_checkbox (state);
+	if (application->priv->search_mode == PK_MODE_GROUP) {
+		ret = pk_client_search_group (application->priv->client_search,
+					      application->priv->filters_current,
+					      application->priv->group, &error);
+	} else {
+		ret = pk_client_get_packages (application->priv->client_search,
+					      application->priv->filters_current, &error);
+	}
 
-	/* set new value */
-	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
-			    PACKAGES_COLUMN_STATE, state,
-			    PACKAGES_COLUMN_CHECKBOX, checkbox,
-			    PACKAGES_COLUMN_IMAGE, icon,
-			    -1);
+	if (ret) {
+		/* switch around buttons */
+		gpk_application_set_find_cancel_buttons (application, FALSE);
+	} else {
+		widget = glade_xml_get_widget (application->priv->glade_xml, "window_manager");
+		gpk_error_dialog_modal (GTK_WINDOW (widget), _("The group could not be queried"),
+					_("Running the transaction failed"), error->message);
+		g_error_free (error);
+	}
+	return ret;
 }
 
 /**
- * gpk_application_allow_install:
+ * gpk_application_perform_search:
  **/
-static void
-gpk_application_allow_install (GpkApplication *application, gboolean allow)
+static gboolean
+gpk_application_perform_search (GpkApplication *application)
 {
-	GtkWidget *widget;
+	gboolean ret = FALSE;
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_install");
-	gtk_widget_set_sensitive (widget, allow);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_install");
-	gtk_widget_set_sensitive (widget, allow);
+	if (application->priv->search_mode == PK_MODE_NAME_DETAILS_FILE) {
+		ret = gpk_application_perform_search_name_details_file (application);
+	} else if (application->priv->search_mode == PK_MODE_GROUP ||
+		   application->priv->search_mode == PK_MODE_ALL_PACKAGES) {
+		ret = gpk_application_perform_search_others (application);
+	} else {
+		pk_debug ("doing nothing");
+	}
+	return ret;
 }
 
 /**
- * gpk_application_allow_remove:
+ * gpk_application_find_cb:
  **/
 static void
-gpk_application_allow_remove (GpkApplication *application, gboolean allow)
+gpk_application_find_cb (GtkWidget *button_widget, GpkApplication *application)
 {
-	GtkWidget *widget;
+	g_return_if_fail (PK_IS_APPLICATION (application));
 
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_remove");
-	gtk_widget_set_sensitive (widget, allow);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_remove");
-	gtk_widget_set_sensitive (widget, allow);
+	application->priv->search_mode = PK_MODE_NAME_DETAILS_FILE;
+	gpk_application_perform_search (application);
 }
 
 /**
- * gpk_application_button_remove_cb:
+ * gpk_application_quit:
+ * @event: The event type, unused.
  **/
-static void
-gpk_application_button_remove_cb (GtkWidget *widget_button, GpkApplication *application)
+static gboolean
+gpk_application_quit (GpkApplication *application)
 {
 	gboolean ret;
-	guint index;
+	GError *error = NULL;
 
-	g_return_if_fail (PK_IS_APPLICATION (application));
+	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
 
-	/* shouldn't be possible */
-	if (application->priv->package == NULL) {
-		pk_warning ("no package");
-		return;
+	/* we might have visual stuff running, close them down */
+	ret = pk_client_cancel (application->priv->client_search, &error);
+	if (!ret) {
+		pk_warning ("failed to cancel client: %s", error->message);
+		g_error_free (error);
+		error = NULL;
 	}
-
-	/* changed mind, or wrong mode */
-	if (application->priv->action == PK_ACTION_INSTALL) {
-		ret = pk_ptr_array_remove_string (application->priv->package_list, application->priv->package);
-		if (ret) {
-			pk_debug ("removed %s from package list", application->priv->package);
-
-			/* correct buttons */
-			gpk_application_allow_install (application, TRUE);
-			gpk_application_allow_remove (application, FALSE);
-			gpk_application_packages_checkbox_invert (application);
-			gpk_application_set_buttons_apply_clear (application);
-			return;
-		}
-		pk_warning ("wrong mode and not in list");
-		return;
+	ret = pk_client_cancel (application->priv->client_details, &error);
+	if (!ret) {
+		pk_warning ("failed to cancel client: %s", error->message);
+		g_error_free (error);
+		error = NULL;
 	}
-
-	/* already added */
-	index = pk_ptr_array_find_string (application->priv->package_list, application->priv->package);
-	if (index != -1) {
-		pk_warning ("already added");
-		return;
+	ret = pk_client_cancel (application->priv->client_files, &error);
+	if (!ret) {
+		pk_warning ("failed to cancel client: %s", error->message);
+		g_error_free (error);
+		error = NULL;
 	}
 
-	application->priv->action = PK_ACTION_REMOVE;
-	g_ptr_array_add (application->priv->package_list, g_strdup (application->priv->package));
-
-	/* correct buttons */
-	gpk_application_allow_install (application, TRUE);
-	gpk_application_allow_remove (application, FALSE);
-	gpk_application_packages_checkbox_invert (application);
-	gpk_application_set_buttons_apply_clear (application);
+	pk_debug ("emitting action-close");
+	g_signal_emit (application, signals [ACTION_CLOSE], 0);
+	return TRUE;
 }
 
 /**
- * gpk_application_button_install_cb:
+ * gpk_application_delete_event_cb:
+ * @event: The event type, unused.
  **/
-static void
-gpk_application_button_install_cb (GtkWidget *widget_button, GpkApplication *application)
+static gboolean
+gpk_application_delete_event_cb (GtkWidget	*widget,
+				GdkEvent	*event,
+				GpkApplication	*application)
 {
-	gboolean ret;
-	guint index;
+	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
 
-	g_return_if_fail (PK_IS_APPLICATION (application));
+	gpk_application_quit (application);
+	return FALSE;
+}
 
-	/* shouldn't be possible */
-	if (application->priv->package == NULL) {
-		pk_warning ("no package");
-		return;
-	}
+/**
+ * gpk_application_text_changed_cb:
+ **/
+static gboolean
+gpk_application_text_changed_cb (GtkEntry *entry, GdkEventKey *event, GpkApplication *application)
+{
+	gboolean valid;
+	GtkWidget *widget;
+	const gchar *package;
+	GtkTreeSelection *selection;
 
-	/* changed mind, or wrong mode */
-	if (application->priv->action == PK_ACTION_REMOVE) {
-		ret = pk_ptr_array_remove_string (application->priv->package_list, application->priv->package);
-		if (ret) {
-			pk_debug ("removed %s from package list", application->priv->package);
+	g_return_val_if_fail (PK_IS_APPLICATION (application), FALSE);
 
-			/* correct buttons */
-			gpk_application_allow_install (application, FALSE);
-			gpk_application_allow_remove (application, TRUE);
-			gpk_application_packages_checkbox_invert (application);
-			gpk_application_set_buttons_apply_clear (application);
-			return;
-		}
-		pk_warning ("wrong mode and not in list");
-		return;
-	}
+	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
+	package = gtk_entry_get_text (GTK_ENTRY (widget));
 
-	/* already added */
-	index = pk_ptr_array_find_string (application->priv->package_list, application->priv->package);
-	if (index != -1) {
-		pk_warning ("already added");
-		return;
+	/* clear group selection if we have the tab */
+	if (pk_enums_contain (application->priv->roles, PK_ROLE_ENUM_SEARCH_GROUP)) {
+		widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_groups");
+		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+		gtk_tree_selection_unselect_all (selection);
 	}
 
-	application->priv->action = PK_ACTION_INSTALL;
-	g_ptr_array_add (application->priv->package_list, g_strdup (application->priv->package));
+	/* check for invalid chars */
+	valid = pk_strvalidate (package);
 
-	/* correct buttons */
-	gpk_application_allow_install (application, FALSE);
-	gpk_application_allow_remove (application, TRUE);
-	gpk_application_packages_checkbox_invert (application);
-	gpk_application_set_buttons_apply_clear (application);
+	widget = glade_xml_get_widget (application->priv->glade_xml, "button_find");
+	if (valid == FALSE || pk_strzero (package)) {
+		gtk_widget_set_sensitive (widget, FALSE);
+	} else {
+		gtk_widget_set_sensitive (widget, TRUE);
+	}
+	return FALSE;
 }
 
 /**
@@ -1406,9 +1376,9 @@
 	gtk_tree_selection_select_iter (selection, &iter);
 
 	if (gpk_application_state_get_checkbox (state)) {
-		gpk_application_button_remove_cb (NULL, application);
+		gpk_application_remove (application);
 	} else {
-		gpk_application_button_install_cb (NULL, application);
+		gpk_application_install (application);
 	}
 	gtk_tree_path_free (path);
 }
@@ -1470,16 +1440,6 @@
 }
 
 /**
- * gpk_application_button_homepage_cb:
- **/
-static void
-gpk_application_button_homepage_cb (GtkWidget *widget_button, GpkApplication *application)
-{
-	g_return_if_fail (PK_IS_APPLICATION (application));
-	gpk_gnome_open (application->priv->url);
-}
-
-/**
  * gpk_application_button_apply_cb:
  **/
 static void
@@ -1595,10 +1555,7 @@
 	g_return_if_fail (PK_IS_APPLICATION (application));
 
 	/* hide the details */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-	gtk_widget_hide (widget);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
-	gtk_widget_set_sensitive (widget, FALSE);
+	gtk_list_store_clear (application->priv->details_store);
 
 	/* clear the search text if we clicked the group list */
 	widget = glade_xml_get_widget (application->priv->glade_xml, "entry_text");
@@ -1652,8 +1609,7 @@
 		gpk_application_allow_remove (application, FALSE);
 		widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_selection");
 		gtk_widget_hide (widget);
-		widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-		gtk_widget_hide (widget);
+		gtk_list_store_clear (application->priv->details_store);
 		return;
 	}
 
@@ -1685,10 +1641,7 @@
 	gpk_application_set_text_buffer (widget, NULL);
 
 	/* hide stuff until we have data */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-	gtk_widget_hide (widget);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
-	gtk_widget_set_sensitive (widget, FALSE);
+	gtk_list_store_clear (application->priv->details_store);
 
 	/* only show run menuitem for installed programs */
 	ret = gpk_application_state_installed (state);
@@ -2413,9 +2366,9 @@
 			    PACKAGES_COLUMN_STATE, &state,
 			    PACKAGES_COLUMN_ID, &application->priv->package, -1);
 	if (gpk_application_state_get_checkbox (state)) {
-		gpk_application_button_remove_cb (NULL, application);
+		gpk_application_remove (application);
 	} else {
-		gpk_application_button_install_cb (NULL, application);
+		gpk_application_install (application);
 	}
 }
 
@@ -2452,6 +2405,45 @@
 }
 
 /**
+ * gpk_application_treeview_renderer_clicked:
+ **/
+static void
+gpk_application_treeview_renderer_clicked (GtkCellRendererToggle *cell, gchar *uri, GpkApplication *application)
+{
+	pk_debug ("clicked %s", uri);
+	gpk_gnome_open (uri);
+}
+
+/**
+ * gpk_application_treeview_add_columns_description:
+ **/
+static void
+gpk_application_treeview_add_columns_description (GpkApplication *application)
+{
+	GtkCellRenderer *renderer;
+	GtkTreeViewColumn *column;
+	GtkTreeView *treeview;
+
+	treeview = GTK_TREE_VIEW (glade_xml_get_widget (application->priv->glade_xml, "treeview_detail"));
+
+	/* title */
+	column = gtk_tree_view_column_new ();
+	renderer = gtk_cell_renderer_text_new ();
+	gtk_tree_view_column_pack_start (column, renderer, FALSE);
+	gtk_tree_view_column_add_attribute (column, renderer, "markup", DETAIL_COLUMN_TITLE);
+	gtk_tree_view_append_column (treeview, column);
+
+	/* column for uris */
+	renderer = gpk_cell_renderer_uri_new ();
+	g_signal_connect (renderer, "clicked", G_CALLBACK (gpk_application_treeview_renderer_clicked), application);
+	column = gtk_tree_view_column_new_with_attributes (_("Text"), renderer,
+							   "text", DETAIL_COLUMN_TEXT,
+							   "uri", DETAIL_COLUMN_URI, NULL);
+	gtk_tree_view_append_column (treeview, column);
+	gtk_tree_view_columns_autosize (treeview);
+}
+
+/**
  * gpk_application_init:
  **/
 static void
@@ -2577,33 +2569,12 @@
 	g_signal_connect (main_window, "delete_event",
 			  G_CALLBACK (gpk_application_delete_event_cb), application);
 
-	/* install */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_install");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (gpk_application_button_install_cb), application);
-	gtk_widget_set_tooltip_text (widget, _("Add current selection"));
-	gtk_widget_set_sensitive (widget, FALSE);
-
-	/* remove */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_remove");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (gpk_application_button_remove_cb), application);
-	gtk_widget_set_tooltip_text (widget, _("Remove current selection"));
-	gtk_widget_set_sensitive (widget, FALSE);
-
 	/* clear */
 	widget = glade_xml_get_widget (application->priv->glade_xml, "button_clear");
 	g_signal_connect (widget, "clicked",
 			  G_CALLBACK (gpk_application_button_clear_cb), application);
 	gtk_widget_set_tooltip_text (widget, _("Clear current selection"));
 
-	/* homepage */
-	widget = glade_xml_get_widget (application->priv->glade_xml, "button_homepage");
-	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (gpk_application_button_homepage_cb), application);
-	gtk_widget_set_tooltip_text (widget, _("Visit project homepage"));
-	gtk_widget_set_sensitive (widget, FALSE);
-
 	/* install */
 	widget = glade_xml_get_widget (application->priv->glade_xml, "button_apply");
 	g_signal_connect (widget, "clicked",
@@ -2658,8 +2629,6 @@
 	gtk_widget_hide (widget);
 	widget = glade_xml_get_widget (application->priv->glade_xml, "image_icon");
 	gtk_widget_hide (widget);
-	widget = glade_xml_get_widget (application->priv->glade_xml, "vbox_detail_extra");
-	gtk_widget_hide (widget);
 
 	/* installed filter */
 	widget = glade_xml_get_widget (application->priv->glade_xml, "menuitem_installed_yes");
@@ -2900,6 +2869,21 @@
 							      G_TYPE_STRING,
 							      G_TYPE_STRING,
 							      G_TYPE_STRING);
+	application->priv->details_store = gtk_list_store_new (DETAIL_COLUMN_LAST,
+							       G_TYPE_STRING,
+							       G_TYPE_STRING,
+							       G_TYPE_STRING);
+
+	/* use a list store for the extra data */
+	widget = glade_xml_get_widget (application->priv->glade_xml, "treeview_detail");
+	gtk_tree_view_set_model (GTK_TREE_VIEW (widget), GTK_TREE_MODEL (application->priv->details_store));
+
+	/* add columns to the tree view */
+	gpk_application_treeview_add_columns_description (application);
+
+	/* make bigger than 1x1 */
+	gpk_application_add_detail_item (application, "foo", "bar", NULL);
+	gtk_list_store_clear (application->priv->details_store);
 
 	/* unsorted */
 	gpk_application_treeview_set_sorted (application, FALSE);
@@ -2984,6 +2968,7 @@
 
 	g_object_unref (application->priv->glade_xml);
 	g_object_unref (application->priv->packages_store);
+	g_object_unref (application->priv->details_store);
 	g_object_unref (application->priv->control);
 	g_object_unref (application->priv->client_search);
 	g_object_unref (application->priv->client_action);

Modified: trunk/src/gpk-check-update.c
==============================================================================
--- trunk/src/gpk-check-update.c	(original)
+++ trunk/src/gpk-check-update.c	Wed Jun 11 15:30:23 2008
@@ -321,8 +321,7 @@
 {
 	GpkCheckUpdate *cupdate = GPK_CHECK_UPDATE (data);
 	g_return_if_fail (GPK_IS_CHECK_UPDATE (cupdate));
-	gpk_client_show_finished (cupdate->priv->gclient, TRUE);
-	gpk_client_show_progress (cupdate->priv->gclient, TRUE);
+	gpk_client_set_interaction (cupdate->priv->gclient, GPK_CLIENT_INTERACT_ALWAYS);
 	gpk_check_update_update_system (cupdate);
 }
 
@@ -403,8 +402,7 @@
 
 		/* just update the important updates */
 		package_ids = pk_package_ids_from_array (cupdate->priv->important_updates_array);
-		gpk_client_show_finished (cupdate->priv->gclient, FALSE);
-		gpk_client_show_progress (cupdate->priv->gclient, FALSE);
+		gpk_client_set_interaction (cupdate->priv->gclient, GPK_CLIENT_INTERACT_NEVER);
 		ret = gpk_client_update_packages (cupdate->priv->gclient, package_ids, &error);
 		if (!ret) {
 			pk_warning ("Individual updates failed: %s", error->message);
@@ -670,8 +668,7 @@
 	}
 
 	/* get updates */
-	gpk_client_show_finished (cupdate->priv->gclient, FALSE);
-	gpk_client_show_progress (cupdate->priv->gclient, FALSE);
+	gpk_client_set_interaction (cupdate->priv->gclient, GPK_CLIENT_INTERACT_NEVER);
 	cupdate->priv->get_updates_in_progress = TRUE;
 	list = gpk_client_get_updates (cupdate->priv->gclient, &error);
 	cupdate->priv->get_updates_in_progress = FALSE;
@@ -763,8 +760,7 @@
 
 		/* convert */
 		package_ids = pk_package_ids_from_array (security_array);
-		gpk_client_show_finished (cupdate->priv->gclient, FALSE);
-		gpk_client_show_progress (cupdate->priv->gclient, FALSE);
+		gpk_client_set_interaction (cupdate->priv->gclient, GPK_CLIENT_INTERACT_NEVER);
 		ret = gpk_client_update_packages (cupdate->priv->gclient, package_ids, &error);
 		if (!ret) {
 			pk_warning ("Individual updates failed: %s", error->message);
@@ -777,8 +773,7 @@
 	/* just do everything */
 	if (update == PK_UPDATE_ENUM_ALL) {
 		pk_debug ("we should do the update automatically!");
-		gpk_client_show_finished (cupdate->priv->gclient, FALSE);
-		gpk_client_show_progress (cupdate->priv->gclient, FALSE);
+		gpk_client_set_interaction (cupdate->priv->gclient, GPK_CLIENT_INTERACT_NEVER);
 		g_idle_add ((GSourceFunc) gpk_check_update_update_system, cupdate);
 		goto out;
 	}
@@ -874,8 +869,7 @@
 	cupdate->priv->cache_okay = TRUE;
 
 	/* use the gnome helper to refresh the cache */
-	gpk_client_show_finished (cupdate->priv->gclient, FALSE);
-	gpk_client_show_progress (cupdate->priv->gclient, FALSE);
+	gpk_client_set_interaction (cupdate->priv->gclient, GPK_CLIENT_INTERACT_NEVER);
 	ret = gpk_client_refresh_cache (cupdate->priv->gclient, NULL);
 	if (!ret) {
 		/* we failed to get the cache */
@@ -941,8 +935,6 @@
 
 	/* install stuff using the gnome helpers */
 	cupdate->priv->gclient = gpk_client_new ();
-	gpk_client_show_finished (cupdate->priv->gclient, TRUE);
-	gpk_client_show_progress (cupdate->priv->gclient, TRUE);
 
 	cupdate->priv->pconnection = pk_connection_new ();
 	g_signal_connect (cupdate->priv->pconnection, "connection-changed",

Modified: trunk/src/gpk-client-run.c
==============================================================================
--- trunk/src/gpk-client-run.c	(original)
+++ trunk/src/gpk-client-run.c	Wed Jun 11 15:30:23 2008
@@ -236,8 +236,10 @@
 
 	length = g_strv_length (package_ids);
 	gclient = gpk_client_new ();
+	/* only show if we need to download a cache */
+	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_SOMETIMES);
 	gpk_client_show_finished (gclient, FALSE);
-	gpk_client_show_progress (gclient, FALSE);
+
 	for (i=0; i<length; i++) {
 		package_id = package_ids[i];
 		pk_debug ("package_id=%s", package_id);

Modified: trunk/src/gpk-client.c
==============================================================================
--- trunk/src/gpk-client.c	(original)
+++ trunk/src/gpk-client.c	Wed Jun 11 15:30:23 2008
@@ -86,6 +86,7 @@
 	gboolean		 show_finished;
 	gboolean		 show_progress;
 	gboolean		 show_progress_files;
+	GpkClientInteract	 interact;
 	gboolean		 gtk_main_waiting;
 	gchar			**files_array;
 	PkExitEnum		 exit;
@@ -272,6 +273,8 @@
 
 /**
  * gpk_client_show_finished:
+ *
+ * You probably don't need to use this function, use gpk_client_set_interaction() instead
  **/
 void
 gpk_client_show_finished (GpkClient *gclient, gboolean enabled)
@@ -281,13 +284,20 @@
 }
 
 /**
- * gpk_client_show_progress:
+ * gpk_client_set_interaction:
  **/
 void
-gpk_client_show_progress (GpkClient *gclient, gboolean enabled)
+gpk_client_set_interaction (GpkClient *gclient, GpkClientInteract interact)
 {
 	g_return_if_fail (GPK_IS_CLIENT (gclient));
-	gclient->priv->show_progress = enabled;
+	gclient->priv->interact = interact;
+	/* only start showing if we always show */
+	gclient->priv->show_progress = (interact == GPK_CLIENT_INTERACT_ALWAYS);
+
+	/* normally, if we don't want to show progress then we don't want finished */
+	if (gclient->priv->show_progress) {
+		gclient->priv->show_finished = FALSE;
+	}
 }
 
 /**
@@ -468,13 +478,6 @@
 		gtk_widget_hide (widget);
 	}
 
-	/* make insensitive */
-	widget = glade_xml_get_widget (gclient->priv->glade_xml, "button_cancel");
-	gtk_widget_set_sensitive (widget, FALSE);
-
-	/* set to 100% */
-	widget = glade_xml_get_widget (gclient->priv->glade_xml, "progressbar_percent");
-	gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), 1.0f);
 out:
 	/* only quit if there is not another transaction scheduled to be finished */
 	if (!gclient->priv->using_secondary_client) {
@@ -549,15 +552,17 @@
 	g_return_if_fail (GPK_IS_CLIENT (gclient));
 
 	/* do we force progress? */
-	if (status == PK_STATUS_ENUM_DOWNLOAD_REPOSITORY ||
-	    status == PK_STATUS_ENUM_DOWNLOAD_PACKAGELIST ||
-	    status == PK_STATUS_ENUM_DOWNLOAD_FILELIST ||
-	    status == PK_STATUS_ENUM_DOWNLOAD_CHANGELOG ||
-	    status == PK_STATUS_ENUM_DOWNLOAD_GROUP ||
-	    status == PK_STATUS_ENUM_DOWNLOAD_UPDATEINFO ||
-	    status == PK_STATUS_ENUM_REFRESH_CACHE) {
-		gpk_client_show_progress (gclient, TRUE);
-		gpk_client_set_page (gclient, GPK_CLIENT_PAGE_PROGRESS);
+	if (gclient->priv->interact == GPK_CLIENT_INTERACT_SOMETIMES) {
+		if (status == PK_STATUS_ENUM_DOWNLOAD_REPOSITORY ||
+		    status == PK_STATUS_ENUM_DOWNLOAD_PACKAGELIST ||
+		    status == PK_STATUS_ENUM_DOWNLOAD_FILELIST ||
+		    status == PK_STATUS_ENUM_DOWNLOAD_CHANGELOG ||
+		    status == PK_STATUS_ENUM_DOWNLOAD_GROUP ||
+		    status == PK_STATUS_ENUM_DOWNLOAD_UPDATEINFO ||
+		    status == PK_STATUS_ENUM_REFRESH_CACHE) {
+			gclient->priv->show_progress = TRUE;
+			gpk_client_set_page (gclient, GPK_CLIENT_PAGE_PROGRESS);
+		}
 	}
 
 	/* set icon */
@@ -571,9 +576,27 @@
 	gtk_label_set_markup (GTK_LABEL (widget), text);
 	g_free (text);
 
+	/* spin */
 	if (status == PK_STATUS_ENUM_WAIT) {
 		gpk_client_make_progressbar_pulse (gclient);
 	}
+
+	/* do visual stuff when finished */
+	if (status == PK_STATUS_ENUM_FINISHED) {
+		/* make insensitive */
+		widget = glade_xml_get_widget (gclient->priv->glade_xml, "button_cancel");
+		gtk_widget_set_sensitive (widget, FALSE);
+
+		/* stop spinning */
+		if (gclient->priv->pulse_timer_id != 0) {
+			g_source_remove (gclient->priv->pulse_timer_id);
+			gclient->priv->pulse_timer_id = 0;
+		}
+
+		/* set to 100% */
+		widget = glade_xml_get_widget (gclient->priv->glade_xml, "progressbar_percent");
+		gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (widget), 1.0f);
+	}
 }
 
 /**
@@ -2214,6 +2237,7 @@
 	gclient->priv->using_secondary_client = FALSE;
 	gclient->priv->gtk_main_waiting = FALSE;
 	gclient->priv->exit = PK_EXIT_ENUM_FAILED;
+	gclient->priv->interact = GPK_CLIENT_INTERACT_NEVER;
 	gclient->priv->show_finished = TRUE;
 	gclient->priv->show_progress = TRUE;
 	gclient->priv->show_progress_files = TRUE;

Modified: trunk/src/gpk-client.h
==============================================================================
--- trunk/src/gpk-client.h	(original)
+++ trunk/src/gpk-client.h	Wed Jun 11 15:30:23 2008
@@ -48,6 +48,17 @@
 	GPK_CLIENT_ERROR_FAILED
 } GpkClientError;
 
+/**
+ * GpkClientInteract:
+ */
+typedef enum
+{
+	GPK_CLIENT_INTERACT_ALWAYS,
+	GPK_CLIENT_INTERACT_SOMETIMES,
+	GPK_CLIENT_INTERACT_NEVER,
+	GPK_CLIENT_INTERACT_UNKNOWN
+} GpkClientInteract;
+
 typedef struct _GpkClientPrivate	 GpkClientPrivate;
 typedef struct _GpkClient		 GpkClient;
 typedef struct _GpkClientClass		 GpkClientClass;
@@ -97,8 +108,8 @@
 							 GError		**error);
 void		 gpk_client_show_finished		(GpkClient	*gclient,
 							 gboolean	 enabled);
-void		 gpk_client_show_progress		(GpkClient	*gclient,
-							 gboolean	 enabled);
+void		 gpk_client_set_interaction		(GpkClient	*gclient,
+							 GpkClientInteract interact);
 PkPackageList	*gpk_client_get_updates			(GpkClient	*gclient,
 							 GError		**error);
 gchar		**gpk_client_get_file_list		(GpkClient	*gclient,

Modified: trunk/src/gpk-repo.c
==============================================================================
--- trunk/src/gpk-repo.c	(original)
+++ trunk/src/gpk-repo.c	Wed Jun 11 15:30:23 2008
@@ -36,6 +36,7 @@
 #include <libunique.h>
 
 #include <pk-debug.h>
+#include <pk-common.h>
 #include <pk-client.h>
 #include <pk-control.h>
 #include <pk-connection.h>
@@ -43,14 +44,12 @@
 #include <gpk-gnome.h>
 #include <gpk-common.h>
 #include <gpk-error.h>
-
-#include "gpk-statusbar.h"
+#include "gpk-animated-icon.h"
 
 static GladeXML *glade_xml = NULL;
 static GtkListStore *list_store = NULL;
 static PkClient *client = NULL;
 static PkRoleEnum roles;
-static GpkStatusbar *statusbar;
 static GConfClient *gconf_client;
 static gboolean show_details;
 
@@ -205,7 +204,27 @@
 static void
 gpk_repo_status_changed_cb (PkClient *client, PkStatusEnum status, gpointer data)
 {
-	gpk_statusbar_set_status (statusbar, status);
+	const gchar *text;
+	GtkWidget *widget;
+
+	widget = glade_xml_get_widget (glade_xml, "viewport_animation_preview");
+	if (status == PK_STATUS_ENUM_FINISHED) {
+		gtk_widget_hide (widget);
+		widget = glade_xml_get_widget (glade_xml, "image_animation");
+		gpk_animated_icon_enable_animation (GPK_ANIMATED_ICON (widget), FALSE);
+		return;
+	}
+
+	/* set the text and show */
+	gtk_widget_show (widget);
+	widget = glade_xml_get_widget (glade_xml, "label_animation");
+	text = gpk_status_enum_to_localised_text (status);
+	gtk_label_set_label (GTK_LABEL (widget), text);
+
+	/* set icon */
+	widget = glade_xml_get_widget (glade_xml, "image_animation");
+	gpk_set_animated_icon_from_status (GPK_ANIMATED_ICON (widget), status, GTK_ICON_SIZE_LARGE_TOOLBAR);
+	gtk_widget_show (widget);
 }
 
 /**
@@ -284,6 +303,21 @@
 }
 
 /**
+ * gpk_repo_create_custom_widget:
+ **/
+static GtkWidget *
+gpk_repo_create_custom_widget (GladeXML *xml, gchar *func_name, gchar *name,
+			       gchar *string1, gchar *string2,
+			       gint int1, gint int2, gpointer user_data)
+{
+	if (pk_strequal (name, "image_animation")) {
+		return gpk_animated_icon_new ();
+	}
+	pk_warning ("name unknown='%s'", name);
+	return NULL;
+}
+
+/**
  * main:
  **/
 int
@@ -357,6 +391,9 @@
 			  G_CALLBACK (gpk_repo_repo_list_changed_cb), NULL);
 	roles = pk_control_get_actions (control);
 
+	/* use custom widgets */
+	glade_set_custom_handler (gpk_repo_create_custom_widget, NULL);
+
 	glade_xml = glade_xml_new (PK_DATA "/gpk-repo.glade", NULL, NULL);
 	main_window = glade_xml_get_widget (glade_xml, "window_repo");
 	gtk_window_set_icon_name (GTK_WINDOW (main_window), "pk-package-sources");
@@ -395,11 +432,6 @@
 	pk_treeview_add_columns (GTK_TREE_VIEW (widget));
 	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
 
-	/* use the in-statusbar for progress */
-	statusbar = gpk_statusbar_new ();
-	widget = glade_xml_get_widget (glade_xml, "statusbar_status");
-	gpk_statusbar_set_widget (statusbar, widget);
-
 	/* show window */
 	gtk_widget_show (main_window);
 
@@ -427,7 +459,6 @@
 	g_object_unref (gconf_client);
 	g_object_unref (client);
 	g_object_unref (control);
-	g_object_unref (statusbar);
 unique_out:
 	g_object_unref (libunique);
 

Modified: trunk/src/gpk-update-viewer.c
==============================================================================
--- trunk/src/gpk-update-viewer.c	(original)
+++ trunk/src/gpk-update-viewer.c	Wed Jun 11 15:30:23 2008
@@ -49,7 +49,6 @@
 #include <gpk-gnome.h>
 #include <gpk-error.h>
 
-#include "gpk-statusbar.h"
 #include "gpk-consolekit.h"
 #include "gpk-cell-renderer-uri.h"
 #include "gpk-animated-icon.h"
@@ -73,9 +72,9 @@
 static PolKitGnomeAction *restart_action = NULL;
 
 /* for the preview throbber */
-static void pk_update_viewer_add_preview_item (const gchar *icon, const gchar *message, gboolean clear);
-static void pk_update_viewer_description_animation_stop (void);
-static void pk_update_viewer_get_new_update_list (void);
+static void gpk_update_viewer_add_preview_item (const gchar *icon, const gchar *message, gboolean clear);
+static void gpk_update_viewer_description_animation_stop (void);
+static void gpk_update_viewer_get_new_update_list (void);
 
 enum {
 	PREVIEW_COLUMN_ICON,
@@ -88,7 +87,6 @@
 	DESC_COLUMN_TITLE,
 	DESC_COLUMN_TEXT,
 	DESC_COLUMN_URI,
-	DESC_COLUMN_PROGRESS,
 	DESC_COLUMN_LAST
 };
 
@@ -125,10 +123,10 @@
 }
 
 /**
- * pk_update_viewer_set_page:
+ * gpk_update_viewer_set_page:
  **/
 static void
-pk_update_viewer_set_page (PkPageEnum page)
+gpk_update_viewer_set_page (PkPageEnum page)
 {
 	GtkWidget *widget;
 	GList *list, *l;
@@ -163,10 +161,10 @@
 }
 
 /**
- * pk_update_viewer_update_system_cb:
+ * gpk_update_viewer_update_system_cb:
  **/
 static void
-pk_update_viewer_update_system_cb (PolKitGnomeAction *action, gpointer data)
+gpk_update_viewer_update_system_cb (PolKitGnomeAction *action, gpointer data)
 {
 	GtkWidget *widget;
 	gboolean ret;
@@ -176,24 +174,24 @@
 	widget = glade_xml_get_widget (glade_xml, "button_overview2");
 	gtk_widget_hide (widget);
 
-	pk_update_viewer_set_page (PAGE_LAST);
-	gpk_client_show_progress (gclient, TRUE);
+	gpk_update_viewer_set_page (PAGE_LAST);
+	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_ALWAYS);
 	ret = gpk_client_update_system (gclient, NULL);
 
 	/* did we succeed updating the system */
 	if (!ret) {
 		/* show the preview page */
-		pk_update_viewer_set_page (PAGE_PREVIEW);
+		gpk_update_viewer_set_page (PAGE_PREVIEW);
 	} else {
-		pk_update_viewer_set_page (PAGE_CONFIRM);
+		gpk_update_viewer_set_page (PAGE_CONFIRM);
 	}
 }
 
 /**
- * pk_update_viewer_apply_cb:
+ * gpk_update_viewer_apply_cb:
  **/
 static void
-pk_update_viewer_apply_cb (PolKitGnomeAction *action, gpointer data)
+gpk_update_viewer_apply_cb (PolKitGnomeAction *action, gpointer data)
 {
 	GtkWidget *widget;
 	GtkTreeModel *model;
@@ -254,18 +252,18 @@
 	}
 
 	/* set correct view */
-	pk_update_viewer_set_page (PAGE_LAST);
+	gpk_update_viewer_set_page (PAGE_LAST);
 	package_ids = pk_package_ids_from_array (array);
-	gpk_client_show_progress (gclient, TRUE);
+	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_ALWAYS);
 	ret = gpk_client_update_packages (gclient, package_ids, NULL);
 	g_strfreev (package_ids);
 
 	/* did we succeed updating the system */
 	if (!ret) {
 		/* show the preview page */
-		pk_update_viewer_set_page (PAGE_PREVIEW);
+		gpk_update_viewer_set_page (PAGE_PREVIEW);
 	} else {
-		pk_update_viewer_set_page (PAGE_CONFIRM);
+		gpk_update_viewer_set_page (PAGE_CONFIRM);
 	}
 
 	/* get rid of the array, and free the contents */
@@ -273,10 +271,10 @@
 }
 
 /**
- * pk_update_viewer_preview_animation_start:
+ * gpk_update_viewer_preview_animation_start:
  **/
 static void
-pk_update_viewer_preview_animation_start (const gchar *text)
+gpk_update_viewer_preview_animation_start (const gchar *text)
 {
 	GtkWidget *widget;
 	gchar *text_bold;
@@ -300,10 +298,10 @@
 }
 
 /**
- * pk_update_viewer_preview_animation_stop:
+ * gpk_update_viewer_preview_animation_stop:
  **/
 static void
-pk_update_viewer_preview_animation_stop (void)
+gpk_update_viewer_preview_animation_stop (void)
 {
 	GtkWidget *widget;
 
@@ -321,10 +319,10 @@
 }
 
 /**
- * pk_update_viewer_description_animation_start:
+ * gpk_update_viewer_description_animation_start:
  **/
 static void
-pk_update_viewer_description_animation_start (void)
+gpk_update_viewer_description_animation_start (void)
 {
 	GtkWidget *widget;
 	gchar *text_bold;
@@ -348,10 +346,10 @@
 }
 
 /**
- * pk_update_viewer_description_animation_stop:
+ * gpk_update_viewer_description_animation_stop:
  **/
 static void
-pk_update_viewer_description_animation_stop (void)
+gpk_update_viewer_description_animation_stop (void)
 {
 	GtkWidget *widget;
 
@@ -369,16 +367,16 @@
 }
 
 /**
- * pk_update_viewer_refresh_cb:
+ * gpk_update_viewer_refresh_cb:
  **/
 static void
-pk_update_viewer_refresh_cb (PolKitGnomeAction *action, gpointer data)
+gpk_update_viewer_refresh_cb (PolKitGnomeAction *action, gpointer data)
 {
 	gboolean ret;
 	GError *error = NULL;
 
 	/* refresh the cache */
-	gpk_client_show_progress (gclient, TRUE);
+	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_ALWAYS);
 	polkit_gnome_action_set_sensitive (refresh_action, FALSE);
 	ret = gpk_client_refresh_cache (gclient, &error);
 	polkit_gnome_action_set_sensitive (refresh_action, TRUE);
@@ -387,14 +385,14 @@
 		g_error_free (error);
 	}
 	/* get new list */
-	pk_update_viewer_get_new_update_list ();
+	gpk_update_viewer_get_new_update_list ();
 }
 
 /**
- * pk_update_viewer_history_cb:
+ * gpk_update_viewer_history_cb:
  **/
 static void
-pk_update_viewer_history_cb (GtkWidget *widget_button, gpointer data)
+gpk_update_viewer_history_cb (GtkWidget *widget_button, gpointer data)
 {
 	GError *error = NULL;
 	GtkWidget *widget;
@@ -409,10 +407,10 @@
 }
 
 /**
- * pk_update_viewer_button_close_and_cancel_cb:
+ * gpk_update_viewer_button_close_and_cancel_cb:
  **/
 static void
-pk_update_viewer_button_close_and_cancel_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_button_close_and_cancel_cb (GtkWidget *widget, gpointer data)
 {
 	gboolean ret;
 	GError *error = NULL;
@@ -428,10 +426,10 @@
 }
 
 /**
- * pk_update_viewer_review_cb:
+ * gpk_update_viewer_review_cb:
  **/
 static void
-pk_update_viewer_review_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_review_cb (GtkWidget *widget, gpointer data)
 {
 	GtkWidget *treeview;
 	GtkTreeSelection *selection;
@@ -452,22 +450,22 @@
 	gtk_widget_set_size_request (GTK_WIDGET (widget), 500, 200);
 
 	/* set correct view */
-	pk_update_viewer_set_page (PAGE_DETAILS);
+	gpk_update_viewer_set_page (PAGE_DETAILS);
 }
 
 
 /**
- * pk_update_viewer_populate_preview:
+ * gpk_update_viewer_populate_preview:
  **/
 static void
-pk_update_viewer_populate_preview (PkPackageList *list)
+gpk_update_viewer_populate_preview (PkPackageList *list)
 {
 	GtkWidget *widget;
 	guint length;
 
 	length = pk_package_list_get_size (list);
 	if (length == 0) {
-		pk_update_viewer_add_preview_item ("dialog-information", _("There are no updates available!"), TRUE);
+		gpk_update_viewer_add_preview_item ("dialog-information", _("There are no updates available!"), TRUE);
 		widget = glade_xml_get_widget (glade_xml, "button_close3");
 		gtk_widget_grab_default (widget);
 	} else {
@@ -507,37 +505,37 @@
 		if (num_security > 0) {
 			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_SECURITY);
 			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_SECURITY, num_security);
-			pk_update_viewer_add_preview_item (icon, text, FALSE);
+			gpk_update_viewer_add_preview_item (icon, text, FALSE);
 			g_free (text);
 		}
 		if (num_important > 0) {
 			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_IMPORTANT);
 			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_IMPORTANT, num_important);
-			pk_update_viewer_add_preview_item (icon, text, FALSE);
+			gpk_update_viewer_add_preview_item (icon, text, FALSE);
 			g_free (text);
 		}
 		if (num_bugfix > 0) {
 			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_BUGFIX);
 			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_BUGFIX, num_bugfix);
-			pk_update_viewer_add_preview_item (icon, text, FALSE);
+			gpk_update_viewer_add_preview_item (icon, text, FALSE);
 			g_free (text);
 		}
 		if (num_enhancement > 0) {
 			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_ENHANCEMENT);
 			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_ENHANCEMENT, num_enhancement);
-			pk_update_viewer_add_preview_item (icon, text, FALSE);
+			gpk_update_viewer_add_preview_item (icon, text, FALSE);
 			g_free (text);
 		}
 		if (num_low > 0) {
 			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_LOW);
 			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_LOW, num_low);
-			pk_update_viewer_add_preview_item (icon, text, FALSE);
+			gpk_update_viewer_add_preview_item (icon, text, FALSE);
 			g_free (text);
 		}
 		if (num_normal > 0) {
 			icon = gpk_info_enum_to_icon_name (PK_INFO_ENUM_NORMAL);
 			text = gpk_update_enum_to_localised_text (PK_INFO_ENUM_NORMAL, num_normal);
-			pk_update_viewer_add_preview_item (icon, text, FALSE);
+			gpk_update_viewer_add_preview_item (icon, text, FALSE);
 			g_free (text);
 		}
 
@@ -550,10 +548,10 @@
 }
 
 /**
- * pk_update_viewer_get_new_update_list:
+ * gpk_update_viewer_get_new_update_list:
  **/
 static void
-pk_update_viewer_get_new_update_list (void)
+gpk_update_viewer_get_new_update_list (void)
 {
 	GError *error = NULL;
 	PkPackageList *list;
@@ -568,7 +566,7 @@
 	/* clear existing list */
 	gtk_list_store_clear (list_store_details);
 
-	gpk_client_show_progress (gclient, FALSE);
+	gpk_client_set_interaction (gclient, GPK_CLIENT_INTERACT_NEVER);
 	list = gpk_client_get_updates (gclient, &error);
 	if (list == NULL) {
 		pk_warning ("failed: %s", error->message);
@@ -610,29 +608,29 @@
 	widget = glade_xml_get_widget (glade_xml, "button_review");
 	gtk_widget_set_sensitive (widget, are_updates_available);
 
-	pk_update_viewer_populate_preview (list);
+	gpk_update_viewer_populate_preview (list);
 out:
 	g_object_unref (list);
 }
 
 /**
- * pk_update_viewer_overview_cb:
+ * gpk_update_viewer_overview_cb:
  **/
 static void
-pk_update_viewer_overview_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_overview_cb (GtkWidget *widget, gpointer data)
 {
 	/* set correct view */
-	pk_update_viewer_set_page (PAGE_PREVIEW);
+	gpk_update_viewer_set_page (PAGE_PREVIEW);
 
 	/* get the new update list */
-	pk_update_viewer_get_new_update_list ();
+	gpk_update_viewer_get_new_update_list ();
 }
 
 /**
- * pk_update_viewer_package_cb:
+ * gpk_update_viewer_package_cb:
  **/
 static void
-pk_update_viewer_package_cb (PkClient *client, PkInfoEnum info, const gchar *package_id,
+gpk_update_viewer_package_cb (PkClient *client, PkInfoEnum info, const gchar *package_id,
 			     const gchar *summary, gpointer data)
 {
 	PkRoleEnum role;
@@ -643,10 +641,10 @@
 }
 
 /**
- * pk_update_viewer_add_description_item:
+ * gpk_update_viewer_add_description_item:
  **/
 static void
-pk_update_viewer_add_description_item (const gchar *title, const gchar *text, const gchar *uri)
+gpk_update_viewer_add_description_item (const gchar *title, const gchar *text, const gchar *uri)
 {
 	gchar *markup;
 	GtkWidget *tree_view;
@@ -673,10 +671,10 @@
 }
 
 /**
- * pk_update_viewer_add_description_link_item:
+ * gpk_update_viewer_add_description_link_item:
  **/
 static void
-pk_update_viewer_add_description_link_item (const gchar *title, const gchar *url_string)
+gpk_update_viewer_add_description_link_item (const gchar *title, const gchar *url_string)
 {
 	const gchar *text;
 	const gchar *uri;
@@ -702,10 +700,10 @@
 		}
 		/* no suffix needed */
 		if (length == 2) {
-			pk_update_viewer_add_description_item (title, text, uri);
+			gpk_update_viewer_add_description_item (title, text, uri);
 		} else {
 			title_num = g_strdup_printf ("%s (%i)", title, (i/2) + 1);
-			pk_update_viewer_add_description_item (title_num, text, uri);
+			gpk_update_viewer_add_description_item (title_num, text, uri);
 			g_free (title_num);
 		}
 	}
@@ -713,12 +711,12 @@
 }
 
 /**
- * pk_update_viewer_get_pretty_from_composite:
+ * gpk_update_viewer_get_pretty_from_composite:
  *
  * NOTE: Split using ^, because \t was already taken.
  **/
 static gchar *
-pk_update_viewer_get_pretty_from_composite (const gchar *package_ids_delimit)
+gpk_update_viewer_get_pretty_from_composite (const gchar *package_ids_delimit)
 {
 	guint i;
 	guint length;
@@ -751,10 +749,10 @@
 
 
 /**
- * pk_update_viewer_update_detail_cb:
+ * gpk_update_viewer_update_detail_cb:
  **/
 static void
-pk_update_viewer_update_detail_cb (PkClient *client, const gchar *package_id,
+gpk_update_viewer_update_detail_cb (PkClient *client, const gchar *package_id,
 				    const gchar *updates, const gchar *obsoletes,
 				    const gchar *vendor_url, const gchar *bugzilla_url,
 				    const gchar *cve_url, PkRestartEnum restart,
@@ -770,7 +768,7 @@
 	PkInfoEnum info;
 
 	/* clear existing list */
-	pk_update_viewer_description_animation_stop ();
+	gpk_update_viewer_description_animation_stop ();
 	gtk_list_store_clear (list_store_description);
 
 	/* initially we are hidden */
@@ -789,32 +787,32 @@
 
 	info_text = gpk_info_enum_to_localised_text (info);
 	/* translators: this is the update type, e.g. security */
-	pk_update_viewer_add_description_item (_("Type"), info_text, NULL);
+	gpk_update_viewer_add_description_item (_("Type"), info_text, NULL);
 
 	package_pretty = gpk_package_id_name_version (package_id);
 	/* translators: this is the package version */
-	pk_update_viewer_add_description_item (_("New version"), package_pretty, NULL);
+	gpk_update_viewer_add_description_item (_("New version"), package_pretty, NULL);
 	g_free (package_pretty);
 
 	/* split and add */
-	package_pretty = pk_update_viewer_get_pretty_from_composite (updates);
+	package_pretty = gpk_update_viewer_get_pretty_from_composite (updates);
 	if (package_pretty != NULL) {
 		/* translators: this is a list of packages that are updated */
-		pk_update_viewer_add_description_item (_("Updates"), package_pretty, NULL);
+		gpk_update_viewer_add_description_item (_("Updates"), package_pretty, NULL);
 	}
 	g_free (package_pretty);
 
 	/* split and add */
-	package_pretty = pk_update_viewer_get_pretty_from_composite (obsoletes);
+	package_pretty = gpk_update_viewer_get_pretty_from_composite (obsoletes);
 	if (package_pretty != NULL) {
 		/* translators: this is a list of packages that are obsoleted */
-		pk_update_viewer_add_description_item (_("Obsoletes"), package_pretty, NULL);
+		gpk_update_viewer_add_description_item (_("Obsoletes"), package_pretty, NULL);
 	}
 	g_free (package_pretty);
 
 	ident = pk_package_id_new_from_string (package_id);
 	/* translators: this is the repository the package has come from */
-	pk_update_viewer_add_description_item (_("Repository"), ident->data, NULL);
+	gpk_update_viewer_add_description_item (_("Repository"), ident->data, NULL);
 	pk_package_id_free (ident);
 
 	if (!pk_strzero (update_text)) {
@@ -823,7 +821,7 @@
 		first = pk_strreplace (update_text, "\n- ", "\nâ ");
 		second = pk_strreplace (first, "\n* ", "\nâ ");
 		/* translators: this is the package description */
-		pk_update_viewer_add_description_item (_("Description"), second, NULL);
+		gpk_update_viewer_add_description_item (_("Description"), second, NULL);
 		g_free (first);
 		g_free (second);
 	}
@@ -831,33 +829,31 @@
 	/* add all the links */
 	if (!pk_strzero (vendor_url)) {
 		/* translators: this is a list of vendor URLs */
-		pk_update_viewer_add_description_link_item (_("Vendor"), vendor_url);
+		gpk_update_viewer_add_description_link_item (_("Vendor"), vendor_url);
 	}
 	if (!pk_strzero (bugzilla_url)) {
 		/* translators: this is a list of bugzilla URLs */
-		pk_update_viewer_add_description_link_item (_("Bugzilla"), bugzilla_url);
+		gpk_update_viewer_add_description_link_item (_("Bugzilla"), bugzilla_url);
 	}
 	if (!pk_strzero (cve_url)) {
 		/* translators: this is a list of CVE (security) URLs */
-		pk_update_viewer_add_description_link_item (_("CVE"), cve_url);
+		gpk_update_viewer_add_description_link_item (_("CVE"), cve_url);
 	}
 
 	/* reboot */
 	if (restart == PK_RESTART_ENUM_SESSION ||
 	    restart == PK_RESTART_ENUM_SYSTEM) {
-		widget = glade_xml_get_widget (glade_xml, "hbox_reboot");
-		gtk_widget_show (widget);
-	} else {
-		widget = glade_xml_get_widget (glade_xml, "hbox_reboot");
-		gtk_widget_hide (widget);
+		info_text = gpk_restart_enum_to_localised_text (restart);
+		/* translators: this is a notice a restart might be required */
+		gpk_update_viewer_add_description_item (_("Notice"), info_text, NULL);
 	}
 }
 
 /**
- * pk_update_viewer_status_changed_cb:
+ * gpk_update_viewer_status_changed_cb:
  **/
 static void
-pk_update_viewer_status_changed_cb (PkClient *client, PkStatusEnum status, gpointer data)
+gpk_update_viewer_status_changed_cb (PkClient *client, PkStatusEnum status, gpointer data)
 {
 	GtkWidget *widget;
 
@@ -869,10 +865,10 @@
 }
 
 /**
- * pk_update_viewer_treeview_update_toggled:
+ * gpk_update_viewer_treeview_update_toggled:
  **/
 static void
-pk_update_viewer_treeview_update_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
+gpk_update_viewer_treeview_update_toggled (GtkCellRendererToggle *cell, gchar *path_str, gpointer data)
 {
 	GtkTreeModel *model = (GtkTreeModel *) data;
 	GtkTreeIter iter;
@@ -899,10 +895,10 @@
 }
 
 /**
- * pk_update_viewer_treeview_add_columns:
+ * gpk_update_viewer_treeview_add_columns:
  **/
 static void
-pk_update_viewer_treeview_add_columns (GtkTreeView *treeview)
+gpk_update_viewer_treeview_add_columns (GtkTreeView *treeview)
 {
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
@@ -924,31 +920,26 @@
 }
 
 /**
- * pk_update_viewer_treeview_renderer_clicked:
+ * gpk_update_viewer_treeview_renderer_clicked:
  **/
 static void
-pk_update_viewer_treeview_renderer_clicked (GtkCellRendererToggle *cell, gchar *uri, gpointer data)
+gpk_update_viewer_treeview_renderer_clicked (GtkCellRendererToggle *cell, gchar *uri, gpointer data)
 {
 	pk_debug ("clicked %s", uri);
 	gpk_gnome_open (uri);
 }
 
 /**
- * pk_update_viewer_treeview_add_columns_description:
+ * gpk_update_viewer_treeview_add_columns_description:
  **/
 static void
-pk_update_viewer_treeview_add_columns_description (GtkTreeView *treeview)
+gpk_update_viewer_treeview_add_columns_description (GtkTreeView *treeview)
 {
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 
-	/* image */
+	/* title */
 	column = gtk_tree_view_column_new ();
-	renderer = gtk_cell_renderer_pixbuf_new ();
-	g_object_set (renderer, "visible", FALSE, NULL);
-	gtk_tree_view_column_pack_start (column, renderer, FALSE);
-	gtk_tree_view_column_add_attribute (column, renderer, "pixbuf", DESC_COLUMN_PROGRESS);
-
 	renderer = gtk_cell_renderer_text_new ();
 	gtk_tree_view_column_pack_start (column, renderer, FALSE);
 	gtk_tree_view_column_add_attribute (column, renderer, "markup", DESC_COLUMN_TITLE);
@@ -956,7 +947,7 @@
 
 	/* column for uris */
 	renderer = gpk_cell_renderer_uri_new ();
-	g_signal_connect (renderer, "clicked", G_CALLBACK (pk_update_viewer_treeview_renderer_clicked), NULL);
+	g_signal_connect (renderer, "clicked", G_CALLBACK (gpk_update_viewer_treeview_renderer_clicked), NULL);
 	column = gtk_tree_view_column_new_with_attributes (_("Text"), renderer,
 							   "text", DESC_COLUMN_TEXT,
 							   "uri", DESC_COLUMN_URI, NULL);
@@ -964,10 +955,10 @@
 }
 
 /**
- * pk_update_viewer_treeview_add_columns_update:
+ * gpk_update_viewer_treeview_add_columns_update:
  **/
 static void
-pk_update_viewer_treeview_add_columns_update (GtkTreeView *treeview)
+gpk_update_viewer_treeview_add_columns_update (GtkTreeView *treeview)
 {
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
@@ -976,7 +967,7 @@
 	/* column for select toggle */
 	renderer = gtk_cell_renderer_toggle_new ();
 	model = gtk_tree_view_get_model (treeview);
-	g_signal_connect (renderer, "toggled", G_CALLBACK (pk_update_viewer_treeview_update_toggled), model);
+	g_signal_connect (renderer, "toggled", G_CALLBACK (gpk_update_viewer_treeview_update_toggled), model);
 	column = gtk_tree_view_column_new_with_attributes ("Update", renderer, "active", PACKAGES_COLUMN_SELECT, NULL);
 
 	/* set this column to a fixed sizing (of 50 pixels) */
@@ -985,7 +976,7 @@
 	gtk_tree_view_append_column (treeview, column);
 
 	/* usual suspects */
-	pk_update_viewer_treeview_add_columns (treeview);
+	gpk_update_viewer_treeview_add_columns (treeview);
 }
 
 /**
@@ -1019,10 +1010,7 @@
 		g_free (package_id);
 
 		/* clear and display animation until new details come in */
-		pk_update_viewer_description_animation_start ();
-
-		widget = glade_xml_get_widget (glade_xml, "hbox_reboot");
-		gtk_widget_hide (widget);
+		gpk_update_viewer_description_animation_start ();
 
 		pk_debug ("selected row is: %s", cached_package_id);
 
@@ -1046,10 +1034,10 @@
 }
 
 /**
- * pk_update_viewer_add_preview_item:
+ * gpk_update_viewer_add_preview_item:
  **/
 static void
-pk_update_viewer_add_preview_item (const gchar *icon, const gchar *message, gboolean clear)
+gpk_update_viewer_add_preview_item (const gchar *icon, const gchar *message, gboolean clear)
 {
 	GtkWidget *tree_view;
 	GtkTreeSelection *selection;
@@ -1136,18 +1124,18 @@
 }
 
 static void
-pk_update_viewer_restart_cb (GtkWidget *widget, gpointer data)
+gpk_update_viewer_restart_cb (GtkWidget *widget, gpointer data)
 {
 	gpk_restart_system ();
 }
 
-static void pk_update_viewer_populate_preview (PkPackageList *list);
+static void gpk_update_viewer_populate_preview (PkPackageList *list);
 
 /**
- * pk_update_viewer_check_blocked_packages:
+ * gpk_update_viewer_check_blocked_packages:
  **/
 static void
-pk_update_viewer_check_blocked_packages (PkPackageList *list)
+gpk_update_viewer_check_blocked_packages (PkPackageList *list)
 {
 	guint i;
 	guint length;
@@ -1204,10 +1192,10 @@
 }
 
 /**
- * pk_update_viewer_finished_cb:
+ * gpk_update_viewer_finished_cb:
  **/
 static void
-pk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime, gpointer data)
+gpk_update_viewer_finished_cb (PkClient *client, PkExitEnum exit, guint runtime, gpointer data)
 {
 	GtkWidget *widget;
 	PkRoleEnum role;
@@ -1223,14 +1211,14 @@
 	}
 
 	/* stop the throbber */
-	pk_update_viewer_preview_animation_stop ();
+	gpk_update_viewer_preview_animation_stop ();
 
 	/* check if we need to display infomation about blocked packages */
 	if (role == PK_ROLE_ENUM_UPDATE_SYSTEM ||
 	    role == PK_ROLE_ENUM_UPDATE_PACKAGES) {
 		//TODO: this has to be moved to GpkClient
 		list = pk_client_get_package_list (client);
-		pk_update_viewer_check_blocked_packages (list);
+		gpk_update_viewer_check_blocked_packages (list);
 		g_object_unref (list);
 	}
 
@@ -1257,27 +1245,27 @@
 			gtk_widget_grab_default (widget);
 
 			/* set correct view */
-			pk_update_viewer_set_page (PAGE_CONFIRM);
+			gpk_update_viewer_set_page (PAGE_CONFIRM);
 		}
 	}
 
-//	pk_update_viewer_populate_preview (list);
+//	gpk_update_viewer_populate_preview (list);
 }
 
 static void
 pk_button_more_installs_cb (GtkWidget *button, gpointer data)
 {
 	/* set correct view */
-	pk_update_viewer_set_page (PAGE_DETAILS);
+	gpk_update_viewer_set_page (PAGE_DETAILS);
 
-	pk_update_viewer_get_new_update_list ();
+	gpk_update_viewer_get_new_update_list ();
 }
 
 /**
- * pk_update_viewer_progress_changed_cb:
+ * gpk_update_viewer_progress_changed_cb:
  **/
 static void
-pk_update_viewer_progress_changed_cb (PkClient *client, guint percentage, guint subpercentage,
+gpk_update_viewer_progress_changed_cb (PkClient *client, guint percentage, guint subpercentage,
 				guint elapsed, guint remaining, gpointer data)
 {
 	GtkWidget *widget;
@@ -1289,10 +1277,10 @@
 }
 
 /**
- * pk_update_viewer_preview_set_animation:
+ * gpk_update_viewer_preview_set_animation:
  **/
 static void
-pk_update_viewer_preview_set_animation (const gchar *text)
+gpk_update_viewer_preview_set_animation (const gchar *text)
 {
 	GtkWidget *widget;
 
@@ -1303,30 +1291,30 @@
 	gtk_widget_set_sensitive (widget, FALSE);
 
 	/* start the spinning preview */
-	pk_update_viewer_preview_animation_start (text);
+	gpk_update_viewer_preview_animation_start (text);
 }
 
 /**
- * pk_update_viewer_task_list_changed_cb:
+ * gpk_update_viewer_task_list_changed_cb:
  **/
 static void
-pk_update_viewer_task_list_changed_cb (PkTaskList *tlist, gpointer data)
+gpk_update_viewer_task_list_changed_cb (PkTaskList *tlist, gpointer data)
 {
 	GtkWidget *widget;
 
 	/* hide buttons if we are updating */
 	if (pk_task_list_contains_role (tlist, PK_ROLE_ENUM_UPDATE_SYSTEM) ||
 	    pk_task_list_contains_role (tlist, PK_ROLE_ENUM_UPDATE_PACKAGES)) {
-		pk_update_viewer_preview_set_animation (_("A system update is already in progress"));
+		gpk_update_viewer_preview_set_animation (_("A system update is already in progress"));
 
 	} else if (pk_task_list_contains_role (tlist, PK_ROLE_ENUM_GET_UPDATES)) {
-		pk_update_viewer_preview_set_animation (_("Getting updates"));
+		gpk_update_viewer_preview_set_animation (_("Getting updates"));
 
 	} else if (pk_task_list_contains_role (tlist, PK_ROLE_ENUM_REFRESH_CACHE)) {
-		pk_update_viewer_preview_set_animation (_("Refreshing package cache"));
+		gpk_update_viewer_preview_set_animation (_("Refreshing package cache"));
 
 	} else {
-		pk_update_viewer_preview_animation_stop ();
+		gpk_update_viewer_preview_animation_stop ();
 
 		/* show apply, review and refresh */
 		polkit_gnome_action_set_sensitive (update_system_action, are_updates_available);
@@ -1337,10 +1325,10 @@
 }
 
 /**
- * pk_update_viewer_error_code_cb:
+ * gpk_update_viewer_error_code_cb:
  **/
 static void
-pk_update_viewer_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *details, gpointer data)
+gpk_update_viewer_error_code_cb (PkClient *client, PkErrorCodeEnum code, const gchar *details, gpointer data)
 {
 	GtkWidget *widget;
 
@@ -1357,19 +1345,19 @@
 }
 
 /**
- * pk_update_viewer_repo_list_changed_cb:
+ * gpk_update_viewer_repo_list_changed_cb:
  **/
 static void
-pk_update_viewer_repo_list_changed_cb (PkClient *client, gpointer data)
+gpk_update_viewer_repo_list_changed_cb (PkClient *client, gpointer data)
 {
-	pk_update_viewer_get_new_update_list ();
+	gpk_update_viewer_get_new_update_list ();
 }
 
 /**
- * pk_update_viewer_detail_popup_menu_select_all:
+ * gpk_update_viewer_detail_popup_menu_select_all:
  **/
 void
-pk_update_viewer_detail_popup_menu_select_all (GtkWidget *menuitem, gpointer userdata)
+gpk_update_viewer_detail_popup_menu_select_all (GtkWidget *menuitem, gpointer userdata)
 {
 	GtkTreeView *treeview = GTK_TREE_VIEW (userdata);
 	gboolean valid;
@@ -1388,10 +1376,10 @@
 }
 
 /**
- * pk_update_viewer_detail_popup_menu_select_none:
+ * gpk_update_viewer_detail_popup_menu_select_none:
  **/
 void
-pk_update_viewer_detail_popup_menu_select_none (GtkWidget *menuitem, gpointer userdata)
+gpk_update_viewer_detail_popup_menu_select_none (GtkWidget *menuitem, gpointer userdata)
 {
 	GtkTreeView *treeview = GTK_TREE_VIEW (userdata);
 	gboolean valid;
@@ -1410,10 +1398,10 @@
 }
 
 /**
- * pk_update_viewer_get_checked_status:
+ * gpk_update_viewer_get_checked_status:
  **/
 void
-pk_update_viewer_get_checked_status (gboolean *all_checked, gboolean *none_checked)
+gpk_update_viewer_get_checked_status (gboolean *all_checked, gboolean *none_checked)
 {
 	GtkTreeView *treeview;
 	gboolean valid;
@@ -1439,10 +1427,10 @@
 }
 
 /**
- * pk_update_viewer_detail_popup_menu_create:
+ * gpk_update_viewer_detail_popup_menu_create:
  **/
 void
-pk_update_viewer_detail_popup_menu_create (GtkWidget *treeview, GdkEventButton *event, gpointer userdata)
+gpk_update_viewer_detail_popup_menu_create (GtkWidget *treeview, GdkEventButton *event, gpointer userdata)
 {
 	GtkWidget *menu;
 	GtkWidget *menuitem;
@@ -1452,26 +1440,26 @@
 	menu = gtk_menu_new();
 
 	/* we don't want to show 'Select all' if they are all checked */
-	pk_update_viewer_get_checked_status (&all_checked, &none_checked);
+	gpk_update_viewer_get_checked_status (&all_checked, &none_checked);
 
 	if (!all_checked) {
 		menuitem = gtk_menu_item_new_with_label (_("Select all"));
 		g_signal_connect (menuitem, "activate",
-				  G_CALLBACK (pk_update_viewer_detail_popup_menu_select_all), treeview);
+				  G_CALLBACK (gpk_update_viewer_detail_popup_menu_select_all), treeview);
 		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 	}
 
 	if (!none_checked) {
 		menuitem = gtk_menu_item_new_with_label (_("Unselect all"));
 		g_signal_connect (menuitem, "activate",
-				  G_CALLBACK (pk_update_viewer_detail_popup_menu_select_none), treeview);
+				  G_CALLBACK (gpk_update_viewer_detail_popup_menu_select_none), treeview);
 		gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 	}
 
 	menuitem = gtk_menu_item_new_with_label (_("Ignore this package"));
 	gtk_widget_set_sensitive (GTK_WIDGET (menuitem), FALSE);
 	g_signal_connect (menuitem, "activate",
-			  G_CALLBACK (pk_update_viewer_detail_popup_menu_select_all), treeview);
+			  G_CALLBACK (gpk_update_viewer_detail_popup_menu_select_all), treeview);
 	gtk_menu_shell_append (GTK_MENU_SHELL (menu), menuitem);
 
 	gtk_widget_show_all (menu);
@@ -1481,10 +1469,10 @@
 }
 
 /**
- * pk_update_viewer_detail_button_pressed:
+ * gpk_update_viewer_detail_button_pressed:
  **/
 gboolean
-pk_update_viewer_detail_button_pressed (GtkWidget *treeview, GdkEventButton *event, gpointer userdata)
+gpk_update_viewer_detail_button_pressed (GtkWidget *treeview, GdkEventButton *event, gpointer userdata)
 {
 	GtkTreeSelection *selection;
 
@@ -1511,25 +1499,25 @@
 	}
 
 	/* create */
-	pk_update_viewer_detail_popup_menu_create (treeview, event, userdata);
+	gpk_update_viewer_detail_popup_menu_create (treeview, event, userdata);
 	return TRUE;
 }
 
 /**
- * pk_update_viewer_detail_popup_menu:
+ * gpk_update_viewer_detail_popup_menu:
  **/
 gboolean
-pk_update_viewer_detail_popup_menu (GtkWidget *treeview, gpointer userdata)
+gpk_update_viewer_detail_popup_menu (GtkWidget *treeview, gpointer userdata)
 {
-	pk_update_viewer_detail_popup_menu_create (treeview, NULL, userdata);
+	gpk_update_viewer_detail_popup_menu_create (treeview, NULL, userdata);
 	return TRUE;
 }
 
 /**
- * pk_update_viewer_task_list_finished_cb:
+ * gpk_update_viewer_task_list_finished_cb:
  **/
 static void
-pk_update_viewer_task_list_finished_cb (PkTaskList *tlist, PkClient *client, PkExitEnum exit,
+gpk_update_viewer_task_list_finished_cb (PkTaskList *tlist, PkClient *client, PkExitEnum exit,
 					guint runtime, gpointer userdata)
 {
 	PkRoleEnum role;
@@ -1556,7 +1544,7 @@
 	    role == PK_ROLE_ENUM_UPDATE_PACKAGES ||
 	    role == PK_ROLE_ENUM_REFRESH_CACHE) {
 		pk_debug ("getting new");
-		//pk_update_viewer_get_new_update_list ();
+		//gpk_update_viewer_get_new_update_list ();
 	}
 }
 
@@ -1734,36 +1722,36 @@
 
 	control = pk_control_new ();
 	g_signal_connect (control, "repo-list-changed",
-			  G_CALLBACK (pk_update_viewer_repo_list_changed_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_repo_list_changed_cb), NULL);
 
 	/* this is stuff we don't care about */
 	client_query = pk_client_new ();
 	pk_client_set_use_buffer (client_query, TRUE, NULL);
 	g_signal_connect (client_query, "package",
-			  G_CALLBACK (pk_update_viewer_package_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_package_cb), NULL);
 	g_signal_connect (client_query, "finished",
-			  G_CALLBACK (pk_update_viewer_finished_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_finished_cb), NULL);
 	g_signal_connect (client_query, "progress-changed",
-			  G_CALLBACK (pk_update_viewer_progress_changed_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_progress_changed_cb), NULL);
 	g_signal_connect (client_query, "update-detail",
-			  G_CALLBACK (pk_update_viewer_update_detail_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_update_detail_cb), NULL);
 	g_signal_connect (client_query, "status-changed",
-			  G_CALLBACK (pk_update_viewer_status_changed_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_status_changed_cb), NULL);
 	g_signal_connect (client_query, "error-code",
-			  G_CALLBACK (pk_update_viewer_error_code_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_error_code_cb), NULL);
 
 	client_action = pk_client_new ();
 	pk_client_set_use_buffer (client_action, TRUE, NULL);
 	g_signal_connect (client_action, "package",
-			  G_CALLBACK (pk_update_viewer_package_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_package_cb), NULL);
 	g_signal_connect (client_action, "finished",
-			  G_CALLBACK (pk_update_viewer_finished_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_finished_cb), NULL);
 	g_signal_connect (client_action, "progress-changed",
-			  G_CALLBACK (pk_update_viewer_progress_changed_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_progress_changed_cb), NULL);
 	g_signal_connect (client_action, "status-changed",
-			  G_CALLBACK (pk_update_viewer_status_changed_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_status_changed_cb), NULL);
 	g_signal_connect (client_action, "error-code",
-			  G_CALLBACK (pk_update_viewer_error_code_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_error_code_cb), NULL);
 
 	/* get actions */
 	roles = pk_control_get_actions (control);
@@ -1784,10 +1772,6 @@
 	/* make GpkClient windows modal */
 	gpk_client_set_parent (gclient, GTK_WINDOW (main_window));
 
-	/* hide until we have updates */
-	widget = glade_xml_get_widget (glade_xml, "hbox_reboot");
-	gtk_widget_hide (widget);
-
 	/* hide from finished page until we have updates */
 	widget = glade_xml_get_widget (glade_xml, "hbox_restart");
 	gtk_widget_hide (widget);
@@ -1800,10 +1784,10 @@
 	 */
 	widget = glade_xml_get_widget (glade_xml, "button_close2");
 	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_update_viewer_button_close_and_cancel_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_button_close_and_cancel_cb), NULL);
 	widget = glade_xml_get_widget (glade_xml, "button_close3");
 	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_update_viewer_button_close_and_cancel_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_button_close_and_cancel_cb), NULL);
 
 	/* normal close buttons */
 	widget = glade_xml_get_widget (glade_xml, "button_close4");
@@ -1811,22 +1795,22 @@
 
 	/* connect up PolicyKit actions */
 	g_signal_connect (refresh_action, "activate",
-			  G_CALLBACK (pk_update_viewer_refresh_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_refresh_cb), NULL);
 	g_signal_connect (restart_action, "activate",
-			  G_CALLBACK (pk_update_viewer_restart_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_restart_cb), NULL);
 	g_signal_connect (update_packages_action, "activate",
-			  G_CALLBACK (pk_update_viewer_apply_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_apply_cb), NULL);
 	g_signal_connect (update_system_action, "activate",
-			  G_CALLBACK (pk_update_viewer_update_system_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_update_system_cb), NULL);
 
 	widget = glade_xml_get_widget (glade_xml, "button_review");
 	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_update_viewer_review_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_review_cb), NULL);
 	gtk_widget_set_tooltip_text(widget, _("Review the update list"));
 
 	widget = glade_xml_get_widget (glade_xml, "button_overview");
 	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_update_viewer_overview_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_overview_cb), NULL);
 	gtk_widget_set_tooltip_text(widget, _("Back to overview"));
 
 	widget = glade_xml_get_widget (glade_xml, "button_overview2");
@@ -1844,7 +1828,7 @@
 
 	widget = glade_xml_get_widget (glade_xml, "button_history");
 	g_signal_connect (widget, "clicked",
-			  G_CALLBACK (pk_update_viewer_history_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_history_cb), NULL);
 
 	/* make the refresh button the same size as the history one */
 	size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
@@ -1857,7 +1841,7 @@
 	list_store_details = gtk_list_store_new (PACKAGES_COLUMN_LAST, G_TYPE_STRING,
 						 G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN);
 	list_store_preview = gtk_list_store_new (PREVIEW_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF);
-	list_store_description = gtk_list_store_new (DESC_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF);
+	list_store_description = gtk_list_store_new (DESC_COLUMN_LAST, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 
 	/* create preview tree view */
 	widget = glade_xml_get_widget (glade_xml, "treeview_preview");
@@ -1865,7 +1849,7 @@
 				 GTK_TREE_MODEL (list_store_preview));
 
 	/* add columns to the tree view */
-	pk_update_viewer_treeview_add_columns (GTK_TREE_VIEW (widget));
+	gpk_update_viewer_treeview_add_columns (GTK_TREE_VIEW (widget));
 	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
 
 	/* create description tree view */
@@ -1874,7 +1858,7 @@
 				 GTK_TREE_MODEL (list_store_description));
 
 	/* add columns to the tree view */
-	pk_update_viewer_treeview_add_columns_description (GTK_TREE_VIEW (widget));
+	gpk_update_viewer_treeview_add_columns_description (GTK_TREE_VIEW (widget));
 	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
 
 	/* create package tree view */
@@ -1882,9 +1866,9 @@
 	gtk_tree_view_set_model (GTK_TREE_VIEW (widget),
 				 GTK_TREE_MODEL (list_store_details));
 	g_signal_connect (widget, "popup-menu",
-			  G_CALLBACK (pk_update_viewer_detail_popup_menu), NULL);
+			  G_CALLBACK (gpk_update_viewer_detail_popup_menu), NULL);
 	g_signal_connect (widget, "button-press-event",
-			  G_CALLBACK (pk_update_viewer_detail_button_pressed), NULL);
+			  G_CALLBACK (gpk_update_viewer_detail_button_pressed), NULL);
 
 	selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
 	gtk_tree_selection_set_mode (selection, GTK_SELECTION_BROWSE);
@@ -1892,7 +1876,7 @@
 			  G_CALLBACK (pk_packages_treeview_clicked_cb), NULL);
 
 	/* add columns to the tree view */
-	pk_update_viewer_treeview_add_columns_update (GTK_TREE_VIEW (widget));
+	gpk_update_viewer_treeview_add_columns_update (GTK_TREE_VIEW (widget));
 	gtk_tree_view_columns_autosize (GTK_TREE_VIEW (widget));
 
 	/* make the buttons non-clickable until we get completion */
@@ -1907,16 +1891,16 @@
 
 	/* we need to grey out all the buttons if we are in progress */
 	g_signal_connect (tlist, "changed",
-			  G_CALLBACK (pk_update_viewer_task_list_changed_cb), NULL);
-	pk_update_viewer_task_list_changed_cb (tlist, NULL);
+			  G_CALLBACK (gpk_update_viewer_task_list_changed_cb), NULL);
+	gpk_update_viewer_task_list_changed_cb (tlist, NULL);
 	g_signal_connect (tlist, "finished",
-			  G_CALLBACK (pk_update_viewer_task_list_finished_cb), NULL);
+			  G_CALLBACK (gpk_update_viewer_task_list_finished_cb), NULL);
 
 	/* show window */
 	gtk_widget_show (main_window);
 
 	/* coldplug */
-	pk_update_viewer_get_new_update_list ();
+	gpk_update_viewer_get_new_update_list ();
 
 	/* wait */
 	gtk_main ();

Modified: trunk/src/gpk-watch.c
==============================================================================
--- trunk/src/gpk-watch.c	(original)
+++ trunk/src/gpk-watch.c	Wed Jun 11 15:30:23 2008
@@ -646,8 +646,8 @@
 	g_return_if_fail (GPK_IS_WATCH (watch));
 
 	pk_debug ("refresh cache");
+	gpk_client_set_interaction (watch->priv->gclient, GPK_CLIENT_INTERACT_ALWAYS);
 	gpk_client_show_finished (watch->priv->gclient, FALSE);
-	gpk_client_show_progress (watch->priv->gclient, FALSE);
 	ret = gpk_client_refresh_cache (watch->priv->gclient, &error);
 	if (!ret) {
 		pk_warning ("%s", error->message);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]