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)