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