Mercurial > pidgin
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", |