Merge lp:~ken-vandine/telepathy-indicator/lp_1046360 into lp:telepathy-indicator

Proposed by Ken VanDine
Status: Merged
Approved by: Ken VanDine
Approved revision: 66
Merged at revision: 62
Proposed branch: lp:~ken-vandine/telepathy-indicator/lp_1046360
Merge into: lp:telepathy-indicator
Diff against target: 148 lines (+91/-12)
1 file modified
src/indicator-approver.c (+91/-12)
To merge this branch: bzr merge lp:~ken-vandine/telepathy-indicator/lp_1046360
Reviewer Review Type Date Requested Status
Lars Karlitski (community) Approve
Review via email: mp+129039@code.launchpad.net

Description of the change

don't register with messaging menu unless we have enabled IM accounts

To post a comment you must log in.
Revision history for this message
Lars Karlitski (larsu) wrote :

Works, but has a memory leak in check_enabled_accounts:

tp_account_manager_dup_valid_accounts returns a list of reffed TpAccounts. Instead of using g_list_free, the returned list should be freed with

  g_list_free_full (account_list, g_object_unref)

to unref the contained accounts.

Also, the `g_list_free (account_service_list)` can be removed, it doesn't free anything (account_service_list is NULL after the loop has run through).

Thanks!

review: Needs Fixing
66. By Ken VanDine

fixed a leak

Revision history for this message
Ken VanDine (ken-vandine) wrote :

OK, I've updated the branch per your feedback. Thanks!

Revision history for this message
Lars Karlitski (larsu) wrote :

Great, thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/indicator-approver.c'
--- src/indicator-approver.c 2012-08-27 14:18:16 +0000
+++ src/indicator-approver.c 2012-10-11 13:21:24 +0000
@@ -777,6 +777,16 @@
777 g_debug ("account_enabled_cb");777 g_debug ("account_enabled_cb");
778778
779 add_account (account, manager);779 add_account (account, manager);
780 if (valid == TRUE)
781 {
782 messaging_menu_app_register (mmapp);
783 return;
784 }
785 if (!check_enabled_accounts ())
786 {
787 messaging_menu_app_unregister (mmapp);
788 }
789
780}790}
781791
782static void792static void
@@ -978,20 +988,64 @@
978 tp_account_manager_set_all_requested_presences (tp_am, status, "", "");988 tp_account_manager_set_all_requested_presences (tp_am, status, "", "");
979}989}
980990
981int991gboolean check_enabled_accounts ()
982main (int argc, char **argv)992{
983{993 gboolean r = FALSE;
984 GMainLoop *loop = NULL;994 TpAccountManager* tp_am = tp_account_manager_dup ();
995 GList* account_service_list = NULL;
996 GList* account_list = tp_account_manager_dup_valid_accounts (tp_am);
997
998 for (account_service_list = account_list; account_service_list != NULL; account_service_list = account_service_list->next) {
999 TpAccount* account = NULL;
1000 account = (TpAccount*) account_service_list->data;
1001 if (tp_account_is_enabled (account))
1002 {
1003 g_debug ("ENABLED: %s", tp_account_get_cm_name (account));
1004 r = TRUE;
1005 } else
1006 {
1007 g_debug ("DISABLED: %s", tp_account_get_cm_name (account));
1008 }
1009 }
1010
1011 g_list_free_full (account_list, g_object_unref);
1012 g_object_unref(G_OBJECT(tp_am));
1013 return r;
1014}
1015
1016static void on_enabled_event (TpAccountManager* self, TpAccount* account, gpointer user_data)
1017{
1018 g_debug ("on_enabled_event");
1019 messaging_menu_app_register (mmapp);
1020}
1021
1022static void on_disabled_event (TpAccountManager* self, TpAccount* account, gpointer user_data)
1023{
1024 g_debug ("on_disabled_event");
1025 if (!check_enabled_accounts ())
1026 {
1027 messaging_menu_app_unregister (mmapp);
1028 }
1029}
1030
1031
1032static void on_account_removed_event (TpAccountManager* self, TpAccount* account, gpointer user_data)
1033{
1034 g_debug ("on_account_removed_event");
1035 if (!check_enabled_accounts ())
1036 {
1037 messaging_menu_app_unregister (mmapp);
1038 }
1039}
1040
1041
1042int setup ()
1043{
985 TpConnectionPresenceType presence;1044 TpConnectionPresenceType presence;
9861045
987 g_type_init ();
988
989 gtk_init (&argc, &argv);
990 TpBaseClient *approver;1046 TpBaseClient *approver;
991 TpBaseClient *observer;1047 TpBaseClient *observer;
9921048
993 loop = g_main_loop_new (NULL, FALSE);
994
995 TpAccountManager *tp_am = tp_account_manager_dup ();1049 TpAccountManager *tp_am = tp_account_manager_dup ();
9961050
997 approver = approver_setup (tp_am);1051 approver = approver_setup (tp_am);
@@ -1008,7 +1062,6 @@
1008 }1062 }
10091063
1010 mmapp = messaging_menu_app_new ("empathy.desktop");1064 mmapp = messaging_menu_app_new ("empathy.desktop");
1011 messaging_menu_app_register (mmapp);
10121065
1013 g_signal_connect (mmapp, "activate-source",1066 g_signal_connect (mmapp, "activate-source",
1014 G_CALLBACK (message_source_activated), tp_am);1067 G_CALLBACK (message_source_activated), tp_am);
@@ -1019,17 +1072,43 @@
1019 presence_changed (tp_am, presence, "", "", NULL);1072 presence_changed (tp_am, presence, "", "", NULL);
1020 g_signal_connect(tp_am, "most-available-presence-changed",1073 g_signal_connect(tp_am, "most-available-presence-changed",
1021 G_CALLBACK (presence_changed), NULL);1074 G_CALLBACK (presence_changed), NULL);
1075 g_signal_connect (tp_am, "account-enabled",
1076 G_CALLBACK (on_enabled_event), NULL);
1077 g_signal_connect (tp_am, "account-disabled",
1078 G_CALLBACK (on_disabled_event), NULL);
1079 g_signal_connect (tp_am, "account-removed",
1080 G_CALLBACK (on_account_removed_event), NULL);
10221081
1023 dispatch_ops = g_hash_table_new_full (g_str_hash, g_str_equal,1082 dispatch_ops = g_hash_table_new_full (g_str_hash, g_str_equal,
1024 g_free, g_object_unref);1083 g_free, g_object_unref);
1025
1026 launcher = unity_launcher_entry_get_for_desktop_id ("empathy.desktop");1084 launcher = unity_launcher_entry_get_for_desktop_id ("empathy.desktop");
10271085
1028 contact_list_setup (tp_am);1086 contact_list_setup (tp_am);
1087}
1088
1089
1090int
1091main (int argc, char **argv)
1092{
1093 int ret = 0;
1094 GMainLoop *loop = NULL;
1095 g_type_init ();
1096 gtk_init (&argc, &argv);
1097
1098 loop = g_main_loop_new (NULL, FALSE);
1099
1100 ret = setup ();
1101 if (ret == 1)
1102 return ret;
1103
1104 if (check_enabled_accounts ())
1105 {
1106 messaging_menu_app_register (mmapp);
1107 }
10291108
1030 g_debug ("Telepathy Indicator started");1109 g_debug ("Telepathy Indicator started");
1031 g_main_loop_run (loop);1110 g_main_loop_run (loop);
10321111
1033 g_main_loop_unref (loop);1112 g_main_loop_unref (loop);
1034 return 0;1113 return ret;
1035}1114}

Subscribers

People subscribed via source and target branches

to all changes: