← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~ted/indicator-application/every-indicator-is-important into lp:indicator-application

 

Ted Gould has proposed merging lp:~ted/indicator-application/every-indicator-is-important into lp:indicator-application.

Requested reviews:
  Indicator Applet Developers (indicator-applet-developers)


Patch to make it so when an app indicator registers, we see if we have it.  The PK one registers each time, but keeps the old one around as well.  Which means we get multiple structures representing it.
-- 
https://code.launchpad.net/~ted/indicator-application/every-indicator-is-important/+merge/34827
Your team ayatana-commits is subscribed to branch lp:indicator-application.
=== modified file 'src/application-service-appstore.c'
--- src/application-service-appstore.c	2010-08-20 16:54:25 +0000
+++ src/application-service-appstore.c	2010-09-08 00:41:38 +0000
@@ -72,6 +72,8 @@
 	VISIBLE_STATE_SHOWN
 } visible_state_t;
 
+#define STATE2STRING(x)  ((x) == VISIBLE_STATE_HIDDEN ? "hidden" : "visible")
+
 typedef struct _Approver Approver;
 struct _Approver {
 	DBusGProxy * proxy;
@@ -129,6 +131,7 @@
 static void approver_free (gpointer papprover, gpointer user_data);
 static void check_with_new_approver (gpointer papp, gpointer papprove);
 static void check_with_old_approver (gpointer papprove, gpointer papp);
+static Application * find_application (ApplicationServiceAppstore * appstore, const gchar * address, const gchar * object);
 
 G_DEFINE_TYPE (ApplicationServiceAppstore, application_service_appstore, G_TYPE_OBJECT);
 
@@ -485,6 +488,7 @@
 	}
 
 	if (lapp == NULL) {
+		g_warning("Unable to find position for app '%s'", app->id);
 		return -1;
 	}
 	
@@ -497,6 +501,7 @@
 application_free (Application * app)
 {
 	if (app == NULL) return;
+	g_debug("Application free '%s'", app->id);
 	
 	/* Handle the case where this could be called by unref'ing one of
 	   the proxy objects. */
@@ -554,6 +559,7 @@
 application_removed_cb (DBusGProxy * proxy, gpointer userdata)
 {
 	Application * app = (Application *)userdata;
+	g_debug("Application proxy destroyed '%s'", app->id);
 
 	/* Remove from the panel */
 	app->status = APP_INDICATOR_STATUS_PASSIVE;
@@ -600,6 +606,8 @@
 		return;
 	}
 
+	g_debug("Changing app '%s' state from %s to %s", app->id, STATE2STRING(app->visible_state), STATE2STRING(goal_state));
+
 	/* This means we're going off line */
 	if (goal_state == VISIBLE_STATE_HIDDEN) {
 		gint position = get_position(app);
@@ -848,10 +856,20 @@
 	g_return_if_fail(dbus_name != NULL && dbus_name[0] != '\0');
 	g_return_if_fail(dbus_object != NULL && dbus_object[0] != '\0');
 	ApplicationServiceAppstorePrivate * priv = appstore->priv;
+	Application * app = find_application(appstore, dbus_name, dbus_object);
+
+	if (app != NULL) {
+		g_warning("Application already exists! Rerequesting properties.");
+		org_freedesktop_DBus_Properties_get_all_async(app->prop_proxy,
+		                                              NOTIFICATION_ITEM_DBUS_IFACE,
+		                                              get_all_properties_cb,
+		                                              app);
+		return;
+	}
 
 	/* Build the application entry.  This will be carried
 	   along until we're sure we've got everything. */
-	Application * app = g_new0(Application, 1);
+	app = g_new0(Application, 1);
 
 	app->validated = FALSE;
 	app->dbus_name = g_strdup(dbus_name);


Follow ups