comparison src/gtkconv.c @ 9468:4d0b0d5485e6

[gaim-migrate @ 10293] (23:23:20) datallah: LSchiere: if you are up to it, this: http://www.butfer.com/gaim-patches/gtkconv_send_file.patch, makes it so that you can send files to people from the conversation window. committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Wed, 07 Jul 2004 03:24:37 +0000
parents dbeca8eca296
children 0e11618b37d7
comparison
equal deleted inserted replaced
9467:b6971539f7af 9468:4d0b0d5485e6
681 681
682 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); 682 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry);
683 } 683 }
684 684
685 static void 685 static void
686 send_file_cb(GtkWidget *widget, GaimConversation *conv)
687 {
688 serv_send_file(gaim_conversation_get_gc(conv), gaim_conversation_get_name(conv), NULL);
689
690 }
691
692 static void
686 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info) 693 do_invite(GtkWidget *w, int resp, InviteBuddyInfo *info)
687 { 694 {
688 const char *buddy, *message; 695 const char *buddy, *message;
689 GaimGtkConversation *gtkconv; 696 GaimGtkConversation *gtkconv;
690 697
954 gtk_widget_show_all(gtkconv->dialogs.search); 961 gtk_widget_show_all(gtkconv->dialogs.search);
955 gtk_widget_grab_focus(s->entry); 962 gtk_widget_grab_focus(s->entry);
956 } 963 }
957 964
958 static void 965 static void
966 menu_send_file_cb(gpointer data, guint action, GtkWidget *widget)
967 {
968 GaimConvWindow *win = (GaimConvWindow *)data;
969 GaimConversation *conv = gaim_conv_window_get_active_conversation(win);
970
971 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) {
972 serv_send_file(gaim_conversation_get_gc(conv), gaim_conversation_get_name(conv), NULL);
973 }
974
975 }
976
977 static void
959 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget) 978 menu_add_pounce_cb(gpointer data, guint action, GtkWidget *widget)
960 { 979 {
961 GaimConvWindow *win = (GaimConvWindow *)data; 980 GaimConvWindow *win = (GaimConvWindow *)data;
962 GaimConversation *conv; 981 GaimConversation *conv;
963 982
1265 1284
1266 chat_do_im(conv, who); 1285 chat_do_im(conv, who);
1267 } 1286 }
1268 1287
1269 static void 1288 static void
1289 menu_chat_send_file_cb(GtkWidget *w, GaimConversation *conv)
1290 {
1291 const char *who = g_object_get_data(G_OBJECT(w), "user_data");
1292 GaimConnection *gc = gaim_conversation_get_gc(conv);
1293
1294 serv_send_file(gc, who, NULL);
1295 }
1296
1297 static void
1270 menu_chat_info_cb(GtkWidget *w, GaimConversation *conv) 1298 menu_chat_info_cb(GtkWidget *w, GaimConversation *conv)
1271 { 1299 {
1272 char *who; 1300 char *who;
1273 1301
1274 who = g_object_get_data(G_OBJECT(w), "user_data"); 1302 who = g_object_get_data(G_OBJECT(w), "user_data");
1341 G_CALLBACK(menu_chat_im_cb), conv); 1369 G_CALLBACK(menu_chat_im_cb), conv);
1342 g_object_set_data(G_OBJECT(button), "user_data", who); 1370 g_object_set_data(G_OBJECT(button), "user_data", who);
1343 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button); 1371 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button);
1344 gtk_widget_show(button); 1372 gtk_widget_show(button);
1345 1373
1374 if (gc && prpl_info && prpl_info->send_file
1375 && (!prpl_info->can_receive_file || prpl_info->can_receive_file(gc, who))) {
1376 button = gtk_menu_item_new_with_label(_("Send File"));
1377 g_signal_connect(G_OBJECT(button), "activate",
1378 G_CALLBACK(menu_chat_send_file_cb), conv);
1379 g_object_set_data(G_OBJECT(button), "user_data", who);
1380 gtk_menu_shell_append(GTK_MENU_SHELL(menu), button);
1381 gtk_widget_show(button);
1382 }
1383
1346 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), who)) 1384 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), who))
1347 button = gtk_menu_item_new_with_label(_("Un-Ignore")); 1385 button = gtk_menu_item_new_with_label(_("Un-Ignore"));
1348 else 1386 else
1349 button = gtk_menu_item_new_with_label(_("Ignore")); 1387 button = gtk_menu_item_new_with_label(_("Ignore"));
1350 1388
2555 /* Deal with buttons */ 2593 /* Deal with buttons */
2556 gtk_widget_show(gtkconv->info); 2594 gtk_widget_show(gtkconv->info);
2557 gtk_widget_show(gtkconv->send); 2595 gtk_widget_show(gtkconv->send);
2558 gtk_widget_show(gtkconv->u.im->warn); 2596 gtk_widget_show(gtkconv->u.im->warn);
2559 gtk_widget_show(gtkconv->u.im->block); 2597 gtk_widget_show(gtkconv->u.im->block);
2598 gtk_widget_show(gtkconv->u.im->send_file);
2560 2599
2561 /* Deal with menu items */ 2600 /* Deal with menu items */
2562 gtk_widget_show(gtkwin->menu.view_log); 2601 gtk_widget_show(gtkwin->menu.view_log);
2602 gtk_widget_show(gtkwin->menu.send_file);
2563 gtk_widget_show(gtkwin->menu.add_pounce); 2603 gtk_widget_show(gtkwin->menu.add_pounce);
2564 gtk_widget_show(gtkwin->menu.get_info); 2604 gtk_widget_show(gtkwin->menu.get_info);
2565 gtk_widget_show(gtkwin->menu.warn); 2605 gtk_widget_show(gtkwin->menu.warn);
2566 gtk_widget_hide(gtkwin->menu.invite); 2606 gtk_widget_hide(gtkwin->menu.invite);
2567 gtk_widget_show(gtkwin->menu.alias); 2607 gtk_widget_show(gtkwin->menu.alias);
2590 gtk_widget_show(gtkconv->send); 2630 gtk_widget_show(gtkconv->send);
2591 gtk_widget_show(gtkconv->u.chat->invite); 2631 gtk_widget_show(gtkconv->u.chat->invite);
2592 2632
2593 /* Deal with menu items */ 2633 /* Deal with menu items */
2594 gtk_widget_hide(gtkwin->menu.view_log); 2634 gtk_widget_hide(gtkwin->menu.view_log);
2635 gtk_widget_hide(gtkwin->menu.send_file);
2595 gtk_widget_hide(gtkwin->menu.add_pounce); 2636 gtk_widget_hide(gtkwin->menu.add_pounce);
2596 gtk_widget_hide(gtkwin->menu.get_info); 2637 gtk_widget_hide(gtkwin->menu.get_info);
2597 gtk_widget_hide(gtkwin->menu.warn); 2638 gtk_widget_hide(gtkwin->menu.warn);
2598 gtk_widget_show(gtkwin->menu.invite); 2639 gtk_widget_show(gtkwin->menu.invite);
2599 gtk_widget_show(gtkwin->menu.alias); 2640 gtk_widget_show(gtkwin->menu.alias);
2636 (prpl_info->send_im != NULL)); 2677 (prpl_info->send_im != NULL));
2637 gtk_widget_set_sensitive(gtkconv->u.im->warn, 2678 gtk_widget_set_sensitive(gtkconv->u.im->warn,
2638 (prpl_info->warn != NULL)); 2679 (prpl_info->warn != NULL));
2639 gtk_widget_set_sensitive(gtkconv->u.im->block, 2680 gtk_widget_set_sensitive(gtkconv->u.im->block,
2640 (prpl_info->add_deny != NULL)); 2681 (prpl_info->add_deny != NULL));
2682 gtk_widget_set_sensitive(gtkconv->u.im->send_file,
2683 (prpl_info->send_file
2684 && (!prpl_info->can_receive_file
2685 || prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv)))));
2641 } 2686 }
2642 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) 2687 else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT)
2643 { 2688 {
2644 gtk_widget_set_sensitive(gtkconv->send, 2689 gtk_widget_set_sensitive(gtkconv->send,
2645 (prpl_info->chat_send != NULL)); 2690 (prpl_info->chat_send != NULL));
2674 gtk_widget_set_sensitive(gtkwin->menu.warn, (prpl_info->warn != NULL)); 2719 gtk_widget_set_sensitive(gtkwin->menu.warn, (prpl_info->warn != NULL));
2675 gtk_widget_set_sensitive(gtkwin->menu.invite, 2720 gtk_widget_set_sensitive(gtkwin->menu.invite,
2676 (prpl_info->chat_invite != NULL)); 2721 (prpl_info->chat_invite != NULL));
2677 2722
2678 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { 2723 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) {
2724 gtk_widget_set_sensitive(gtkwin->menu.send_file,
2725 (gc && prpl_info->send_file != NULL
2726 && (!prpl_info->can_receive_file
2727 || prpl_info->can_receive_file(gc, gaim_conversation_get_name(conv)))));
2679 if (gaim_find_buddy(gaim_conversation_get_account(conv), 2728 if (gaim_find_buddy(gaim_conversation_get_account(conv),
2680 gaim_conversation_get_name(conv)) == NULL) 2729 gaim_conversation_get_name(conv)) == NULL)
2681 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE); 2730 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE);
2682 else 2731 else
2683 gtk_widget_set_sensitive(gtkwin->menu.alias, TRUE); 2732 gtk_widget_set_sensitive(gtkwin->menu.alias, TRUE);
2707 gtk_widget_set_sensitive(gtkconv->info, FALSE); 2756 gtk_widget_set_sensitive(gtkconv->info, FALSE);
2708 gtk_widget_set_sensitive(gtkconv->send, FALSE); 2757 gtk_widget_set_sensitive(gtkconv->send, FALSE);
2709 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { 2758 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) {
2710 gtk_widget_set_sensitive(gtkconv->u.im->warn, FALSE); 2759 gtk_widget_set_sensitive(gtkconv->u.im->warn, FALSE);
2711 gtk_widget_set_sensitive(gtkconv->u.im->block, FALSE); 2760 gtk_widget_set_sensitive(gtkconv->u.im->block, FALSE);
2761 gtk_widget_set_sensitive(gtkconv->u.im->send_file, FALSE);
2712 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) { 2762 } else if (gaim_conversation_get_type(conv) == GAIM_CONV_CHAT) {
2713 gtk_widget_set_sensitive(gtkconv->u.chat->invite, FALSE); 2763 gtk_widget_set_sensitive(gtkconv->u.chat->invite, FALSE);
2714 } 2764 }
2715 2765
2716 /* Then deal with menu items */ 2766 /* Then deal with menu items */
2717 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE); 2767 gtk_widget_set_sensitive(gtkwin->menu.view_log, TRUE);
2768 gtk_widget_set_sensitive(gtkwin->menu.send_file, FALSE);
2718 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE); 2769 gtk_widget_set_sensitive(gtkwin->menu.add_pounce, TRUE);
2719 gtk_widget_set_sensitive(gtkwin->menu.get_info, FALSE); 2770 gtk_widget_set_sensitive(gtkwin->menu.get_info, FALSE);
2720 gtk_widget_set_sensitive(gtkwin->menu.warn, FALSE); 2771 gtk_widget_set_sensitive(gtkwin->menu.warn, FALSE);
2721 gtk_widget_set_sensitive(gtkwin->menu.invite, FALSE); 2772 gtk_widget_set_sensitive(gtkwin->menu.invite, FALSE);
2722 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE); 2773 gtk_widget_set_sensitive(gtkwin->menu.alias, FALSE);
3390 "<StockItem>", GTK_STOCK_SAVE_AS }, 3441 "<StockItem>", GTK_STOCK_SAVE_AS },
3391 { N_("/Conversation/Clear"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR }, 3442 { N_("/Conversation/Clear"), "<CTL>L", menu_clear_cb, 0, "<StockItem>", GTK_STOCK_CLEAR },
3392 3443
3393 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>" }, 3444 { "/Conversation/sep1", NULL, NULL, 0, "<Separator>" },
3394 3445
3446 { N_("/Conversation/Se_nd File..."), NULL, menu_send_file_cb, 0, "<StockItem>", GAIM_STOCK_FILE_TRANSFER },
3395 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb, 3447 { N_("/Conversation/Add Buddy _Pounce..."), NULL, menu_add_pounce_cb,
3396 0, NULL }, 3448 0, NULL },
3397 { N_("/Conversation/_Get Info"), NULL, menu_get_info_cb, 0, 3449 { N_("/Conversation/_Get Info"), NULL, menu_get_info_cb, 0,
3398 "<StockItem>", GAIM_STOCK_INFO }, 3450 "<StockItem>", GAIM_STOCK_INFO },
3399 { N_("/Conversation/_Warn..."), NULL, menu_warn_cb, 0, 3451 { N_("/Conversation/_Warn..."), NULL, menu_warn_cb, 0,
3472 gtkwin->menu.view_log = 3524 gtkwin->menu.view_log =
3473 gtk_item_factory_get_widget(gtkwin->menu.item_factory, 3525 gtk_item_factory_get_widget(gtkwin->menu.item_factory,
3474 N_("/Conversation/View Log")); 3526 N_("/Conversation/View Log"));
3475 /* --- */ 3527 /* --- */
3476 3528
3529 gtkwin->menu.send_file =
3530 gtk_item_factory_get_widget(gtkwin->menu.item_factory,
3531 N_("/Conversation/Send File..."));
3532
3477 gtkwin->menu.add_pounce = 3533 gtkwin->menu.add_pounce =
3478 gtk_item_factory_get_widget(gtkwin->menu.item_factory, 3534 gtk_item_factory_get_widget(gtkwin->menu.item_factory,
3479 N_("/Conversation/Add Buddy Pounce...")); 3535 N_("/Conversation/Add Buddy Pounce..."));
3480 3536
3481 /* --- */ 3537 /* --- */
3584 GAIM_STOCK_BLOCK, GAIM_CONV_IM); 3640 GAIM_STOCK_BLOCK, GAIM_CONV_IM);
3585 gtk_tooltips_set_tip(gtkconv->tooltips, gtkim->block, 3641 gtk_tooltips_set_tip(gtkconv->tooltips, gtkim->block,
3586 _("Block the user"), NULL); 3642 _("Block the user"), NULL);
3587 gtk_box_pack_start(GTK_BOX(parent), gtkim->block, FALSE, FALSE, 0); 3643 gtk_box_pack_start(GTK_BOX(parent), gtkim->block, FALSE, FALSE, 0);
3588 3644
3645 /* Block button */
3646 gtkim->send_file = gaim_gtk_change_text(_("Send File"), gtkim->send_file,
3647 GAIM_STOCK_FILE_TRANSFER, GAIM_CONV_IM);
3648 gtk_tooltips_set_tip(gtkconv->tooltips, gtkim->send_file,
3649 _("Send a file to the user"), NULL);
3650 gtk_box_pack_start(GTK_BOX(parent), gtkim->send_file, FALSE, FALSE, 0);
3651
3589 /* Add button */ 3652 /* Add button */
3590 gtkconv->add = gaim_gtk_change_text(_("Add"), gtkconv->add, 3653 gtkconv->add = gaim_gtk_change_text(_("Add"), gtkconv->add,
3591 GTK_STOCK_ADD, GAIM_CONV_IM); 3654 GTK_STOCK_ADD, GAIM_CONV_IM);
3592 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->add, 3655 gtk_tooltips_set_tip(gtkconv->tooltips, gtkconv->add,
3593 _("Add the user to your buddy list"), NULL); 3656 _("Add the user to your buddy list"), NULL);
3607 _("Get the user's information"), NULL); 3670 _("Get the user's information"), NULL);
3608 gtk_box_pack_start(GTK_BOX(parent), gtkconv->info, FALSE, FALSE, 0); 3671 gtk_box_pack_start(GTK_BOX(parent), gtkconv->info, FALSE, FALSE, 0);
3609 3672
3610 gtk_button_set_relief(GTK_BUTTON(gtkim->warn), GTK_RELIEF_NONE); 3673 gtk_button_set_relief(GTK_BUTTON(gtkim->warn), GTK_RELIEF_NONE);
3611 gtk_button_set_relief(GTK_BUTTON(gtkim->block), GTK_RELIEF_NONE); 3674 gtk_button_set_relief(GTK_BUTTON(gtkim->block), GTK_RELIEF_NONE);
3675 gtk_button_set_relief(GTK_BUTTON(gtkim->send_file), GTK_RELIEF_NONE);
3612 gtk_button_set_relief(GTK_BUTTON(gtkconv->add), GTK_RELIEF_NONE); 3676 gtk_button_set_relief(GTK_BUTTON(gtkconv->add), GTK_RELIEF_NONE);
3613 gtk_button_set_relief(GTK_BUTTON(gtkconv->remove), GTK_RELIEF_NONE); 3677 gtk_button_set_relief(GTK_BUTTON(gtkconv->remove), GTK_RELIEF_NONE);
3614 gtk_button_set_relief(GTK_BUTTON(gtkconv->info), GTK_RELIEF_NONE); 3678 gtk_button_set_relief(GTK_BUTTON(gtkconv->info), GTK_RELIEF_NONE);
3615 gtk_button_set_relief(GTK_BUTTON(gtkconv->send), GTK_RELIEF_NONE); 3679 gtk_button_set_relief(GTK_BUTTON(gtkconv->send), GTK_RELIEF_NONE);
3616 3680
3617 gtk_size_group_add_widget(gtkconv->sg, gtkim->warn); 3681 gtk_size_group_add_widget(gtkconv->sg, gtkim->warn);
3618 gtk_size_group_add_widget(gtkconv->sg, gtkim->block); 3682 gtk_size_group_add_widget(gtkconv->sg, gtkim->block);
3683 gtk_size_group_add_widget(gtkconv->sg, gtkim->send_file);
3619 gtk_size_group_add_widget(gtkconv->sg, gtkconv->add); 3684 gtk_size_group_add_widget(gtkconv->sg, gtkconv->add);
3620 gtk_size_group_add_widget(gtkconv->sg, gtkconv->remove); 3685 gtk_size_group_add_widget(gtkconv->sg, gtkconv->remove);
3621 gtk_size_group_add_widget(gtkconv->sg, gtkconv->info); 3686 gtk_size_group_add_widget(gtkconv->sg, gtkconv->info);
3622 gtk_size_group_add_widget(gtkconv->sg, gtkconv->send); 3687 gtk_size_group_add_widget(gtkconv->sg, gtkconv->send);
3623 3688
3624 gtk_box_reorder_child(GTK_BOX(parent), gtkim->warn, 1); 3689 gtk_box_reorder_child(GTK_BOX(parent), gtkim->warn, 1);
3625 gtk_box_reorder_child(GTK_BOX(parent), gtkim->block, 2); 3690 gtk_box_reorder_child(GTK_BOX(parent), gtkim->block, 2);
3626 gtk_box_reorder_child(GTK_BOX(parent), gtkconv->add, 3); 3691 gtk_box_reorder_child(GTK_BOX(parent), gtkim->send_file,3);
3627 gtk_box_reorder_child(GTK_BOX(parent), gtkconv->remove, 4); 3692 gtk_box_reorder_child(GTK_BOX(parent), gtkconv->add, 4);
3628 gtk_box_reorder_child(GTK_BOX(parent), gtkconv->info, 5); 3693 gtk_box_reorder_child(GTK_BOX(parent), gtkconv->remove, 5);
3694 gtk_box_reorder_child(GTK_BOX(parent), gtkconv->info, 6);
3629 3695
3630 gaim_gtkconv_update_buttons_by_protocol(conv); 3696 gaim_gtkconv_update_buttons_by_protocol(conv);
3631 3697
3632 /* Check if the buttons should be visible or not */ 3698 /* Check if the buttons should be visible or not */
3633 button_type = gaim_prefs_get_int("/gaim/gtk/conversations/button_type"); 3699 button_type = gaim_prefs_get_int("/gaim/gtk/conversations/button_type");
3638 3704
3639 g_signal_connect(G_OBJECT(gtkim->warn), "clicked", 3705 g_signal_connect(G_OBJECT(gtkim->warn), "clicked",
3640 G_CALLBACK(warn_cb), conv); 3706 G_CALLBACK(warn_cb), conv);
3641 g_signal_connect(G_OBJECT(gtkim->block), "clicked", 3707 g_signal_connect(G_OBJECT(gtkim->block), "clicked",
3642 G_CALLBACK(block_cb), conv); 3708 G_CALLBACK(block_cb), conv);
3709 g_signal_connect(G_OBJECT(gtkim->send_file), "clicked",
3710 G_CALLBACK(send_file_cb), conv);
3643 g_signal_connect(G_OBJECT(gtkconv->add), "clicked", 3711 g_signal_connect(G_OBJECT(gtkconv->add), "clicked",
3644 G_CALLBACK(add_remove_cb), conv); 3712 G_CALLBACK(add_remove_cb), conv);
3645 g_signal_connect(G_OBJECT(gtkconv->remove), "clicked", 3713 g_signal_connect(G_OBJECT(gtkconv->remove), "clicked",
3646 G_CALLBACK(add_remove_cb), conv); 3714 G_CALLBACK(add_remove_cb), conv);
3647 g_signal_connect(G_OBJECT(gtkconv->info), "clicked", 3715 g_signal_connect(G_OBJECT(gtkconv->info), "clicked",