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);