src/sound.c

branch
cpw.khc.msnp14
changeset 20472
6a6d2ef151e6
parent 13912
463b4fa9f067
parent 20469
b2836a24d81e
child 20473
91e1b3a49d10
equal deleted inserted replaced
13912:463b4fa9f067 20472:6a6d2ef151e6
1 /*
2 * gaim
3 *
4 * Gaim is the legal property of its developers, whose names are too numerous
5 * to list here. Please refer to the COPYRIGHT file distributed with this
6 * source distribution.
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 *
22 */
23 #include "internal.h"
24
25 #include "blist.h"
26 #include "prefs.h"
27 #include "sound.h"
28
29 static GaimSoundUiOps *sound_ui_ops = NULL;
30
31 void
32 gaim_sound_play_file(const char *filename, const GaimAccount *account)
33 {
34 GaimStatus *status;
35
36 if ((account != NULL) && (!gaim_prefs_get_bool("/core/sound/while_away")))
37 {
38 status = gaim_account_get_active_status(account);
39 if (gaim_status_is_online(status) && !gaim_status_is_available(status))
40 return;
41 }
42
43 if(sound_ui_ops && sound_ui_ops->play_file)
44 sound_ui_ops->play_file(filename);
45 }
46
47 void
48 gaim_sound_play_event(GaimSoundEventID event, const GaimAccount *account)
49 {
50 GaimStatus *status;
51
52 if ((account != NULL) &&
53 (!gaim_prefs_get_bool("/core/sound/while_away")))
54 {
55 status = gaim_account_get_active_status(account);
56 if (gaim_status_is_online(status) &&
57 !gaim_status_is_available(status))
58 return;
59 }
60
61 if(sound_ui_ops && sound_ui_ops->play_event) {
62 int plugin_return;
63
64 plugin_return = GPOINTER_TO_INT(gaim_signal_emit_return_1(
65 gaim_sounds_get_handle(), "playing-sound-event",
66 event, account));
67
68 if (plugin_return)
69 return;
70 else
71 sound_ui_ops->play_event(event);
72 }
73 }
74
75 void
76 gaim_sound_set_ui_ops(GaimSoundUiOps *ops)
77 {
78 if(sound_ui_ops && sound_ui_ops->uninit)
79 sound_ui_ops->uninit();
80
81 sound_ui_ops = ops;
82
83 if(sound_ui_ops && sound_ui_ops->init)
84 sound_ui_ops->init();
85 }
86
87 GaimSoundUiOps *
88 gaim_sound_get_ui_ops(void)
89 {
90 return sound_ui_ops;
91 }
92
93 void
94 gaim_sound_init()
95 {
96 void *handle = gaim_sounds_get_handle();
97
98 /**********************************************************************
99 * Register signals
100 **********************************************************************/
101
102 gaim_signal_register(handle, "playing-sound-event",
103 gaim_marshal_BOOLEAN__INT_POINTER,
104 gaim_value_new(GAIM_TYPE_BOOLEAN), 2,
105 gaim_value_new(GAIM_TYPE_INT),
106 gaim_value_new(GAIM_TYPE_POINTER));
107
108 gaim_prefs_add_none("/core/sound");
109 gaim_prefs_add_bool("/core/sound/while_away", FALSE);
110
111 }
112
113 void
114 gaim_sound_uninit()
115 {
116 if(sound_ui_ops && sound_ui_ops->uninit)
117 sound_ui_ops->uninit();
118
119 gaim_signals_unregister_by_instance(gaim_sounds_get_handle());
120 }
121
122 void *
123 gaim_sounds_get_handle()
124 {
125 static int handle;
126
127 return &handle;
128 }

mercurial