comparison src/gtkconv.c @ 10504:1a97d5e88d12

[gaim-migrate @ 11796] Lots of things here: - Several memory leak fixes - A few invalid memory access fixes - Fix a yahoo crash going idle when away - Fix Add user in chats to actually fill in the screenname - Add gaim_account_{get,set}_enabled to perl - Fix command priorities (fixes /me in IRC) - Fix MSN notification server transfer to be quiet about it - Fix MSN blist sync if user has insane friendly name - Make the docklet less crash-happy if it fails to embed in 3 seconds - Only probe for native plugins with the correct file extension - 1 typo fix :) ... and quite possibly something else I forgot. committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Tue, 11 Jan 2005 17:25:06 +0000
parents 776586d647e3
children 55e7d72fc09a
comparison
equal deleted inserted replaced
10503:776586d647e3 10504:1a97d5e88d12
1298 GaimGtkChatPane *gtkchat; 1298 GaimGtkChatPane *gtkchat;
1299 GaimConvChat *chat; 1299 GaimConvChat *chat;
1300 GtkTreeIter iter; 1300 GtkTreeIter iter;
1301 GtkTreeModel *model; 1301 GtkTreeModel *model;
1302 GtkTreeSelection *sel; 1302 GtkTreeSelection *sel;
1303 const char *name; 1303 char *name;
1304 1304
1305 chat = GAIM_CONV_CHAT(conv); 1305 chat = GAIM_CONV_CHAT(conv);
1306 gtkconv = GAIM_GTK_CONVERSATION(conv); 1306 gtkconv = GAIM_GTK_CONVERSATION(conv);
1307 gtkchat = gtkconv->u.chat; 1307 gtkchat = gtkconv->u.chat;
1308 1308
1320 gaim_conv_chat_unignore(chat, name); 1320 gaim_conv_chat_unignore(chat, name);
1321 else 1321 else
1322 gaim_conv_chat_ignore(chat, name); 1322 gaim_conv_chat_ignore(chat, name);
1323 1323
1324 add_chat_buddy_common(conv, name); 1324 add_chat_buddy_common(conv, name);
1325 g_free(name);
1325 } 1326 }
1326 1327
1327 static void 1328 static void
1328 menu_chat_im_cb(GtkWidget *w, GaimConversation *conv) 1329 menu_chat_im_cb(GtkWidget *w, GaimConversation *conv)
1329 { 1330 {
1394 1395
1395 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry); 1396 gtk_widget_grab_focus(GAIM_GTK_CONVERSATION(conv)->entry);
1396 } 1397 }
1397 1398
1398 static GtkWidget * 1399 static GtkWidget *
1399 create_chat_menu(GaimConversation *conv, gchar *who, 1400 create_chat_menu(GaimConversation *conv, const char *who,
1400 GaimPluginProtocolInfo *prpl_info, GaimConnection *gc) 1401 GaimPluginProtocolInfo *prpl_info, GaimConnection *gc)
1401 { 1402 {
1402 static GtkWidget *menu = NULL; 1403 static GtkWidget *menu = NULL;
1403 GtkWidget *button; 1404 GtkWidget *button;
1404 1405
1411 1412
1412 menu = gtk_menu_new(); 1413 menu = gtk_menu_new();
1413 1414
1414 button = gaim_new_item_from_stock(menu, _("IM"), GAIM_STOCK_IM, 1415 button = gaim_new_item_from_stock(menu, _("IM"), GAIM_STOCK_IM,
1415 G_CALLBACK(menu_chat_im_cb), conv, 0, 0, NULL); 1416 G_CALLBACK(menu_chat_im_cb), conv, 0, 0, NULL);
1416 g_object_set_data(G_OBJECT(button), "user_data", who); 1417 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
1417 1418
1418 if (gc && prpl_info && prpl_info->send_file 1419 if (gc && prpl_info && prpl_info->send_file
1419 && (!prpl_info->can_receive_file || prpl_info->can_receive_file(gc, who))) { 1420 && (!prpl_info->can_receive_file || prpl_info->can_receive_file(gc, who))) {
1420 button = gaim_new_item_from_stock(menu, _("Send File"), 1421 button = gaim_new_item_from_stock(menu, _("Send File"),
1421 GAIM_STOCK_FILE_TRANSFER, G_CALLBACK(menu_chat_send_file_cb), 1422 GAIM_STOCK_FILE_TRANSFER, G_CALLBACK(menu_chat_send_file_cb),
1422 conv, 0, 0, NULL); 1423 conv, 0, 0, NULL);
1423 g_object_set_data(G_OBJECT(button), "user_data", who); 1424 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
1424 } 1425 }
1425 1426
1426 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), who)) 1427 if (gaim_conv_chat_is_user_ignored(GAIM_CONV_CHAT(conv), who))
1427 button = gaim_new_item_from_stock(menu, _("Un-Ignore"), GAIM_STOCK_IGNORE, 1428 button = gaim_new_item_from_stock(menu, _("Un-Ignore"), GAIM_STOCK_IGNORE,
1428 G_CALLBACK(ignore_cb), conv, 0, 0, NULL); 1429 G_CALLBACK(ignore_cb), conv, 0, 0, NULL);
1429 else 1430 else
1430 button = gaim_new_item_from_stock(menu, _("Ignore"), GAIM_STOCK_IGNORE, 1431 button = gaim_new_item_from_stock(menu, _("Ignore"), GAIM_STOCK_IGNORE,
1431 G_CALLBACK(ignore_cb), conv, 0, 0, NULL); 1432 G_CALLBACK(ignore_cb), conv, 0, 0, NULL);
1432 g_object_set_data(G_OBJECT(button), "user_data", who); 1433 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
1433 1434
1434 if (gc && (prpl_info->get_info || prpl_info->get_cb_info)) { 1435 if (gc && (prpl_info->get_info || prpl_info->get_cb_info)) {
1435 button = gaim_new_item_from_stock(menu, _("Info"), GAIM_STOCK_INFO, 1436 button = gaim_new_item_from_stock(menu, _("Info"), GAIM_STOCK_INFO,
1436 G_CALLBACK(menu_chat_info_cb), conv, 0, 0, NULL); 1437 G_CALLBACK(menu_chat_info_cb), conv, 0, 0, NULL);
1437 g_object_set_data(G_OBJECT(button), "user_data", who); 1438 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
1438 } 1439 }
1439 1440
1440 if (gc && prpl_info->get_cb_away) { 1441 if (gc && prpl_info->get_cb_away) {
1441 button = gaim_new_item_from_stock(menu, _("Get Away Message"), GAIM_STOCK_AWAY, 1442 button = gaim_new_item_from_stock(menu, _("Get Away Message"), GAIM_STOCK_AWAY,
1442 G_CALLBACK(menu_chat_get_away_cb), conv, 0, 0, NULL); 1443 G_CALLBACK(menu_chat_get_away_cb), conv, 0, 0, NULL);
1443 g_object_set_data(G_OBJECT(button), "user_data", who); 1444 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
1444 } 1445 }
1445 1446
1446 /* XXX: jabber can only add buddies from here in certain circumstances */ 1447 /* XXX: jabber can only add buddies from here in certain circumstances */
1447 /* Added by Jonas <jonas@birme.se> */ 1448 /* Added by Jonas <jonas@birme.se> */
1448 if (gc) { 1449 if (gc) {
1450 button = gaim_new_item_from_stock(menu, _("Remove"), GTK_STOCK_REMOVE, 1451 button = gaim_new_item_from_stock(menu, _("Remove"), GTK_STOCK_REMOVE,
1451 G_CALLBACK(menu_chat_add_remove_cb), conv, 0, 0, NULL); 1452 G_CALLBACK(menu_chat_add_remove_cb), conv, 0, 0, NULL);
1452 else 1453 else
1453 button = gaim_new_item_from_stock(menu, _("Add"), GTK_STOCK_ADD, 1454 button = gaim_new_item_from_stock(menu, _("Add"), GTK_STOCK_ADD,
1454 G_CALLBACK(menu_chat_add_remove_cb), conv, 0, 0, NULL); 1455 G_CALLBACK(menu_chat_add_remove_cb), conv, 0, 0, NULL);
1456 g_object_set_data_full(G_OBJECT(button), "user_data", g_strdup(who), g_free);
1455 } 1457 }
1456 /* End Jonas */ 1458 /* End Jonas */
1457 1459
1458 return menu; 1460 return menu;
1459 } 1461 }
1490 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); 1492 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1);
1491 menu = create_chat_menu (conv, who, prpl_info, gc); 1493 menu = create_chat_menu (conv, who, prpl_info, gc);
1492 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, 1494 gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
1493 gaim_gtk_treeview_popup_menu_position_func, widget, 1495 gaim_gtk_treeview_popup_menu_position_func, widget,
1494 0, GDK_CURRENT_TIME); 1496 0, GDK_CURRENT_TIME);
1497 g_free(who);
1495 1498
1496 return TRUE; 1499 return TRUE;
1497 } 1500 }
1498 1501
1499 1502
1535 gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path); 1538 gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, path);
1536 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1); 1539 gtk_tree_model_get(GTK_TREE_MODEL(model), &iter, CHAT_USERS_NAME_COLUMN, &who, -1);
1537 1540
1538 if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) { 1541 if (event->button == 1 && event->type == GDK_2BUTTON_PRESS) {
1539 chat_do_im(conv, who); 1542 chat_do_im(conv, who);
1540 g_free(who);
1541 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) { 1543 } else if (event->button == 3 && event->type == GDK_BUTTON_PRESS) {
1542 GtkWidget *menu = create_chat_menu (conv, who, prpl_info, gc); 1544 GtkWidget *menu = create_chat_menu (conv, who, prpl_info, gc);
1543 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 1545 gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL,
1544 event->button, event->time); 1546 event->button, event->time);
1545 } 1547 }
1548
1549 g_free(who);
1550 gtk_tree_path_free(path);
1546 1551
1547 return TRUE; 1552 return TRUE;
1548 } 1553 }
1549 1554
1550 static void 1555 static void
2340 2345
2341 if (status != NULL) 2346 if (status != NULL)
2342 g_object_unref(status); 2347 g_object_unref(status);
2343 2348
2344 if (gaim_conv_window_get_active_conversation(win) == conv && 2349 if (gaim_conv_window_get_active_conversation(win) == conv &&
2345 gtkconv->u.im->anim == NULL) 2350 (gaim_conversation_get_type(conv) != GAIM_CONV_IM ||
2351 gtkconv->u.im->anim == NULL))
2346 { 2352 {
2347 status = get_tab_icon(conv, FALSE); 2353 status = get_tab_icon(conv, FALSE);
2348 2354
2349 gtk_window_set_icon(GTK_WINDOW(GAIM_GTK_WINDOW(win)->window), status); 2355 gtk_window_set_icon(GTK_WINDOW(GAIM_GTK_WINDOW(win)->window), status);
2350 2356
4796 4802
4797 if (flags & GAIM_MESSAGE_WHISPER) { 4803 if (flags & GAIM_MESSAGE_WHISPER) {
4798 str = g_malloc(1024); 4804 str = g_malloc(1024);
4799 4805
4800 /* If we're whispering, it's not an autoresponse. */ 4806 /* If we're whispering, it's not an autoresponse. */
4801 if (gaim_message_meify(new_message, length)) { 4807 if (gaim_message_meify(new_message, -1 )) {
4802 g_snprintf(str, 1024, "***%s", who_escaped); 4808 g_snprintf(str, 1024, "***%s", who_escaped);
4803 strcpy(color, "#6C2585"); 4809 strcpy(color, "#6C2585");
4804 } 4810 }
4805 else { 4811 else {
4806 g_snprintf(str, 1024, "*%s*:", who_escaped); 4812 g_snprintf(str, 1024, "*%s*:", who_escaped);
4807 strcpy(color, "#00FF00"); 4813 strcpy(color, "#00FF00");
4808 } 4814 }
4809 } 4815 }
4810 else { 4816 else {
4811 if (gaim_message_meify(new_message, length)) { 4817 if (gaim_message_meify(new_message, -1)) {
4812 str = g_malloc(1024); 4818 str = g_malloc(1024);
4813 4819
4814 if (flags & GAIM_MESSAGE_AUTO_RESP) 4820 if (flags & GAIM_MESSAGE_AUTO_RESP)
4815 g_snprintf(str, 1024, "%s ***%s", AUTO_RESPONSE, who_escaped); 4821 g_snprintf(str, 1024, "%s ***%s", AUTO_RESPONSE, who_escaped);
4816 else 4822 else
4855 } 4861 }
4856 g_snprintf(buf, BUF_LONG, 4862 g_snprintf(buf, BUF_LONG,
4857 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\">(%s)</FONT> " 4863 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\">(%s)</FONT> "
4858 "<B>%s</B></FONT> ", color, 4864 "<B>%s</B></FONT> ", color,
4859 sml_attrib ? sml_attrib : "", mdate, str); 4865 sml_attrib ? sml_attrib : "", mdate, str);
4860 4866
4861 g_snprintf(buf2, BUF_LONG, 4867 g_snprintf(buf2, BUF_LONG,
4862 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\"><!--(%s) --></FONT>" 4868 "<FONT COLOR=\"%s\" %s><FONT SIZE=\"2\"><!--(%s) --></FONT>"
4863 "<B>%s</B></FONT> ", 4869 "<B>%s</B></FONT> ",
4864 color, sml_attrib ? sml_attrib : "", mdate, str); 4870 color, sml_attrib ? sml_attrib : "", mdate, str);
4865 4871