Mercurial > pidgin
comparison src/prefs.c @ 4561:9df99116840a
[gaim-migrate @ 4842]
This is the new sound subsystem
Lots of stuff got renamed, and everything sound-wise is documented.
Gaim now uses libaudiofile and libao to play sounds. Lots of ugly hacks
were removed, and now we support playing audio through anything that
libao will support.
If you need to (you shouldn't) you can force libao to use a specific
output driver, by putting a line into ~/.libao like:
default_driver=esd
You shouldn't need to do this, libao is pretty good at figuring out what
driver to use.
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sun, 09 Feb 2003 01:55:35 +0000 |
parents | eb32b3acef97 |
children | 4b1e24835bbf |
comparison
equal
deleted
inserted
replaced
4560:eb32b3acef97 | 4561:9df99116840a |
---|---|
36 #include <gtk/gtk.h> | 36 #include <gtk/gtk.h> |
37 #include "gtkimhtml.h" | 37 #include "gtkimhtml.h" |
38 #include "gaim.h" | 38 #include "gaim.h" |
39 #include "prpl.h" | 39 #include "prpl.h" |
40 #include "proxy.h" | 40 #include "proxy.h" |
41 #include "sound.h" | |
41 | 42 |
42 #ifdef _WIN32 | 43 #ifdef _WIN32 |
43 #include "win32dep.h" | 44 #include "win32dep.h" |
44 #endif | 45 #endif |
45 | 46 |
955 static GtkWidget *sndcmd = NULL; | 956 static GtkWidget *sndcmd = NULL; |
956 | 957 |
957 #ifndef _WIN32 | 958 #ifndef _WIN32 |
958 static gint sound_cmd_yeah(GtkEntry *entry, gpointer d) | 959 static gint sound_cmd_yeah(GtkEntry *entry, gpointer d) |
959 { | 960 { |
960 g_snprintf(sound_cmd, sizeof(sound_cmd), "%s", gtk_entry_get_text(GTK_ENTRY(sndcmd))); | 961 gaim_sound_set_command(gtk_entry_get_text(GTK_ENTRY(sndcmd))); |
961 return TRUE; | 962 return TRUE; |
962 } | 963 } |
963 #endif | 964 #endif |
964 | 965 |
965 GtkWidget *sound_page() { | 966 GtkWidget *sound_page() { |
968 GtkSizeGroup *sg; | 969 GtkSizeGroup *sg; |
969 #ifndef _WIN32 | 970 #ifndef _WIN32 |
970 GtkWidget *dd; | 971 GtkWidget *dd; |
971 GtkWidget *hbox; | 972 GtkWidget *hbox; |
972 GtkWidget *label; | 973 GtkWidget *label; |
974 char *cmd; | |
973 #endif | 975 #endif |
974 | 976 |
975 ret = gtk_vbox_new(FALSE, 18); | 977 ret = gtk_vbox_new(FALSE, 18); |
976 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); | 978 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); |
977 | 979 |
982 gaim_button(_("_Sounds while away"), &sound_options, OPT_SOUND_WHEN_AWAY, vbox); | 984 gaim_button(_("_Sounds while away"), &sound_options, OPT_SOUND_WHEN_AWAY, vbox); |
983 | 985 |
984 #ifndef _WIN32 | 986 #ifndef _WIN32 |
985 vbox = make_frame (ret, _("Sound Method")); | 987 vbox = make_frame (ret, _("Sound Method")); |
986 dd = gaim_dropdown(vbox, _("_Method"), &sound_options, OPT_SOUND_BEEP | | 988 dd = gaim_dropdown(vbox, _("_Method"), &sound_options, OPT_SOUND_BEEP | |
987 OPT_SOUND_ESD | OPT_SOUND_ARTSC | OPT_SOUND_NAS | OPT_SOUND_NORMAL | | 989 OPT_SOUND_NORMAL | |
988 OPT_SOUND_CMD, | 990 OPT_SOUND_CMD, |
989 _("Console beep"), OPT_SOUND_BEEP, | 991 _("Console beep"), OPT_SOUND_BEEP, |
990 #ifdef ESD_SOUND | 992 #ifdef USE_AO |
991 "ESD", OPT_SOUND_ESD, | 993 _("Automatic"), OPT_SOUND_NORMAL, |
992 #endif | 994 #endif |
993 #ifdef ARTSC_SOUND | |
994 "ArtsC", OPT_SOUND_ARTSC, | |
995 #endif | |
996 #ifdef NAS_SOUND | |
997 "NAS", OPT_SOUND_NAS, | |
998 #endif | |
999 _("Internal"), OPT_SOUND_NORMAL, | |
1000 _("Command"), OPT_SOUND_CMD, NULL); | 995 _("Command"), OPT_SOUND_CMD, NULL); |
1001 gtk_size_group_add_widget(sg, dd); | 996 gtk_size_group_add_widget(sg, dd); |
1002 gtk_misc_set_alignment(GTK_MISC(dd), 0, 0); | 997 gtk_misc_set_alignment(GTK_MISC(dd), 0, 0); |
1003 | 998 |
1004 hbox = gtk_hbox_new(FALSE, 5); | 999 hbox = gtk_hbox_new(FALSE, 5); |
1013 | 1008 |
1014 sndcmd = gtk_entry_new(); | 1009 sndcmd = gtk_entry_new(); |
1015 gtk_label_set_mnemonic_widget(GTK_LABEL(label), sndcmd); | 1010 gtk_label_set_mnemonic_widget(GTK_LABEL(label), sndcmd); |
1016 | 1011 |
1017 gtk_entry_set_editable(GTK_ENTRY(sndcmd), TRUE); | 1012 gtk_entry_set_editable(GTK_ENTRY(sndcmd), TRUE); |
1018 gtk_entry_set_text(GTK_ENTRY(sndcmd), sound_cmd); | 1013 cmd = gaim_sound_get_command(); |
1014 if(cmd) | |
1015 gtk_entry_set_text(GTK_ENTRY(sndcmd), cmd); | |
1019 gtk_widget_set_size_request(sndcmd, 75, -1); | 1016 gtk_widget_set_size_request(sndcmd, 75, -1); |
1020 | 1017 |
1021 gtk_widget_set_sensitive(sndcmd, (sound_options & OPT_SOUND_CMD)); | 1018 gtk_widget_set_sensitive(sndcmd, (sound_options & OPT_SOUND_CMD)); |
1022 gtk_box_pack_start(GTK_BOX(hbox), sndcmd, TRUE, TRUE, 5); | 1019 gtk_box_pack_start(GTK_BOX(hbox), sndcmd, TRUE, TRUE, 5); |
1023 g_signal_connect(GTK_OBJECT(sndcmd), "changed", G_CALLBACK(sound_cmd_yeah), NULL); | 1020 g_signal_connect(GTK_OBJECT(sndcmd), "changed", G_CALLBACK(sound_cmd_yeah), NULL); |
1341 gint soundnum; | 1338 gint soundnum; |
1342 | 1339 |
1343 gtk_tree_model_get_iter (model, &iter, path); | 1340 gtk_tree_model_get_iter (model, &iter, path); |
1344 gtk_tree_model_get (model, &iter, 2, &soundnum, -1); | 1341 gtk_tree_model_get (model, &iter, 2, &soundnum, -1); |
1345 | 1342 |
1346 sound_options ^= sounds[soundnum].opt; | 1343 sound_options ^= gaim_sound_get_event_option(soundnum); |
1347 gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, sound_options & sounds[soundnum].opt, -1); | 1344 gtk_list_store_set (GTK_LIST_STORE (model), &iter, 0, sound_options & gaim_sound_get_event_option(soundnum), -1); |
1348 | 1345 |
1349 gtk_tree_path_free(path); | 1346 gtk_tree_path_free(path); |
1350 } | 1347 } |
1351 | 1348 |
1352 static void test_sound(GtkWidget *button, gpointer i_am_NULL) | 1349 static void test_sound(GtkWidget *button, gpointer i_am_NULL) |
1353 { | 1350 { |
1354 guint32 tmp_sound = sound_options; | 1351 guint32 tmp_sound = sound_options; |
1355 if (!(sound_options & OPT_SOUND_WHEN_AWAY)) | 1352 if (!(sound_options & OPT_SOUND_WHEN_AWAY)) |
1356 sound_options ^= OPT_SOUND_WHEN_AWAY; | 1353 sound_options ^= OPT_SOUND_WHEN_AWAY; |
1357 if (!(sound_options & sounds[sound_row_sel].opt)) | 1354 if (!(sound_options & gaim_sound_get_event_option(sound_row_sel))) |
1358 sound_options ^= sounds[sound_row_sel].opt; | 1355 sound_options ^= gaim_sound_get_event_option(sound_row_sel); |
1359 play_sound(sound_row_sel); | 1356 gaim_sound_play_event(sound_row_sel); |
1360 | 1357 |
1361 sound_options = tmp_sound; | 1358 sound_options = tmp_sound; |
1362 } | 1359 } |
1363 | 1360 |
1364 static void reset_sound(GtkWidget *button, gpointer i_am_also_NULL) | 1361 static void reset_sound(GtkWidget *button, gpointer i_am_also_NULL) |
1365 { | 1362 { |
1366 /* This just resets a sound file back to default */ | 1363 /* This just resets a sound file back to default */ |
1367 if (sound_file[sound_row_sel]) { | 1364 gaim_sound_set_event_file(sound_row_sel, NULL); |
1368 g_free(sound_file[sound_row_sel]); | |
1369 sound_file[sound_row_sel] = NULL; | |
1370 } | |
1371 | 1365 |
1372 gtk_entry_set_text(GTK_ENTRY(sound_entry), "(default)"); | 1366 gtk_entry_set_text(GTK_ENTRY(sound_entry), "(default)"); |
1373 } | 1367 } |
1374 | 1368 |
1375 void close_sounddialog(GtkWidget *w, GtkWidget *w2) | 1369 void close_sounddialog(GtkWidget *w, GtkWidget *w2) |
1395 | 1389 |
1396 /* If they type in a directory, change there */ | 1390 /* If they type in a directory, change there */ |
1397 if (file_is_dir(file, sounddialog)) | 1391 if (file_is_dir(file, sounddialog)) |
1398 return; | 1392 return; |
1399 | 1393 |
1400 /* Let's just be safe */ | |
1401 if (sound_file[snd]) | |
1402 g_free(sound_file[snd]); | |
1403 | |
1404 /* Set it -- and forget it */ | 1394 /* Set it -- and forget it */ |
1405 sound_file[snd] = g_strdup(file); | 1395 gaim_sound_set_event_file(snd, file); |
1406 | 1396 |
1407 /* Set our text entry */ | 1397 /* Set our text entry */ |
1408 gtk_entry_set_text(GTK_ENTRY(sound_entry), sound_file[snd]); | 1398 gtk_entry_set_text(GTK_ENTRY(sound_entry), file); |
1409 | 1399 |
1410 /* Close the window! It's getting cold in here! */ | 1400 /* Close the window! It's getting cold in here! */ |
1411 close_sounddialog(NULL, sounddialog); | 1401 close_sounddialog(NULL, sounddialog); |
1412 | 1402 |
1413 if (last_sound_dir) | 1403 if (last_sound_dir) |
1414 g_free(last_sound_dir); | 1404 g_free(last_sound_dir); |
1415 last_sound_dir = g_dirname(sound_file[snd]); | 1405 last_sound_dir = g_dirname(file); |
1416 } | 1406 } |
1417 | 1407 |
1418 static void sel_sound(GtkWidget *button, gpointer being_NULL_is_fun) | 1408 static void sel_sound(GtkWidget *button, gpointer being_NULL_is_fun) |
1419 { | 1409 { |
1420 char *buf = g_malloc(BUF_LEN); | 1410 char *buf = g_malloc(BUF_LEN); |
1445 | 1435 |
1446 | 1436 |
1447 static void prefs_sound_sel (GtkTreeSelection *sel, GtkTreeModel *model) { | 1437 static void prefs_sound_sel (GtkTreeSelection *sel, GtkTreeModel *model) { |
1448 GtkTreeIter iter; | 1438 GtkTreeIter iter; |
1449 GValue val = { 0, }; | 1439 GValue val = { 0, }; |
1440 char *file; | |
1450 | 1441 |
1451 if (! gtk_tree_selection_get_selected (sel, &model, &iter)) | 1442 if (! gtk_tree_selection_get_selected (sel, &model, &iter)) |
1452 return; | 1443 return; |
1453 gtk_tree_model_get_value (model, &iter, 2, &val); | 1444 gtk_tree_model_get_value (model, &iter, 2, &val); |
1454 sound_row_sel = g_value_get_uint(&val); | 1445 sound_row_sel = g_value_get_uint(&val); |
1446 file = gaim_sound_get_event_file(sound_row_sel); | |
1455 if (sound_entry) | 1447 if (sound_entry) |
1456 gtk_entry_set_text(GTK_ENTRY(sound_entry), sound_file[sound_row_sel] ? sound_file[sound_row_sel] : "(default)"); | 1448 gtk_entry_set_text(GTK_ENTRY(sound_entry), file ? file : "(default)"); |
1457 g_value_unset (&val); | 1449 g_value_unset (&val); |
1458 if (sounddialog) | 1450 if (sounddialog) |
1459 gtk_widget_destroy(sounddialog); | 1451 gtk_widget_destroy(sounddialog); |
1460 } | 1452 } |
1461 | 1453 |
1470 GtkCellRenderer *rend; | 1462 GtkCellRenderer *rend; |
1471 GtkTreeViewColumn *col; | 1463 GtkTreeViewColumn *col; |
1472 GtkTreeSelection *sel; | 1464 GtkTreeSelection *sel; |
1473 GtkTreePath *path; | 1465 GtkTreePath *path; |
1474 int j; | 1466 int j; |
1467 char *file; | |
1475 | 1468 |
1476 ret = gtk_vbox_new(FALSE, 18); | 1469 ret = gtk_vbox_new(FALSE, 18); |
1477 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); | 1470 gtk_container_set_border_width (GTK_CONTAINER (ret), 12); |
1478 | 1471 |
1479 sw = gtk_scrolled_window_new(NULL,NULL); | 1472 sw = gtk_scrolled_window_new(NULL,NULL); |
1481 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); | 1474 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); |
1482 | 1475 |
1483 gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0); | 1476 gtk_box_pack_start(GTK_BOX(ret), sw, TRUE, TRUE, 0); |
1484 event_store = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_UINT); | 1477 event_store = gtk_list_store_new (3, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_UINT); |
1485 | 1478 |
1486 for (j=0; j < NUM_SOUNDS; j++) { | 1479 for (j=0; j < GAIM_NUM_SOUNDS; j++) { |
1487 if (sounds[j].opt == 0) | 1480 guint opt = gaim_sound_get_event_option(j); |
1481 if (opt == 0) | |
1488 continue; | 1482 continue; |
1489 | 1483 |
1490 gtk_list_store_append (event_store, &iter); | 1484 gtk_list_store_append (event_store, &iter); |
1491 gtk_list_store_set(event_store, &iter, | 1485 gtk_list_store_set(event_store, &iter, |
1492 0, sound_options & sounds[j].opt, | 1486 0, sound_options & opt, |
1493 1, gettext(sounds[j].label), | 1487 1, gettext(gaim_sound_get_event_label(j)), |
1494 2, j, -1); | 1488 2, j, -1); |
1495 } | 1489 } |
1496 | 1490 |
1497 event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(event_store)); | 1491 event_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(event_store)); |
1498 | 1492 |
1523 gtk_container_add(GTK_CONTAINER(sw), event_view); | 1517 gtk_container_add(GTK_CONTAINER(sw), event_view); |
1524 | 1518 |
1525 hbox = gtk_hbox_new(FALSE, 6); | 1519 hbox = gtk_hbox_new(FALSE, 6); |
1526 gtk_box_pack_start(GTK_BOX(ret), hbox, FALSE, FALSE, 0); | 1520 gtk_box_pack_start(GTK_BOX(ret), hbox, FALSE, FALSE, 0); |
1527 sound_entry = gtk_entry_new(); | 1521 sound_entry = gtk_entry_new(); |
1528 gtk_entry_set_text(GTK_ENTRY(sound_entry), sound_file[0] ? sound_file[0] : "(default)"); | 1522 file = gaim_sound_get_event_file(0); |
1523 gtk_entry_set_text(GTK_ENTRY(sound_entry), file ? file : "(default)"); | |
1529 gtk_entry_set_editable(GTK_ENTRY(sound_entry), FALSE); | 1524 gtk_entry_set_editable(GTK_ENTRY(sound_entry), FALSE); |
1530 gtk_box_pack_start(GTK_BOX(hbox), sound_entry, FALSE, FALSE, 5); | 1525 gtk_box_pack_start(GTK_BOX(hbox), sound_entry, FALSE, FALSE, 5); |
1531 | 1526 |
1532 button = gtk_button_new_with_label(_("Test")); | 1527 button = gtk_button_new_with_label(_("Test")); |
1533 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(test_sound), NULL); | 1528 g_signal_connect(GTK_OBJECT(button), "clicked", G_CALLBACK(test_sound), NULL); |