diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/im-application-list.c | 76 |
1 files changed, 58 insertions, 18 deletions
diff --git a/src/im-application-list.c b/src/im-application-list.c index 24df19e..dc8c146 100644 --- a/src/im-application-list.c +++ b/src/im-application-list.c @@ -87,6 +87,60 @@ application_free (gpointer data) } static void +im_application_list_source_removed (Application *app, + const gchar *id) +{ + g_simple_action_group_remove (app->actions, id); + + g_signal_emit (app->list, signals[SOURCE_REMOVED], 0, app->id, id); +} + +static void +im_application_list_source_activated (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + Application *app = user_data; + const gchar *source_id; + + source_id = g_action_get_name (G_ACTION (action)); + + indicator_messages_application_call_activate_source (app->proxy, + source_id, + app->cancellable, + NULL, NULL); + + im_application_list_source_removed (app, source_id); +} + +static void +im_application_list_message_removed (Application *app, + const gchar *id) +{ + g_simple_action_group_remove (app->actions, id); + + g_signal_emit (app->list, signals[MESSAGE_REMOVED], 0, app->id, id); +} + +static void +im_application_list_message_activated (GSimpleAction *action, + GVariant *parameter, + gpointer user_data) +{ + Application *app = user_data; + const gchar *message_id; + + message_id = g_action_get_name (G_ACTION (action)); + + indicator_messages_application_call_activate_message (app->proxy, + message_id, + app->cancellable, + NULL, NULL); + + im_application_list_message_removed (app, message_id); +} + +static void im_application_list_dispose (GObject *object) { ImApplicationList *list = IM_APPLICATION_LIST (object); @@ -304,6 +358,8 @@ im_application_list_source_added (Application *app, state = g_variant_new ("(uxsb)", count, time, string, draws_attention); action = g_simple_action_new_stateful (id, NULL, state); + g_signal_connect (action, "activate", G_CALLBACK (im_application_list_source_activated), app); + g_simple_action_group_insert (app->actions, G_ACTION (action)); g_signal_emit (app->list, signals[SOURCE_ADDED], 0, app->id, id, label, iconstr); @@ -333,15 +389,6 @@ im_application_list_source_changed (Application *app, } static void -im_application_list_source_removed (Application *app, - const gchar *id) -{ - g_simple_action_group_remove (app->actions, id); - - g_signal_emit (app->list, signals[SOURCE_REMOVED], 0, app->id, id); -} - -static void im_application_list_sources_listed (GObject *source_object, GAsyncResult *result, gpointer user_data) @@ -394,6 +441,8 @@ im_application_list_message_added (Application *app, app_iconstr = app_icon ? g_icon_to_string (app_icon) : NULL; action = g_simple_action_new (id, NULL); + g_signal_connect (action, "activate", G_CALLBACK (im_application_list_message_activated), app); + g_simple_action_group_insert (G_SIMPLE_ACTION_GROUP (app->actions), G_ACTION (action)); g_signal_emit (app->list, signals[MESSAGE_ADDED], 0, @@ -404,15 +453,6 @@ im_application_list_message_added (Application *app, } static void -im_application_list_message_removed (Application *app, - const gchar *id) -{ - g_simple_action_group_remove (app->actions, id); - - g_signal_emit (app->list, signals[MESSAGE_REMOVED], 0, app->id, id); -} - -static void im_application_list_messages_listed (GObject *source_object, GAsyncResult *result, gpointer user_data) |