aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLars Uebernickel <lars.uebernickel@canonical.com>2013-10-04 15:21:09 +0200
committerLars Uebernickel <lars.uebernickel@canonical.com>2013-10-04 15:21:09 +0200
commitf807fd4ebc109be261f5cbbe0e92b11805382c56 (patch)
treebc81f895d8f85cf58dc082b09b9ea64790b059f6 /src
parent9afc8613cc692bb4e1cbda191d75289372e7e02f (diff)
downloadayatana-indicator-messages-f807fd4ebc109be261f5cbbe0e92b11805382c56.tar.gz
ayatana-indicator-messages-f807fd4ebc109be261f5cbbe0e92b11805382c56.tar.bz2
ayatana-indicator-messages-f807fd4ebc109be261f5cbbe0e92b11805382c56.zip
im-application-list: fix draws_attention logic
The logic to update the both the global and the application-specific draws_attention flags was wrong or inefficient (sending unnecessary updates) when adding, removing, and modifying sources and messages.
Diffstat (limited to 'src')
-rw-r--r--src/im-application-list.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/im-application-list.c b/src/im-application-list.c
index c6105a1..dbf6bb5 100644
--- a/src/im-application-list.c
+++ b/src/im-application-list.c
@@ -332,7 +332,8 @@ im_application_list_message_removed (Application *app,
g_action_map_remove_action (G_ACTION_MAP(app->message_actions), id);
g_action_muxer_remove (app->message_sub_actions, id);
- im_application_list_update_draws_attention (app->list);
+ if (application_update_draws_attention(app))
+ im_application_list_update_draws_attention (app->list);
g_signal_emit (app->list, signals[MESSAGE_REMOVED], 0, app->id, id);
}
@@ -801,10 +802,11 @@ im_application_list_source_added (Application *app,
g_signal_emit (app->list, signals[SOURCE_ADDED], 0, app->id, id, label, serialized_icon);
- if (draws_attention)
- app->draws_attention = TRUE;
-
- im_application_list_update_draws_attention (app->list);
+ if (draws_attention && app->draws_attention == FALSE)
+ {
+ app->draws_attention = TRUE;
+ im_application_list_update_draws_attention (app->list);
+ }
g_object_unref (action);
if (serialized_icon)
@@ -839,8 +841,8 @@ im_application_list_source_changed (Application *app,
g_signal_emit (app->list, signals[SOURCE_CHANGED], 0, app->id, id, label, serialized_icon, visible);
- app->draws_attention = visible && draws_attention;
- im_application_list_update_draws_attention (app->list);
+ if (application_update_draws_attention (app))
+ im_application_list_update_draws_attention (app->list);
if (serialized_icon)
g_variant_unref (serialized_icon);
@@ -1001,10 +1003,11 @@ im_application_list_message_added (Application *app,
g_object_unref (action_group);
}
- if (draws_attention)
- app->draws_attention = TRUE;
-
- im_application_list_update_draws_attention (app->list);
+ if (draws_attention && !app->draws_attention)
+ {
+ app->draws_attention = TRUE;
+ im_application_list_update_draws_attention (app->list);
+ }
app_icon = get_symbolic_app_icon (G_APP_INFO (app->info));
@@ -1076,7 +1079,9 @@ im_application_list_unset_remote (Application *app)
g_action_muxer_insert (app->muxer, "msg", G_ACTION_GROUP (app->message_actions));
g_action_muxer_insert (app->muxer, "msg-actions", G_ACTION_GROUP (app->message_sub_actions));
+ app->draws_attention = FALSE;
im_application_list_update_draws_attention (app->list);
+
g_action_group_change_action_state (G_ACTION_GROUP (app->muxer), "launch", g_variant_new_boolean (FALSE));
if (was_running)