# HG changeset patch # User Etan Reisner # Date 1133505780 0 # Node ID 5bc3d67ceb24c798389e501347f1a6669c4e2e9b # Parent f17958be25ab31156641c6b00031b478b9afeace [gaim-migrate @ 14595] Adam Wendt gives us the playing-sound-event signal, now plugins can stop sound events, or play their own. committer: Tailor Script diff -r f17958be25ab -r 5bc3d67ceb24 COPYRIGHT --- a/COPYRIGHT Fri Dec 02 03:13:51 2005 +0000 +++ b/COPYRIGHT Fri Dec 02 06:43:00 2005 +0000 @@ -253,6 +253,7 @@ Nathan Walp Eric Warmenhoven Andrew Wellington +Adam Wendt Dave West Daniel Westermann-Clark Andrew Whewell diff -r f17958be25ab -r 5bc3d67ceb24 doc/Makefile.am --- a/doc/Makefile.am Fri Dec 02 03:13:51 2005 +0000 +++ b/doc/Makefile.am Fri Dec 02 06:43:00 2005 +0000 @@ -22,5 +22,6 @@ notify-signals.dox \ plugin-ids.dox \ plugin-signals.dox \ + sound-signals.dox \ the_penguin.txt \ xfer-signals.dox diff -r f17958be25ab -r 5bc3d67ceb24 doc/gtkaccount-signals.dox --- a/doc/gtkaccount-signals.dox Fri Dec 02 03:13:51 2005 +0000 +++ b/doc/gtkaccount-signals.dox Fri Dec 02 06:43:00 2005 +0000 @@ -15,3 +15,4 @@ @param account The account that has been modified. @endsignaldef */ +// vim: syntax=c tw=75 et diff -r f17958be25ab -r 5bc3d67ceb24 doc/gtkblist-signals.dox --- a/doc/gtkblist-signals.dox Fri Dec 02 03:13:51 2005 +0000 +++ b/doc/gtkblist-signals.dox Fri Dec 02 06:43:00 2005 +0000 @@ -50,3 +50,4 @@ @param text A pointer to the text that will be displayed. @endsignaldef */ +// vim: syntax=c tw=75 et diff -r f17958be25ab -r 5bc3d67ceb24 doc/gtkconv-signals.dox --- a/doc/gtkconv-signals.dox Fri Dec 02 03:13:51 2005 +0000 +++ b/doc/gtkconv-signals.dox Fri Dec 02 06:43:00 2005 +0000 @@ -16,3 +16,4 @@ @param destination The window where the conversation will be moved to. @endsignaldef */ +// vim: syntax=c tw=75 et diff -r f17958be25ab -r 5bc3d67ceb24 doc/gtkimhtml-signals.dox --- a/doc/gtkimhtml-signals.dox Fri Dec 02 03:13:51 2005 +0000 +++ b/doc/gtkimhtml-signals.dox Fri Dec 02 06:43:00 2005 +0000 @@ -57,3 +57,4 @@ @param data User defined data. @endsignaldef */ +// vim: syntax=c tw=75 et diff -r f17958be25ab -r 5bc3d67ceb24 plugins/signals-test.c --- a/plugins/signals-test.c Fri Dec 02 03:13:51 2005 +0000 +++ b/plugins/signals-test.c Fri Dec 02 06:43:00 2005 +0000 @@ -32,6 +32,7 @@ #include "signals.h" #include "version.h" #include "status.h" +#include "sound.h" /************************************************************************** * Account subsystem signal callbacks @@ -548,18 +549,30 @@ } /************************************************************************** + * Sound signal callbacks + **************************************************************************/ +static int +sound_playing_event_cb(GaimSoundEventID event, const GaimAccount *account) { + gaim_debug_misc("signals test", "sound playing event: %d for account: %s\n", + event, gaim_account_get_username(account)); + + return 0; +} + +/************************************************************************** * Plugin stuff **************************************************************************/ static gboolean plugin_load(GaimPlugin *plugin) { - void *core_handle = gaim_get_core(); - void *blist_handle = gaim_blist_get_handle(); - void *conn_handle = gaim_connections_get_handle(); - void *conv_handle = gaim_conversations_get_handle(); + void *core_handle = gaim_get_core(); + void *blist_handle = gaim_blist_get_handle(); + void *conn_handle = gaim_connections_get_handle(); + void *conv_handle = gaim_conversations_get_handle(); void *accounts_handle = gaim_accounts_get_handle(); - void *ciphers_handle = gaim_ciphers_get_handle(); - void *ft_handle = gaim_xfers_get_handle(); + void *ciphers_handle = gaim_ciphers_get_handle(); + void *ft_handle = gaim_xfers_get_handle(); + void *sound_handle = gaim_sounds_get_handle(); /* Accounts subsystem signals */ gaim_signal_connect(accounts_handle, "account-connecting", @@ -679,7 +692,7 @@ gaim_signal_connect(core_handle, "quitting", plugin, GAIM_CALLBACK(quitting_cb), NULL); - /* file transfer signals */ + /* File transfer signals */ gaim_signal_connect(ft_handle, "file-recv-accept", plugin, GAIM_CALLBACK(ft_recv_accept_cb), NULL); gaim_signal_connect(ft_handle, "file-recv-start", @@ -697,6 +710,10 @@ gaim_signal_connect(ft_handle, "file-send-complete", plugin, GAIM_CALLBACK(ft_send_complete_cb), NULL); + /* Sound signals */ + gaim_signal_connect(sound_handle, "playing-sound-event", plugin, + GAIM_CALLBACK(sound_playing_event_cb), NULL); + return TRUE; } diff -r f17958be25ab -r 5bc3d67ceb24 src/signals.c --- a/src/signals.c Fri Dec 02 03:13:51 2005 +0000 +++ b/src/signals.c Fri Dec 02 06:43:00 2005 +0000 @@ -931,3 +931,17 @@ if (return_val != NULL) *return_val = GINT_TO_POINTER(ret_val); } + +void +gaim_marshal_BOOLEAN__INT_POINTER(GaimCallback cb, va_list args, void *data, + void **return_val) +{ + gboolean ret_val; + gint arg1 = va_arg(args, gint); + void *arg2 = va_arg(args, void *); + + ret_val = ((gboolean (*)(gint, void *, void *))cb)(arg1, arg2, data); + + if (return_val != NULL) + *return_val = GINT_TO_POINTER(ret_val); +} diff -r f17958be25ab -r 5bc3d67ceb24 src/signals.h --- a/src/signals.h Fri Dec 02 03:13:51 2005 +0000 +++ b/src/signals.h Fri Dec 02 06:43:00 2005 +0000 @@ -324,6 +324,9 @@ void gaim_marshal_BOOLEAN__POINTER_POINTER_POINTER_POINTER_POINTER( GaimCallback cb, va_list args, void *data, void **return_val); +void gaim_marshal_BOOLEAN__INT_POINTER( + GaimCallback cb, va_list args, void *data, void **return_val); + /*@}*/ #ifdef __cplusplus diff -r f17958be25ab -r 5bc3d67ceb24 src/sound.c --- a/src/sound.c Fri Dec 02 03:13:51 2005 +0000 +++ b/src/sound.c Fri Dec 02 06:43:00 2005 +0000 @@ -49,15 +49,27 @@ { GaimStatus *status; - if ((account != NULL) && (!gaim_prefs_get_bool("/core/sound/while_away"))) + if ((account != NULL) && + (!gaim_prefs_get_bool("/core/sound/while_away"))) { status = gaim_account_get_active_status(account); - if (gaim_status_is_online(status) && !gaim_status_is_available(status)) + if (gaim_status_is_online(status) && + !gaim_status_is_available(status)) return; } - if(sound_ui_ops && sound_ui_ops->play_event) - sound_ui_ops->play_event(event); + if(sound_ui_ops && sound_ui_ops->play_event) { + int plugin_return; + + plugin_return = GPOINTER_TO_INT(gaim_signal_emit_return_1( + gaim_sounds_get_handle(), "playing-sound-event", + event, account)); + + if (plugin_return) + return; + else + sound_ui_ops->play_event(event); + } } void @@ -81,6 +93,18 @@ void gaim_sound_init() { + void *handle = gaim_sounds_get_handle(); + + /********************************************************************** + * Register signals + **********************************************************************/ + + gaim_signal_register(handle, "playing-sound-event", + gaim_marshal_BOOLEAN__INT_POINTER, + gaim_value_new(GAIM_TYPE_BOOLEAN), 2, + gaim_value_new(GAIM_TYPE_INT), + gaim_value_new(GAIM_TYPE_POINTER)); + gaim_prefs_add_none("/core/sound"); gaim_prefs_add_bool("/core/sound/while_away", FALSE); @@ -91,4 +115,14 @@ { if(sound_ui_ops && sound_ui_ops->uninit) sound_ui_ops->uninit(); + + gaim_signals_unregister_by_instance(gaim_sounds_get_handle()); } + +void * +gaim_sounds_get_handle() +{ + static int handle; + + return &handle; +} diff -r f17958be25ab -r 5bc3d67ceb24 src/sound.h --- a/src/sound.h Fri Dec 02 03:13:51 2005 +0000 +++ b/src/sound.h Fri Dec 02 06:43:00 2005 +0000 @@ -117,6 +117,13 @@ */ void gaim_sound_uninit(void); +/** + * Returns the sound subsystem handle. + * + * @return The sound subsystem handle. + */ +void *gaim_sounds_get_handle(void); + /*@}*/ #ifdef __cplusplus