Mercurial > pidgin.yaz
comparison pidgin/gtkpounce.c @ 17524:4d53be63a558
merge of '5161434de87f4642ea96466bde679769f874d68b'
and 'f53a35f65f0dcb7810884f075a124e0cc1852d98'
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Sun, 27 May 2007 02:11:53 +0000 |
parents | 274ceb453176 |
children | d40fd7106ebf 6b7b13adb9b1 |
comparison
equal
deleted
inserted
replaced
17421:c8891ebd48db | 17524:4d53be63a558 |
---|---|
36 #include "sound.h" | 36 #include "sound.h" |
37 #include "util.h" | 37 #include "util.h" |
38 | 38 |
39 #include "gtkblist.h" | 39 #include "gtkblist.h" |
40 #include "gtkdialogs.h" | 40 #include "gtkdialogs.h" |
41 #include "gtkimhtml.h" | |
41 #include "gtkpounce.h" | 42 #include "gtkpounce.h" |
42 #include "pidginstock.h" | 43 #include "pidginstock.h" |
43 #include "gtkutils.h" | 44 #include "gtkutils.h" |
44 | 45 |
45 /** | 46 /** |
239 | 240 |
240 static void | 241 static void |
241 save_pounce_cb(GtkWidget *w, PidginPounceDialog *dialog) | 242 save_pounce_cb(GtkWidget *w, PidginPounceDialog *dialog) |
242 { | 243 { |
243 const char *name; | 244 const char *name; |
244 const char *message, *command, *sound, *reason; | 245 const char *command, *sound, *reason; |
246 char *message; | |
245 PurplePounceEvent events = PURPLE_POUNCE_NONE; | 247 PurplePounceEvent events = PURPLE_POUNCE_NONE; |
246 PurplePounceOption options = PURPLE_POUNCE_OPTION_NONE; | 248 PurplePounceOption options = PURPLE_POUNCE_OPTION_NONE; |
247 | 249 |
248 name = gtk_entry_get_text(GTK_ENTRY(dialog->buddy_entry)); | 250 name = gtk_entry_get_text(GTK_ENTRY(dialog->buddy_entry)); |
249 | 251 |
288 | 290 |
289 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->message_recv))) | 291 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->message_recv))) |
290 events |= PURPLE_POUNCE_MESSAGE_RECEIVED; | 292 events |= PURPLE_POUNCE_MESSAGE_RECEIVED; |
291 | 293 |
292 /* Data fields */ | 294 /* Data fields */ |
293 message = gtk_entry_get_text(GTK_ENTRY(dialog->send_msg_entry)); | 295 message = gtk_imhtml_get_markup(GTK_IMHTML(dialog->send_msg_entry)); |
294 command = gtk_entry_get_text(GTK_ENTRY(dialog->exec_cmd_entry)); | 296 command = gtk_entry_get_text(GTK_ENTRY(dialog->exec_cmd_entry)); |
295 sound = gtk_entry_get_text(GTK_ENTRY(dialog->play_sound_entry)); | 297 sound = gtk_entry_get_text(GTK_ENTRY(dialog->play_sound_entry)); |
296 reason = gtk_entry_get_text(GTK_ENTRY(dialog->popup_entry)); | 298 reason = gtk_entry_get_text(GTK_ENTRY(dialog->popup_entry)); |
297 | 299 |
298 if (*reason == '\0') reason = NULL; | 300 if (*reason == '\0') reason = NULL; |
299 if (*message == '\0') message = NULL; | 301 if (*message == '\0') { |
302 g_free(message); | |
303 message = NULL; | |
304 } | |
300 if (*command == '\0') command = NULL; | 305 if (*command == '\0') command = NULL; |
301 if (*sound == '\0') sound = NULL; | 306 if (*sound == '\0') sound = NULL; |
302 | 307 |
303 if (dialog->pounce == NULL) | 308 if (dialog->pounce == NULL) |
304 { | 309 { |
347 | 352 |
348 purple_pounce_set_save(dialog->pounce, | 353 purple_pounce_set_save(dialog->pounce, |
349 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->save_pounce))); | 354 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(dialog->save_pounce))); |
350 | 355 |
351 update_pounces(); | 356 update_pounces(); |
357 g_free(message); | |
352 | 358 |
353 delete_win_cb(NULL, NULL, dialog); | 359 delete_win_cb(NULL, NULL, dialog); |
354 } | 360 } |
355 | 361 |
356 static void | 362 static void |
444 { | 450 { |
445 {"PURPLE_BLIST_NODE", GTK_TARGET_SAME_APP, 0}, | 451 {"PURPLE_BLIST_NODE", GTK_TARGET_SAME_APP, 0}, |
446 {"application/x-im-contact", 0, 1} | 452 {"application/x-im-contact", 0, 1} |
447 }; | 453 }; |
448 | 454 |
455 static void | |
456 reset_send_msg_entry(PidginPounceDialog *dialog, GtkWidget *dontcare) | |
457 { | |
458 PurpleAccount *account = pidgin_account_option_menu_get_selected(dialog->account_menu); | |
459 gtk_imhtml_setup_entry(GTK_IMHTML(dialog->send_msg_entry), | |
460 (account && account->gc) ? account->gc->flags : PURPLE_CONNECTION_HTML); | |
461 } | |
462 | |
449 void | 463 void |
450 pidgin_pounce_editor_show(PurpleAccount *account, const char *name, | 464 pidgin_pounce_editor_show(PurpleAccount *account, const char *name, |
451 PurplePounce *cur_pounce) | 465 PurplePounce *cur_pounce) |
452 { | 466 { |
453 PidginPounceDialog *dialog; | 467 PidginPounceDialog *dialog; |
460 GtkWidget *frame; | 474 GtkWidget *frame; |
461 GtkWidget *table; | 475 GtkWidget *table; |
462 GtkSizeGroup *sg; | 476 GtkSizeGroup *sg; |
463 GPtrArray *sound_widgets; | 477 GPtrArray *sound_widgets; |
464 GPtrArray *exec_widgets; | 478 GPtrArray *exec_widgets; |
479 GtkWidget *send_msg_imhtml; | |
465 | 480 |
466 g_return_if_fail((cur_pounce != NULL) || | 481 g_return_if_fail((cur_pounce != NULL) || |
467 (account != NULL) || | 482 (account != NULL) || |
468 (purple_accounts_get_all() != NULL)); | 483 (purple_accounts_get_all() != NULL)); |
469 | 484 |
651 dialog->exec_cmd | 666 dialog->exec_cmd |
652 = gtk_check_button_new_with_mnemonic(_("E_xecute a command")); | 667 = gtk_check_button_new_with_mnemonic(_("E_xecute a command")); |
653 dialog->play_sound | 668 dialog->play_sound |
654 = gtk_check_button_new_with_mnemonic(_("P_lay a sound")); | 669 = gtk_check_button_new_with_mnemonic(_("P_lay a sound")); |
655 | 670 |
656 dialog->send_msg_entry = gtk_entry_new(); | 671 send_msg_imhtml = pidgin_create_imhtml(TRUE, &dialog->send_msg_entry, NULL, NULL); |
672 reset_send_msg_entry(dialog, NULL); | |
657 dialog->exec_cmd_entry = gtk_entry_new(); | 673 dialog->exec_cmd_entry = gtk_entry_new(); |
658 dialog->popup_entry = gtk_entry_new(); | 674 dialog->popup_entry = gtk_entry_new(); |
659 dialog->exec_cmd_browse = gtk_button_new_with_mnemonic(_("Brows_e...")); | 675 dialog->exec_cmd_browse = gtk_button_new_with_mnemonic(_("Brows_e...")); |
660 dialog->play_sound_entry = gtk_entry_new(); | 676 dialog->play_sound_entry = gtk_entry_new(); |
661 dialog->play_sound_browse = gtk_button_new_with_mnemonic(_("Br_owse...")); | 677 dialog->play_sound_browse = gtk_button_new_with_mnemonic(_("Br_owse...")); |
662 dialog->play_sound_test = gtk_button_new_with_mnemonic(_("Pre_view")); | 678 dialog->play_sound_test = gtk_button_new_with_mnemonic(_("Pre_view")); |
663 | 679 |
664 gtk_widget_set_sensitive(dialog->send_msg_entry, FALSE); | 680 gtk_widget_set_sensitive(send_msg_imhtml, FALSE); |
665 gtk_widget_set_sensitive(dialog->exec_cmd_entry, FALSE); | 681 gtk_widget_set_sensitive(dialog->exec_cmd_entry, FALSE); |
666 gtk_widget_set_sensitive(dialog->popup_entry, FALSE); | 682 gtk_widget_set_sensitive(dialog->popup_entry, FALSE); |
667 gtk_widget_set_sensitive(dialog->exec_cmd_browse, FALSE); | 683 gtk_widget_set_sensitive(dialog->exec_cmd_browse, FALSE); |
668 gtk_widget_set_sensitive(dialog->play_sound_entry, FALSE); | 684 gtk_widget_set_sensitive(dialog->play_sound_entry, FALSE); |
669 gtk_widget_set_sensitive(dialog->play_sound_browse, FALSE); | 685 gtk_widget_set_sensitive(dialog->play_sound_browse, FALSE); |
671 | 687 |
672 sg = gtk_size_group_new(GTK_SIZE_GROUP_VERTICAL); | 688 sg = gtk_size_group_new(GTK_SIZE_GROUP_VERTICAL); |
673 gtk_size_group_add_widget(sg, dialog->open_win); | 689 gtk_size_group_add_widget(sg, dialog->open_win); |
674 gtk_size_group_add_widget(sg, dialog->popup); | 690 gtk_size_group_add_widget(sg, dialog->popup); |
675 gtk_size_group_add_widget(sg, dialog->popup_entry); | 691 gtk_size_group_add_widget(sg, dialog->popup_entry); |
676 gtk_size_group_add_widget(sg, dialog->send_msg); | |
677 gtk_size_group_add_widget(sg, dialog->send_msg_entry); | |
678 gtk_size_group_add_widget(sg, dialog->exec_cmd); | 692 gtk_size_group_add_widget(sg, dialog->exec_cmd); |
679 gtk_size_group_add_widget(sg, dialog->exec_cmd_entry); | 693 gtk_size_group_add_widget(sg, dialog->exec_cmd_entry); |
680 gtk_size_group_add_widget(sg, dialog->exec_cmd_browse); | 694 gtk_size_group_add_widget(sg, dialog->exec_cmd_browse); |
681 gtk_size_group_add_widget(sg, dialog->play_sound); | 695 gtk_size_group_add_widget(sg, dialog->play_sound); |
682 gtk_size_group_add_widget(sg, dialog->play_sound_entry); | 696 gtk_size_group_add_widget(sg, dialog->play_sound_entry); |
687 GTK_FILL, 0, 0, 0); | 701 GTK_FILL, 0, 0, 0); |
688 gtk_table_attach(GTK_TABLE(table), dialog->popup, 0, 1, 1, 2, | 702 gtk_table_attach(GTK_TABLE(table), dialog->popup, 0, 1, 1, 2, |
689 GTK_FILL, 0, 0, 0); | 703 GTK_FILL, 0, 0, 0); |
690 gtk_table_attach(GTK_TABLE(table), dialog->popup_entry, 1, 4, 1, 2, | 704 gtk_table_attach(GTK_TABLE(table), dialog->popup_entry, 1, 4, 1, 2, |
691 GTK_FILL, 0, 0, 0); | 705 GTK_FILL, 0, 0, 0); |
692 gtk_table_attach(GTK_TABLE(table), dialog->send_msg, 0, 1, 2, 3, | 706 gtk_table_attach(GTK_TABLE(table), dialog->send_msg, 0, 4, 2, 3, |
693 GTK_FILL, 0, 0, 0); | 707 GTK_FILL, 0, 0, 0); |
694 gtk_table_attach(GTK_TABLE(table), dialog->send_msg_entry, 1, 4, 2, 3, | 708 gtk_table_attach(GTK_TABLE(table), send_msg_imhtml, 0, 4, 3, 4, |
695 GTK_FILL, 0, 0, 0); | 709 GTK_FILL, 0, 0, 0); |
696 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd, 0, 1, 3, 4, | 710 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd, 0, 1, 4, 5, |
697 GTK_FILL, 0, 0, 0); | 711 GTK_FILL, 0, 0, 0); |
698 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_entry, 1, 2, 3, 4, | 712 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_entry, 1, 2, 4, 5, |
699 GTK_FILL, 0, 0, 0); | 713 GTK_FILL, 0, 0, 0); |
700 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_browse, 2, 3, 3, 4, | 714 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_browse, 2, 3, 4, 5, |
701 GTK_FILL | GTK_EXPAND, 0, 0, 0); | 715 GTK_FILL | GTK_EXPAND, 0, 0, 0); |
702 gtk_table_attach(GTK_TABLE(table), dialog->play_sound, 0, 1, 4, 5, | 716 gtk_table_attach(GTK_TABLE(table), dialog->play_sound, 0, 1, 5, 6, |
703 GTK_FILL, 0, 0, 0); | 717 GTK_FILL, 0, 0, 0); |
704 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_entry, 1, 2, 4, 5, | 718 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_entry, 1, 2, 5, 6, |
705 GTK_FILL, 0, 0, 0); | 719 GTK_FILL, 0, 0, 0); |
706 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_browse, 2, 3, 4, 5, | 720 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_browse,2, 3, 5, 6, |
707 GTK_FILL | GTK_EXPAND, 0, 0, 0); | 721 GTK_FILL | GTK_EXPAND, 0, 0, 0); |
708 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_test, 3, 4, 4, 5, | 722 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_test, 3, 4, 5, 6, |
709 GTK_FILL | GTK_EXPAND, 0, 0, 0); | 723 GTK_FILL | GTK_EXPAND, 0, 0, 0); |
710 | 724 |
711 gtk_table_set_row_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE / 2); | 725 gtk_table_set_row_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE / 2); |
712 | 726 |
713 gtk_widget_show(dialog->open_win); | 727 gtk_widget_show(dialog->open_win); |
714 gtk_widget_show(dialog->popup); | 728 gtk_widget_show(dialog->popup); |
715 gtk_widget_show(dialog->popup_entry); | 729 gtk_widget_show(dialog->popup_entry); |
716 gtk_widget_show(dialog->send_msg); | 730 gtk_widget_show(dialog->send_msg); |
717 gtk_widget_show(dialog->send_msg_entry); | 731 gtk_widget_show(send_msg_imhtml); |
718 gtk_widget_show(dialog->exec_cmd); | 732 gtk_widget_show(dialog->exec_cmd); |
719 gtk_widget_show(dialog->exec_cmd_entry); | 733 gtk_widget_show(dialog->exec_cmd_entry); |
720 gtk_widget_show(dialog->exec_cmd_browse); | 734 gtk_widget_show(dialog->exec_cmd_browse); |
721 gtk_widget_show(dialog->play_sound); | 735 gtk_widget_show(dialog->play_sound); |
722 gtk_widget_show(dialog->play_sound_entry); | 736 gtk_widget_show(dialog->play_sound_entry); |
727 G_CALLBACK(message_recv_toggle), | 741 G_CALLBACK(message_recv_toggle), |
728 dialog->send_msg); | 742 dialog->send_msg); |
729 | 743 |
730 g_signal_connect(G_OBJECT(dialog->send_msg), "clicked", | 744 g_signal_connect(G_OBJECT(dialog->send_msg), "clicked", |
731 G_CALLBACK(pidgin_toggle_sensitive), | 745 G_CALLBACK(pidgin_toggle_sensitive), |
732 dialog->send_msg_entry); | 746 send_msg_imhtml); |
733 | 747 |
734 g_signal_connect(G_OBJECT(dialog->popup), "clicked", | 748 g_signal_connect(G_OBJECT(dialog->popup), "clicked", |
735 G_CALLBACK(pidgin_toggle_sensitive), | 749 G_CALLBACK(pidgin_toggle_sensitive), |
736 dialog->popup_entry); | 750 dialog->popup_entry); |
737 | 751 |
763 G_CALLBACK(pounce_test_sound), | 777 G_CALLBACK(pounce_test_sound), |
764 dialog->play_sound_entry); | 778 dialog->play_sound_entry); |
765 g_object_set_data_full(G_OBJECT(dialog->window), "sound-widgets", | 779 g_object_set_data_full(G_OBJECT(dialog->window), "sound-widgets", |
766 sound_widgets, (GDestroyNotify)g_ptr_array_free); | 780 sound_widgets, (GDestroyNotify)g_ptr_array_free); |
767 | 781 |
768 g_signal_connect(G_OBJECT(dialog->send_msg_entry), "activate", | 782 g_signal_connect_swapped(G_OBJECT(dialog->send_msg_entry), "format_function_clear", |
783 G_CALLBACK(reset_send_msg_entry), dialog); | |
784 g_signal_connect_swapped(G_OBJECT(dialog->account_menu), "changed", | |
785 G_CALLBACK(reset_send_msg_entry), dialog); | |
786 | |
787 g_signal_connect(G_OBJECT(dialog->send_msg_entry), "message_send", | |
769 G_CALLBACK(save_pounce_cb), dialog); | 788 G_CALLBACK(save_pounce_cb), dialog); |
770 g_signal_connect(G_OBJECT(dialog->popup_entry), "activate", | 789 g_signal_connect(G_OBJECT(dialog->popup_entry), "activate", |
771 G_CALLBACK(save_pounce_cb), dialog); | 790 G_CALLBACK(save_pounce_cb), dialog); |
772 g_signal_connect(G_OBJECT(dialog->exec_cmd_entry), "activate", | 791 g_signal_connect(G_OBJECT(dialog->exec_cmd_entry), "activate", |
773 G_CALLBACK(save_pounce_cb), dialog); | 792 G_CALLBACK(save_pounce_cb), dialog); |
890 | 909 |
891 if ((value = purple_pounce_action_get_attribute(cur_pounce, | 910 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
892 "send-message", | 911 "send-message", |
893 "message")) != NULL) | 912 "message")) != NULL) |
894 { | 913 { |
895 gtk_entry_set_text(GTK_ENTRY(dialog->send_msg_entry), value); | 914 gtk_imhtml_append_text(GTK_IMHTML(dialog->send_msg_entry), value, 0); |
896 } | 915 } |
897 | 916 |
898 if ((value = purple_pounce_action_get_attribute(cur_pounce, | 917 if ((value = purple_pounce_action_get_attribute(cur_pounce, |
899 "popup-notify", | 918 "popup-notify", |
900 "reason")) != NULL) | 919 "reason")) != NULL) |