comparison src/gtkconv.c @ 9812:d56f24cc4dad

[gaim-migrate @ 10683] See the changelog. This is a modified patch #1005629. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Sun, 22 Aug 2004 03:06:33 +0000
parents 4a15962c344a
children 34db8e8b49d8
comparison
equal deleted inserted replaced
9811:a107051d991f 9812:d56f24cc4dad
2568 GaimGtkConversation *gtkconv; 2568 GaimGtkConversation *gtkconv;
2569 GaimConnection *gc; 2569 GaimConnection *gc;
2570 GaimPluginProtocolInfo *prpl_info = NULL; 2570 GaimPluginProtocolInfo *prpl_info = NULL;
2571 GdkPixbuf *window_icon = NULL; 2571 GdkPixbuf *window_icon = NULL;
2572 GtkIMHtmlButtons buttons; 2572 GtkIMHtmlButtons buttons;
2573 GaimAccount *account;
2573 2574
2574 win = gaim_conversation_get_window(conv); 2575 win = gaim_conversation_get_window(conv);
2575 gtkwin = GAIM_GTK_WINDOW(win); 2576 gtkwin = GAIM_GTK_WINDOW(win);
2576 gtkconv = GAIM_GTK_CONVERSATION(conv); 2577 gtkconv = GAIM_GTK_CONVERSATION(conv);
2577 gc = gaim_conversation_get_gc(conv); 2578 gc = gaim_conversation_get_gc(conv);
2579 account = gaim_connection_get_account(gc);
2578 2580
2579 if (gc != NULL) 2581 if (gc != NULL)
2580 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); 2582 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
2581 2583
2582 if (gtkwin->menu.send_as != NULL) 2584 if (gtkwin->menu.send_as != NULL)
2608 gtk_widget_show(gtkwin->menu.warn); 2610 gtk_widget_show(gtkwin->menu.warn);
2609 gtk_widget_hide(gtkwin->menu.invite); 2611 gtk_widget_hide(gtkwin->menu.invite);
2610 gtk_widget_show(gtkwin->menu.alias); 2612 gtk_widget_show(gtkwin->menu.alias);
2611 gtk_widget_show(gtkwin->menu.block); 2613 gtk_widget_show(gtkwin->menu.block);
2612 2614
2613 if (gaim_find_buddy(gaim_conversation_get_account(conv), 2615 if (gaim_find_buddy(account, gaim_conversation_get_name(conv)) == NULL) {
2614 gaim_conversation_get_name(conv)) == NULL) {
2615 gtk_widget_show(gtkwin->menu.add); 2616 gtk_widget_show(gtkwin->menu.add);
2616 gtk_widget_hide(gtkwin->menu.remove); 2617 gtk_widget_hide(gtkwin->menu.remove);
2617 gtk_widget_show(gtkconv->add); 2618 gtk_widget_show(gtkconv->add);
2618 gtk_widget_hide(gtkconv->remove); 2619 gtk_widget_hide(gtkconv->remove);
2619 } else { 2620 } else {
2641 gtk_widget_hide(gtkwin->menu.warn); 2642 gtk_widget_hide(gtkwin->menu.warn);
2642 gtk_widget_show(gtkwin->menu.invite); 2643 gtk_widget_show(gtkwin->menu.invite);
2643 gtk_widget_show(gtkwin->menu.alias); 2644 gtk_widget_show(gtkwin->menu.alias);
2644 gtk_widget_hide(gtkwin->menu.block); 2645 gtk_widget_hide(gtkwin->menu.block);
2645 2646
2646 if (gaim_blist_find_chat(gaim_conversation_get_account(conv), 2647 if (gaim_blist_find_chat(account, gaim_conversation_get_name(conv)) == NULL) {
2647 gaim_conversation_get_name(conv)) == NULL) { 2648 /* If the chat is NOT in the buddy list */
2648 /* If the chat is NOT in the buddy list */
2649 gtk_widget_show(gtkwin->menu.add); 2649 gtk_widget_show(gtkwin->menu.add);
2650 gtk_widget_hide(gtkwin->menu.remove); 2650 gtk_widget_hide(gtkwin->menu.remove);
2651 gtk_widget_show(gtkconv->add); 2651 gtk_widget_show(gtkconv->add);
2652 gtk_widget_hide(gtkconv->remove); 2652 gtk_widget_hide(gtkconv->remove);
2653 } else { 2653 } else {
2654 /* If the chat IS in the buddy list */ 2654 /* If the chat IS in the buddy list */
2655 gtk_widget_hide(gtkwin->menu.add);
2655 gtk_widget_show(gtkwin->menu.remove); 2656 gtk_widget_show(gtkwin->menu.remove);
2656 gtk_widget_hide(gtkwin->menu.add);
2657 gtk_widget_hide(gtkconv->add); 2657 gtk_widget_hide(gtkconv->add);
2658 gtk_widget_show(gtkconv->remove); 2658 gtk_widget_show(gtkconv->remove);
2659 } 2659 }
2660 2660
2661 gtk_widget_show(gtkwin->menu.insert_link); 2661 gtk_widget_show(gtkwin->menu.insert_link);
2670 ( (gaim_conversation_get_type(conv) != GAIM_CONV_CHAT) || 2670 ( (gaim_conversation_get_type(conv) != GAIM_CONV_CHAT) ||
2671 !gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)) )) { 2671 !gaim_conv_chat_has_left(GAIM_CONV_CHAT(conv)) )) {
2672 /* Account is online */ 2672 /* Account is online */
2673 2673
2674 /* Deal with buttons */ 2674 /* Deal with buttons */
2675 gtk_widget_set_sensitive(gtkconv->add, TRUE);
2676 gtk_widget_set_sensitive(gtkconv->remove, TRUE);
2677 gtk_widget_set_sensitive(gtkconv->info, (prpl_info->get_info != NULL)); 2675 gtk_widget_set_sensitive(gtkconv->info, (prpl_info->get_info != NULL));
2678 2676
2679 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) 2677 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM)
2680 { 2678 {
2681 gtk_widget_set_sensitive(gtkconv->send, 2679 gtk_widget_set_sensitive(gtkconv->add, (prpl_info->add_buddy != NULL));
2682 (prpl_info->send_im != NULL)); 2680 gtk_widget_set_sensitive(gtkconv->remove, (prpl_info->remove_buddy != NULL));
2683 gtk_widget_set_sensitive(gtkconv->u.im->warn, 2681 gtk_widget_set_sensitive(gtkconv->send, (prpl_info->send_im != NULL));
2684 (prpl_info->warn != NULL)); 2682 gtk_widget_set_sensitive(gtkconv->u.im->warn, (prpl_info->warn != NULL));
2685 gtk_widget_set_sensitive(gtkconv->u.im->block, 2683 gtk_widget_set_sensitive(gtkconv->u.im->block, (prpl_info->add_deny != NULL));
2686 (prpl_info->add_deny != NULL));
2687 gtk_widget_set_sensitive(gtkconv->u.im->send_file, 2684 gtk_widget_set_sensitive(gtkconv->u.im->send_file,
2688 (prpl_info->send_file 2685 (prpl_info->send_file && (!prpl_info->can_receive_file ||
2689 && (!prpl_info->can_receive_file 2686 prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv)))));
2690 || prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv)))));
2691 } 2687 }
2692 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) 2688 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT)
2693 { 2689 {
2694 gtk_widget_set_sensitive(gtkconv->send, 2690 /* Only allow adding/removing if this is a chat and not a conference */
2695 (prpl_info->chat_send != NULL)); 2691 gtk_widget_set_sensitive(gtkconv->add, (prpl_info->join_chat != NULL));
2696 gtk_widget_set_sensitive(gtkconv->u.chat->invite, 2692 gtk_widget_set_sensitive(gtkconv->remove, (prpl_info->join_chat != NULL));
2697 (prpl_info->chat_invite != NULL)); 2693 gtk_widget_set_sensitive(gtkconv->send, (prpl_info->chat_send != NULL));
2694 gtk_widget_set_sensitive(gtkconv->u.chat->invite, (prpl_info->chat_invite != NULL));
2698 } 2695 }
2699 2696
2700 /* Deal with the toolbar */ 2697 /* Deal with the toolbar */
2701
2702 if (gc->flags & GAIM_CONNECTION_HTML) { 2698 if (gc->flags & GAIM_CONNECTION_HTML) {
2703 buttons = GTK_IMHTML_ALL; /* Everything on */ 2699 buttons = GTK_IMHTML_ALL; /* Everything on */
2704 if (!(prpl_info->options & OPT_PROTO_IM_IMAGE)) 2700 if (!(prpl_info->options & OPT_PROTO_IM_IMAGE))
2705 buttons &= ~GTK_IMHTML_IMAGE; 2701 buttons &= ~GTK_IMHTML_IMAGE;
2706 if (gc->flags & GAIM_CONNECTION_NO_BGCOLOR) 2702 if (gc->flags & GAIM_CONNECTION_NO_BGCOLOR)
2713 buttons &= ~GTK_IMHTML_LINKDESC; 2709 buttons &= ~GTK_IMHTML_LINKDESC;
2714 } else { 2710 } else {
2715 buttons = GTK_IMHTML_SMILEY; 2711 buttons = GTK_IMHTML_SMILEY;
2716 } 2712 }
2717 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons); 2713 gtk_imhtml_set_format_functions(GTK_IMHTML(gtkconv->entry), buttons);
2718 gtk_imhtmltoolbar_associate_smileys (GTK_IMHTMLTOOLBAR(gtkconv->toolbar), gaim_account_get_protocol_id(gaim_conversation_get_account(conv))); 2714 gtk_imhtmltoolbar_associate_smileys(GTK_IMHTMLTOOLBAR(gtkconv->toolbar), gaim_account_get_protocol_id(account));
2719 2715
2720 /* Deal with menu items */ 2716 /* Deal with menu items */
2721 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE); 2717 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE);
2722 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE); 2718 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE);
2723 gtk_widget_set_sensitive(gtkwin->menu.get_info, (prpl_info->get_info != NULL)); 2719 gtk_widget_set_sensitive(gtkwin->menu.get_info, (prpl_info->get_info != NULL));
2724 gtk_widget_set_sensitive(gtkwin->menu.warn, (prpl_info->warn != NULL)); 2720 gtk_widget_set_sensitive(gtkwin->menu.warn, (prpl_info->warn != NULL));
2725 gtk_widget_set_sensitive(gtkwin->menu.invite, 2721 gtk_widget_set_sensitive(gtkwin->menu.invite, (prpl_info->chat_invite != NULL));
2726 (prpl_info->chat_invite != NULL)); 2722 gtk_widget_set_sensitive(gtkwin->menu.block, (prpl_info->add_deny != NULL));
2723 gtk_widget_set_sensitive(gtkwin->menu.insert_link, (gc->flags & GAIM_CONNECTION_HTML));
2724 gtk_widget_set_sensitive(gtkwin->menu.insert_image, (prpl_info->options & OPT_PROTO_IM_IMAGE));
2727 2725
2728 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { 2726 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) {
2727 gtk_widget_set_sensitive(gtkwin->menu.add, (prpl_info->add_buddy != NULL));
2728 gtk_widget_set_sensitive(gtkwin->menu.remove, (prpl_info->remove_buddy != NULL));
2729 gtk_widget_set_sensitive(gtkwin->menu.send_file, 2729 gtk_widget_set_sensitive(gtkwin->menu.send_file,
2730 (gc && prpl_info->send_file != NULL 2730 (prpl_info->send_file != NULL && (!prpl_info->can_receive_file ||
2731 && (!prpl_info->can_receive_file 2731 prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv)))));
2732 || prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv))))); 2732 gtk_widget_set_sensitive(gtkwin->menu.alias,
2733 if (gaim_find_buddy(gaim_conversation_get_account(conv), 2733 (gaim_find_buddy(account, gaim_conversation_get_name(conv)) != NULL));
2734 gaim_conversation_get_name(conv)) == NULL)
2735 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE);
2736 else
2737 gtk_widget_set_sensitive(gtkwin->menu.alias, TRUE);
2738 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { 2734 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) {
2739 if (gaim_blist_find_chat(gaim_conversation_get_account(conv), 2735 gtk_widget_set_sensitive(gtkwin->menu.add, (prpl_info->join_chat != NULL));
2740 gaim_conversation_get_name(conv)) == NULL) 2736 gtk_widget_set_sensitive(gtkwin->menu.remove, (prpl_info->join_chat != NULL));
2741 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE); 2737 gtk_widget_set_sensitive(gtkwin->menu.alias,
2742 else 2738 (gaim_blist_find_chat(account, gaim_conversation_get_name(conv)) != NULL));
2743 gtk_widget_set_sensitive(gtkwin->menu.alias, TRUE); 2739 }
2744 }
2745
2746 gtk_widget_set_sensitive(gtkwin->menu.block,
2747 (prpl_info->add_deny != NULL));
2748 gtk_widget_set_sensitive(gtkwin->menu.add, TRUE);
2749 gtk_widget_set_sensitive(gtkwin->menu.remove, TRUE);
2750 gtk_widget_set_sensitive(gtkwin->menu.insert_link,
2751 gc->flags & GAIM_CONNECTION_HTML);
2752 gtk_widget_set_sensitive(gtkwin->menu.insert_image,
2753 (prpl_info->options & OPT_PROTO_IM_IMAGE));
2754 } else { 2740 } else {
2755 /* Account is offline */ 2741 /* Account is offline */
2756 /* Or it's a chat where we left. */ 2742 /* Or it's a chat that we've left. */
2757 2743
2758 /* Deal with buttons */ 2744 /* Deal with buttons */
2759 gtk_widget_set_sensitive(gtkconv->add, FALSE); 2745 gtk_widget_set_sensitive(gtkconv->add, FALSE);
2760 gtk_widget_set_sensitive(gtkconv->remove, FALSE); 2746 gtk_widget_set_sensitive(gtkconv->remove, FALSE);
2761 gtk_widget_set_sensitive(gtkconv->info, FALSE); 2747 gtk_widget_set_sensitive(gtkconv->info, FALSE);