Mercurial > pidgin.yaz
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); |