Mercurial > pidgin.yaz
comparison pidgin/gtkconv.c @ 25516:708198aadad8
propagate from branch 'im.pidgin.pidgin' (head c09099530cc12734d4420f3fcc37e18347a16d5e)
to branch 'im.pidgin.pidgin.yaz' (head 021ad3c9ed763e5e5f5678b9a081af148b43d064)
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 21 Jun 2007 06:04:16 +0000 |
parents | 37af7de81430 16bf31872b7a |
children | d28015a513a9 |
comparison
equal
deleted
inserted
replaced
25515:37af7de81430 | 25516:708198aadad8 |
---|---|
2358 g_return_if_fail(status != NULL); | 2358 g_return_if_fail(status != NULL); |
2359 | 2359 |
2360 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); | 2360 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->icon), status); |
2361 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); | 2361 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->menu_icon), status); |
2362 | 2362 |
2363 gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), | 2363 gtk_list_store_set(GTK_LIST_STORE(gtkconv->infopane_model), |
2364 &(gtkconv->infopane_iter), | |
2364 ICON_COLUMN, status, -1); | 2365 ICON_COLUMN, status, -1); |
2365 | 2366 |
2366 if (status != NULL) | 2367 if (status != NULL) |
2367 g_object_unref(status); | 2368 g_object_unref(status); |
2368 | 2369 |
2416 g_idle_add(reset_auto_resize_cb, gtkconv); | 2417 g_idle_add(reset_auto_resize_cb, gtkconv); |
2417 | 2418 |
2418 gdk_pixbuf_animation_iter_advance(gtkconv->u.im->iter, NULL); | 2419 gdk_pixbuf_animation_iter_advance(gtkconv->u.im->iter, NULL); |
2419 buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); | 2420 buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); |
2420 | 2421 |
2421 pidgin_buddy_icon_get_scale_size(buf, &prpl_info->icon_spec, | 2422 scale_width = gdk_pixbuf_get_width(buf); |
2422 PURPLE_ICON_SCALE_DISPLAY, &scale_width, &scale_height); | 2423 scale_height = gdk_pixbuf_get_height(buf); |
2423 | 2424 if (scale_width == scale_height) { |
2424 /* this code is ugly, and scares me */ | 2425 scale_width = scale_height = 32; |
2425 scale = gdk_pixbuf_scale_simple(buf, 32, 32, | 2426 } else if (scale_height > scale_width) { |
2427 scale_width = 32 * scale_width / scale_height; | |
2428 scale_height = 32; | |
2429 } else { | |
2430 scale_height = 32 * scale_height / scale_width; | |
2431 scale_width = 32; | |
2432 } | |
2433 | |
2434 scale = gdk_pixbuf_scale_simple(buf, scale_width, scale_height, | |
2426 GDK_INTERP_BILINEAR); | 2435 GDK_INTERP_BILINEAR); |
2436 if (pidgin_gdk_pixbuf_is_opaque(scale)) | |
2437 pidgin_gdk_pixbuf_make_round(scale); | |
2427 | 2438 |
2428 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->u.im->icon), scale); | 2439 gtk_image_set_from_pixbuf(GTK_IMAGE(gtkconv->u.im->icon), scale); |
2429 g_object_unref(G_OBJECT(scale)); | 2440 g_object_unref(G_OBJECT(scale)); |
2430 gtk_widget_queue_draw(gtkconv->u.im->icon); | 2441 gtk_widget_queue_draw(gtkconv->u.im->icon); |
2431 | 2442 |
4293 GtkWidget *hbox, *label; | 4304 GtkWidget *hbox, *label; |
4294 PidginChatPane *gtkchat = gtkconv->u.chat; | 4305 PidginChatPane *gtkchat = gtkconv->u.chat; |
4295 | 4306 |
4296 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); | 4307 hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); |
4297 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); | 4308 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); |
4298 gtk_widget_show(hbox); | |
4299 | 4309 |
4300 label = gtk_label_new(_("Topic:")); | 4310 label = gtk_label_new(_("Topic:")); |
4301 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 4311 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
4302 gtk_widget_show(label); | |
4303 | 4312 |
4304 gtkchat->topic_text = gtk_entry_new(); | 4313 gtkchat->topic_text = gtk_entry_new(); |
4305 | 4314 |
4306 if(prpl_info->set_chat_topic == NULL) { | 4315 if(prpl_info->set_chat_topic == NULL) { |
4307 gtk_editable_set_editable(GTK_EDITABLE(gtkchat->topic_text), FALSE); | 4316 gtk_editable_set_editable(GTK_EDITABLE(gtkchat->topic_text), FALSE); |
4309 g_signal_connect(GTK_OBJECT(gtkchat->topic_text), "activate", | 4318 g_signal_connect(GTK_OBJECT(gtkchat->topic_text), "activate", |
4310 G_CALLBACK(topic_callback), gtkconv); | 4319 G_CALLBACK(topic_callback), gtkconv); |
4311 } | 4320 } |
4312 | 4321 |
4313 gtk_box_pack_start(GTK_BOX(hbox), gtkchat->topic_text, TRUE, TRUE, 0); | 4322 gtk_box_pack_start(GTK_BOX(hbox), gtkchat->topic_text, TRUE, TRUE, 0); |
4314 gtk_widget_show(gtkchat->topic_text); | |
4315 g_signal_connect(G_OBJECT(gtkchat->topic_text), "key_press_event", | 4323 g_signal_connect(G_OBJECT(gtkchat->topic_text), "key_press_event", |
4316 G_CALLBACK(entry_key_press_cb), gtkconv); | 4324 G_CALLBACK(entry_key_press_cb), gtkconv); |
4317 } | 4325 } |
4318 } | 4326 } |
4319 | 4327 |
4431 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->infopane_hbox, FALSE, FALSE, 0); | 4439 gtk_box_pack_start(GTK_BOX(vbox), gtkconv->infopane_hbox, FALSE, FALSE, 0); |
4432 gtk_widget_show(gtkconv->infopane_hbox); | 4440 gtk_widget_show(gtkconv->infopane_hbox); |
4433 | 4441 |
4434 gtkconv->infopane = gtk_cell_view_new(); | 4442 gtkconv->infopane = gtk_cell_view_new(); |
4435 gtkconv->infopane_model = gtk_list_store_new(NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING); | 4443 gtkconv->infopane_model = gtk_list_store_new(NUM_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING); |
4436 gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), gtkconv->infopane_model); | 4444 gtk_cell_view_set_model(GTK_CELL_VIEW(gtkconv->infopane), |
4445 GTK_TREE_MODEL(gtkconv->infopane_model)); | |
4437 gtk_list_store_append(gtkconv->infopane_model, &(gtkconv->infopane_iter)); | 4446 gtk_list_store_append(gtkconv->infopane_model, &(gtkconv->infopane_iter)); |
4438 gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), gtkconv->infopane, TRUE, TRUE, 0); | 4447 gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), gtkconv->infopane, TRUE, TRUE, 0); |
4439 path = gtk_tree_path_new_from_string("0"); | 4448 path = gtk_tree_path_new_from_string("0"); |
4440 gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(gtkconv->infopane), path); | 4449 gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(gtkconv->infopane), path); |
4441 gtk_widget_set_size_request(gtkconv->infopane, -1, 32); | 4450 gtk_widget_set_size_request(gtkconv->infopane, -1, 32); |
6180 | 6189 |
6181 if (fields & PIDGIN_CONV_SMILEY_THEME) | 6190 if (fields & PIDGIN_CONV_SMILEY_THEME) |
6182 pidgin_themes_smiley_themeize(PIDGIN_CONVERSATION(conv)->imhtml); | 6191 pidgin_themes_smiley_themeize(PIDGIN_CONVERSATION(conv)->imhtml); |
6183 | 6192 |
6184 if ((fields & PIDGIN_CONV_COLORIZE_TITLE) || | 6193 if ((fields & PIDGIN_CONV_COLORIZE_TITLE) || |
6185 (fields & PIDGIN_CONV_SET_TITLE)) | 6194 (fields & PIDGIN_CONV_SET_TITLE) || |
6195 (fields & PIDGIN_CONV_TOPIC)) | |
6186 { | 6196 { |
6187 char *title, *title_tmp; | 6197 char *title, *title_tmp; |
6188 PurpleConvIm *im = NULL; | 6198 PurpleConvIm *im = NULL; |
6189 PurpleAccount *account = purple_conversation_get_account(conv); | 6199 PurpleAccount *account = purple_conversation_get_account(conv); |
6190 PurpleBuddy *buddy; | 6200 char *markup = NULL; |
6191 char *markup; | |
6192 AtkObject *accessibility_obj; | 6201 AtkObject *accessibility_obj; |
6193 gboolean ellipsis = FALSE; | 6202 gboolean ellipsis = FALSE; |
6194 /* I think this is a little longer than it needs to be but I'm lazy. */ | 6203 /* I think this is a little longer than it needs to be but I'm lazy. */ |
6195 char style[51]; | 6204 char style[51]; |
6196 | 6205 |
6203 && purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv)))) | 6212 && purple_conv_chat_has_left(PURPLE_CONV_CHAT(conv)))) |
6204 title = g_strdup_printf("(%s)", purple_conversation_get_title(conv)); | 6213 title = g_strdup_printf("(%s)", purple_conversation_get_title(conv)); |
6205 else | 6214 else |
6206 title = g_strdup(purple_conversation_get_title(conv)); | 6215 title = g_strdup(purple_conversation_get_title(conv)); |
6207 | 6216 |
6208 buddy = purple_find_buddy(account, conv->name); | 6217 if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { |
6209 if (buddy) | 6218 PurpleBuddy *buddy = purple_find_buddy(account, conv->name); |
6210 markup = pidgin_blist_get_name_markup(buddy, FALSE); | 6219 if (buddy) |
6211 else | 6220 markup = pidgin_blist_get_name_markup(buddy, FALSE, FALSE); |
6212 markup = title; | 6221 else |
6222 markup = title; | |
6223 } else if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_CHAT) { | |
6224 PurpleConvChat *chat = PURPLE_CONV_CHAT(conv); | |
6225 markup = g_strdup_printf("%s\n<span color='%s' size='smaller'>%s</span>", | |
6226 purple_conversation_get_title(conv), | |
6227 pidgin_get_dim_grey_string(gtkconv->infopane), | |
6228 purple_conv_chat_get_topic(chat)); | |
6229 } | |
6213 gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), | 6230 gtk_list_store_set(gtkconv->infopane_model, &(gtkconv->infopane_iter), |
6214 TEXT_COLUMN, markup, -1); | 6231 TEXT_COLUMN, markup, -1); |
6215 | 6232 |
6216 if (title != markup) | 6233 if (title != markup) |
6217 g_free(markup); | 6234 g_free(markup); |
6483 "Buddy icon error: %s\n", err->message); | 6500 "Buddy icon error: %s\n", err->message); |
6484 g_error_free(err); | 6501 g_error_free(err); |
6485 } | 6502 } |
6486 | 6503 |
6487 if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) { | 6504 if (gdk_pixbuf_animation_is_static_image(gtkconv->u.im->anim)) { |
6505 GdkPixbuf *stat; | |
6488 gtkconv->u.im->iter = NULL; | 6506 gtkconv->u.im->iter = NULL; |
6489 buf = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); | 6507 stat = gdk_pixbuf_animation_get_static_image(gtkconv->u.im->anim); |
6508 buf = gdk_pixbuf_add_alpha(stat, FALSE, 0, 0, 0); | |
6490 } else { | 6509 } else { |
6510 GdkPixbuf *stat; | |
6491 gtkconv->u.im->iter = | 6511 gtkconv->u.im->iter = |
6492 gdk_pixbuf_animation_get_iter(gtkconv->u.im->anim, NULL); /* LEAK */ | 6512 gdk_pixbuf_animation_get_iter(gtkconv->u.im->anim, NULL); /* LEAK */ |
6493 buf = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); | 6513 stat = gdk_pixbuf_animation_iter_get_pixbuf(gtkconv->u.im->iter); |
6514 buf = gdk_pixbuf_add_alpha(stat, FALSE, 0, 0, 0); | |
6494 if (gtkconv->u.im->animate) | 6515 if (gtkconv->u.im->animate) |
6495 start_anim(NULL, gtkconv); | 6516 start_anim(NULL, gtkconv); |
6496 } | 6517 } |
6497 | 6518 |
6498 scale = gdk_pixbuf_scale_simple(buf, 32, 32, | 6519 scale_width = gdk_pixbuf_get_width(buf); |
6520 scale_height = gdk_pixbuf_get_height(buf); | |
6521 if (scale_width == scale_height) { | |
6522 scale_width = scale_height = 32; | |
6523 } else if (scale_height > scale_width) { | |
6524 scale_width = 32 * scale_width / scale_height; | |
6525 scale_height = 32; | |
6526 } else { | |
6527 scale_height = 32 * scale_height / scale_width; | |
6528 scale_width = 32; | |
6529 } | |
6530 scale = gdk_pixbuf_scale_simple(buf, scale_width, scale_height, | |
6499 GDK_INTERP_BILINEAR); | 6531 GDK_INTERP_BILINEAR); |
6500 | 6532 g_object_unref(buf); |
6533 if (pidgin_gdk_pixbuf_is_opaque(scale)) | |
6534 pidgin_gdk_pixbuf_make_round(scale); | |
6501 gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); | 6535 gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); |
6502 | 6536 |
6503 event = gtk_event_box_new(); | 6537 event = gtk_event_box_new(); |
6504 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); | 6538 gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); |
6505 g_signal_connect(G_OBJECT(event), "button-press-event", | 6539 g_signal_connect(G_OBJECT(event), "button-press-event", |
6506 G_CALLBACK(icon_menu), gtkconv); | 6540 G_CALLBACK(icon_menu), gtkconv); |
6507 gtk_widget_show(event); | 6541 gtk_widget_show(event); |
6508 | 6542 |
6509 gtkconv->u.im->icon = gtk_image_new_from_pixbuf(scale); | 6543 gtkconv->u.im->icon = gtk_image_new_from_pixbuf(scale); |
6510 gtkconv->auto_resize = TRUE; | 6544 gtkconv->auto_resize = TRUE; |
6511 /* Reset the size request to allow the buddy icon to resize */ | |
6512 g_idle_add(reset_auto_resize_cb, gtkconv); | |
6513 gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon); | 6545 gtk_container_add(GTK_CONTAINER(event), gtkconv->u.im->icon); |
6514 gtk_widget_show(gtkconv->u.im->icon); | 6546 gtk_widget_show(gtkconv->u.im->icon); |
6515 | 6547 |
6516 g_object_unref(G_OBJECT(scale)); | 6548 g_object_unref(G_OBJECT(scale)); |
6517 | 6549 |