aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-08-11 21:30:44 -0500
committerTed Gould <ted@gould.cx>2010-08-11 21:30:44 -0500
commit4398a699958b13e6e5739520eb83f9530dd333f7 (patch)
treef05a3db63b484534afa7832bbcff699b1cc97490
parentba6904978575157936f0fb3ce9fd4aa78ac740ee (diff)
downloadlibayatana-appindicator-4398a699958b13e6e5739520eb83f9530dd333f7.tar.gz
libayatana-appindicator-4398a699958b13e6e5739520eb83f9530dd333f7.tar.bz2
libayatana-appindicator-4398a699958b13e6e5739520eb83f9530dd333f7.zip
Make it so that an approver that gets free'd gets removed from the applications list of approval.
-rw-r--r--src/application-service-appstore.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/application-service-appstore.c b/src/application-service-appstore.c
index 6ee2c47..5467f31 100644
--- a/src/application-service-appstore.c
+++ b/src/application-service-appstore.c
@@ -220,7 +220,7 @@ application_service_appstore_dispose (GObject *object)
}
if (priv->approvers != NULL) {
- g_list_foreach(priv->approvers, approver_free, NULL);
+ g_list_foreach(priv->approvers, approver_free, object);
g_list_free(priv->approvers);
priv->approvers = NULL;
}
@@ -955,12 +955,27 @@ _application_service_server_get_applications (ApplicationServiceAppstore * appst
return TRUE;
}
+/* Removes and approver from our list of approvers and
+ then sees if that changes our status. Most likely this
+ could make us visible if this approver rejected us. */
+static void
+remove_approver (gpointer papp, gpointer pproxy)
+{
+ Application * app = (Application *)papp;
+ app->approved_by = g_list_remove(app->approved_by, pproxy);
+ apply_status(app);
+ return;
+}
+
/* Frees the data associated with an approver */
static void
approver_free (gpointer papprover, gpointer user_data)
{
Approver * approver = (Approver *)papprover;
g_return_if_fail(approver != NULL);
+
+ ApplicationServiceAppstore * appstore = APPLICATION_SERVICE_APPSTORE(user_data);
+ g_list_foreach(appstore->priv->applications, remove_approver, approver->proxy);
if (approver->proxy != NULL) {
g_object_unref(approver->proxy);