Merge lp:~larsu/telepathy-indicator/fix-warnings into lp:telepathy-indicator

Proposed by Lars Karlitski
Status: Merged
Approved by: Charles Kerr
Approved revision: 75
Merged at revision: 75
Proposed branch: lp:~larsu/telepathy-indicator/fix-warnings
Merge into: lp:telepathy-indicator
Diff against target: 391 lines (+115/-83)
1 file modified
src/indicator-approver.c (+115/-83)
To merge this branch: bzr merge lp:~larsu/telepathy-indicator/fix-warnings
Reviewer Review Type Date Requested Status
Charles Kerr (community) Approve
PS Jenkins bot (community) continuous-integration Approve
Review via email: mp+215105@code.launchpad.net

Commit message

Listen to telepathy events even when empathy is not running

Description of the change

Listen to telepathy events even when empathy is not running

Clearing the approver and observer objects doesn't seem to disconnect all callbacks from telepathy. This patch keeps both alive and does nothing when empathy is not running.

This gets rid of a lot of warnings.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Charles Kerr (charlesk) wrote :

Looks fine and seems to work. Approve.

On style points, I wish this had been a NullObject rather than a NULL pointer test -- there are so many more logic branches in the code now. This is going to hurt the coverage stats. Oh wait... ;-)

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/indicator-approver.c'
2--- src/indicator-approver.c 2013-02-20 00:35:00 +0000
3+++ src/indicator-approver.c 2014-04-10 08:35:06 +0000
4@@ -98,7 +98,8 @@
5 channel = g_ptr_array_index (channels, 0);
6 id = channel_id (channel);
7
8- messaging_menu_app_remove_source (mmapp, id);
9+ if (mmapp)
10+ messaging_menu_app_remove_source (mmapp, id);
11 g_hash_table_remove (dispatch_ops, id);
12 update_launcher (n_sources--);
13
14@@ -125,7 +126,8 @@
15 {
16 g_warning ("Failed to handle operations: %s\n", error->message);
17 g_error_free (error);
18- messaging_menu_app_remove_source (mmapp, id);
19+ if (mmapp)
20+ messaging_menu_app_remove_source (mmapp, id);
21 update_launcher (n_sources--);
22 }
23 }
24@@ -245,7 +247,6 @@
25 {
26 TpContact *contact;
27 GtkWidget *dialog;
28- gchar *id;
29 const gchar *alias = "";
30 gchar *title;
31 const gchar *message;
32@@ -312,10 +313,14 @@
33
34 gtk_widget_show (GTK_WIDGET (dialog));
35
36- id = contact_id (contact);
37- messaging_menu_app_remove_source (mmapp, id);
38-
39- g_free (id);
40+ if (mmapp) {
41+ gchar *id;
42+
43+ id = contact_id (contact);
44+ messaging_menu_app_remove_source (mmapp, id);
45+
46+ g_free (id);
47+ }
48 }
49
50 static TpConnection *
51@@ -393,9 +398,11 @@
52 const gchar *id,
53 gpointer user_data)
54 {
55- TpAccountManager *tp_am = user_data;
56+ TpAccountManager *tp_am;
57 gchar **sections;
58
59+ tp_am = tp_account_manager_dup ();
60+
61 /* message source ids contain the type of source, the
62 * tpconnection's object path, and the object path of the actual
63 * source object, separated by colons */
64@@ -452,6 +459,7 @@
65
66 out:
67 g_strfreev (sections);
68+ g_object_unref (tp_am);
69 }
70
71 static void
72@@ -460,7 +468,6 @@
73 TpChannel *channel = user_data;
74 GPtrArray *contacts;
75 GError *error = NULL;
76- gchar *id;
77 const gchar *alias = "";
78 GFile *avatar_file;
79 GIcon *avatar = NULL;
80@@ -485,14 +492,19 @@
81 }
82 g_debug ("handle_contacts_pending_add_indicator_cb alias: %s", alias);
83
84- id = channel_id (channel);
85- messaging_menu_app_append_source (mmapp, id, avatar, alias);
86- messaging_menu_app_draw_attention (mmapp, id);
87+ if (mmapp) {
88+ gchar *id;
89+
90+ id = channel_id (channel);
91+ messaging_menu_app_append_source (mmapp, id, avatar, alias);
92+ messaging_menu_app_draw_attention (mmapp, id);
93+
94+ g_free (id);
95+ }
96
97 update_launcher (++n_sources);
98
99 g_clear_object (&avatar);
100- g_free (id);
101 g_ptr_array_free (contacts, TRUE);
102 }
103
104@@ -516,7 +528,7 @@
105
106 id = channel_id (TP_CHANNEL (channel));
107
108- if (!messaging_menu_app_has_source (mmapp, id))
109+ if (mmapp && !messaging_menu_app_has_source (mmapp, id))
110 {
111 connection = tp_channel_get_connection (TP_CHANNEL (channel));
112 contact = tp_channel_get_initiator_contact (TP_CHANNEL (channel));
113@@ -533,14 +545,18 @@
114 static void
115 pending_message_removed_cb (TpTextChannel *channel, TpMessage *message, gpointer user_data)
116 {
117- gchar *id;
118 g_debug ("pending_message_removed_cb: %s", tp_channel_get_identifier (TP_CHANNEL (channel)));
119
120- id = channel_id (TP_CHANNEL (channel));
121- messaging_menu_app_remove_source (mmapp, id);
122+ if (mmapp) {
123+ gchar *id;
124+
125+ id = channel_id (TP_CHANNEL (channel));
126+ messaging_menu_app_remove_source (mmapp, id);
127+
128+ g_free (id);
129+ }
130+
131 update_launcher (--n_sources);
132-
133- g_free (id);
134 }
135
136 static void
137@@ -572,29 +588,32 @@
138
139 id = channel_id (channel);
140
141- if (messaging_menu_app_has_source (mmapp, id))
142- {
143- messaging_menu_app_set_source_time (mmapp, id, g_get_real_time ());
144- }
145- else
146- {
147- TpContact *contact;
148- const gchar *alias = "";
149- GFile *avatar_file;
150- GIcon *avatar;
151-
152- contact = g_ptr_array_index (contacts, 0);
153- alias = tp_contact_get_alias (contact);
154- avatar_file = tp_contact_get_avatar_file (contact);
155- avatar = avatar_file ? g_file_icon_new (avatar_file) : NULL;
156-
157- messaging_menu_app_append_source (mmapp, id, avatar, alias);
158- update_launcher (++n_sources);
159-
160- g_clear_object (&avatar);
161- }
162-
163- messaging_menu_app_draw_attention (mmapp, id);
164+ if (mmapp) {
165+ if (messaging_menu_app_has_source (mmapp, id))
166+ {
167+ messaging_menu_app_set_source_time (mmapp, id, g_get_real_time ());
168+ }
169+ else
170+ {
171+ TpContact *contact;
172+ const gchar *alias = "";
173+ GFile *avatar_file;
174+ GIcon *avatar;
175+
176+ contact = g_ptr_array_index (contacts, 0);
177+ alias = tp_contact_get_alias (contact);
178+ avatar_file = tp_contact_get_avatar_file (contact);
179+ avatar = avatar_file ? g_file_icon_new (avatar_file) : NULL;
180+
181+ messaging_menu_app_append_source (mmapp, id, avatar, alias);
182+
183+ g_clear_object (&avatar);
184+ }
185+
186+ messaging_menu_app_draw_attention (mmapp, id);
187+ }
188+
189+ update_launcher (++n_sources);
190
191 g_hash_table_insert (dispatch_ops, g_strdup (id), dispatch_op);
192 g_signal_connect (dispatch_op, "invalidated", G_CALLBACK (dispatch_op_finished_cb), NULL);
193@@ -687,22 +706,24 @@
194
195 id = contact_id (contact);
196
197- if (messaging_menu_app_has_source (mmapp, id))
198- {
199- messaging_menu_app_set_source_time (mmapp, id, g_get_real_time ());
200- }
201- else
202- {
203- alias = tp_contact_get_alias (contact);
204- avatar_file = tp_contact_get_avatar_file (contact);
205- avatar = avatar_file ? g_file_icon_new (avatar_file) : NULL;
206-
207- messaging_menu_app_append_source (mmapp, id, avatar, alias);
208- messaging_menu_app_draw_attention (mmapp, id);
209-
210- n_sources++;
211-
212- g_clear_object (&avatar);
213+ if (mmapp) {
214+ if (messaging_menu_app_has_source (mmapp, id))
215+ {
216+ messaging_menu_app_set_source_time (mmapp, id, g_get_real_time ());
217+ }
218+ else
219+ {
220+ alias = tp_contact_get_alias (contact);
221+ avatar_file = tp_contact_get_avatar_file (contact);
222+ avatar = avatar_file ? g_file_icon_new (avatar_file) : NULL;
223+
224+ messaging_menu_app_append_source (mmapp, id, avatar, alias);
225+ messaging_menu_app_draw_attention (mmapp, id);
226+
227+ n_sources++;
228+
229+ g_clear_object (&avatar);
230+ }
231 }
232
233 g_debug ("contact_list_changed_cb: adding %s", alias);
234@@ -722,7 +743,8 @@
235 contact_remove_from_contact_list (contact);
236 }
237
238- messaging_menu_app_remove_source (mmapp, tp_contact_get_identifier (contact));
239+ if (mmapp)
240+ messaging_menu_app_remove_source (mmapp, tp_contact_get_identifier (contact));
241 n_sources--;
242 }
243
244@@ -765,7 +787,8 @@
245 g_debug ("add_account");
246 tp_g_signal_connect_object (account, "notify::connection",
247 G_CALLBACK (account_conn_changed_cb), manager, 0);
248- messaging_menu_app_register (mmapp);
249+ if (mmapp != NULL)
250+ messaging_menu_app_register (mmapp);
251 check_account (account, manager);
252 }
253
254@@ -893,6 +916,9 @@
255 {
256 MessagingMenuStatus mm_status;
257
258+ if (mmapp == NULL)
259+ return;
260+
261 switch (presence)
262 {
263 case TP_CONNECTION_PRESENCE_TYPE_AVAILABLE:
264@@ -928,9 +954,11 @@
265 MessagingMenuStatus mm_status,
266 gpointer user_data)
267 {
268- TpAccountManager *tp_am = user_data;
269+ TpAccountManager *tp_am;
270 TpConnectionPresenceType status;
271
272+ tp_am = tp_account_manager_dup ();
273+
274 switch (mm_status)
275 {
276 case MESSAGING_MENU_STATUS_AVAILABLE:
277@@ -958,6 +986,8 @@
278 }
279
280 tp_account_manager_set_all_requested_presences (tp_am, status, "", "");
281+
282+ g_object_unref (tp_am);
283 }
284
285 gboolean check_enabled_accounts ()
286@@ -988,13 +1018,14 @@
287 static void on_enabled_event (TpAccountManager* self, TpAccount* account, gpointer user_data)
288 {
289 g_debug ("on_enabled_event");
290- messaging_menu_app_register (mmapp);
291+ if (mmapp)
292+ messaging_menu_app_register (mmapp);
293 }
294
295 static void on_disabled_event (TpAccountManager* self, TpAccount* account, gpointer user_data)
296 {
297 g_debug ("on_disabled_event");
298- if (!check_enabled_accounts ())
299+ if (mmapp && !check_enabled_accounts ())
300 {
301 messaging_menu_app_unregister (mmapp);
302 }
303@@ -1004,19 +1035,15 @@
304 static void on_account_removed_event (TpAccountManager* self, TpAccount* account, gpointer user_data)
305 {
306 g_debug ("on_account_removed_event");
307- if (!check_enabled_accounts ())
308+ if (mmapp && !check_enabled_accounts ())
309 {
310 messaging_menu_app_unregister (mmapp);
311 }
312 }
313
314 static void
315-empathy_appeared (GDBusConnection *connection,
316- const gchar *name,
317- const gchar *name_owner,
318- gpointer user_data)
319+setup (GMainLoop *loop)
320 {
321- GMainLoop *loop = user_data;
322 TpAccountManager *tp_am;
323 TpBaseClient *approver;
324 TpBaseClient *observer;
325@@ -1047,16 +1074,6 @@
326 return;
327 }
328
329- mmapp = messaging_menu_app_new ("empathy.desktop");
330-
331- if (check_enabled_accounts ())
332- messaging_menu_app_register (mmapp);
333-
334- g_signal_connect (mmapp, "activate-source",
335- G_CALLBACK (message_source_activated), tp_am);
336- g_signal_connect (mmapp, "status-changed",
337- G_CALLBACK (messaging_menu_status_changed), tp_am);
338-
339 presence = tp_account_manager_get_most_available_presence (tp_am, NULL, NULL);
340 presence_changed (tp_am, presence, "", "", NULL);
341 g_signal_connect(tp_am, "most-available-presence-changed",
342@@ -1078,16 +1095,30 @@
343 }
344
345 static void
346+empathy_appeared (GDBusConnection *connection,
347+ const gchar *name,
348+ const gchar *name_owner,
349+ gpointer user_data)
350+{
351+ mmapp = messaging_menu_app_new ("empathy.desktop");
352+
353+ if (check_enabled_accounts ())
354+ messaging_menu_app_register (mmapp);
355+
356+ g_signal_connect (mmapp, "activate-source",
357+ G_CALLBACK (message_source_activated), NULL);
358+ g_signal_connect (mmapp, "status-changed",
359+ G_CALLBACK (messaging_menu_status_changed), NULL);
360+}
361+
362+static void
363 empathy_vanished (GDBusConnection *connection,
364 const gchar *name,
365 gpointer user_data)
366 {
367 g_debug (G_STRFUNC);
368
369- g_clear_object (&approver);
370- g_clear_object (&observer);
371 g_clear_object (&launcher);
372- g_clear_pointer (&dispatch_ops, g_hash_table_unref);
373 g_clear_object (&mmapp);
374 }
375
376@@ -1099,13 +1130,14 @@
377 gtk_init (&argc, &argv);
378
379 loop = g_main_loop_new (NULL, FALSE);
380+ setup (loop);
381
382 g_bus_watch_name (G_BUS_TYPE_SESSION,
383 "org.gnome.Empathy",
384 G_BUS_NAME_WATCHER_FLAGS_NONE,
385 empathy_appeared,
386 empathy_vanished,
387- loop, NULL);
388+ NULL, NULL);
389
390 g_debug ("Telepathy Indicator started");
391 g_main_loop_run (loop);

Subscribers

People subscribed via source and target branches

to all changes: