Mercurial > pidgin.yaz
comparison finch/gntsound.c @ 19146:5ff1231993af
Added sound profiles
author | Eric Polino <aluink@pidgin.im> |
---|---|
date | Tue, 10 Jul 2007 16:10:06 +0000 |
parents | 3bec25803a00 |
children | 5a6f174bf6dd |
comparison
equal
deleted
inserted
replaced
19144:0e30dfac1f46 | 19146:5ff1231993af |
---|---|
69 GntWidget *while_status; | 69 GntWidget *while_status; |
70 GntWidget *volume; | 70 GntWidget *volume; |
71 GntWidget *events; | 71 GntWidget *events; |
72 GntWidget *window; | 72 GntWidget *window; |
73 GntWidget *selector; | 73 GntWidget *selector; |
74 GntWidget *profiles; | |
74 } SoundPrefDialog; | 75 } SoundPrefDialog; |
75 | 76 |
76 SoundPrefDialog *pref_dialog; | 77 SoundPrefDialog *pref_dialog; |
77 | 78 |
78 #define PLAY_SOUND_TIMEOUT 15000 | 79 #define PLAY_SOUND_TIMEOUT 15000 |
79 | 80 |
80 static guint mute_login_sounds_timeout = 0; | 81 static guint mute_login_sounds_timeout = 0; |
81 static gboolean mute_login_sounds = FALSE; | 82 static gboolean mute_login_sounds = FALSE; |
83 static gchar * pref_string = NULL; | |
82 | 84 |
83 #ifdef USE_GSTREAMER | 85 #ifdef USE_GSTREAMER |
84 static gboolean gst_init_failed; | 86 static gboolean gst_init_failed; |
85 #endif /* USE_GSTREAMER */ | 87 #endif /* USE_GSTREAMER */ |
86 | 88 |
96 {PURPLE_SOUND_CHAT_SAY, N_("Others talk in chat"), "chat_msg_recv", "receive.wav",NULL}, | 98 {PURPLE_SOUND_CHAT_SAY, N_("Others talk in chat"), "chat_msg_recv", "receive.wav",NULL}, |
97 {PURPLE_SOUND_POUNCE_DEFAULT, NULL, "pounce_default", "alert.wav",NULL}, | 99 {PURPLE_SOUND_POUNCE_DEFAULT, NULL, "pounce_default", "alert.wav",NULL}, |
98 {PURPLE_SOUND_CHAT_NICK, N_("Someone says your screen name in chat"), "nick_said", "alert.wav",NULL} | 100 {PURPLE_SOUND_CHAT_NICK, N_("Someone says your screen name in chat"), "nick_said", "alert.wav",NULL} |
99 }; | 101 }; |
100 | 102 |
103 const char * | |
104 finch_sound_get_active_profile() | |
105 { | |
106 return purple_prefs_get_string(FINCH_PREFS_ROOT "/sound/actprofile"); | |
107 } | |
108 | |
109 /* This method creates a pref name based on the current active profile. | |
110 * So if "Home" is the current active profile the pref name | |
111 * [FINCH_PREFS_ROOT "/sound/profiles/Home/$NAME"] is created. | |
112 */ | |
113 static gchar * | |
114 make_pref(const char *name) | |
115 { | |
116 g_free(pref_string); | |
117 pref_string = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s%s",finch_sound_get_active_profile(),name); | |
118 return pref_string; | |
119 } | |
120 | |
121 | |
101 static gboolean | 122 static gboolean |
102 unmute_login_sounds_cb(gpointer data) | 123 unmute_login_sounds_cb(gpointer data) |
103 { | 124 { |
104 mute_login_sounds = FALSE; | 125 mute_login_sounds = FALSE; |
105 mute_login_sounds_timeout = 0; | 126 mute_login_sounds_timeout = 0; |
145 | 166 |
146 gntconv = FINCH_CONV(conv); | 167 gntconv = FINCH_CONV(conv); |
147 | 168 |
148 has_focus = purple_conversation_has_focus(conv); | 169 has_focus = purple_conversation_has_focus(conv); |
149 | 170 |
150 if (has_focus && !purple_prefs_get_bool(FINCH_PREFS_ROOT "/sound/conv_focus")) | 171 if (has_focus && !purple_prefs_get_bool(make_pref("/conv_focus"))) |
151 { | 172 { |
152 return; | 173 return; |
153 } | 174 } |
154 } | 175 } |
155 | 176 |
278 finch_sound_get_handle() | 299 finch_sound_get_handle() |
279 { | 300 { |
280 static int handle; | 301 static int handle; |
281 | 302 |
282 return &handle; | 303 return &handle; |
304 } | |
305 | |
306 | |
307 /* This gets called when the active profile changes */ | |
308 static void | |
309 load_profile(const char *name, PurplePrefType type, gconstpointer val, gpointer null) | |
310 { | |
311 if(!purple_prefs_exists(make_pref(""))){ | |
312 purple_prefs_add_none(make_pref("")); | |
313 purple_prefs_add_none(make_pref("/enabled")); | |
314 purple_prefs_add_none(make_pref("/file")); | |
315 purple_prefs_add_bool(make_pref("/enabled/login"), TRUE); | |
316 purple_prefs_add_path(make_pref("/file/login"), ""); | |
317 purple_prefs_add_bool(make_pref("/enabled/logout"), TRUE); | |
318 purple_prefs_add_path(make_pref("/file/logout"), ""); | |
319 purple_prefs_add_bool(make_pref("/enabled/im_recv"), TRUE); | |
320 purple_prefs_add_path(make_pref("/file/im_recv"), ""); | |
321 purple_prefs_add_bool(make_pref("/enabled/first_im_recv"), FALSE); | |
322 purple_prefs_add_path(make_pref("/file/first_im_recv"), ""); | |
323 purple_prefs_add_bool(make_pref("/enabled/send_im"), TRUE); | |
324 purple_prefs_add_path(make_pref("/file/send_im"), ""); | |
325 purple_prefs_add_bool(make_pref("/enabled/join_chat"), FALSE); | |
326 purple_prefs_add_path(make_pref("/file/join_chat"), ""); | |
327 purple_prefs_add_bool(make_pref("/enabled/left_chat"), FALSE); | |
328 purple_prefs_add_path(make_pref("/file/left_chat"), ""); | |
329 purple_prefs_add_bool(make_pref("/enabled/send_chat_msg"), FALSE); | |
330 purple_prefs_add_path(make_pref("/file/send_chat_msg"), ""); | |
331 purple_prefs_add_bool(make_pref("/enabled/chat_msg_recv"), FALSE); | |
332 purple_prefs_add_path(make_pref("/file/chat_msg_recv"), ""); | |
333 purple_prefs_add_bool(make_pref("/enabled/nick_said"), FALSE); | |
334 purple_prefs_add_path(make_pref("/file/nick_said"), ""); | |
335 purple_prefs_add_bool(make_pref("/enabled/pounce_default"), TRUE); | |
336 purple_prefs_add_path(make_pref("/file/pounce_default"), ""); | |
337 purple_prefs_add_bool(make_pref("/conv_focus"), TRUE); | |
338 purple_prefs_add_bool(make_pref("/mute"), FALSE); | |
339 purple_prefs_add_path(make_pref("/command"), ""); | |
340 purple_prefs_add_string(make_pref("/method"), "automatic"); | |
341 purple_prefs_add_int(make_pref("/volume"), 50); | |
342 } | |
283 } | 343 } |
284 | 344 |
285 static void | 345 static void |
286 finch_sound_init(void) | 346 finch_sound_init(void) |
287 { | 347 { |
295 purple_signal_connect(purple_connections_get_handle(), "signed-on", | 355 purple_signal_connect(purple_connections_get_handle(), "signed-on", |
296 gnt_sound_handle, PURPLE_CALLBACK(account_signon_cb), | 356 gnt_sound_handle, PURPLE_CALLBACK(account_signon_cb), |
297 NULL); | 357 NULL); |
298 | 358 |
299 purple_prefs_add_none(FINCH_PREFS_ROOT "/sound"); | 359 purple_prefs_add_none(FINCH_PREFS_ROOT "/sound"); |
300 purple_prefs_add_none(FINCH_PREFS_ROOT "/sound/enabled"); | 360 purple_prefs_add_string(FINCH_PREFS_ROOT "/sound/actprofile", "default"); |
301 purple_prefs_add_none(FINCH_PREFS_ROOT "/sound/file"); | 361 purple_prefs_add_none(FINCH_PREFS_ROOT "/sound/profiles"); |
302 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/login", TRUE); | 362 |
303 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/login", ""); | 363 purple_prefs_connect_callback(gnt_sound_handle,FINCH_PREFS_ROOT "/sound/actprofile",load_profile,NULL); |
304 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/logout", TRUE); | 364 purple_prefs_trigger_callback(FINCH_PREFS_ROOT "/sound/actprofile"); |
305 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/logout", ""); | 365 |
306 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/im_recv", TRUE); | 366 |
307 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/im_recv", ""); | |
308 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/first_im_recv", FALSE); | |
309 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/first_im_recv", ""); | |
310 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/send_im", TRUE); | |
311 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/send_im", ""); | |
312 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/join_chat", FALSE); | |
313 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/join_chat", ""); | |
314 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/left_chat", FALSE); | |
315 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/left_chat", ""); | |
316 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/send_chat_msg", FALSE); | |
317 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/send_chat_msg", ""); | |
318 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/chat_msg_recv", FALSE); | |
319 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/chat_msg_recv", ""); | |
320 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/nick_said", FALSE); | |
321 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/nick_said", ""); | |
322 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/enabled/pounce_default", TRUE); | |
323 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/file/pounce_default", ""); | |
324 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/conv_focus", TRUE); | |
325 purple_prefs_add_bool(FINCH_PREFS_ROOT "/sound/mute", FALSE); | |
326 purple_prefs_add_path(FINCH_PREFS_ROOT "/sound/command", ""); | |
327 purple_prefs_add_string(FINCH_PREFS_ROOT "/sound/method", "automatic"); | |
328 purple_prefs_add_int(FINCH_PREFS_ROOT "/sound/volume", 50); | |
329 | |
330 #ifdef USE_GSTREAMER | 367 #ifdef USE_GSTREAMER |
331 purple_debug_info("sound", "Initializing sound output drivers.\n"); | 368 purple_debug_info("sound", "Initializing sound output drivers.\n"); |
332 if ((gst_init_failed = !gst_init_check(NULL, NULL, &error))) { | 369 if ((gst_init_failed = !gst_init_check(NULL, NULL, &error))) { |
333 purple_notify_error(NULL, _("GStreamer Failure"), | 370 purple_notify_error(NULL, _("GStreamer Failure"), |
334 _("GStreamer failed to initialize."), | 371 _("GStreamer failed to initialize."), |
415 char *uri; | 452 char *uri; |
416 GstElement *sink = NULL; | 453 GstElement *sink = NULL; |
417 GstElement *play = NULL; | 454 GstElement *play = NULL; |
418 GstBus *bus = NULL; | 455 GstBus *bus = NULL; |
419 #endif | 456 #endif |
420 if (purple_prefs_get_bool(FINCH_PREFS_ROOT "/sound/mute")) | 457 if (purple_prefs_get_bool(make_pref("/mute"))) |
421 return; | 458 return; |
422 | 459 |
423 method = purple_prefs_get_string(FINCH_PREFS_ROOT "/sound/method"); | 460 method = purple_prefs_get_string(make_pref("/method")); |
424 | 461 |
425 if (!strcmp(method, "none")) { | 462 if (!strcmp(method, "none")) { |
426 return; | 463 return; |
427 } else if (!strcmp(method, "beep")) { | 464 } else if (!strcmp(method, "beep")) { |
428 beep(); | 465 beep(); |
439 const char *sound_cmd; | 476 const char *sound_cmd; |
440 char *command; | 477 char *command; |
441 char *esc_filename; | 478 char *esc_filename; |
442 GError *error = NULL; | 479 GError *error = NULL; |
443 | 480 |
444 sound_cmd = purple_prefs_get_path(FINCH_PREFS_ROOT "/sound/command"); | 481 sound_cmd = purple_prefs_get_path(make_pref("/command")); |
445 | 482 |
446 if (!sound_cmd || *sound_cmd == '\0') { | 483 if (!sound_cmd || *sound_cmd == '\0') { |
447 purple_debug_error("gntsound", | 484 purple_debug_error("gntsound", |
448 "'Command' sound method has been chosen, " | 485 "'Command' sound method has been chosen, " |
449 "but no command has been set."); | 486 "but no command has been set."); |
467 return; | 504 return; |
468 } | 505 } |
469 #ifdef USE_GSTREAMER | 506 #ifdef USE_GSTREAMER |
470 if (gst_init_failed) /* Perhaps do beep instead? */ | 507 if (gst_init_failed) /* Perhaps do beep instead? */ |
471 return; | 508 return; |
472 volume = (float)(CLAMP(purple_prefs_get_int(FINCH_PREFS_ROOT "/sound/volume"),0,100)) / 50; | 509 volume = (float)(CLAMP(purple_prefs_get_int(make_pref("/volume")),0,100)) / 50; |
473 if (!strcmp(method, "automatic")) { | 510 if (!strcmp(method, "automatic")) { |
474 if (purple_running_gnome()) { | 511 if (purple_running_gnome()) { |
475 sink = gst_element_factory_make("gconfaudiosink", "sink"); | 512 sink = gst_element_factory_make("gconfaudiosink", "sink"); |
476 } | 513 } |
477 if (!sink) | 514 if (!sink) |
551 if (event >= PURPLE_NUM_SOUNDS) { | 588 if (event >= PURPLE_NUM_SOUNDS) { |
552 purple_debug_error("sound", "got request for unknown sound: %d\n", event); | 589 purple_debug_error("sound", "got request for unknown sound: %d\n", event); |
553 return; | 590 return; |
554 } | 591 } |
555 | 592 |
556 enable_pref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/enabled/%s", | 593 enable_pref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/enabled/%s", |
594 finch_sound_get_active_profile(), | |
557 sounds[event].pref); | 595 sounds[event].pref); |
558 file_pref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/file/%s", sounds[event].pref); | 596 file_pref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/file/%s", finch_sound_get_active_profile(),sounds[event].pref); |
559 | 597 |
560 /* check NULL for sounds that don't have an option, ie buddy pounce */ | 598 /* check NULL for sounds that don't have an option, ie buddy pounce */ |
561 if (purple_prefs_get_bool(enable_pref)) { | 599 if (purple_prefs_get_bool(enable_pref)) { |
562 char *filename = g_strdup(purple_prefs_get_path(file_pref)); | 600 char *filename = g_strdup(purple_prefs_get_path(file_pref)); |
563 if(!filename || !strlen(filename)) { | 601 if(!filename || !strlen(filename)) { |
572 | 610 |
573 g_free(enable_pref); | 611 g_free(enable_pref); |
574 g_free(file_pref); | 612 g_free(file_pref); |
575 } | 613 } |
576 | 614 |
615 GList * | |
616 finch_sound_get_profiles() | |
617 { | |
618 return purple_prefs_get_children_names(FINCH_PREFS_ROOT "/sound/profiles"); | |
619 } | |
620 | |
621 static gboolean | |
622 profile_exists(const char *name) | |
623 { | |
624 GList *itr = NULL; | |
625 for(itr = finch_sound_get_profiles();itr;itr = itr->next){ | |
626 if(!strcmp(itr->data,name)) | |
627 return TRUE; | |
628 } | |
629 return FALSE; | |
630 } | |
631 | |
632 void | |
633 finch_sound_set_active_profile(const char *name) | |
634 { | |
635 if(profile_exists(name)){ | |
636 purple_prefs_set_string(FINCH_PREFS_ROOT "/sound/actprofile",name); | |
637 } | |
638 } | |
639 | |
640 | |
577 static void | 641 static void |
578 save_cb(GntWidget *button, gpointer win) | 642 save_cb(GntWidget *button, gpointer win) |
579 { | 643 { |
580 GList * itr; | 644 GList * itr; |
581 | 645 |
582 purple_prefs_set_string(FINCH_PREFS_ROOT "/sound/method", gnt_combo_box_get_selected_data(GNT_COMBO_BOX(pref_dialog->method))); | 646 purple_prefs_set_string(make_pref("/method"), gnt_combo_box_get_selected_data(GNT_COMBO_BOX(pref_dialog->method))); |
583 purple_prefs_set_path(FINCH_PREFS_ROOT "/sound/command", gnt_entry_get_text(GNT_ENTRY(pref_dialog->command))); | 647 purple_prefs_set_path(make_pref("/command"), gnt_entry_get_text(GNT_ENTRY(pref_dialog->command))); |
584 purple_prefs_set_bool(FINCH_PREFS_ROOT "/sound/conv_focus",gnt_check_box_get_checked(GNT_CHECK_BOX(pref_dialog->conv_focus))); | 648 purple_prefs_set_bool(make_pref("/conv_focus"),gnt_check_box_get_checked(GNT_CHECK_BOX(pref_dialog->conv_focus))); |
585 purple_prefs_set_int("/purple/sound/while_status",GPOINTER_TO_INT(gnt_combo_box_get_selected_data(GNT_COMBO_BOX(pref_dialog->while_status)))); | 649 purple_prefs_set_int("/purple/sound/while_status",GPOINTER_TO_INT(gnt_combo_box_get_selected_data(GNT_COMBO_BOX(pref_dialog->while_status)))); |
586 purple_prefs_set_int(FINCH_PREFS_ROOT "/sound/volume",gnt_slider_get_value(GNT_SLIDER(pref_dialog->volume))); | 650 purple_prefs_set_int(make_pref("/volume"),gnt_slider_get_value(GNT_SLIDER(pref_dialog->volume))); |
587 | 651 |
588 for(itr = gnt_tree_get_rows(GNT_TREE(pref_dialog->events));itr;itr = itr->next){ | 652 for(itr = gnt_tree_get_rows(GNT_TREE(pref_dialog->events));itr;itr = itr->next){ |
589 FinchSoundEvent * event = &sounds[GPOINTER_TO_INT(itr->data)]; | 653 FinchSoundEvent * event = &sounds[GPOINTER_TO_INT(itr->data)]; |
590 char * filepref = g_strdup_printf("%s/sound/file/%s",FINCH_PREFS_ROOT,event->pref); | 654 char * filepref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/file/%s",finch_sound_get_active_profile(),event->pref); |
591 char * boolpref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/enabled/%s",event->pref); | 655 char * boolpref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/enabled/%s",finch_sound_get_active_profile(),event->pref); |
592 purple_prefs_set_bool(boolpref,gnt_tree_get_choice(GNT_TREE(pref_dialog->events),itr->data)); | 656 purple_prefs_set_bool(boolpref,gnt_tree_get_choice(GNT_TREE(pref_dialog->events),itr->data)); |
593 purple_prefs_set_path(filepref,event->file ? event->file : ""); | 657 purple_prefs_set_path(filepref,event->file ? event->file : ""); |
594 g_free(filepref); | 658 g_free(filepref); |
595 g_free(boolpref); | 659 g_free(boolpref); |
596 } | 660 } |
616 PurpleSoundEventID id = GPOINTER_TO_INT(gnt_tree_get_selection_data(GNT_TREE(pref_dialog->events))); | 680 PurpleSoundEventID id = GPOINTER_TO_INT(gnt_tree_get_selection_data(GNT_TREE(pref_dialog->events))); |
617 FinchSoundEvent * event = &sounds[id]; | 681 FinchSoundEvent * event = &sounds[id]; |
618 char *pref; | 682 char *pref; |
619 gboolean temp_value; | 683 gboolean temp_value; |
620 | 684 |
621 pref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/enabled/%s", | 685 pref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/enabled/%s",finch_sound_get_active_profile(), |
622 event->pref); | 686 event->pref); |
623 | 687 |
624 temp_value = purple_prefs_get_bool(pref); | 688 temp_value = purple_prefs_get_bool(pref); |
625 | 689 |
626 if (!temp_value) purple_prefs_set_bool(pref, TRUE); | 690 if (!temp_value) purple_prefs_set_bool(pref, TRUE); |
640 | 704 |
641 FinchSoundEvent * event = &sounds[GPOINTER_TO_INT(key)]; | 705 FinchSoundEvent * event = &sounds[GPOINTER_TO_INT(key)]; |
642 g_free(event->file); | 706 g_free(event->file); |
643 event->file = NULL; | 707 event->file = NULL; |
644 gnt_tree_change_text(GNT_TREE(pref_dialog->events),key,1,"(default)"); | 708 gnt_tree_change_text(GNT_TREE(pref_dialog->events),key,1,"(default)"); |
709 } | |
710 | |
711 static void | |
712 pref_load_cb(GntWidget *button, gpointer null) | |
713 { | |
714 | |
715 const gchar * value = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(pref_dialog->profiles)); | |
716 | |
717 purple_prefs_set_string(FINCH_PREFS_ROOT "/sound/actprofile",value); | |
718 | |
719 } | |
720 | |
721 static void | |
722 pref_save_cb(GntWidget *button, gpointer null) | |
723 { | |
724 | |
645 } | 725 } |
646 | 726 |
647 static void | 727 static void |
648 choose_cb(GntWidget *button, gpointer null) | 728 choose_cb(GntWidget *button, gpointer null) |
649 { | 729 { |
684 gnt_widget_destroy(pref_dialog->selector); | 764 gnt_widget_destroy(pref_dialog->selector); |
685 g_free(pref_dialog); | 765 g_free(pref_dialog); |
686 pref_dialog = NULL; | 766 pref_dialog = NULL; |
687 } | 767 } |
688 | 768 |
769 static void | |
770 reload_pref_window(GntComboBox *box, gpointer oldkey, gpointer newkey, gpointer null) | |
771 { | |
772 gint i; | |
773 purple_prefs_set_string(FINCH_PREFS_ROOT "/sound/actprofile",(gchar *)newkey); | |
774 gnt_combo_box_set_selected(GNT_COMBO_BOX(pref_dialog->method),(gchar *)purple_prefs_get_string(make_pref("/method"))); | |
775 gnt_entry_set_text(GNT_ENTRY(pref_dialog->command),purple_prefs_get_path(make_pref("/command"))); | |
776 gnt_check_box_set_checked(GNT_CHECK_BOX(pref_dialog->conv_focus),purple_prefs_get_bool(make_pref("/conv_focus"))); | |
777 gnt_combo_box_set_selected(GNT_COMBO_BOX(pref_dialog->while_status),GINT_TO_POINTER(purple_prefs_get_int("/purple" "/sound/while_status"))); | |
778 gnt_slider_set_value(GNT_SLIDER(pref_dialog->volume),CLAMP(purple_prefs_get_int(make_pref("/volume")),0,100)); | |
779 for(i = 0;i < PURPLE_NUM_SOUNDS;i++){ | |
780 FinchSoundEvent * event = &sounds[i]; | |
781 gchar *boolpref; | |
782 gchar *filepref; | |
783 const char * profile = finch_sound_get_active_profile(); | |
784 | |
785 boolpref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/enabled/%s",profile,event->pref); | |
786 | |
787 filepref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/profiles/%s/file/%s",profile,event->pref); | |
788 event->file = g_strdup(purple_prefs_get_path(filepref)); | |
789 if(event->label == NULL){ | |
790 continue; | |
791 } | |
792 | |
793 gnt_tree_change_text(GNT_TREE(pref_dialog->events),GINT_TO_POINTER(i),0,event->label); | |
794 gnt_tree_change_text(GNT_TREE(pref_dialog->events),GINT_TO_POINTER(i),1,event->file[0] ? g_path_get_basename(event->file) : "(default)"); | |
795 gnt_tree_set_choice(GNT_TREE(pref_dialog->events),GINT_TO_POINTER(i),purple_prefs_get_bool(boolpref)); | |
796 g_free(boolpref); | |
797 g_free(filepref); | |
798 } | |
799 } | |
800 | |
689 void | 801 void |
690 finch_sounds_show_all(void) | 802 finch_sounds_show_all(void) |
691 { | 803 { |
692 GntWidget *box; | 804 GntWidget *box; GntWidget *cmbox; GntWidget *slider; |
693 GntWidget *cmbox; | |
694 GntWidget *slider; | |
695 GntWidget *entry; | 805 GntWidget *entry; |
696 GntWidget *chkbox; | 806 GntWidget *chkbox; |
697 GntWidget *button; | 807 GntWidget *button; |
698 GntWidget *label; | 808 GntWidget *label; |
699 GntWidget *tree; | 809 GntWidget *tree; |
700 GntWidget *win; | 810 GntWidget *win; |
701 | 811 |
812 GList *itr,*list; | |
702 gint i; | 813 gint i; |
703 | 814 |
704 if(pref_dialog){ | 815 if(pref_dialog){ |
705 gnt_window_present(pref_dialog->window); | 816 gnt_window_present(pref_dialog->window); |
706 return; | 817 return; |
707 } | 818 } |
708 | |
709 | 819 |
710 pref_dialog = g_new0(SoundPrefDialog,1); | 820 pref_dialog = g_new0(SoundPrefDialog,1); |
711 | 821 |
712 pref_dialog->window = win = gnt_window_box_new(FALSE,TRUE); | 822 pref_dialog->window = win = gnt_window_box_new(FALSE,TRUE); |
713 gnt_box_set_pad(GNT_BOX(win),0); | 823 gnt_box_set_pad(GNT_BOX(win),0); |
722 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"alsa","ALSA"); | 832 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"alsa","ALSA"); |
723 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"esd","ESD"); | 833 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"esd","ESD"); |
724 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"beep",_("Console Beep")); | 834 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"beep",_("Console Beep")); |
725 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"custom",_("Command")); | 835 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"custom",_("Command")); |
726 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"nosound",_("No Sound")); | 836 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"nosound",_("No Sound")); |
727 gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),(gchar *)purple_prefs_get_string(FINCH_PREFS_ROOT "/sound/method")); | |
728 | 837 |
729 label = gnt_label_new_with_format(_("Sound Method"),GNT_TEXT_FLAG_BOLD); | 838 label = gnt_label_new_with_format(_("Sound Method"),GNT_TEXT_FLAG_BOLD); |
730 gnt_box_add_widget(GNT_BOX(win),label); | 839 gnt_box_add_widget(GNT_BOX(win),label); |
731 box = gnt_hbox_new(TRUE); | 840 box = gnt_hbox_new(TRUE); |
732 gnt_box_set_fill(GNT_BOX(box),FALSE); | 841 gnt_box_set_fill(GNT_BOX(box),FALSE); |
737 | 846 |
738 box = gnt_hbox_new(TRUE); | 847 box = gnt_hbox_new(TRUE); |
739 gnt_box_set_pad(GNT_BOX(box),0); | 848 gnt_box_set_pad(GNT_BOX(box),0); |
740 gnt_box_set_fill(GNT_BOX(box),FALSE); | 849 gnt_box_set_fill(GNT_BOX(box),FALSE); |
741 gnt_box_add_widget(GNT_BOX(box),gnt_label_new(_("Sound Command\n(%s for filename)"))); | 850 gnt_box_add_widget(GNT_BOX(box),gnt_label_new(_("Sound Command\n(%s for filename)"))); |
742 pref_dialog->command = entry = gnt_entry_new(purple_prefs_get_path(FINCH_PREFS_ROOT "/sound/command")); | 851 pref_dialog->command = entry = gnt_entry_new(""); |
743 gnt_box_add_widget(GNT_BOX(box),entry); | 852 gnt_box_add_widget(GNT_BOX(box),entry); |
744 gnt_box_add_widget(GNT_BOX(win),box); | 853 gnt_box_add_widget(GNT_BOX(win),box); |
745 | 854 |
746 gnt_box_add_widget(GNT_BOX(win), gnt_line_new(FALSE)); | 855 gnt_box_add_widget(GNT_BOX(win), gnt_line_new(FALSE)); |
747 | 856 |
748 gnt_box_add_widget(GNT_BOX(win),gnt_label_new_with_format(_("Sound Options"),GNT_TEXT_FLAG_BOLD)); | 857 gnt_box_add_widget(GNT_BOX(win),gnt_label_new_with_format(_("Sound Options"),GNT_TEXT_FLAG_BOLD)); |
749 pref_dialog->conv_focus = chkbox = gnt_check_box_new(_("Sounds when conversation has focus")); | 858 pref_dialog->conv_focus = chkbox = gnt_check_box_new(_("Sounds when conversation has focus")); |
750 gnt_check_box_set_checked(GNT_CHECK_BOX(chkbox),purple_prefs_get_bool(FINCH_PREFS_ROOT "/sound/conv_focus")); | |
751 gnt_box_add_widget(GNT_BOX(win),chkbox); | 859 gnt_box_add_widget(GNT_BOX(win),chkbox); |
752 | 860 |
753 box = gnt_hbox_new(TRUE); | 861 box = gnt_hbox_new(TRUE); |
754 gnt_box_set_pad(GNT_BOX(box),0); | 862 gnt_box_set_pad(GNT_BOX(box),0); |
755 gnt_box_set_fill(GNT_BOX(box),FALSE); | 863 gnt_box_set_fill(GNT_BOX(box),FALSE); |
756 gnt_box_add_widget(GNT_BOX(box),gnt_label_new("Enable Sounds:")); | 864 gnt_box_add_widget(GNT_BOX(box),gnt_label_new("Enable Sounds:")); |
757 pref_dialog->while_status = cmbox = gnt_combo_box_new(); | 865 pref_dialog->while_status = cmbox = gnt_combo_box_new(); |
758 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),GINT_TO_POINTER(3),_("Always")); | 866 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),GINT_TO_POINTER(3),_("Always")); |
759 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),GINT_TO_POINTER(1),_("Only when available")); | 867 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),GINT_TO_POINTER(1),_("Only when available")); |
760 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),GINT_TO_POINTER(2),_("Only when not available")); | 868 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),GINT_TO_POINTER(2),_("Only when not available")); |
761 gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),GINT_TO_POINTER(purple_prefs_get_int("/purple" "/sound/while_status"))); | |
762 gnt_box_add_widget(GNT_BOX(box),cmbox); | 869 gnt_box_add_widget(GNT_BOX(box),cmbox); |
763 gnt_box_add_widget(GNT_BOX(win),box); | 870 gnt_box_add_widget(GNT_BOX(win),box); |
764 | 871 |
765 box = gnt_hbox_new(TRUE); | 872 box = gnt_hbox_new(TRUE); |
766 gnt_box_set_pad(GNT_BOX(box),0); | 873 gnt_box_set_pad(GNT_BOX(box),0); |
769 | 876 |
770 pref_dialog->volume = slider = gnt_slider_new(FALSE,100,0); | 877 pref_dialog->volume = slider = gnt_slider_new(FALSE,100,0); |
771 gnt_slider_set_step(GNT_SLIDER(slider),5); | 878 gnt_slider_set_step(GNT_SLIDER(slider),5); |
772 label = gnt_label_new(""); | 879 label = gnt_label_new(""); |
773 gnt_slider_reflect_label(GNT_SLIDER(slider),GNT_LABEL(label)); | 880 gnt_slider_reflect_label(GNT_SLIDER(slider),GNT_LABEL(label)); |
774 gnt_slider_set_value(GNT_SLIDER(slider),CLAMP(purple_prefs_get_int(FINCH_PREFS_ROOT "/sound/volume"),0,100)); | |
775 gnt_box_set_pad(GNT_BOX(box),1); | 881 gnt_box_set_pad(GNT_BOX(box),1); |
776 gnt_box_add_widget(GNT_BOX(box),slider); | 882 gnt_box_add_widget(GNT_BOX(box),slider); |
777 gnt_box_add_widget(GNT_BOX(box),label); | 883 gnt_box_add_widget(GNT_BOX(box),label); |
778 gnt_box_add_widget(GNT_BOX(win),box); | 884 gnt_box_add_widget(GNT_BOX(win),box); |
779 | 885 |
784 gnt_tree_set_column_titles(GNT_TREE(tree),_("Event"),_("File")); | 890 gnt_tree_set_column_titles(GNT_TREE(tree),_("Event"),_("File")); |
785 gnt_tree_set_show_title(GNT_TREE(tree),TRUE); | 891 gnt_tree_set_show_title(GNT_TREE(tree),TRUE); |
786 | 892 |
787 for(i = 0;i < PURPLE_NUM_SOUNDS;i++){ | 893 for(i = 0;i < PURPLE_NUM_SOUNDS;i++){ |
788 FinchSoundEvent * event = &sounds[i]; | 894 FinchSoundEvent * event = &sounds[i]; |
789 gchar *boolpref; | 895 |
790 gchar *filepref; | |
791 | |
792 boolpref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/enabled/%s", event->pref); | |
793 | |
794 filepref = g_strdup_printf(FINCH_PREFS_ROOT "/sound/file/%s", event->pref); | |
795 event->file = g_strdup(purple_prefs_get_path(filepref)); | |
796 if(event->label == NULL){ | 896 if(event->label == NULL){ |
797 continue; | 897 continue; |
798 } | 898 } |
799 | 899 |
800 gnt_tree_add_choice(GNT_TREE(tree), GINT_TO_POINTER(i), | 900 gnt_tree_add_choice(GNT_TREE(tree), GINT_TO_POINTER(i), |
801 gnt_tree_create_row(GNT_TREE(tree),event->label,event->file[0] ? g_path_get_basename(event->file) : "(default)"), | 901 gnt_tree_create_row(GNT_TREE(tree),"",""), |
802 NULL, NULL); | 902 NULL, NULL); |
803 gnt_tree_set_choice(GNT_TREE(tree),GINT_TO_POINTER(i),purple_prefs_get_bool(boolpref)); | |
804 g_free(boolpref); | |
805 g_free(filepref); | |
806 } | 903 } |
807 | 904 |
808 gnt_tree_adjust_columns(GNT_TREE(tree)); | 905 gnt_tree_adjust_columns(GNT_TREE(tree)); |
809 gnt_box_add_widget(GNT_BOX(win),tree); | 906 gnt_box_add_widget(GNT_BOX(win),tree); |
810 | 907 |
818 button = gnt_button_new(_("Choose...")); | 915 button = gnt_button_new(_("Choose...")); |
819 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(choose_cb),NULL); | 916 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(choose_cb),NULL); |
820 gnt_box_add_widget(GNT_BOX(box),button); | 917 gnt_box_add_widget(GNT_BOX(box),button); |
821 gnt_box_add_widget(GNT_BOX(win),box); | 918 gnt_box_add_widget(GNT_BOX(win),box); |
822 | 919 |
920 gnt_box_add_widget(GNT_BOX(win), gnt_line_new(FALSE)); | |
921 | |
922 gnt_box_add_widget(GNT_BOX(win),gnt_label_new_with_format(_("Profiles"),GNT_TEXT_FLAG_BOLD)); | |
923 box = gnt_hbox_new(FALSE); | |
924 pref_dialog->profiles = cmbox = gnt_combo_box_new(); | |
925 list = itr = finch_sound_get_profiles(); | |
926 for(;itr;itr = itr->next){ | |
927 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),itr->data,itr->data); | |
928 } | |
929 g_signal_connect(G_OBJECT(cmbox),"selection-changed",G_CALLBACK(reload_pref_window),NULL); | |
930 g_list_free(list); | |
931 gnt_box_add_widget(GNT_BOX(box),cmbox); | |
932 button = gnt_button_new("Load"); | |
933 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(pref_load_cb),NULL); | |
934 gnt_box_add_widget(GNT_BOX(box),button); | |
935 button = gnt_button_new("Save"); | |
936 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(pref_save_cb),NULL); | |
937 gnt_box_add_widget(GNT_BOX(box),button); | |
938 gnt_box_add_widget(GNT_BOX(win),box); | |
939 | |
940 | |
941 /* Add new stuff before this */ | |
823 box = gnt_hbox_new(FALSE); | 942 box = gnt_hbox_new(FALSE); |
824 gnt_box_set_pad(GNT_BOX(box),0); | 943 gnt_box_set_pad(GNT_BOX(box),0); |
825 gnt_box_set_fill(GNT_BOX(box),TRUE); | 944 gnt_box_set_fill(GNT_BOX(box),TRUE); |
826 button = gnt_button_new(_("Save")); | 945 button = gnt_button_new(_("Save")); |
827 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(save_cb),win); | 946 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(save_cb),win); |
831 gnt_box_add_widget(GNT_BOX(box),button); | 950 gnt_box_add_widget(GNT_BOX(box),button); |
832 gnt_box_add_widget(GNT_BOX(win),box); | 951 gnt_box_add_widget(GNT_BOX(win),box); |
833 | 952 |
834 g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(release_pref_dialog),NULL); | 953 g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(release_pref_dialog),NULL); |
835 | 954 |
955 reload_pref_window(NULL,NULL,(gchar *)finch_sound_get_active_profile(),NULL); | |
956 | |
836 gnt_widget_show(win); | 957 gnt_widget_show(win); |
837 | 958 |
838 } | 959 } |
839 | 960 |
840 static PurpleSoundUiOps sound_ui_ops = | 961 static PurpleSoundUiOps sound_ui_ops = |