Mercurial > pidgin
comparison src/gtkconv.c @ 5908:ed8a9a3bf7e2
[gaim-migrate @ 6340]
The Conversation menu is now more populated. It contains entries for the
main buttons on IM and Chat conversations. Entries that are not available
for a protocol or for the conversation type are now hidden. Some entries
are greyed out, but it's temporary until we have a function for finding a
buddy list chat entry.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Mon, 16 Jun 2003 22:55:45 +0000 |
parents | 18486c860a46 |
children | 865f235ffaf0 |
comparison
equal
deleted
inserted
replaced
5907:18486c860a46 | 5908:ed8a9a3bf7e2 |
---|---|
277 close_smiley_dialog(smiley, conv); | 277 close_smiley_dialog(smiley, conv); |
278 | 278 |
279 gtk_widget_grab_focus(gtkconv->entry); | 279 gtk_widget_grab_focus(gtkconv->entry); |
280 } | 280 } |
281 | 281 |
282 static void | |
283 menu_save_as_cb(gpointer data, guint action, GtkWidget *widget) | |
284 { | |
285 GaimWindow *win = (GaimWindow *)data; | |
286 | |
287 save_convo(NULL, gaim_window_get_active_conversation(win)); | |
288 } | |
289 | |
290 static void | |
291 menu_view_log_cb(gpointer data, guint action, GtkWidget *widget) | |
292 { | |
293 GaimWindow *win = (GaimWindow *)data; | |
294 GaimConversation *conv; | |
295 | |
296 conv = gaim_window_get_active_conversation(win); | |
297 | |
298 conv_show_log(NULL, (char *)gaim_conversation_get_name(conv)); | |
299 } | |
300 | |
301 static void | |
302 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget) | |
303 { | |
304 GaimWindow *win = (GaimWindow *)data; | |
305 GaimConversation *conv; | |
306 | |
307 conv = gaim_window_get_active_conversation(win); | |
308 | |
309 gaim_gtkpounce_dialog_show(gaim_conversation_get_account(conv), | |
310 gaim_conversation_get_name(conv), NULL); | |
311 } | |
312 | |
313 static void | |
314 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget) | |
315 { | |
316 GaimWindow *win = (GaimWindow *)data; | |
317 GaimConversation *conv; | |
318 GaimGtkConversation *gtkconv; | |
319 | |
320 conv = gaim_window_get_active_conversation(win); | |
321 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
322 | |
323 show_insert_link(gtkconv->toolbar.link, conv); | |
324 } | |
325 | |
326 static void | |
327 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget) | |
328 { | |
329 GaimWindow *win = (GaimWindow *)data; | |
330 GaimGtkConversation *gtkconv; | |
331 | |
332 gtkconv = GAIM_GTK_CONVERSATION(gaim_window_get_active_conversation(win)); | |
333 | |
334 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image), | |
335 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))); | |
336 } | |
337 | |
338 static void | |
339 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) | |
340 { | |
341 GaimWindow *win = (GaimWindow *)data; | |
342 | |
343 close_conv_cb(NULL, gaim_window_get_active_conversation(win)); | |
344 } | |
345 | |
346 static void | |
347 menu_logging_cb(gpointer data, guint action, GtkWidget *widget) | |
348 { | |
349 GaimWindow *win = (GaimWindow *)data; | |
350 GaimConversation *conv; | |
351 | |
352 conv = gaim_window_get_active_conversation(win); | |
353 | |
354 if (conv == NULL) | |
355 return; | |
356 | |
357 gaim_conversation_set_logging(conv, | |
358 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); | |
359 } | |
360 | |
361 static void | |
362 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget) | |
363 { | |
364 GaimWindow *win = (GaimWindow *)data; | |
365 GaimConversation *conv; | |
366 GaimGtkConversation *gtkconv; | |
367 | |
368 conv = gaim_window_get_active_conversation(win); | |
369 | |
370 if (!conv) | |
371 return; | |
372 | |
373 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
374 | |
375 gtkconv->make_sound = | |
376 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); | |
377 } | |
378 | |
379 static gboolean | 282 static gboolean |
380 entry_key_pressed_cb_1(GtkTextBuffer *buffer) | 283 entry_key_pressed_cb_1(GtkTextBuffer *buffer) |
381 { | 284 { |
382 check_everything(buffer); | 285 check_everything(buffer); |
383 | 286 |
570 show_add_perm(gc, (char *)gaim_conversation_get_name(conv), FALSE); | 473 show_add_perm(gc, (char *)gaim_conversation_get_name(conv), FALSE); |
571 | 474 |
572 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); | 475 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); |
573 } | 476 } |
574 | 477 |
478 static void | |
479 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info) | |
480 { | |
481 const char *buddy, *message; | |
482 GaimGtkConversation *gtkconv; | |
483 | |
484 gtkconv = GAIM_GTK_CONVERSATION(info->conv); | |
485 | |
486 if (resp == GTK_RESPONSE_OK) { | |
487 buddy = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry)); | |
488 message = gtk_entry_get_text(GTK_ENTRY(info->message)); | |
489 | |
490 if (!g_ascii_strcasecmp(buddy, "")) { | |
491 g_free(info); | |
492 | |
493 return; | |
494 } | |
495 | |
496 serv_chat_invite(gaim_conversation_get_gc(info->conv), | |
497 gaim_chat_get_id(GAIM_CHAT(info->conv)), | |
498 message, buddy); | |
499 } | |
500 | |
501 gtk_widget_destroy(invite_dialog); | |
502 invite_dialog = NULL; | |
503 | |
504 g_free(info); | |
505 } | |
506 | |
507 static void | |
508 invite_cb(GtkWidget *widget, GaimConversation *conv) | |
509 { | |
510 InviteBuddyInfo *info = NULL; | |
511 | |
512 if (invite_dialog == NULL) { | |
513 GaimConnection *gc; | |
514 GaimWindow *win; | |
515 GaimGtkWindow *gtkwin; | |
516 GtkWidget *label; | |
517 GtkWidget *vbox, *hbox; | |
518 GtkWidget *table; | |
519 GtkWidget *img; | |
520 | |
521 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); | |
522 | |
523 info = g_new0(InviteBuddyInfo, 1); | |
524 info->conv = conv; | |
525 | |
526 gc = gaim_conversation_get_gc(conv); | |
527 win = gaim_conversation_get_window(conv); | |
528 gtkwin = GAIM_GTK_WINDOW(win); | |
529 | |
530 /* Create the new dialog. */ | |
531 invite_dialog = gtk_dialog_new_with_buttons( | |
532 _("Gaim - Invite Buddy Into Chat Room"), | |
533 GTK_WINDOW(gtkwin->window), | |
534 GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
535 GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); | |
536 | |
537 gtk_dialog_set_default_response(GTK_DIALOG(invite_dialog), | |
538 GTK_RESPONSE_OK); | |
539 gtk_container_set_border_width(GTK_CONTAINER(invite_dialog), 6); | |
540 gtk_window_set_resizable(GTK_WINDOW(invite_dialog), FALSE); | |
541 gtk_dialog_set_has_separator(GTK_DIALOG(invite_dialog), FALSE); | |
542 | |
543 /* Setup the outside spacing. */ | |
544 vbox = GTK_DIALOG(invite_dialog)->vbox; | |
545 | |
546 gtk_box_set_spacing(GTK_BOX(vbox), 12); | |
547 gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); | |
548 | |
549 /* Setup the inner hbox and put the dialog's icon in it. */ | |
550 hbox = gtk_hbox_new(FALSE, 12); | |
551 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
552 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
553 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
554 | |
555 /* Setup the right vbox. */ | |
556 vbox = gtk_vbox_new(FALSE, 0); | |
557 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
558 | |
559 /* Put our happy label in it. */ | |
560 label = gtk_label_new(_("Please enter the name of the user you wish " | |
561 "to invite, along with an optional invite " | |
562 "message.")); | |
563 gtk_widget_set_size_request(label, 350, -1); | |
564 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
565 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
566 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
567 | |
568 /* hbox for the table, and to give it some spacing on the left. */ | |
569 hbox = gtk_hbox_new(FALSE, 6); | |
570 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
571 | |
572 /* Setup the table we're going to use to lay stuff out. */ | |
573 table = gtk_table_new(2, 2, FALSE); | |
574 gtk_table_set_row_spacings(GTK_TABLE(table), 6); | |
575 gtk_table_set_col_spacings(GTK_TABLE(table), 6); | |
576 gtk_container_set_border_width(GTK_CONTAINER(table), 12); | |
577 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | |
578 | |
579 /* Now the Buddy label */ | |
580 label = gtk_label_new(NULL); | |
581 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Buddy:")); | |
582 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
583 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | |
584 | |
585 /* Now the Buddy drop-down entry field. */ | |
586 info->entry = gtk_combo_new(); | |
587 gtk_combo_set_case_sensitive(GTK_COMBO(info->entry), FALSE); | |
588 gtk_entry_set_activates_default( | |
589 GTK_ENTRY(GTK_COMBO(info->entry)->entry), TRUE); | |
590 | |
591 gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); | |
592 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->entry); | |
593 | |
594 /* Fill in the names. */ | |
595 gtk_combo_set_popdown_strings(GTK_COMBO(info->entry), | |
596 generate_invite_user_names(gc)); | |
597 | |
598 | |
599 /* Now the label for "Message" */ | |
600 label = gtk_label_new(NULL); | |
601 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Message:")); | |
602 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
603 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
604 | |
605 | |
606 /* And finally, the Message entry field. */ | |
607 info->message = gtk_entry_new(); | |
608 gtk_entry_set_activates_default(GTK_ENTRY(info->message), TRUE); | |
609 | |
610 gtk_table_attach_defaults(GTK_TABLE(table), info->message, 1, 2, 1, 2); | |
611 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->message); | |
612 | |
613 /* Connect the signals. */ | |
614 g_signal_connect(G_OBJECT(invite_dialog), "response", | |
615 G_CALLBACK(do_invite), info); | |
616 } | |
617 | |
618 gtk_widget_show_all(invite_dialog); | |
619 | |
620 if (info != NULL) | |
621 gtk_widget_grab_focus(GTK_COMBO(info->entry)->entry); | |
622 } | |
623 | |
624 static void | |
625 menu_save_as_cb(gpointer data, guint action, GtkWidget *widget) | |
626 { | |
627 GaimWindow *win = (GaimWindow *)data; | |
628 | |
629 save_convo(NULL, gaim_window_get_active_conversation(win)); | |
630 } | |
631 | |
632 static void | |
633 menu_view_log_cb(gpointer data, guint action, GtkWidget *widget) | |
634 { | |
635 GaimWindow *win = (GaimWindow *)data; | |
636 GaimConversation *conv; | |
637 | |
638 conv = gaim_window_get_active_conversation(win); | |
639 | |
640 conv_show_log(NULL, (char *)gaim_conversation_get_name(conv)); | |
641 } | |
642 | |
643 static void | |
644 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget) | |
645 { | |
646 GaimWindow *win = (GaimWindow *)data; | |
647 GaimConversation *conv; | |
648 | |
649 conv = gaim_window_get_active_conversation(win); | |
650 | |
651 gaim_gtkpounce_dialog_show(gaim_conversation_get_account(conv), | |
652 gaim_conversation_get_name(conv), NULL); | |
653 } | |
654 | |
655 static void | |
656 menu_insert_link_cb(gpointer data, guint action, GtkWidget *widget) | |
657 { | |
658 GaimWindow *win = (GaimWindow *)data; | |
659 GaimConversation *conv; | |
660 GaimGtkConversation *gtkconv; | |
661 | |
662 conv = gaim_window_get_active_conversation(win); | |
663 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
664 | |
665 show_insert_link(gtkconv->toolbar.link, conv); | |
666 } | |
667 | |
668 static void | |
669 menu_insert_image_cb(gpointer data, guint action, GtkWidget *widget) | |
670 { | |
671 GaimWindow *win = (GaimWindow *)data; | |
672 GaimGtkConversation *gtkconv; | |
673 | |
674 gtkconv = GAIM_GTK_CONVERSATION(gaim_window_get_active_conversation(win)); | |
675 | |
676 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image), | |
677 !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gtkconv->toolbar.image))); | |
678 } | |
679 | |
680 static void | |
681 menu_alias_cb(gpointer data, guint action, GtkWidget *widget) | |
682 { | |
683 GaimWindow *win = (GaimWindow *)data; | |
684 GaimConversation *conv; | |
685 struct buddy *b; | |
686 | |
687 conv = gaim_window_get_active_conversation(win); | |
688 | |
689 b = gaim_find_buddy(gaim_conversation_get_account(conv), | |
690 gaim_conversation_get_name(conv)); | |
691 | |
692 if (b != NULL) { | |
693 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) | |
694 alias_dialog_bud(b); | |
695 #if 0 | |
696 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) | |
697 alias_dialog_chat((struct chat *)b); | |
698 #endif | |
699 } | |
700 } | |
701 | |
702 static void | |
703 menu_get_info_cb(gpointer data, guint action, GtkWidget *widget) | |
704 { | |
705 GaimWindow *win = (GaimWindow *)data; | |
706 GaimConversation *conv; | |
707 | |
708 conv = gaim_window_get_active_conversation(win); | |
709 | |
710 info_cb(NULL, conv); | |
711 } | |
712 | |
713 static void | |
714 menu_invite_cb(gpointer data, guint action, GtkWidget *widget) | |
715 { | |
716 GaimWindow *win = (GaimWindow *)data; | |
717 GaimConversation *conv; | |
718 | |
719 conv = gaim_window_get_active_conversation(win); | |
720 | |
721 invite_cb(NULL, conv); | |
722 } | |
723 | |
724 static void | |
725 menu_warn_cb(gpointer data, guint action, GtkWidget *widget) | |
726 { | |
727 GaimWindow *win = (GaimWindow *)data; | |
728 GaimConversation *conv; | |
729 | |
730 conv = gaim_window_get_active_conversation(win); | |
731 | |
732 warn_cb(NULL, conv); | |
733 } | |
734 | |
735 static void | |
736 menu_block_cb(gpointer data, guint action, GtkWidget *widget) | |
737 { | |
738 GaimWindow *win = (GaimWindow *)data; | |
739 GaimConversation *conv; | |
740 | |
741 conv = gaim_window_get_active_conversation(win); | |
742 | |
743 block_cb(NULL, conv); | |
744 } | |
745 | |
746 static void | |
747 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget) | |
748 { | |
749 GaimWindow *win = (GaimWindow *)data; | |
750 GaimConversation *conv; | |
751 | |
752 conv = gaim_window_get_active_conversation(win); | |
753 | |
754 add_cb(NULL, conv); | |
755 } | |
756 | |
757 static void | |
758 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) | |
759 { | |
760 GaimWindow *win = (GaimWindow *)data; | |
761 | |
762 close_conv_cb(NULL, gaim_window_get_active_conversation(win)); | |
763 } | |
764 | |
765 static void | |
766 menu_logging_cb(gpointer data, guint action, GtkWidget *widget) | |
767 { | |
768 GaimWindow *win = (GaimWindow *)data; | |
769 GaimConversation *conv; | |
770 | |
771 conv = gaim_window_get_active_conversation(win); | |
772 | |
773 if (conv == NULL) | |
774 return; | |
775 | |
776 gaim_conversation_set_logging(conv, | |
777 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); | |
778 } | |
779 | |
780 static void | |
781 menu_sounds_cb(gpointer data, guint action, GtkWidget *widget) | |
782 { | |
783 GaimWindow *win = (GaimWindow *)data; | |
784 GaimConversation *conv; | |
785 GaimGtkConversation *gtkconv; | |
786 | |
787 conv = gaim_window_get_active_conversation(win); | |
788 | |
789 if (!conv) | |
790 return; | |
791 | |
792 gtkconv = GAIM_GTK_CONVERSATION(conv); | |
793 | |
794 gtkconv->make_sound = | |
795 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); | |
796 } | |
797 | |
798 | |
799 | |
575 void | 800 void |
576 im_cb(GtkWidget *widget, GaimConversation *conv) | 801 im_cb(GtkWidget *widget, GaimConversation *conv) |
577 { | 802 { |
578 GaimConversation *conv2; | 803 GaimConversation *conv2; |
579 GaimGtkConversation *gtkconv; | 804 GaimGtkConversation *gtkconv; |
646 | 871 |
647 add_chat_buddy_common(conv, name, pos); | 872 add_chat_buddy_common(conv, name, pos); |
648 } | 873 } |
649 | 874 |
650 static void | 875 static void |
651 menu_im_cb(GtkWidget *w, GaimConversation *conv) | 876 menu_chat_im_cb(GtkWidget *w, GaimConversation *conv) |
652 { | 877 { |
653 const char *who; | 878 const char *who; |
654 GaimConversation *conv2; | 879 GaimConversation *conv2; |
655 GaimAccount *account; | 880 GaimAccount *account; |
656 | 881 |
665 else | 890 else |
666 conv2 = gaim_conversation_new(GAIM_CONV_IM, account, who); | 891 conv2 = gaim_conversation_new(GAIM_CONV_IM, account, who); |
667 } | 892 } |
668 | 893 |
669 static void | 894 static void |
670 menu_info_cb(GtkWidget *w, GaimConversation *conv) | 895 menu_chat_info_cb(GtkWidget *w, GaimConversation *conv) |
671 { | 896 { |
672 GaimPluginProtocolInfo *prpl_info = NULL; | 897 GaimPluginProtocolInfo *prpl_info = NULL; |
673 GaimConnection *gc; | 898 GaimConnection *gc; |
674 char *who; | 899 char *who; |
675 | 900 |
689 prpl_info->get_info(gc, who); | 914 prpl_info->get_info(gc, who); |
690 } | 915 } |
691 } | 916 } |
692 | 917 |
693 static void | 918 static void |
694 menu_away_cb(GtkWidget *w, GaimConversation *conv) | 919 menu_chat_get_away_cb(GtkWidget *w, GaimConversation *conv) |
695 { | 920 { |
696 GaimPluginProtocolInfo *prpl_info = NULL; | 921 GaimPluginProtocolInfo *prpl_info = NULL; |
697 GaimConnection *gc; | 922 GaimConnection *gc; |
698 char *who; | 923 char *who; |
699 | 924 |
711 prpl_info->get_cb_away(gc, gaim_chat_get_id(GAIM_CHAT(conv)), who); | 936 prpl_info->get_cb_away(gc, gaim_chat_get_id(GAIM_CHAT(conv)), who); |
712 } | 937 } |
713 } | 938 } |
714 | 939 |
715 static void | 940 static void |
716 menu_add_cb(GtkWidget *w, GaimConversation *conv) | 941 menu_chat_add_cb(GtkWidget *w, GaimConversation *conv) |
717 { | 942 { |
718 GaimConnection *gc; | 943 GaimConnection *gc; |
719 struct buddy *b; | 944 struct buddy *b; |
720 char *name; | 945 char *name; |
721 | 946 |
795 | 1020 |
796 menu = gtk_menu_new(); | 1021 menu = gtk_menu_new(); |
797 | 1022 |
798 button = gtk_menu_item_new_with_label(_("IM")); | 1023 button = gtk_menu_item_new_with_label(_("IM")); |
799 g_signal_connect(G_OBJECT(button), "activate", | 1024 g_signal_connect(G_OBJECT(button), "activate", |
800 G_CALLBACK(menu_im_cb), conv); | 1025 G_CALLBACK(menu_chat_im_cb), conv); |
801 g_object_set_data(G_OBJECT(button), "user_data", who); | 1026 g_object_set_data(G_OBJECT(button), "user_data", who); |
802 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); | 1027 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); |
803 gtk_widget_show(button); | 1028 gtk_widget_show(button); |
804 | 1029 |
805 if (gaim_chat_is_user_ignored(GAIM_CHAT(conv), who)) | 1030 if (gaim_chat_is_user_ignored(GAIM_CHAT(conv), who)) |
814 gtk_widget_show(button); | 1039 gtk_widget_show(button); |
815 | 1040 |
816 if (gc && prpl_info->get_info) { | 1041 if (gc && prpl_info->get_info) { |
817 button = gtk_menu_item_new_with_label(_("Info")); | 1042 button = gtk_menu_item_new_with_label(_("Info")); |
818 g_signal_connect(G_OBJECT(button), "activate", | 1043 g_signal_connect(G_OBJECT(button), "activate", |
819 G_CALLBACK(menu_info_cb), conv); | 1044 G_CALLBACK(menu_chat_info_cb), conv); |
820 g_object_set_data(G_OBJECT(button), "user_data", who); | 1045 g_object_set_data(G_OBJECT(button), "user_data", who); |
821 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); | 1046 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); |
822 gtk_widget_show(button); | 1047 gtk_widget_show(button); |
823 } | 1048 } |
824 | 1049 |
825 if (gc && prpl_info->get_cb_away) { | 1050 if (gc && prpl_info->get_cb_away) { |
826 button = gtk_menu_item_new_with_label(_("Get Away Msg")); | 1051 button = gtk_menu_item_new_with_label(_("Get Away Msg")); |
827 g_signal_connect(G_OBJECT(button), "activate", | 1052 g_signal_connect(G_OBJECT(button), "activate", |
828 G_CALLBACK(menu_away_cb), conv); | 1053 G_CALLBACK(menu_chat_get_away_cb), conv); |
829 g_object_set_data(G_OBJECT(button), "user_data", who); | 1054 g_object_set_data(G_OBJECT(button), "user_data", who); |
830 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); | 1055 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); |
831 gtk_widget_show(button); | 1056 gtk_widget_show(button); |
832 } | 1057 } |
833 | 1058 |
837 button = gtk_menu_item_new_with_label(_("Remove")); | 1062 button = gtk_menu_item_new_with_label(_("Remove")); |
838 else | 1063 else |
839 button = gtk_menu_item_new_with_label(_("Add")); | 1064 button = gtk_menu_item_new_with_label(_("Add")); |
840 | 1065 |
841 g_signal_connect(G_OBJECT(button), "activate", | 1066 g_signal_connect(G_OBJECT(button), "activate", |
842 G_CALLBACK(menu_add_cb), conv); | 1067 G_CALLBACK(menu_chat_add_cb), conv); |
843 | 1068 |
844 g_object_set_data(G_OBJECT(button), "user_data", who); | 1069 g_object_set_data(G_OBJECT(button), "user_data", who); |
845 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); | 1070 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); |
846 gtk_widget_show(button); | 1071 gtk_widget_show(button); |
847 } | 1072 } |
850 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, | 1075 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, |
851 event->button, event->time); | 1076 event->button, event->time); |
852 } | 1077 } |
853 | 1078 |
854 return TRUE; | 1079 return TRUE; |
855 } | |
856 | |
857 static void | |
858 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info) | |
859 { | |
860 const char *buddy, *message; | |
861 GaimGtkConversation *gtkconv; | |
862 | |
863 gtkconv = GAIM_GTK_CONVERSATION(info->conv); | |
864 | |
865 if (resp == GTK_RESPONSE_OK) { | |
866 buddy = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(info->entry)->entry)); | |
867 message = gtk_entry_get_text(GTK_ENTRY(info->message)); | |
868 | |
869 if (!g_ascii_strcasecmp(buddy, "")) { | |
870 g_free(info); | |
871 | |
872 return; | |
873 } | |
874 | |
875 serv_chat_invite(gaim_conversation_get_gc(info->conv), | |
876 gaim_chat_get_id(GAIM_CHAT(info->conv)), | |
877 message, buddy); | |
878 } | |
879 | |
880 gtk_widget_destroy(invite_dialog); | |
881 invite_dialog = NULL; | |
882 | |
883 g_free(info); | |
884 } | |
885 | |
886 static void | |
887 invite_cb(GtkWidget *widget, GaimConversation *conv) | |
888 { | |
889 InviteBuddyInfo *info = NULL; | |
890 | |
891 if (invite_dialog == NULL) { | |
892 GaimConnection *gc; | |
893 GaimWindow *win; | |
894 GaimGtkWindow *gtkwin; | |
895 GtkWidget *label; | |
896 GtkWidget *vbox, *hbox; | |
897 GtkWidget *table; | |
898 GtkWidget *img; | |
899 | |
900 img = gtk_image_new_from_stock(GAIM_STOCK_DIALOG_QUESTION, GTK_ICON_SIZE_DIALOG); | |
901 | |
902 info = g_new0(InviteBuddyInfo, 1); | |
903 info->conv = conv; | |
904 | |
905 gc = gaim_conversation_get_gc(conv); | |
906 win = gaim_conversation_get_window(conv); | |
907 gtkwin = GAIM_GTK_WINDOW(win); | |
908 | |
909 /* Create the new dialog. */ | |
910 invite_dialog = gtk_dialog_new_with_buttons( | |
911 _("Gaim - Invite Buddy Into Chat Room"), | |
912 GTK_WINDOW(gtkwin->window), | |
913 GTK_DIALOG_MODAL, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | |
914 GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); | |
915 | |
916 gtk_dialog_set_default_response(GTK_DIALOG(invite_dialog), | |
917 GTK_RESPONSE_OK); | |
918 gtk_container_set_border_width(GTK_CONTAINER(invite_dialog), 6); | |
919 gtk_window_set_resizable(GTK_WINDOW(invite_dialog), FALSE); | |
920 gtk_dialog_set_has_separator(GTK_DIALOG(invite_dialog), FALSE); | |
921 | |
922 /* Setup the outside spacing. */ | |
923 vbox = GTK_DIALOG(invite_dialog)->vbox; | |
924 | |
925 gtk_box_set_spacing(GTK_BOX(vbox), 12); | |
926 gtk_container_set_border_width(GTK_CONTAINER(vbox), 6); | |
927 | |
928 /* Setup the inner hbox and put the dialog's icon in it. */ | |
929 hbox = gtk_hbox_new(FALSE, 12); | |
930 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
931 gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); | |
932 gtk_misc_set_alignment(GTK_MISC(img), 0, 0); | |
933 | |
934 /* Setup the right vbox. */ | |
935 vbox = gtk_vbox_new(FALSE, 0); | |
936 gtk_container_add(GTK_CONTAINER(hbox), vbox); | |
937 | |
938 /* Put our happy label in it. */ | |
939 label = gtk_label_new(_("Please enter the name of the user you wish " | |
940 "to invite, along with an optional invite " | |
941 "message.")); | |
942 gtk_widget_set_size_request(label, 350, -1); | |
943 gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); | |
944 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
945 gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); | |
946 | |
947 /* hbox for the table, and to give it some spacing on the left. */ | |
948 hbox = gtk_hbox_new(FALSE, 6); | |
949 gtk_container_add(GTK_CONTAINER(vbox), hbox); | |
950 | |
951 /* Setup the table we're going to use to lay stuff out. */ | |
952 table = gtk_table_new(2, 2, FALSE); | |
953 gtk_table_set_row_spacings(GTK_TABLE(table), 6); | |
954 gtk_table_set_col_spacings(GTK_TABLE(table), 6); | |
955 gtk_container_set_border_width(GTK_CONTAINER(table), 12); | |
956 gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); | |
957 | |
958 /* Now the Buddy label */ | |
959 label = gtk_label_new(NULL); | |
960 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Buddy:")); | |
961 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
962 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); | |
963 | |
964 /* Now the Buddy drop-down entry field. */ | |
965 info->entry = gtk_combo_new(); | |
966 gtk_combo_set_case_sensitive(GTK_COMBO(info->entry), FALSE); | |
967 gtk_entry_set_activates_default( | |
968 GTK_ENTRY(GTK_COMBO(info->entry)->entry), TRUE); | |
969 | |
970 gtk_table_attach_defaults(GTK_TABLE(table), info->entry, 1, 2, 0, 1); | |
971 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->entry); | |
972 | |
973 /* Fill in the names. */ | |
974 gtk_combo_set_popdown_strings(GTK_COMBO(info->entry), | |
975 generate_invite_user_names(gc)); | |
976 | |
977 | |
978 /* Now the label for "Message" */ | |
979 label = gtk_label_new(NULL); | |
980 gtk_label_set_markup_with_mnemonic(GTK_LABEL(label), _("_Message:")); | |
981 gtk_misc_set_alignment(GTK_MISC(label), 0, 0); | |
982 gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); | |
983 | |
984 | |
985 /* And finally, the Message entry field. */ | |
986 info->message = gtk_entry_new(); | |
987 gtk_entry_set_activates_default(GTK_ENTRY(info->message), TRUE); | |
988 | |
989 gtk_table_attach_defaults(GTK_TABLE(table), info->message, 1, 2, 1, 2); | |
990 gtk_label_set_mnemonic_widget(GTK_LABEL(label), info->message); | |
991 | |
992 /* Connect the signals. */ | |
993 g_signal_connect(G_OBJECT(invite_dialog), "response", | |
994 G_CALLBACK(do_invite), info); | |
995 } | |
996 | |
997 gtk_widget_show_all(invite_dialog); | |
998 | |
999 if (info != NULL) | |
1000 gtk_widget_grab_focus(GTK_COMBO(info->entry)->entry); | |
1001 } | 1080 } |
1002 | 1081 |
1003 static gboolean | 1082 static gboolean |
1004 entry_key_pressed_cb_2(GtkWidget *entry, GdkEventKey *event, gpointer data) | 1083 entry_key_pressed_cb_2(GtkWidget *entry, GdkEventKey *event, gpointer data) |
1005 { | 1084 { |
1778 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | 1857 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
1779 } | 1858 } |
1780 | 1859 |
1781 /* Update the menubar */ | 1860 /* Update the menubar */ |
1782 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { | 1861 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { |
1783 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE); | 1862 gtk_widget_show(gtkwin->menu.view_log); |
1784 gtk_widget_set_sensitive(gtkwin->menu.insert_image, | 1863 |
1785 (gc && prpl_info->options & OPT_PROTO_IM_IMAGE)); | 1864 if (gc && prpl_info->options & OPT_PROTO_IM_IMAGE) |
1865 gtk_widget_show(gtkwin->menu.insert_image); | |
1866 else | |
1867 gtk_widget_hide(gtkwin->menu.insert_image); | |
1868 | |
1869 gtk_widget_show(gtkwin->menu.add_pounce); | |
1870 gtk_widget_show(gtkwin->menu.get_info); | |
1871 gtk_widget_show(gtkwin->menu.warn); | |
1872 gtk_widget_show(gtkwin->menu.block); | |
1873 | |
1874 if (gaim_find_buddy(gaim_conversation_get_account(conv), | |
1875 gaim_conversation_get_name(conv)) == NULL) { | |
1876 | |
1877 gtk_widget_show(gtkwin->menu.add); | |
1878 gtk_widget_hide(gtkwin->menu.remove); | |
1879 } | |
1880 else { | |
1881 gtk_widget_show(gtkwin->menu.remove); | |
1882 gtk_widget_hide(gtkwin->menu.add); | |
1883 } | |
1884 | |
1885 gtk_widget_set_sensitive(gtkwin->menu.add, TRUE); | |
1886 gtk_widget_set_sensitive(gtkwin->menu.remove, TRUE); | |
1887 | |
1888 gtk_widget_set_sensitive(gtkwin->menu.alias, TRUE); | |
1889 | |
1890 gtk_widget_hide(gtkwin->menu.invite); | |
1786 | 1891 |
1787 if (gtkwin->menu.send_as != NULL) | 1892 if (gtkwin->menu.send_as != NULL) |
1788 g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); | 1893 g_timeout_add(0, (GSourceFunc)update_send_as_selection, win); |
1789 } | 1894 } |
1790 else { | 1895 else { |
1791 gtk_widget_set_sensitive(gtkwin->menu.view_log, FALSE); | 1896 gtk_widget_show(gtkwin->menu.invite); |
1792 gtk_widget_set_sensitive(gtkwin->menu.insert_image, FALSE); | 1897 |
1898 gtk_widget_hide(gtkwin->menu.view_log); | |
1899 gtk_widget_hide(gtkwin->menu.insert_image); | |
1900 | |
1901 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE); | |
1902 | |
1903 gtk_widget_hide(gtkwin->menu.add_pounce); | |
1904 gtk_widget_hide(gtkwin->menu.get_info); | |
1905 gtk_widget_hide(gtkwin->menu.warn); | |
1906 gtk_widget_hide(gtkwin->menu.block); | |
1907 | |
1908 if (gaim_find_chat(gaim_conversation_get_gc(conv), | |
1909 gaim_chat_get_id(GAIM_CHAT(conv))) == NULL) { | |
1910 | |
1911 gtk_widget_show(gtkwin->menu.add); | |
1912 gtk_widget_hide(gtkwin->menu.remove); | |
1913 } | |
1914 else { | |
1915 gtk_widget_show(gtkwin->menu.remove); | |
1916 gtk_widget_hide(gtkwin->menu.add); | |
1917 } | |
1918 | |
1919 gtk_widget_set_sensitive(gtkwin->menu.add, FALSE); | |
1920 gtk_widget_set_sensitive(gtkwin->menu.remove, FALSE); | |
1793 | 1921 |
1794 if (gtkwin->menu.send_as != NULL) | 1922 if (gtkwin->menu.send_as != NULL) |
1795 gtk_widget_hide(gtkwin->menu.send_as); | 1923 gtk_widget_hide(gtkwin->menu.send_as); |
1796 } | 1924 } |
1797 | 1925 |
2562 | 2690 |
2563 static GtkItemFactoryEntry menu_items[] = | 2691 static GtkItemFactoryEntry menu_items[] = |
2564 { | 2692 { |
2565 /* Conversation menu */ | 2693 /* Conversation menu */ |
2566 { N_("/_Conversation"), NULL, NULL, 0, "<Branch>" }, | 2694 { N_("/_Conversation"), NULL, NULL, 0, "<Branch>" }, |
2695 | |
2567 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0, | 2696 { N_("/Conversation/_Save As..."), NULL, menu_save_as_cb, 0, |
2568 "<StockItem>", GTK_STOCK_SAVE_AS }, | 2697 "<StockItem>", GTK_STOCK_SAVE_AS }, |
2569 { N_("/Conversation/View _Log..."), NULL, menu_view_log_cb, 0, NULL }, | 2698 { N_("/Conversation/View _Log..."), NULL, menu_view_log_cb, 0, NULL }, |
2699 | |
2570 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>" }, | 2700 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>" }, |
2701 | |
2571 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, | 2702 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, |
2572 0, NULL }, | 2703 0, NULL }, |
2704 { N_("/Conversation/A_lias..."), NULL, menu_alias_cb, 0, | |
2705 "<StockItem>", GAIM_STOCK_EDIT }, | |
2706 { N_("/Conversation/_Get Info..."), NULL, menu_get_info_cb, 0, | |
2707 "<StockItem>", GAIM_STOCK_INFO }, | |
2708 { N_("/Conversation/In_vite..."), NULL, menu_invite_cb, 0, | |
2709 "<StockItem>", GAIM_STOCK_INVITE }, | |
2710 | |
2573 { "/Conversation/sep2", NULL, NULL, 0, "<Separator>" }, | 2711 { "/Conversation/sep2", NULL, NULL, 0, "<Separator>" }, |
2712 | |
2574 { N_("/Conversation/Insert _URL..."), NULL, menu_insert_link_cb, 0, | 2713 { N_("/Conversation/Insert _URL..."), NULL, menu_insert_link_cb, 0, |
2575 "<StockItem>", GAIM_STOCK_LINK }, | 2714 "<StockItem>", GAIM_STOCK_LINK }, |
2576 { N_("/Conversation/Insert _Image..."), NULL, menu_insert_image_cb, 0, | 2715 { N_("/Conversation/Insert _Image..."), NULL, menu_insert_image_cb, 0, |
2577 "<StockItem>", GAIM_STOCK_IMAGE }, | 2716 "<StockItem>", GAIM_STOCK_IMAGE }, |
2717 | |
2578 { "/Conversation/sep3", NULL, NULL, 0, "<Separator>" }, | 2718 { "/Conversation/sep3", NULL, NULL, 0, "<Separator>" }, |
2719 | |
2720 { N_("/Conversation/_Warn..."), NULL, menu_warn_cb, 0, | |
2721 "<StockItem>", GAIM_STOCK_WARN }, | |
2722 { N_("/Conversation/_Block..."), NULL, menu_block_cb, 0, | |
2723 "<StockItem>", GAIM_STOCK_BLOCK }, | |
2724 { N_("/Conversation/_Add..."), NULL, menu_add_remove_cb, 0, | |
2725 "<StockItem>", GTK_STOCK_ADD }, | |
2726 { N_("/Conversation/_Remove..."), NULL, menu_add_remove_cb, 0, | |
2727 "<StockItem>", GTK_STOCK_REMOVE }, | |
2728 | |
2729 { "/Conversation/sep4", NULL, NULL, 0, "<Separator>" }, | |
2730 | |
2579 { N_("/Conversation/_Close"), NULL, menu_close_conv_cb, 0, | 2731 { N_("/Conversation/_Close"), NULL, menu_close_conv_cb, 0, |
2580 "<StockItem>", GTK_STOCK_CLOSE }, | 2732 "<StockItem>", GTK_STOCK_CLOSE }, |
2581 | 2733 |
2582 /* Options */ | 2734 /* Options */ |
2583 { N_("/_Options"), NULL, NULL, 0, "<Branch>" }, | 2735 { N_("/_Options"), NULL, NULL, 0, "<Branch>" }, |
2603 | 2755 |
2604 accel_group = gtk_accel_group_new (); | 2756 accel_group = gtk_accel_group_new (); |
2605 gtk_window_add_accel_group (GTK_WINDOW (gtkwin->window), accel_group); | 2757 gtk_window_add_accel_group (GTK_WINDOW (gtkwin->window), accel_group); |
2606 g_object_unref (accel_group); | 2758 g_object_unref (accel_group); |
2607 | 2759 |
2608 gtkwin->menu.item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, | 2760 gtkwin->menu.item_factory = |
2609 "<main>", accel_group); | 2761 gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>", accel_group); |
2610 | 2762 |
2611 gtk_item_factory_set_translate_func (gtkwin->menu.item_factory, | 2763 gtk_item_factory_set_translate_func(gtkwin->menu.item_factory, |
2612 item_factory_translate_func, | 2764 item_factory_translate_func, |
2613 NULL, NULL); | 2765 NULL, NULL); |
2614 | 2766 |
2615 gtk_item_factory_create_items(gtkwin->menu.item_factory, menu_item_count, | 2767 gtk_item_factory_create_items(gtkwin->menu.item_factory, menu_item_count, |
2616 menu_items, win); | 2768 menu_items, win); |
2617 | 2769 |
2618 gtkwin->menu.menubar = gtk_item_factory_get_widget(gtkwin->menu.item_factory, | 2770 |
2619 "<main>"); | 2771 gtkwin->menu.menubar = |
2620 gtkwin->menu.view_log = gtk_item_factory_get_widget(gtkwin->menu.item_factory, | 2772 gtk_item_factory_get_widget(gtkwin->menu.item_factory, "<main>"); |
2621 N_("/Conversation/View Log...")); | 2773 |
2622 gtkwin->menu.insert_link = gtk_item_factory_get_widget(gtkwin->menu.item_factory, | 2774 |
2623 N_("/Conversation/Insert URL...")); | 2775 gtkwin->menu.view_log = |
2624 gtkwin->menu.insert_image = gtk_item_factory_get_widget(gtkwin->menu.item_factory, | 2776 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
2625 N_("/Conversation/Insert Image...")); | 2777 N_("/Conversation/View Log...")); |
2626 gtkwin->menu.logging = gtk_item_factory_get_widget(gtkwin->menu.item_factory, | 2778 /* --- */ |
2627 N_("/Options/Enable Logging")); | 2779 |
2628 gtkwin->menu.sounds = gtk_item_factory_get_widget(gtkwin->menu.item_factory, | 2780 gtkwin->menu.add_pounce = |
2629 N_("/Options/Enable Sounds")); | 2781 gtk_item_factory_get_widget(gtkwin->menu.item_factory, |
2782 N_("/Conversation/Add Buddy Pounce...")); | |
2783 | |
2784 gtkwin->menu.alias = | |
2785 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2786 N_("/Conversation/Alias...")); | |
2787 | |
2788 gtkwin->menu.get_info = | |
2789 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2790 N_("/Conversation/Get Info...")); | |
2791 | |
2792 gtkwin->menu.invite = | |
2793 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2794 N_("/Conversation/Invite...")); | |
2795 | |
2796 /* --- */ | |
2797 | |
2798 gtkwin->menu.insert_link = | |
2799 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2800 N_("/Conversation/Insert URL...")); | |
2801 | |
2802 gtkwin->menu.insert_image = | |
2803 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2804 N_("/Conversation/Insert Image...")); | |
2805 | |
2806 /* --- */ | |
2807 | |
2808 gtkwin->menu.warn = | |
2809 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2810 N_("/Conversation/Warn...")); | |
2811 | |
2812 gtkwin->menu.block = | |
2813 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2814 N_("/Conversation/Block...")); | |
2815 | |
2816 gtkwin->menu.add = | |
2817 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2818 N_("/Conversation/Add...")); | |
2819 | |
2820 gtkwin->menu.remove = | |
2821 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2822 N_("/Conversation/Remove...")); | |
2823 | |
2824 /* --- */ | |
2825 | |
2826 gtkwin->menu.logging = | |
2827 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2828 N_("/Options/Enable Logging")); | |
2829 gtkwin->menu.sounds = | |
2830 gtk_item_factory_get_widget(gtkwin->menu.item_factory, | |
2831 N_("/Options/Enable Sounds")); | |
2630 | 2832 |
2631 generate_send_as_items(win, NULL); | 2833 generate_send_as_items(win, NULL); |
2632 | 2834 |
2633 gtk_widget_show(gtkwin->menu.menubar); | 2835 gtk_widget_show(gtkwin->menu.menubar); |
2634 | 2836 |
3792 | 3994 |
3793 static void | 3995 static void |
3794 update_convo_add_button(GaimConversation *conv) | 3996 update_convo_add_button(GaimConversation *conv) |
3795 { | 3997 { |
3796 GaimPluginProtocolInfo *prpl_info = NULL; | 3998 GaimPluginProtocolInfo *prpl_info = NULL; |
3999 GaimWindow *win; | |
4000 GaimGtkWindow *gtkwin; | |
3797 GaimGtkConversation *gtkconv; | 4001 GaimGtkConversation *gtkconv; |
3798 GaimConnection *gc; | 4002 GaimConnection *gc; |
3799 GaimConversationType type; | 4003 GaimConversationType type; |
3800 GtkWidget *parent; | 4004 GtkWidget *parent; |
3801 | 4005 |
4006 gc = gaim_conversation_get_gc(conv); | |
4007 win = gaim_conversation_get_window(conv); | |
3802 type = gaim_conversation_get_type(conv); | 4008 type = gaim_conversation_get_type(conv); |
3803 gc = gaim_conversation_get_gc(conv); | |
3804 gtkconv = GAIM_GTK_CONVERSATION(conv); | 4009 gtkconv = GAIM_GTK_CONVERSATION(conv); |
4010 gtkwin = GAIM_GTK_WINDOW(win); | |
3805 parent = gtk_widget_get_parent(gtkconv->u.im->add); | 4011 parent = gtk_widget_get_parent(gtkconv->u.im->add); |
3806 | 4012 |
3807 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); | 4013 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); |
3808 | 4014 |
3809 if (gaim_find_buddy(gc->account, gaim_conversation_get_name(conv))) { | 4015 if (gaim_find_buddy(gc->account, gaim_conversation_get_name(conv))) { |
3813 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->u.im->add, | 4019 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->u.im->add, |
3814 _("Remove the user from your buddy list"), NULL); | 4020 _("Remove the user from your buddy list"), NULL); |
3815 | 4021 |
3816 gtk_widget_set_sensitive(gtkconv->u.im->add, | 4022 gtk_widget_set_sensitive(gtkconv->u.im->add, |
3817 (gc != NULL && prpl_info->remove_buddy != NULL)); | 4023 (gc != NULL && prpl_info->remove_buddy != NULL)); |
3818 } else { | 4024 |
4025 if (gaim_window_get_active_conversation(win) == conv) { | |
4026 gtk_widget_show(gtkwin->menu.remove); | |
4027 gtk_widget_hide(gtkwin->menu.add); | |
4028 } | |
4029 } | |
4030 else { | |
3819 gtkconv->u.im->add = | 4031 gtkconv->u.im->add = |
3820 gaim_gtk_change_text(_("Add"), gtkconv->u.im->add, | 4032 gaim_gtk_change_text(_("Add"), gtkconv->u.im->add, |
3821 GTK_STOCK_ADD, type); | 4033 GTK_STOCK_ADD, type); |
3822 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->u.im->add, | 4034 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->u.im->add, |
3823 _("Add the user to your buddy list"), NULL); | 4035 _("Add the user to your buddy list"), NULL); |
3824 | 4036 |
3825 gtk_widget_set_sensitive(gtkconv->u.im->add, | 4037 gtk_widget_set_sensitive(gtkconv->u.im->add, |
3826 (gc != NULL && prpl_info->add_buddy != NULL)); | 4038 (gc != NULL && prpl_info->add_buddy != NULL)); |
4039 | |
4040 if (gaim_window_get_active_conversation(win) == conv) { | |
4041 gtk_widget_show(gtkwin->menu.add); | |
4042 gtk_widget_hide(gtkwin->menu.remove); | |
4043 } | |
3827 } | 4044 } |
3828 | 4045 |
3829 g_signal_connect(G_OBJECT(gtkconv->u.im->add), "clicked", | 4046 g_signal_connect(G_OBJECT(gtkconv->u.im->add), "clicked", |
3830 G_CALLBACK(add_cb), conv); | 4047 G_CALLBACK(add_cb), conv); |
3831 | 4048 |