pidgin/gtkpounce.c

branch
release-2.1.0
changeset 18105
bab0b0bcb664
parent 17213
25a0ae0d0ff7
parent 17388
8be39f0de528
child 18121
2d8ea56b9097
equal deleted inserted replaced
18098:87d9a86cb477 18105:bab0b0bcb664
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
645 dialog->exec_cmd 660 dialog->exec_cmd
646 = gtk_check_button_new_with_mnemonic(_("E_xecute a command")); 661 = gtk_check_button_new_with_mnemonic(_("E_xecute a command"));
647 dialog->play_sound 662 dialog->play_sound
648 = gtk_check_button_new_with_mnemonic(_("P_lay a sound")); 663 = gtk_check_button_new_with_mnemonic(_("P_lay a sound"));
649 664
650 dialog->send_msg_entry = gtk_entry_new(); 665 send_msg_imhtml = pidgin_create_imhtml(TRUE, &dialog->send_msg_entry, NULL, NULL);
666 reset_send_msg_entry(dialog, NULL);
651 dialog->exec_cmd_entry = gtk_entry_new(); 667 dialog->exec_cmd_entry = gtk_entry_new();
652 dialog->popup_entry = gtk_entry_new(); 668 dialog->popup_entry = gtk_entry_new();
653 dialog->exec_cmd_browse = gtk_button_new_with_mnemonic(_("Brows_e...")); 669 dialog->exec_cmd_browse = gtk_button_new_with_mnemonic(_("Brows_e..."));
654 dialog->play_sound_entry = gtk_entry_new(); 670 dialog->play_sound_entry = gtk_entry_new();
655 dialog->play_sound_browse = gtk_button_new_with_mnemonic(_("Br_owse...")); 671 dialog->play_sound_browse = gtk_button_new_with_mnemonic(_("Br_owse..."));
656 dialog->play_sound_test = gtk_button_new_with_mnemonic(_("Pre_view")); 672 dialog->play_sound_test = gtk_button_new_with_mnemonic(_("Pre_view"));
657 673
658 gtk_widget_set_sensitive(dialog->send_msg_entry, FALSE); 674 gtk_widget_set_sensitive(send_msg_imhtml, FALSE);
659 gtk_widget_set_sensitive(dialog->exec_cmd_entry, FALSE); 675 gtk_widget_set_sensitive(dialog->exec_cmd_entry, FALSE);
660 gtk_widget_set_sensitive(dialog->popup_entry, FALSE); 676 gtk_widget_set_sensitive(dialog->popup_entry, FALSE);
661 gtk_widget_set_sensitive(dialog->exec_cmd_browse, FALSE); 677 gtk_widget_set_sensitive(dialog->exec_cmd_browse, FALSE);
662 gtk_widget_set_sensitive(dialog->play_sound_entry, FALSE); 678 gtk_widget_set_sensitive(dialog->play_sound_entry, FALSE);
663 gtk_widget_set_sensitive(dialog->play_sound_browse, FALSE); 679 gtk_widget_set_sensitive(dialog->play_sound_browse, FALSE);
665 681
666 sg = gtk_size_group_new(GTK_SIZE_GROUP_VERTICAL); 682 sg = gtk_size_group_new(GTK_SIZE_GROUP_VERTICAL);
667 gtk_size_group_add_widget(sg, dialog->open_win); 683 gtk_size_group_add_widget(sg, dialog->open_win);
668 gtk_size_group_add_widget(sg, dialog->popup); 684 gtk_size_group_add_widget(sg, dialog->popup);
669 gtk_size_group_add_widget(sg, dialog->popup_entry); 685 gtk_size_group_add_widget(sg, dialog->popup_entry);
670 gtk_size_group_add_widget(sg, dialog->send_msg);
671 gtk_size_group_add_widget(sg, dialog->send_msg_entry);
672 gtk_size_group_add_widget(sg, dialog->exec_cmd); 686 gtk_size_group_add_widget(sg, dialog->exec_cmd);
673 gtk_size_group_add_widget(sg, dialog->exec_cmd_entry); 687 gtk_size_group_add_widget(sg, dialog->exec_cmd_entry);
674 gtk_size_group_add_widget(sg, dialog->exec_cmd_browse); 688 gtk_size_group_add_widget(sg, dialog->exec_cmd_browse);
675 gtk_size_group_add_widget(sg, dialog->play_sound); 689 gtk_size_group_add_widget(sg, dialog->play_sound);
676 gtk_size_group_add_widget(sg, dialog->play_sound_entry); 690 gtk_size_group_add_widget(sg, dialog->play_sound_entry);
681 GTK_FILL, 0, 0, 0); 695 GTK_FILL, 0, 0, 0);
682 gtk_table_attach(GTK_TABLE(table), dialog->popup, 0, 1, 1, 2, 696 gtk_table_attach(GTK_TABLE(table), dialog->popup, 0, 1, 1, 2,
683 GTK_FILL, 0, 0, 0); 697 GTK_FILL, 0, 0, 0);
684 gtk_table_attach(GTK_TABLE(table), dialog->popup_entry, 1, 4, 1, 2, 698 gtk_table_attach(GTK_TABLE(table), dialog->popup_entry, 1, 4, 1, 2,
685 GTK_FILL, 0, 0, 0); 699 GTK_FILL, 0, 0, 0);
686 gtk_table_attach(GTK_TABLE(table), dialog->send_msg, 0, 1, 2, 3, 700 gtk_table_attach(GTK_TABLE(table), dialog->send_msg, 0, 4, 2, 3,
687 GTK_FILL, 0, 0, 0); 701 GTK_FILL, 0, 0, 0);
688 gtk_table_attach(GTK_TABLE(table), dialog->send_msg_entry, 1, 4, 2, 3, 702 gtk_table_attach(GTK_TABLE(table), send_msg_imhtml, 0, 4, 3, 4,
689 GTK_FILL, 0, 0, 0); 703 GTK_FILL, 0, 0, 0);
690 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd, 0, 1, 3, 4, 704 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd, 0, 1, 4, 5,
691 GTK_FILL, 0, 0, 0); 705 GTK_FILL, 0, 0, 0);
692 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_entry, 1, 2, 3, 4, 706 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_entry, 1, 2, 4, 5,
693 GTK_FILL, 0, 0, 0); 707 GTK_FILL, 0, 0, 0);
694 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_browse, 2, 3, 3, 4, 708 gtk_table_attach(GTK_TABLE(table), dialog->exec_cmd_browse, 2, 3, 4, 5,
695 GTK_FILL | GTK_EXPAND, 0, 0, 0); 709 GTK_FILL | GTK_EXPAND, 0, 0, 0);
696 gtk_table_attach(GTK_TABLE(table), dialog->play_sound, 0, 1, 4, 5, 710 gtk_table_attach(GTK_TABLE(table), dialog->play_sound, 0, 1, 5, 6,
697 GTK_FILL, 0, 0, 0); 711 GTK_FILL, 0, 0, 0);
698 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_entry, 1, 2, 4, 5, 712 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_entry, 1, 2, 5, 6,
699 GTK_FILL, 0, 0, 0); 713 GTK_FILL, 0, 0, 0);
700 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_browse, 2, 3, 4, 5, 714 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_browse,2, 3, 5, 6,
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_test, 3, 4, 4, 5, 716 gtk_table_attach(GTK_TABLE(table), dialog->play_sound_test, 3, 4, 5, 6,
703 GTK_FILL | GTK_EXPAND, 0, 0, 0); 717 GTK_FILL | GTK_EXPAND, 0, 0, 0);
704 718
705 gtk_table_set_row_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE / 2); 719 gtk_table_set_row_spacings(GTK_TABLE(table), PIDGIN_HIG_BOX_SPACE / 2);
706 720
707 gtk_widget_show(dialog->open_win); 721 gtk_widget_show(dialog->open_win);
708 gtk_widget_show(dialog->popup); 722 gtk_widget_show(dialog->popup);
709 gtk_widget_show(dialog->popup_entry); 723 gtk_widget_show(dialog->popup_entry);
710 gtk_widget_show(dialog->send_msg); 724 gtk_widget_show(dialog->send_msg);
711 gtk_widget_show(dialog->send_msg_entry); 725 gtk_widget_show(send_msg_imhtml);
712 gtk_widget_show(dialog->exec_cmd); 726 gtk_widget_show(dialog->exec_cmd);
713 gtk_widget_show(dialog->exec_cmd_entry); 727 gtk_widget_show(dialog->exec_cmd_entry);
714 gtk_widget_show(dialog->exec_cmd_browse); 728 gtk_widget_show(dialog->exec_cmd_browse);
715 gtk_widget_show(dialog->play_sound); 729 gtk_widget_show(dialog->play_sound);
716 gtk_widget_show(dialog->play_sound_entry); 730 gtk_widget_show(dialog->play_sound_entry);
721 G_CALLBACK(message_recv_toggle), 735 G_CALLBACK(message_recv_toggle),
722 dialog->send_msg); 736 dialog->send_msg);
723 737
724 g_signal_connect(G_OBJECT(dialog->send_msg), "clicked", 738 g_signal_connect(G_OBJECT(dialog->send_msg), "clicked",
725 G_CALLBACK(pidgin_toggle_sensitive), 739 G_CALLBACK(pidgin_toggle_sensitive),
726 dialog->send_msg_entry); 740 send_msg_imhtml);
727 741
728 g_signal_connect(G_OBJECT(dialog->popup), "clicked", 742 g_signal_connect(G_OBJECT(dialog->popup), "clicked",
729 G_CALLBACK(pidgin_toggle_sensitive), 743 G_CALLBACK(pidgin_toggle_sensitive),
730 dialog->popup_entry); 744 dialog->popup_entry);
731 745
757 G_CALLBACK(pounce_test_sound), 771 G_CALLBACK(pounce_test_sound),
758 dialog->play_sound_entry); 772 dialog->play_sound_entry);
759 g_object_set_data_full(G_OBJECT(dialog->window), "sound-widgets", 773 g_object_set_data_full(G_OBJECT(dialog->window), "sound-widgets",
760 sound_widgets, (GDestroyNotify)g_ptr_array_free); 774 sound_widgets, (GDestroyNotify)g_ptr_array_free);
761 775
762 g_signal_connect(G_OBJECT(dialog->send_msg_entry), "activate", 776 g_signal_connect_swapped(G_OBJECT(dialog->send_msg_entry), "format_function_clear",
777 G_CALLBACK(reset_send_msg_entry), dialog);
778 g_signal_connect_swapped(G_OBJECT(dialog->account_menu), "changed",
779 G_CALLBACK(reset_send_msg_entry), dialog);
780
781 g_signal_connect(G_OBJECT(dialog->send_msg_entry), "message_send",
763 G_CALLBACK(save_pounce_cb), dialog); 782 G_CALLBACK(save_pounce_cb), dialog);
764 g_signal_connect(G_OBJECT(dialog->popup_entry), "activate", 783 g_signal_connect(G_OBJECT(dialog->popup_entry), "activate",
765 G_CALLBACK(save_pounce_cb), dialog); 784 G_CALLBACK(save_pounce_cb), dialog);
766 g_signal_connect(G_OBJECT(dialog->exec_cmd_entry), "activate", 785 g_signal_connect(G_OBJECT(dialog->exec_cmd_entry), "activate",
767 G_CALLBACK(save_pounce_cb), dialog); 786 G_CALLBACK(save_pounce_cb), dialog);
884 903
885 if ((value = purple_pounce_action_get_attribute(cur_pounce, 904 if ((value = purple_pounce_action_get_attribute(cur_pounce,
886 "send-message", 905 "send-message",
887 "message")) != NULL) 906 "message")) != NULL)
888 { 907 {
889 gtk_entry_set_text(GTK_ENTRY(dialog->send_msg_entry), value); 908 gtk_imhtml_append_text(GTK_IMHTML(dialog->send_msg_entry), value, 0);
890 } 909 }
891 910
892 if ((value = purple_pounce_action_get_attribute(cur_pounce, 911 if ((value = purple_pounce_action_get_attribute(cur_pounce,
893 "popup-notify", 912 "popup-notify",
894 "reason")) != NULL) 913 "reason")) != NULL)

mercurial