diff options
author | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2009-02-03 17:03:23 +0800 |
---|---|---|
committer | Xavier Claessens <xclaesse@src.gnome.org> | 2009-02-03 17:03:23 +0800 |
commit | 6c53e0813f7ab0dd8c0f14893b9617e2a692ff58 (patch) | |
tree | 023f2d83d7c11e0bed72573f2384fb830a5fb947 /libempathy-gtk/empathy-ui-utils.c | |
parent | 2f700be2db881317f6b02667ab6cf0813f9a492e (diff) | |
download | gsoc2013-empathy-6c53e0813f7ab0dd8c0f14893b9617e2a692ff58.tar gsoc2013-empathy-6c53e0813f7ab0dd8c0f14893b9617e2a692ff58.tar.gz gsoc2013-empathy-6c53e0813f7ab0dd8c0f14893b9617e2a692ff58.tar.bz2 gsoc2013-empathy-6c53e0813f7ab0dd8c0f14893b9617e2a692ff58.tar.lz gsoc2013-empathy-6c53e0813f7ab0dd8c0f14893b9617e2a692ff58.tar.xz gsoc2013-empathy-6c53e0813f7ab0dd8c0f14893b9617e2a692ff58.tar.zst gsoc2013-empathy-6c53e0813f7ab0dd8c0f14893b9617e2a692ff58.zip |
Add a empathy_sound_play_full function
add a empathy_sound_play_full function, which adds a callback which is called
after the sound has been played. Just like in ca_context_play_full
Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
svn path=/trunk/; revision=2392
Diffstat (limited to 'libempathy-gtk/empathy-ui-utils.c')
-rw-r--r-- | libempathy-gtk/empathy-ui-utils.c | 71 |
1 files changed, 59 insertions, 12 deletions
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c index 91362da5e..692b6ff7d 100644 --- a/libempathy-gtk/empathy-ui-utils.c +++ b/libempathy-gtk/empathy-ui-utils.c @@ -1614,30 +1614,77 @@ empathy_sound_pref_is_enabled (const char *key) } void -empathy_sound_play (GtkWidget *widget, - EmpathySound sound_id) +empathy_sound_stop (EmpathySound sound_id) { EmpathySoundEntry *entry; - gboolean should_play = TRUE; g_return_if_fail (sound_id < LAST_EMPATHY_SOUND); entry = &(sound_entries[sound_id]); g_return_if_fail (entry->sound_id == sound_id); + ca_context_cancel (ca_gtk_context_get (), entry->sound_id); +} + + +gboolean +empathy_sound_play_full (GtkWidget *widget, EmpathySound sound_id, + ca_finish_callback_t callback, gpointer user_data) +{ + EmpathySoundEntry *entry; + gboolean should_play = TRUE; + ca_proplist *p = NULL; + ca_context *c; + + g_return_val_if_fail (sound_id < LAST_EMPATHY_SOUND, FALSE); + + entry = &(sound_entries[sound_id]); + g_return_val_if_fail (entry->sound_id == sound_id, FALSE); + if (entry->gconf_key != NULL) { should_play = empathy_sound_pref_is_enabled (entry->gconf_key); } - if (should_play) { - DEBUG ("Play sound \"%s\" (%s)", - entry->event_ca_id, - entry->event_ca_description); + if (!should_play) + return FALSE; - ca_gtk_play_for_widget (widget, 0, - CA_PROP_EVENT_ID, entry->event_ca_id, - CA_PROP_EVENT_DESCRIPTION, gettext (entry->event_ca_description), - NULL); - } + c = ca_gtk_context_get (); + ca_context_cancel (c, entry->sound_id); + + DEBUG ("Play sound \"%s\" (%s)", + entry->event_ca_id, + entry->event_ca_description); + + if (ca_proplist_create(&p) < 0) + goto failed; + + if (ca_proplist_sets (p, CA_PROP_EVENT_ID, entry->event_ca_id) < 0) + goto failed; + + if (ca_proplist_sets (p, CA_PROP_EVENT_DESCRIPTION, + gettext (entry->event_ca_id)) < 0) + goto failed; + + if (ca_gtk_proplist_set_for_widget (p, widget) < 0) + goto failed; + + ca_context_play_full (ca_gtk_context_get (), entry->sound_id, + p, callback, user_data); + + ca_proplist_destroy (p); + + return TRUE; + +failed: + if (p != NULL) + ca_proplist_destroy (p); + + return FALSE; +} + +void +empathy_sound_play (GtkWidget *widget, EmpathySound sound_id) +{ + empathy_sound_play_full (widget, sound_id, NULL, NULL); } |