comparison finch/gntsound.c @ 19119:086cfcb71b01

Created SoundPrefDialog to store dialog data. Cleaned up the Sounds pref window to look better.
author Eric Polino <aluink@pidgin.im>
date Fri, 29 Jun 2007 01:51:13 +0000
parents cfe8f791d7c1
children 915ef65d68e3
comparison
equal deleted inserted replaced
19118:cfe8f791d7c1 19119:086cfcb71b01
55 char *label; 55 char *label;
56 char *pref; 56 char *pref;
57 char *def; 57 char *def;
58 }; 58 };
59 59
60 typedef struct {
61 GntWidget *method;
62 GntWidget *command;
63 GntWidget *conv_focus;
64 GntWidget *while_status;
65 GntWidget *volume;
66 GntWidget *window;
67 } SoundPrefDialog;
68
60 static struct { 69 static struct {
61 const gchar *method; 70 const gchar *method;
62 const gchar *command; 71 const gchar *command;
63 gboolean conv_focus; 72 gboolean conv_focus;
64 gint while_status; 73 gint while_status;
65 gint volume; 74 gint volume;
66 GntTree *events; 75 GntTree *events;
67 GntWidget *window; 76 SoundPrefDialog *dialog;
68 } sound_pref_data; 77 } sound_pref_data;
69 78
70 #define PLAY_SOUND_TIMEOUT 15000 79 #define PLAY_SOUND_TIMEOUT 15000
71 80
72 static guint mute_login_sounds_timeout = 0; 81 static guint mute_login_sounds_timeout = 0;
586 595
587 return; 596 return;
588 } 597 }
589 598
590 static gboolean 599 static gboolean
591 save_cb(GntBindable *data, gpointer null) 600 save_cb(GntBindable *data, gpointer *win)
592 { 601 {
593 gnt_widget_destroy(sound_pref_data.window); 602 gnt_widget_destroy(GNT_WIDGET(win));
594 return TRUE; 603 return TRUE;
595 } 604 }
596 605
597 static gboolean 606 static gboolean
598 cancel_cb(GntBindable *data, gpointer null) 607 cancel_cb(GntBindable *data, gpointer win)
599 { 608 {
600 gnt_widget_destroy(sound_pref_data.window); 609 gnt_widget_destroy(GNT_WIDGET(win));
601 return TRUE; 610 return TRUE;
602 } 611 }
603 612
604 static void 613 static void release_pref_window(GntBindable *data, gpointer null) {
605 release_pref_window(GntBindable *data, gpointer null) 614 g_free(sound_pref_data.dialog);
606 { 615 sound_pref_data.dialog = NULL;
607 sound_pref_data.window = NULL;
608 } 616 }
609 617
610 void 618 void
611 finch_sounds_show_all(void) 619 finch_sounds_show_all(void)
612 { 620 {
614 GntWidget *cmbox; 622 GntWidget *cmbox;
615 GntWidget *entry; 623 GntWidget *entry;
616 GntWidget *chkbox; 624 GntWidget *chkbox;
617 GntWidget *button; 625 GntWidget *button;
618 GntWidget *label; 626 GntWidget *label;
627 GntWidget *win;
619 gchar *buf; 628 gchar *buf;
620 629
621 if(sound_pref_data.window){ 630 if(sound_pref_data.dialog){
622 /* XXX We should find a way to raise the window back up */ 631 gnt_window_present(sound_pref_data.dialog->window);
623 return; 632 return;
624 } 633 }
625 634
626 init_pref_data(); 635 init_pref_data();
627 636
628 sound_pref_data.window = gnt_vbox_new(FALSE); 637 sound_pref_data.dialog = g_new0(SoundPrefDialog,1);
629 gnt_box_set_pad(GNT_BOX(sound_pref_data.window),0); 638
630 gnt_box_set_fill(GNT_BOX(sound_pref_data.window),FALSE); 639 sound_pref_data.dialog->window = win = gnt_window_box_new(FALSE,TRUE);
631 gnt_box_set_toplevel(GNT_BOX(sound_pref_data.window), TRUE); 640 gnt_box_set_pad(GNT_BOX(win),0);
632 gnt_box_set_title(GNT_BOX(sound_pref_data.window),_("Sound Preferences")); 641 gnt_box_set_fill(GNT_BOX(win),FALSE);
633 gnt_box_set_fill(GNT_BOX(sound_pref_data.window),TRUE); 642 gnt_box_set_toplevel(GNT_BOX(win), TRUE);
634 gnt_box_set_alignment(GNT_BOX(sound_pref_data.window),GNT_ALIGN_MID); 643 gnt_box_set_title(GNT_BOX(win),_("Sound Preferences"));
635 gnt_widget_set_name(sound_pref_data.window, "sounds"); 644 gnt_box_set_fill(GNT_BOX(win),TRUE);
636 645 gnt_box_set_alignment(GNT_BOX(win),GNT_ALIGN_MID);
637 cmbox = gnt_combo_box_new(); 646 gnt_widget_set_name(win, "sounds");
647
648 sound_pref_data.dialog->method = cmbox = gnt_combo_box_new();
638 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"automatic",_("Automatic")); 649 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"automatic",_("Automatic"));
639 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"alsa","ALSA"); 650 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"alsa","ALSA");
640 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"esd","ESD"); 651 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"esd","ESD");
641 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"beep",_("Console Beep")); 652 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"beep",_("Console Beep"));
642 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"custom",_("Command")); 653 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"custom",_("Command"));
643 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"nosound",_("No Sound")); 654 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"nosound",_("No Sound"));
644 gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),sound_pref_data.method); 655 gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),sound_pref_data.method);
645 656
646 label = gnt_label_new_with_format(_("Sound Method"),GNT_TEXT_FLAG_BOLD); 657 label = gnt_label_new_with_format(_("Sound Method"),GNT_TEXT_FLAG_BOLD);
647 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),label); 658 gnt_box_add_widget(GNT_BOX(win),label);
648 box = gnt_hbox_new(TRUE); 659 box = gnt_hbox_new(TRUE);
649 gnt_box_set_fill(GNT_BOX(box),FALSE); 660 gnt_box_set_fill(GNT_BOX(box),FALSE);
650 gnt_box_set_pad(GNT_BOX(box),0); 661 gnt_box_set_pad(GNT_BOX(box),0);
651 gnt_box_add_widget(GNT_BOX(box),gnt_label_new(_("Method: "))); 662 gnt_box_add_widget(GNT_BOX(box),gnt_label_new(_("Method: ")));
652 gnt_box_add_widget(GNT_BOX(box),cmbox); 663 gnt_box_add_widget(GNT_BOX(box),cmbox);
653 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),box); 664 gnt_box_add_widget(GNT_BOX(win),box);
654 665
655 box = gnt_hbox_new(TRUE); 666 box = gnt_hbox_new(TRUE);
656 gnt_box_set_pad(GNT_BOX(box),0); 667 gnt_box_set_pad(GNT_BOX(box),0);
657 gnt_box_set_fill(GNT_BOX(box),FALSE); 668 gnt_box_set_fill(GNT_BOX(box),FALSE);
658 gnt_box_add_widget(GNT_BOX(box),gnt_label_new(_("Sound Command\n%s for filename"))); 669 gnt_box_add_widget(GNT_BOX(box),gnt_label_new(_("Sound Command\n(%s for filename)")));
659 entry = gnt_entry_new(sound_pref_data.command); 670 sound_pref_data.dialog->command = entry = gnt_entry_new(sound_pref_data.command);
660 gnt_box_add_widget(GNT_BOX(box),entry); 671 gnt_box_add_widget(GNT_BOX(box),entry);
661 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),box); 672 gnt_box_add_widget(GNT_BOX(win),box);
662 673
663 gnt_box_add_widget(GNT_BOX(sound_pref_data.window), gnt_line_new(FALSE)); 674 gnt_box_add_widget(GNT_BOX(win), gnt_line_new(FALSE));
664 675
665 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),gnt_label_new_with_format(_("Sound Options"),GNT_TEXT_FLAG_BOLD)); 676 gnt_box_add_widget(GNT_BOX(win),gnt_label_new_with_format(_("Sound Options"),GNT_TEXT_FLAG_BOLD));
666 chkbox = gnt_check_box_new("Sounds when conversation has focus"); 677 sound_pref_data.dialog->conv_focus = chkbox = gnt_check_box_new("Sounds when conversation has focus");
667 gnt_check_box_set_checked(GNT_CHECK_BOX(chkbox),sound_pref_data.conv_focus); 678 gnt_check_box_set_checked(GNT_CHECK_BOX(chkbox),sound_pref_data.conv_focus);
668 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),chkbox); 679 gnt_box_add_widget(GNT_BOX(win),chkbox);
669 680
670 box = gnt_hbox_new(TRUE); 681 box = gnt_hbox_new(TRUE);
671 gnt_box_set_pad(GNT_BOX(box),0); 682 gnt_box_set_pad(GNT_BOX(box),0);
672 gnt_box_set_fill(GNT_BOX(box),FALSE); 683 gnt_box_set_fill(GNT_BOX(box),FALSE);
673 gnt_box_add_widget(GNT_BOX(box),gnt_label_new("Enable Sounds:")); 684 gnt_box_add_widget(GNT_BOX(box),gnt_label_new("Enable Sounds:"));
674 cmbox = gnt_combo_box_new(); 685 sound_pref_data.dialog->while_status = cmbox = gnt_combo_box_new();
675 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"always","Always"); 686 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"always","Always");
676 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"available","Only when available"); 687 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"available","Only when available");
677 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"navailable","Only when not available"); 688 gnt_combo_box_add_data(GNT_COMBO_BOX(cmbox),"away","Only when not available");
678 switch(sound_pref_data.while_status){ 689 switch(sound_pref_data.while_status){
679 case 1:gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),"available");break; 690 case 1:gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),"available");break;
680 case 2:gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),"away");break; 691 case 2:gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),"away");break;
681 default:gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),"always");break; 692 default:gnt_combo_box_set_selected(GNT_COMBO_BOX(cmbox),"always");break;
682 } 693 }
683 gnt_box_add_widget(GNT_BOX(box),cmbox); 694 gnt_box_add_widget(GNT_BOX(box),cmbox);
684 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),box); 695 gnt_box_add_widget(GNT_BOX(win),box);
685 696
686 box = gnt_hbox_new(TRUE); 697 box = gnt_hbox_new(TRUE);
687 gnt_box_set_pad(GNT_BOX(box),0); 698 gnt_box_set_pad(GNT_BOX(box),0);
688 gnt_box_set_fill(GNT_BOX(box),FALSE); 699 gnt_box_set_fill(GNT_BOX(box),FALSE);
689 gnt_box_add_widget(GNT_BOX(box),gnt_label_new("Volume(0-100):")); 700 gnt_box_add_widget(GNT_BOX(box),gnt_label_new("Volume(0-100):"));
690 701
691 buf = g_strdup_printf("%d",sound_pref_data.volume); 702 buf = g_strdup_printf("%d",sound_pref_data.volume);
692 entry = gnt_entry_new(buf); 703 sound_pref_data.dialog->volume = entry = gnt_entry_new(buf);
693 g_free(buf); 704 g_free(buf);
705 gnt_widget_set_name(entry,"volume");
694 gnt_box_add_widget(GNT_BOX(box),entry); 706 gnt_box_add_widget(GNT_BOX(box),entry);
695 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),box); 707 gnt_box_add_widget(GNT_BOX(win),box);
696 708
697 gnt_box_add_widget(GNT_BOX(sound_pref_data.window), gnt_line_new(FALSE)); 709 gnt_box_add_widget(GNT_BOX(win), gnt_line_new(FALSE));
698 710
699 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),gnt_label_new_with_format(_("Sound Events"),GNT_TEXT_FLAG_BOLD)); 711 gnt_box_add_widget(GNT_BOX(win),gnt_label_new_with_format(_("Sound Events"),GNT_TEXT_FLAG_BOLD));
700 /* Put events tree here */ 712 /* Put events tree here */
701 713
702 box = gnt_hbox_new(TRUE); 714 box = gnt_hbox_new(TRUE);
703 gnt_box_set_pad(GNT_BOX(box),0); 715 gnt_box_set_pad(GNT_BOX(box),0);
704 gnt_box_set_fill(GNT_BOX(box),TRUE); 716 gnt_box_set_fill(GNT_BOX(box),TRUE);
706 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(save_cb),NULL); 718 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(save_cb),NULL);
707 gnt_box_add_widget(GNT_BOX(box),button); 719 gnt_box_add_widget(GNT_BOX(box),button);
708 button = gnt_button_new("Cancel"); 720 button = gnt_button_new("Cancel");
709 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(cancel_cb),NULL); 721 g_signal_connect(G_OBJECT(button),"activate",G_CALLBACK(cancel_cb),NULL);
710 gnt_box_add_widget(GNT_BOX(box),button); 722 gnt_box_add_widget(GNT_BOX(box),button);
711 gnt_box_add_widget(GNT_BOX(sound_pref_data.window),box); 723 gnt_box_add_widget(GNT_BOX(win),box);
712 724
713 725
714 g_signal_connect(G_OBJECT(sound_pref_data.window),"destroy",G_CALLBACK(release_pref_window),NULL); 726 g_signal_connect(G_OBJECT(win),"destroy",G_CALLBACK(release_pref_window),NULL);
715 727
716 gnt_widget_show(sound_pref_data.window); 728 gnt_widget_show(win);
717 729
718 } 730 }
719 731
720 static PurpleSoundUiOps sound_ui_ops = 732 static PurpleSoundUiOps sound_ui_ops =
721 { 733 {