diff options
author | Lars Uebernickel <lars.uebernickel@canonical.com> | 2013-08-13 10:06:59 +0200 |
---|---|---|
committer | Lars Uebernickel <lars.uebernickel@canonical.com> | 2013-08-13 10:06:59 +0200 |
commit | 2cd06d6f970df9f9f8f8ae67905f88f6518ea25b (patch) | |
tree | 5e5538aa25e15e5594d17b5ba8bb90ca2af60e7c /src | |
parent | 046ef6f5581ab2634d5ef097e6c449316c2404bf (diff) | |
download | ayatana-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.c | 35 | ||||
-rw-r--r-- | src/im-desktop-menu.c | 15 |
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 (); |