comparison src/gtkconv.c @ 10879:601739f63f23

[gaim-migrate @ 12574] Patch from Richard Laager to, well he said it better than I'll be able to: As seen on Gaim's Funniest Home Convos, right-clicking on a user in a chat causes a crash. It was caused by some changes that left mismatches between functions expecting GaimGtkConversations and getting GaimConversations. I went through the file and compared each function to its caller(s). This patch should squash this and any similar bugs. committer: Tailor Script <tailor@pidgin.im>
author Gary Kramlich <grim@reaperworld.com>
date Wed, 27 Apr 2005 04:44:40 +0000
parents c522fdb85dbc
children b0fdadf463d4
comparison
equal deleted inserted replaced
10878:da36acb8442c 10879:601739f63f23
518 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry)); 518 gtk_imhtml_clear(GTK_IMHTML(gtkconv->entry));
519 default_formatize(gtkconv); 519 default_formatize(gtkconv);
520 } 520 }
521 521
522 static void 522 static void
523 add_remove_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) 523 add_remove_cb(GtkWidget *widget, GaimConversation *conv)
524 { 524 {
525 GaimAccount *account; 525 GaimAccount *account;
526 const char *name; 526 const char *name;
527 GaimConversation *conv = gtkconv->active_conv;
528 527
529 account = gaim_conversation_get_account(conv); 528 account = gaim_conversation_get_account(conv);
530 name = gaim_conversation_get_name(conv); 529 name = gaim_conversation_get_name(conv);
531 530
532 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) { 531 if (gaim_conversation_get_type(conv) == GAIM_CONV_IM) {
548 } 547 }
549 548
550 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); 549 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry);
551 } 550 }
552 551
553 static void chat_do_info(GaimGtkConversation *gtkconv, const char *who) 552 static void chat_do_info(GaimConversation *conv, const char *who)
554 { 553 {
555 GaimConversation *conv = gtkconv->active_conv;
556 GaimPluginProtocolInfo *prpl_info = NULL; 554 GaimPluginProtocolInfo *prpl_info = NULL;
557 GaimConnection *gc; 555 GaimConnection *gc;
558 556
559 if ((gc = gaim_conversation_get_gc(conv))) { 557 if ((gc = gaim_conversation_get_gc(conv))) {
560 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl); 558 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gc->prpl);
600 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) 598 if (gtk_tree_selection_get_selected(sel, NULL, &iter))
601 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); 599 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1);
602 else 600 else
603 return; 601 return;
604 602
605 chat_do_info(gtkconv, name); 603 chat_do_info(conv, name);
606 g_free(name); 604 g_free(name);
607 } 605 }
608 } 606 }
609 607
610 static void 608 static void
611 block_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) 609 block_cb(GtkWidget *widget, GaimConversation *conv)
612 { 610 {
613 GaimConversation *conv = gtkconv->active_conv;
614 GaimAccount *account; 611 GaimAccount *account;
615 612
616 account = gaim_conversation_get_account(conv); 613 account = gaim_conversation_get_account(conv);
617 614
618 if (account != NULL && gaim_account_is_connected(account)) 615 if (account != NULL && gaim_account_is_connected(account))
720 {"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, 0}, 717 {"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, 0},
721 {"application/x-im-contact", 0, 1} 718 {"application/x-im-contact", 0, 1}
722 }; 719 };
723 720
724 static void 721 static void
725 invite_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) 722 invite_cb(GtkWidget *widget, GaimConversation *conv)
726 { 723 {
727 GaimConversation *conv = gtkconv->active_conv;
728 InviteBuddyInfo *info = NULL; 724 InviteBuddyInfo *info = NULL;
729 725
730 if (invite_dialog == NULL) { 726 if (invite_dialog == NULL) {
731 GaimConnection *gc; 727 GaimConnection *gc;
732 GaimConvWindow *win; 728 GaimConvWindow *win;
1148 GaimConvWindow *win = (GaimConvWindow *)data; 1144 GaimConvWindow *win = (GaimConvWindow *)data;
1149 GaimConversation *conv; 1145 GaimConversation *conv;
1150 1146
1151 conv = gaim_conv_window_get_active_conversation(win); 1147 conv = gaim_conv_window_get_active_conversation(win);
1152 1148
1153 invite_cb(NULL, GAIM_GTK_CONVERSATION(conv)); 1149 invite_cb(NULL, conv);
1154 } 1150 }
1155 1151
1156 static void 1152 static void
1157 menu_warn_cb(gpointer data, guint action, GtkWidget *widget) 1153 menu_warn_cb(gpointer data, guint action, GtkWidget *widget)
1158 { 1154 {
1174 GaimConvWindow *win = (GaimConvWindow *)data; 1170 GaimConvWindow *win = (GaimConvWindow *)data;
1175 GaimConversation *conv; 1171 GaimConversation *conv;
1176 1172
1177 conv = gaim_conv_window_get_active_conversation(win); 1173 conv = gaim_conv_window_get_active_conversation(win);
1178 1174
1179 block_cb(NULL, GAIM_GTK_CONVERSATION(conv)); 1175 block_cb(NULL, conv);
1180 } 1176 }
1181 1177
1182 static void 1178 static void
1183 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget) 1179 menu_add_remove_cb(gpointer data, guint action, GtkWidget *widget)
1184 { 1180 {
1185 GaimConvWindow *win = (GaimConvWindow *)data; 1181 GaimConvWindow *win = (GaimConvWindow *)data;
1186 GaimConversation *conv; 1182 GaimConversation *conv;
1187 1183
1188 conv = gaim_conv_window_get_active_conversation(win); 1184 conv = gaim_conv_window_get_active_conversation(win);
1189 1185
1190 add_remove_cb(NULL, GAIM_GTK_CONVERSATION(conv)); 1186 add_remove_cb(NULL, conv);
1191 } 1187 }
1192 1188
1193 static void 1189 static void
1194 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget) 1190 menu_close_conv_cb(gpointer data, guint action, GtkWidget *widget)
1195 { 1191 {
1268 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml), 1264 gtk_imhtml_show_comments(GTK_IMHTML(gtkconv->imhtml),
1269 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget))); 1265 gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)));
1270 } 1266 }
1271 1267
1272 static void 1268 static void
1273 chat_do_im(GaimGtkConversation *gtkconv, const char *who) 1269 chat_do_im(GaimConversation *conv, const char *who)
1274 { 1270 {
1275 GaimConversation *conv = gtkconv->active_conv;
1276 GaimAccount *account; 1271 GaimAccount *account;
1277 GaimConnection *gc; 1272 GaimConnection *gc;
1278 GaimPluginProtocolInfo *prpl_info = NULL; 1273 GaimPluginProtocolInfo *prpl_info = NULL;
1279 char *real_who; 1274 char *real_who;
1280 1275
1317 if (gtk_tree_selection_get_selected(sel, NULL, &iter)) 1312 if (gtk_tree_selection_get_selected(sel, NULL, &iter))
1318 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1); 1313 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &name, -1);
1319 else 1314 else
1320 return; 1315 return;
1321 1316
1322 chat_do_im(gtkconv, name); 1317 chat_do_im(gtkconv->active_conv, name);
1323 g_free(name); 1318 g_free(name);
1324 } 1319 }
1325 1320
1326 static void 1321 static void
1327 ignore_cb(GtkWidget *w, GaimGtkConversation *gtkconv) 1322 ignore_cb(GtkWidget *w, GaimConversation *conv)
1328 { 1323 {
1329 GaimConversation *conv = gtkconv->active_conv; 1324 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
1330 GaimGtkChatPane *gtkchat; 1325 GaimGtkChatPane *gtkchat;
1331 GaimConvChat *chat; 1326 GaimConvChat *chat;
1332 GtkTreeIter iter; 1327 GtkTreeIter iter;
1333 GtkTreeModel *model; 1328 GtkTreeModel *model;
1334 GtkTreeSelection *sel; 1329 GtkTreeSelection *sel;
1355 add_chat_buddy_common(conv, name); 1350 add_chat_buddy_common(conv, name);
1356 g_free(name); 1351 g_free(name);
1357 } 1352 }
1358 1353
1359 static void 1354 static void
1360 menu_chat_im_cb(GtkWidget *w, GaimGtkConversation *gtkconv) 1355 menu_chat_im_cb(GtkWidget *w, GaimConversation *conv)
1361 { 1356 {
1362 const char *who = g_object_get_data(G_OBJECT(w), "user_data"); 1357 const char *who = g_object_get_data(G_OBJECT(w), "user_data");
1363 1358
1364 chat_do_im(gtkconv, who); 1359 chat_do_im(conv, who);
1365 } 1360 }
1366 1361
1367 static void 1362 static void
1368 menu_chat_send_file_cb(GtkWidget *w, GaimGtkConversation *gtkconv) 1363 menu_chat_send_file_cb(GtkWidget *w, GaimConversation *conv)
1369 { 1364 {
1370 GaimConversation *conv = gtkconv->active_conv;
1371 const char *who = g_object_get_data(G_OBJECT(w), "user_data"); 1365 const char *who = g_object_get_data(G_OBJECT(w), "user_data");
1372 GaimConnection *gc = gaim_conversation_get_gc(conv); 1366 GaimConnection *gc = gaim_conversation_get_gc(conv);
1373 1367
1374 serv_send_file(gc, who, NULL); 1368 serv_send_file(gc, who, NULL);
1375 } 1369 }
1376 1370
1377 static void 1371 static void
1378 menu_chat_info_cb(GtkWidget *w, GaimGtkConversation *gtkconv) 1372 menu_chat_info_cb(GtkWidget *w, GaimConversation *conv)
1379 { 1373 {
1380 char *who; 1374 char *who;
1381 1375
1382 who = g_object_get_data(G_OBJECT(w), "user_data"); 1376 who = g_object_get_data(G_OBJECT(w), "user_data");
1383 1377
1384 chat_do_info(gtkconv, who); 1378 chat_do_info(conv, who);
1385 } 1379 }
1386 1380
1387 static void 1381 static void
1388 menu_chat_get_away_cb(GtkWidget *w, GaimGtkConversation *gtkconv) 1382 menu_chat_get_away_cb(GtkWidget *w, GaimConversation *conv)
1389 { 1383 {
1390 GaimConversation *conv = gtkconv->active_conv;
1391 GaimPluginProtocolInfo *prpl_info = NULL; 1384 GaimPluginProtocolInfo *prpl_info = NULL;
1392 GaimConnection *gc; 1385 GaimConnection *gc;
1393 char *who; 1386 char *who;
1394 1387
1395 gc = gaim_conversation_get_gc(conv); 1388 gc = gaim_conversation_get_gc(conv);
1409 } 1402 }
1410 } 1403 }
1411 } 1404 }
1412 1405
1413 static void 1406 static void
1414 menu_chat_add_remove_cb(GtkWidget *w, GaimGtkConversation *gtkconv) 1407 menu_chat_add_remove_cb(GtkWidget *w, GaimConversation *conv)
1415 { 1408 {
1416 GaimConversation *conv = gtkconv->active_conv;
1417 GaimAccount *account; 1409 GaimAccount *account;
1418 GaimBuddy *b; 1410 GaimBuddy *b;
1419 char *name; 1411 char *name;
1420 1412
1421 account = gaim_conversation_get_account(conv); 1413 account = gaim_conversation_get_account(conv);
1494 return menu; 1486 return menu;
1495 } 1487 }
1496 1488
1497 1489
1498 static gint 1490 static gint
1499 gtkconv_chat_popup_menu_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) 1491 gtkconv_chat_popup_menu_cb(GtkWidget *widget, GaimConversation *conv)
1500 { 1492 {
1501 GaimConversation *conv = gtkconv->active_conv; 1493 GaimGtkConversation *gtkconv;
1502 GaimPluginProtocolInfo *prpl_info = NULL; 1494 GaimPluginProtocolInfo *prpl_info = NULL;
1503 GaimGtkChatPane *gtkchat; 1495 GaimGtkChatPane *gtkchat;
1504 GaimConnection *gc; 1496 GaimConnection *gc;
1505 GaimAccount *account; 1497 GaimAccount *account;
1506 GtkTreeSelection *sel; 1498 GtkTreeSelection *sel;
1534 } 1526 }
1535 1527
1536 1528
1537 static gint 1529 static gint
1538 right_click_chat_cb(GtkWidget *widget, GdkEventButton *event, 1530 right_click_chat_cb(GtkWidget *widget, GdkEventButton *event,
1539 GaimGtkConversation *gtkconv) 1531 GaimConversation *conv)
1540 { 1532 {
1541 GaimConversation *conv = gtkconv->active_conv; 1533 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
1542 GaimPluginProtocolInfo *prpl_info = NULL; 1534 GaimPluginProtocolInfo *prpl_info = NULL;
1543 GaimGtkChatPane *gtkchat; 1535 GaimGtkChatPane *gtkchat;
1544 GaimConnection *gc; 1536 GaimConnection *gc;
1545 GaimAccount *account; 1537 GaimAccount *account;
1546 GtkTreePath *path; 1538 GtkTreePath *path;
1570 1562
1571 gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path); 1563 gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
1572 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); 1564 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1);
1573 1565
1574 if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { 1566 if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
1575 chat_do_im(gtkconv, who); 1567 chat_do_im(conv, who);
1576 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { 1568 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) {
1577 GtkWidget *menu = create_chat_menu (conv, who, prpl_info, gc); 1569 GtkWidget *menu = create_chat_menu (conv, who, prpl_info, gc);
1578 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 1570 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
1579 event->button, event->time); 1571 event->button, event->time);
1580 } 1572 }
2476 else 2468 else
2477 stop_anim(NULL, gtkconv); 2469 stop_anim(NULL, gtkconv);
2478 } 2470 }
2479 2471
2480 static void 2472 static void
2481 remove_icon(GaimGtkConversation *gtkconv) 2473 remove_icon(GaimConversation *conv)
2482 { 2474 {
2483 GaimConversation *conv = gtkconv->active_conv; 2475 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
2484 GaimGtkWindow *gtkwin; 2476 GaimGtkWindow *gtkwin;
2485 2477
2486 g_return_if_fail(conv != NULL); 2478 g_return_if_fail(conv != NULL);
2487 2479
2488 if (gtkconv->u.im->icon_container != NULL) 2480 if (gtkconv->u.im->icon_container != NULL)
2534 fwrite(data, 1, len, fp); 2526 fwrite(data, 1, len, fp);
2535 fclose(fp); 2527 fclose(fp);
2536 } 2528 }
2537 2529
2538 static void 2530 static void
2539 icon_menu_save_cb(GtkWidget *widget, GaimGtkConversation *gtkconv) 2531 icon_menu_save_cb(GtkWidget *widget, GaimConversation *conv)
2540 { 2532 {
2541 GaimConversation *conv = gtkconv->active_conv;
2542 gchar *buf; 2533 gchar *buf;
2543 2534
2544 g_return_if_fail(conv != NULL); 2535 g_return_if_fail(conv != NULL);
2545 2536
2546 /* 2537 /*
2554 2545
2555 g_free(buf); 2546 g_free(buf);
2556 } 2547 }
2557 2548
2558 static gboolean 2549 static gboolean
2559 icon_menu(GtkObject *obj, GdkEventButton *e, GaimGtkConversation *gtkconv) 2550 icon_menu(GtkObject *obj, GdkEventButton *e, GaimConversation *conv)
2560 { 2551 {
2561 GaimConversation *conv = gtkconv->active_conv;
2562 static GtkWidget *menu = NULL; 2552 static GtkWidget *menu = NULL;
2563 GtkWidget *button; 2553 GtkWidget *button;
2554 GaimGtkConversation *gtkconv = GAIM_GTK_CONVERSATION(conv);
2564 2555
2565 if (e->button != 3 || e->type != GDK_BUTTON_PRESS) 2556 if (e->button != 3 || e->type != GDK_BUTTON_PRESS)
2566 return FALSE; 2557 return FALSE;
2567 2558
2568 /* 2559 /*
2576 2567
2577 if (gtkconv->u.im->anim && 2568 if (gtkconv->u.im->anim &&
2578 !(gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim))) 2569 !(gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)))
2579 { 2570 {
2580 gaim_new_check_item(menu, _("Animate"), 2571 gaim_new_check_item(menu, _("Animate"),
2581 G_CALLBACK(toggle_icon_animate_cb), conv, 2572 G_CALLBACK(toggle_icon_animate_cb), gtkconv,
2582 gtkconv->u.im->icon_timer); 2573 gtkconv->u.im->icon_timer);
2583 } 2574 }
2584 2575
2585 button = gtk_menu_item_new_with_label(_("Hide Icon")); 2576 button = gtk_menu_item_new_with_label(_("Hide Icon"));
2586 g_signal_connect_swapped(G_OBJECT(button), "activate", 2577 g_signal_connect_swapped(G_OBJECT(button), "activate",
2617 active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget)); 2608 active = gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(widget));
2618 gtkconv->u.im->show_icon = active; 2609 gtkconv->u.im->show_icon = active;
2619 if (active) 2610 if (active)
2620 gaim_gtkconv_update_buddy_icon(conv); 2611 gaim_gtkconv_update_buddy_icon(conv);
2621 else 2612 else
2622 remove_icon(gtkconv); 2613 remove_icon(conv);
2623 } 2614 }
2624 2615
2625 /************************************************************************** 2616 /**************************************************************************
2626 * End of the bunch of buddy icon functions 2617 * End of the bunch of buddy icon functions
2627 **************************************************************************/ 2618 **************************************************************************/
3915 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); 3906 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
3916 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); 3907 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0);
3917 gtk_tooltips_set_tip(gtkconv->tooltips, button, 3908 gtk_tooltips_set_tip(gtkconv->tooltips, button,
3918 _("Ignore the user"), NULL); 3909 _("Ignore the user"), NULL);
3919 g_signal_connect(G_OBJECT(button), "clicked", 3910 g_signal_connect(G_OBJECT(button), "clicked",
3920 G_CALLBACK(ignore_cb), gtkconv); 3911 G_CALLBACK(ignore_cb), conv);
3921 gtk_widget_show(button); 3912 gtk_widget_show(button);
3922 3913
3923 /* Info */ 3914 /* Info */
3924 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_INFO, 3915 button = gaim_pixbuf_button_from_stock(NULL, GAIM_STOCK_INFO,
3925 GAIM_BUTTON_VERTICAL); 3916 GAIM_BUTTON_VERTICAL);