aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-08-13 10:06:59 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-08-13 10:06:59 +0200
commit2cd06d6f970df9f9f8f8ae67905f88f6518ea25b (patch)
tree5e5538aa25e15e5594d17b5ba8bb90ca2af60e7c /src
parent046ef6f5581ab2634d5ef097e6c449316c2404bf (diff)
downloadayatana-indicator-messages-2cd06d6f970df9f9f8f8ae67905f88f6518ea25b.tar.gz
ayatana-indicator-messages-2cd06d6f970df9f9f8f8ae67905f88f6518ea25b.tar.bz2
ayatana-indicator-messages-2cd06d6f970df9f9f8f8ae67905f88f6518ea25b.zip
Add application actions
Diffstat (limited to 'src')
-rw-r--r--src/im-application-list.c35
-rw-r--r--src/im-desktop-menu.c15
2 files changed, 44 insertions, 6 deletions
diff --git a/src/im-application-list.c b/src/im-application-list.c
index 8eaa601..95a9cd0 100644
--- a/src/im-application-list.c
+++ b/src/im-application-list.c
@@ -468,9 +468,9 @@ im_application_list_lookup (ImApplicationList *list,
}
void
-im_application_list_activate_launch (ImApplicationList *list,
- GVariant *parameter,
- gpointer user_data)
+im_application_list_activate_launch (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
{
Application *app = user_data;
GError *error = NULL;
@@ -483,6 +483,16 @@ im_application_list_activate_launch (ImApplicationList *list,
}
void
+im_application_list_activate_app_action (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer user_data)
+{
+ Application *app = user_data;
+
+ g_desktop_app_info_launch_action (app->info, g_action_get_name (G_ACTION (action)), NULL);
+}
+
+void
im_application_list_add (ImApplicationList *list,
const gchar *desktop_id)
{
@@ -517,12 +527,27 @@ im_application_list_add (ImApplicationList *list,
app->message_actions = g_simple_action_group_new ();
app->message_sub_actions = g_action_muxer_new ();
+ actions = g_simple_action_group_new ();
+
launch_action = g_simple_action_new_stateful ("launch", NULL, g_variant_new_boolean (FALSE));
g_signal_connect (launch_action, "activate", G_CALLBACK (im_application_list_activate_launch), app);
-
- actions = g_simple_action_group_new ();
g_action_map_add_action (G_ACTION_MAP (actions), G_ACTION (launch_action));
+ {
+ const gchar *const *app_actions;
+
+ for (app_actions = g_desktop_app_info_list_actions (app->info); *app_actions; app_actions++)
+ {
+ GSimpleAction *action;
+
+ action = g_simple_action_new (*app_actions, NULL);
+ g_signal_connect (action, "activate", G_CALLBACK (im_application_list_activate_app_action), app);
+ g_action_map_add_action (G_ACTION_MAP (actions), G_ACTION (action));
+
+ g_object_unref (action);
+ }
+ }
+
g_action_muxer_insert (app->muxer, NULL, G_ACTION_GROUP (actions));
g_action_muxer_insert (app->muxer, "src", G_ACTION_GROUP (app->source_actions));
g_action_muxer_insert (app->muxer, "msg", G_ACTION_GROUP (app->message_actions));
diff --git a/src/im-desktop-menu.c b/src/im-desktop-menu.c
index ee25f02..f5fea9a 100644
--- a/src/im-desktop-menu.c
+++ b/src/im-desktop-menu.c
@@ -64,7 +64,20 @@ im_desktop_menu_app_added (ImApplicationList *applist,
g_object_unref (item);
}
- /* TODO application actions */
+ /* application actions */
+ {
+ const gchar *const *actions;
+
+ for (actions = g_desktop_app_info_list_actions (app_info); *actions; actions++)
+ {
+ gchar *label;
+
+ label = g_desktop_app_info_get_action_name (app_info, *actions);
+ g_menu_append (app_section, label, *actions);
+
+ g_free (label);
+ }
+ }
source_section = g_menu_new ();