aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2012-11-26 20:12:13 +0100
committerLars Uebernickel <lars.uebernickel@canonical.com>2012-11-26 20:12:13 +0100
commit9287c2e6577e71d8f68d9c9e7d393a4f8524ab10 (patch)
treeb5c87bcc747acd9cc8f261c6d3d62c7cf8a8daf4
parentb2c6b50cdfc1cc9a288516cef102ad2943b0e950 (diff)
downloadayatana-indicator-messages-9287c2e6577e71d8f68d9c9e7d393a4f8524ab10.tar.gz
ayatana-indicator-messages-9287c2e6577e71d8f68d9c9e7d393a4f8524ab10.tar.bz2
ayatana-indicator-messages-9287c2e6577e71d8f68d9c9e7d393a4f8524ab10.zip
Tell applications when messages and sources are dismissed
Right now, this is only used to clean up internal data structures in libmessaging-menu. It's not exposed to the application itself.
-rw-r--r--common/com.canonical.indicator.messages.application.xml4
-rw-r--r--libmessaging-menu/messaging-menu-app.c21
-rw-r--r--src/im-application-list.c35
3 files changed, 53 insertions, 7 deletions
diff --git a/common/com.canonical.indicator.messages.application.xml b/common/com.canonical.indicator.messages.application.xml
index fb9f079..552b6a4 100644
--- a/common/com.canonical.indicator.messages.application.xml
+++ b/common/com.canonical.indicator.messages.application.xml
@@ -13,6 +13,10 @@
<method name="ActivateMessage">
<arg type="s" name="message_id" direction="in" />
</method>
+ <method name="Dismiss">
+ <arg type="as" name="sources" direction="in" />
+ <arg type="as" name="messages" direction="in" />
+ </method>
<signal name="SourceAdded">
<arg type="u" name="position" direction="in" />
<arg type="(sssuxsb)" name="source" direction="in" />
diff --git a/libmessaging-menu/messaging-menu-app.c b/libmessaging-menu/messaging-menu-app.c
index 61547c5..d037da9 100644
--- a/libmessaging-menu/messaging-menu-app.c
+++ b/libmessaging-menu/messaging-menu-app.c
@@ -607,6 +607,25 @@ messaging_menu_app_activate_message (IndicatorMessagesApplication *app_interface
return TRUE;
}
+static gboolean
+messaging_menu_app_dismiss (IndicatorMessagesApplication *app_interface,
+ GDBusMethodInvocation *invocation,
+ const gchar * const *sources,
+ const gchar * const *messages,
+ gpointer user_data)
+{
+ MessagingMenuApp *app = user_data;
+ const gchar * const *it;
+
+ for (it = sources; *it; it++)
+ messaging_menu_app_remove_source_internal (app, *it);
+
+ for (it = messages; *it; it++)
+ messaging_menu_app_remove_message_internal (app, *it);
+
+ return TRUE;
+}
+
static void
messaging_menu_app_init (MessagingMenuApp *app)
{
@@ -625,6 +644,8 @@ messaging_menu_app_init (MessagingMenuApp *app)
G_CALLBACK (messaging_menu_app_list_messages), app);
g_signal_connect (app->app_interface, "handle-activate-message",
G_CALLBACK (messaging_menu_app_activate_message), app);
+ g_signal_connect (app->app_interface, "handle-dismiss",
+ G_CALLBACK (messaging_menu_app_dismiss), app);
app->messages = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_object_unref);
diff --git a/src/im-application-list.c b/src/im-application-list.c
index c3be647..d766f24 100644
--- a/src/im-application-list.c
+++ b/src/im-application-list.c
@@ -118,6 +118,13 @@ im_application_list_source_activated (GSimpleAction *action,
app->cancellable,
NULL, NULL);
}
+ else
+ {
+ const gchar *sources[] = { source_id, NULL };
+ const gchar *messages[] = { NULL };
+ indicator_messages_application_call_dismiss (app->proxy, sources, messages,
+ app->cancellable, NULL, NULL);
+ }
im_application_list_source_removed (app, source_id);
}
@@ -148,6 +155,13 @@ im_application_list_message_activated (GSimpleAction *action,
app->cancellable,
NULL, NULL);
}
+ else
+ {
+ const gchar *sources[] = { NULL };
+ const gchar *messages[] = { message_id, NULL };
+ indicator_messages_application_call_dismiss (app->proxy, sources, messages,
+ app->cancellable, NULL, NULL);
+ }
im_application_list_message_removed (app, message_id);
}
@@ -164,18 +178,25 @@ im_application_list_remove_all (GSimpleAction *action,
g_hash_table_iter_init (&iter, list->applications);
while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &app))
{
- gchar **actions;
+ gchar **source_actions;
+ gchar **message_actions;
gchar **it;
- actions = g_action_group_list_actions (G_ACTION_GROUP (app->source_actions));
- for (it = actions; *it; it++)
+ source_actions = g_action_group_list_actions (G_ACTION_GROUP (app->source_actions));
+ for (it = source_actions; *it; it++)
im_application_list_source_removed (app, *it);
- g_strfreev (actions);
- actions = g_action_group_list_actions (G_ACTION_GROUP (app->message_actions));
- for (it = actions; *it; it++)
+ message_actions = g_action_group_list_actions (G_ACTION_GROUP (app->message_actions));
+ for (it = message_actions; *it; it++)
im_application_list_message_removed (app, *it);
- g_strfreev (actions);
+
+ indicator_messages_application_call_dismiss (app->proxy,
+ (const gchar * const *) source_actions,
+ (const gchar * const *) message_actions,
+ app->cancellable, NULL, NULL);
+
+ g_strfreev (source_actions);
+ g_strfreev (message_actions);
}
}