aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-02-19 19:21:43 -0500
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-02-19 19:21:43 -0500
commit8249e264e0f426d6702d21a690477be495045f90 (patch)
treeb36b0e80e83e32e3f02329631ee937b0e47e09a7
parent7ba2490833317e94754811e60653b871271713dd (diff)
downloadayatana-indicator-messages-8249e264e0f426d6702d21a690477be495045f90.tar.gz
ayatana-indicator-messages-8249e264e0f426d6702d21a690477be495045f90.tar.bz2
ayatana-indicator-messages-8249e264e0f426d6702d21a690477be495045f90.zip
Notify the service when an app unrefs its MessagingMenuApp
Prior to this patch, the messaging menu only marked apps as "not running" when they quit (i.e. disappeared from the bus). This was okay, since most applications only ever release the ref to their MessagingMenuApp when they quit, or after calling _unregister explicitely (which removes them from the menu entirely). However, this is according to libmessagingmenu's documentation, and at least indicator-telepathy relies on it.
-rw-r--r--libmessaging-menu/messaging-menu.c4
-rw-r--r--src/messages-service.c25
-rw-r--r--src/messages-service.xml4
3 files changed, 33 insertions, 0 deletions
diff --git a/libmessaging-menu/messaging-menu.c b/libmessaging-menu/messaging-menu.c
index 04f8d1d..a51695a 100644
--- a/libmessaging-menu/messaging-menu.c
+++ b/libmessaging-menu/messaging-menu.c
@@ -277,6 +277,10 @@ messaging_menu_app_dispose (GObject *object)
if (app->messages_service)
{
+ indicator_messages_service_call_application_stopped_running (app->messages_service,
+ g_app_info_get_id (G_APP_INFO (app->appinfo)),
+ NULL, NULL, NULL);
+
g_signal_handlers_disconnect_by_func (app->messages_service,
global_status_changed,
app);
diff --git a/src/messages-service.c b/src/messages-service.c
index 48c830e..e48e3f8 100644
--- a/src/messages-service.c
+++ b/src/messages-service.c
@@ -473,6 +473,29 @@ unregister_application (IndicatorMessagesService *service,
}
static void
+application_stopped_running (IndicatorMessagesService *service,
+ GDBusMethodInvocation *invocation,
+ const gchar *desktop_id,
+ gpointer user_data)
+{
+ GDesktopAppInfo *appinfo;
+ gchar *id;
+ AppSection *section;
+
+ indicator_messages_service_complete_application_stopped_running (service, invocation);
+
+ if (!(appinfo = g_desktop_app_info_new (desktop_id)))
+ return;
+
+ id = g_app_info_get_simple_id (G_APP_INFO (appinfo));
+ section = g_hash_table_lookup (applications, id);
+ app_section_unset_object_path (section);
+
+ g_free (id);
+ g_object_unref (appinfo);
+}
+
+static void
set_status (IndicatorMessagesService *service,
GDBusMethodInvocation *invocation,
const gchar *desktop_id,
@@ -648,6 +671,8 @@ main (int argc, char ** argv)
G_CALLBACK (register_application), NULL);
g_signal_connect (messages_service, "handle-unregister-application",
G_CALLBACK (unregister_application), NULL);
+ g_signal_connect (messages_service, "handle-application-stopped-running",
+ G_CALLBACK (application_stopped_running), NULL);
g_signal_connect (messages_service, "handle-set-status",
G_CALLBACK (set_status), NULL);
diff --git a/src/messages-service.xml b/src/messages-service.xml
index 00ae154..3c3c779 100644
--- a/src/messages-service.xml
+++ b/src/messages-service.xml
@@ -11,6 +11,10 @@
<arg type="s" name="desktop_id" direction="in" />
</method>
+ <method name="ApplicationStoppedRunning">
+ <arg type="s" name="desktop_id" direction="in" />
+ </method>
+
<method name="SetStatus">
<arg type="s" name="desktop_id" direction="in" />
<arg type="s" name="status" direction="in" />